0

长期以来,我一直在寻找一个好的缩进插件,最近我发现: https ://stackoverflow.com/a/1610732/2034967 这是一个很棒的缩进(我个人认为最好的),我永久使用它 -我.vimrc文件的一部分,每次我启动 vi 时我都会打开它,如果没有,那么我使用 :retab\t在打开后修复选项卡:Stab

我的实际问题是如何将它变成一个单独的捆绑包并将其配置为自动启动所需的(使用 4 个空格而不是制表符)参数配置自动并且仅禁用(关闭并返回默认选项卡)插件按需使用:Stab

关于我的工作环境的背景:在命令行中运行在 linux 上的 vim(主要是 MCP linux 发行版)(不是 GUI vim)

我之所以问它是因为我尝试按照 vim 指南创建插件但失败了。我尝试了一些 vim 插件来管理像 https://github.com/tpope/vim-pathogen这样的插件 ,但没有成功。

谢谢您的帮助!

4

1 回答 1

0

如果没有 Pathogen,你的单文件脚本应该放在这里:

~/.vim/plugin/stab.vim

使用 Pathogen 或 Vundle,您应该像这样安装它:

~/.vim/bundle/stab/plugin/stab.vim

由于 Vim 加载插件的方式,执行Stab时命令将不可用~/.vimrc,但是,由于它的交互性,我不确定Stab每次启动 Vim 时执行命令是否是个好主意。

但是,可以对其进行修改,使其能够以非交互方式运行,例如使用全局变量或自动加载……但在这一点上,它的工作方式与您的相关选项听起来~/.vimrc不一样对我来说很实用。而且比较浪费。

无论如何,以下(快速)版本可以从您的~/.vimrc. :Stab如果您想以交互方式执行它,您仍然可以使用它。

为此,您必须在此处安装脚本:

~/.vim/autoload/stab.vim

并将这一行添加到您的~/.vimrc

call stab#stab(4, 1)

第一个参数是你想要shiftwidth的,第二个参数是一个布尔值:0如果你不想expandtab1如果你想要expandtab。确保这一行出现任何缩进设置之后。

修改后的脚本:

if exists("g:loaded_stab") || &cp
  finish
endif
let g:loaded_stab = 1

command! -nargs=* Stab call stab#stab(<f-args>)

function! stab#stab(...)

  if a:0 > 0
    let l:tabstop = 1 * a:1
  else
    let l:tabstop = 1 * input('set shiftwidth=')
  endif

  if l:tabstop > 0
    " do we want expandtab as well?
    if a:0 > 1
      let l:expandtab = a:2
    else
      let l:expandtab = confirm('set expandtab?', "&Yes\n&No\n&Cancel")
    endif
    if l:expandtab == 3
      " abort?
      return
    endif

    let &l:sts = l:tabstop
    let &l:ts = l:tabstop
    let &l:sw = l:tabstop

    if l:expandtab == 1
      setlocal expandtab
    else
      setlocal noexpandtab
    endif
  endif

  " show the selected options
  try
    echohl ModeMsg
    echon 'set tabstop='
    echohl Question
    echon &l:ts
    echohl ModeMsg
    echon ' shiftwidth='
    echohl Question
    echon &l:sw
    echohl ModeMsg
    echon ' sts='
    echohl Question
    echon &l:sts . ' ' . (&l:et ? '  ' : 'no')
    echohl ModeMsg
    echon 'expandtab'
  finally
    echohl None
  endtry
endfunction
于 2013-03-20T09:07:00.503 回答