![](https://habrastorage.org/storage2/1c0/92a/287/1c092a28753f5e811449264996beee71.jpg)
Vimに初めて会ったとき、私の目は豊富な方法でちらつきました
ファイル、ウィンドウ、エディター自体を閉じる。 削除(閉じる)コマンドのリストを次に示します
バッファーとウィンドウ(コマンドの完全な名前は角括弧で示されています):
- :bd [elete] -バッファーを削除します。 実際にはバッファを非表示にしますが、
彼を記憶に残します。 - :bw [ipeout] -メモリからバッファを完全に消去(ワイプアウト)します
- :bun [load] -バッファをメモリから削除しますが、バッファリストには残します。
役に立たないチーム、ただし次のいずれかがある場合を除く
巨大なファイルサイズまたは非常に少ないRAM。 - :close-現在のスプリットを閉じます。 バッファーは削除されません
- :q [uit] -理論的には、チームはVimを閉じる必要があります。実際には、すべてが少し複雑です
.vimrcでset confirmオプションを設定することを強くお勧めします。これにより、
バッファを閉じる(削除する)際の迷惑なエラーメッセージを避ける
保存されていない変更。 エラーの代わりに、確認が表示されます
未保存のファイルを閉じます。
従来の意味でファイルを閉じるには(他のエディターの場合)
適切なコマンド:bwですが、残念ながらすべてのバッファコマンド
現時点では、ウィンドウを閉じるうんざりする能力を持っています
それらが表示されます(当然、これが画面上の唯一のウィンドウではない場合)。
この問題は、 bufkill.vimプラグインをインストールし、コマンドを使用することで解決します
:BW(:BD ,: BUN)の代わりに:bw(:bd 、: bun) 。
コマンド:qはVimを閉じますが、その動作は状況によって異なり、
直感的に。 ウィンドウを閉じるには、次のコマンドを使用します:close
最後のウィンドウを使用することはできません。 また、Vimを閉じることはできません
バッファー削除コマンド(バッファーが最後であっても)。
結果として、空のバッファは削除できません。最後のウィンドウ
閉じられず、いくつかのファイルを操作することはゲームになります
今すぐコマンドを使用する必要があります-:bw ,: BW ,: q or:close。 " 後
フォーラムを組み合わせて、私は車輪を再発明しなければなりませんでした、なぜなら
必要に応じて、私は見つけませんでした。 必要だったのは身近なものでした(他の人によると)
エディター)、ファイル、ウィンドウ、Vim自体をすばやく閉じる直感的な方法。
最初の問題は、すべてを生成する「通常の」方法のアルゴリズムを決定することです
上記。 試行錯誤により、アルゴリズムは次のようになりました。
![](https://habrastorage.org/storage2/ebc/958/2cf/ebc9582cfe3e392c6e3f93cde21faea8.png)
一見複雑ですが、使い始めるとすべてが
彼らの場所。 もちろん、これは万能薬ではありません-ウィンドウ(バッファではありません)を閉じる必要があります
使用:閉じる 。
これは実装がどのように見えるかです:
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つの画面内に十分な分割があります。
ただし、バッファーを使用する場合の問題は解決されず、追加されるだけです。