0

長い間、私は良いインデントプラグインを探していまし .私の.vimrcファイルの一部であり、vi を起動するたびに有効にします。そうでない場合は、有効にした後に :retab を使用して\tタブを修正します:Stab

私の実際の質問は、それを別のバンドルバンドルに変換し、必要な(タブの代わりに4つのスペースを使用する)パラメーター構成で自動的に開始するように構成し、プラグインを無効にする(オフにしてデフォルトのタブに戻す)だけにする方法ですオンデマンドで:Stab

私の作業環境の背景: Linux (主に MCP Linux ディストリビューション) でコマンドライン (GUI vim ではない) で実行されている vim

vimガイドに従ってプラグインを作成しようとして失敗したため、質問しています 。

助けてくれてありがとう!

4

1 に答える 1

0

Pathogen がない場合、単一ファイルのスクリプトは次の場所に配置する必要があります。

~/.vim/plugin/stab.vim

Pathogen または Vundle では、次のようにインストールする必要があります。

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

Vim がプラグインをロードする方法が原因で、コマンドを実行してもコマンドStabを使用できませんが、そのインタラクティブな性質のために、 Vim を起動するたびにコマンド~/.vimrcを実行するのは良い考えではありません。Stab

ただし、グローバル変数やオートロードなどを使用して、非対話的に実行できるように変更することは可能です...~/.vimrcそれは私にとって実用的です。そして比較的無駄。

とにかく、次の(クイック)バージョンを使用すると、スクリプトを非対話的に実行できます~/.vimrc. :Stabインタラクティブに実行したい場合は、引き続き使用できます。

これを機能させるには、スクリプトを次の場所にインストールする必要があります。

~/.vim/autoload/stab.vim

次の行をに追加します~/.vimrc

call stab#stab(4, 1)

最初の引数は希望するshiftwidthもので、2 番目の引数はブール値です: 0if you don"t want expandtab, 1if you want 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 に答える