Vim:bw ,: bd ,: bun ,: quit ,: close これらすべてをどうするか?

Vimには、すべてを任意の組み合わせで閉じるためのコマンドが多数ありますが、1つのコマンドですべてを閉じることはわかりません。 最近Vimを使い始めた人には、これはかなり奇妙に思えるかもしれません。 この状況を修正する方法を考えてみましょう。





Vimに初めて会ったとき、私の目は豊富な方法でちらつきました

ファイル、ウィンドウ、エディター自体を閉じる。 削除(閉じる)コマンドのリストを次に示します

バッファーとウィンドウ(コマンドの完全な名前は角括弧で示されています):







.vimrcでset confirmオプションを設定することを強くお勧めします。これにより、

バッファを閉じる(削除する)際の迷惑なエラーメッセージを避ける

保存されていない変更。 エラーの代わりに、確認が表示されます

未保存のファイルを閉じます。



従来の意味でファイルを閉じるには(他のエディターの場合)

適切なコマンド:bwですが、残念ながらすべてのバッファコマンド

現時点では、ウィンドウを閉じるうんざりする能力を持っています

それらが表示されます(当然、これが画面上の唯一のウィンドウではない場合)。

この問題は、 bufkill.vimプラグインをインストールし、コマンドを使用することで解決します

:BW(:BD ,: BUN)の代わりに:bw(:bd 、: bun)



コマンド:qはVimを閉じますが、その動作は状況によって異なり、

直感的に。 ウィンドウを閉じるには、次のコマンドを使用します:close

最後のウィンドウを使用することはできません。 また、Vimを閉じることはできません

バッファー削除コマンド(バッファーが最後であっても)。

結果として、空のバッファは削除できません。最後のウィンドウ

閉じられず、いくつかのファイルを操作することはゲームになります

今すぐコマンドを使用する必要があります-:bw ,: BW ,: q or:close。 " 後

フォーラムを組み合わせて、私は車輪を再発明しなければなりませんでした、なぜなら

必要に応じて、私は見つけませんでした。 必要だったのは身近なものでした(他の人によると)

エディター)、ファイル、ウィンドウ、Vim自体をすばやく閉じる直感的な方法。



最初の問題は、すべてを生成する「通常の」方法のアルゴリズムを決定することです

上記。 試行錯誤により、アルゴリズムは次のようになりました。







一見複雑ですが、使い始めるとすべてが

彼らの場所。 もちろん、これは万能薬ではありません-ウィンドウ(バッファではありません)を閉じる必要があります

使用:閉じる



これは実装がどのように見えるかです:



function! CountListedBuffers() let cnt = 0 for nr in range(1,bufnr("$")) if buflisted(nr) let cnt += 1 endif endfor return cnt endfunction function! SmartExit() let s:BufferToKill = bufnr('%') let s:EmptyBuffer = 0 if bufname('%') == '' && ! &modified && &modifiable if &buftype == 'nofile' && &swapfile == 0 " Is scratch buffer, not empty else let s:EmptyBuffer = 1 endif endif " Get a list of all windows which have this buffer loaded let s:WindowListWithBufferLoaded = [] let i = 1 let buf = winbufnr(i) while buf != -1 if buf == s:BufferToKill let s:WindowListWithBufferLoaded += [i] endif let i = i + 1 let buf = winbufnr(i) endwhile " Check that the buffer is last if(CountListedBuffers() < 2) let s:LastBuffer = 1 else let s:LastBuffer = 0 endif if s:LastBuffer if len(s:WindowListWithBufferLoaded) > 1 execute "close" else if ! s:EmptyBuffer execute "bw | bw" else execute "q" endif endif else let g:BufKillActionWhenBufferDisplayedInAnotherWindow="kill" execute "BW" let g:BufKillActionWhenBufferDisplayedInAnotherWindow="confirm" endif endfunction
      
      







動作させるには、bufkill.vimをインストールする必要があります。



その結果、「すべてとすべてを閉じる」ための私のマッピングは次のようになります。



「スマート」クロージャー

nmap qq:SmartExit()を呼び出します "ウィンドウを閉じますが、バッファは削除しないでください

nmap qw <CW> c



私はqqをより頻繁に使用します。

q:ただし、何らかの理由でそうではありません。



閉会



まとめ



最近Vimを使っていますが、印象はありました

松葉杖や自転車を何度も書かなければなりません! しかし、本当に

罪を犯すことは非常に刺激的です。 このミニプラグインまたは

この記事の情報は、誰かにとって有用です。



PSホリバーラのためではなく、Emacsはどうですか?



PPSタブ(タブ)は使用せず、1つの画面内に十分な分割があります。

ただし、バッファーを使用する場合の問題は解決されず、追加されるだけです。



All Articles