有關vim buffer 轉


Vim用得越來越順手,同時我也知道我目前使用到的可能只是Vim強大功能的1%不到。對於Vim的多buffer編輯一直沒有搞清楚,今天徹底的學習一下。

    • 啥是buffer?
    • 一個buffer就是一個已經載入內存的文件。所有打開的文件都對應着一個buffer,同時也存在着不對應任何文件的buffer。
    • 咋確定一個buffer?
    • 每個buffer都有一個特定的編號和名字,這個名字就是文件的名字,編號是由Vim自動分配的,確保唯一性。
    • 咋創建一個buffer?
    • 打開一個文件,就創造一個buffer。比如說

:edit file

    • 俺咋能把一個文件加到buffer list,但又不打開這個文件?
    • 用命令

:badd

    • 咋查看當前的buffers list?

:buffers

        

:ls

        

:files

    • 咋delete一個buffer?

:bdelete

      命令。后面可以指定buffer的編號或者名稱。
    • 咋從窗口移除一個buffer?
    • 這有好幾個方法:

 

      1 關閉窗口,或者在那個窗口編輯另一個buffer的內容

 

      2 使用命令

:bunload

      。這個命令將當前的buffer從窗口移除並且從內存里面移除。但是buffer不會從buffer list中移除。

 

    • 咋從buffer list里面編輯一個已經存在的buffer?
    • 1 使用

:buffer

      命令,並指定已存在的buffer的編號或名稱

 

      2 先輸入buffer的編號,然后用Ctrl-^跳過去

 

      3 使用

:sbuffer

      命令,並傳遞buffer的名稱,此時Vim會開一個新窗口並且在其中打開對應的buffer

 

      4 先輸入buffer的編號,然后用

Ctrl-W ^

        

Ctrl-W Ctrl-^

      ,同樣是在新窗口中打開指定buffer
    • 俺想從不同的buffer里面跳來跳去的,咋整?
    • 1 跳到第一個buffer,用

:bfirst

:brewind

      2 同上,但是在新窗口中,用

:sbfirst

:sbrewind

      3 跳到下一個用

:bnext

:sbnext

      4 跳到前一個用

:bprevious

:bNext

      ,相應的有

:sbprevious

:sbNext

      5 跳到最后一個buffer,用

:blast

:sblast

    • 俺咋才能打開所有已經load的buffer?
    • 使用命令

:unhide

      或者

:sunhide

      ,這樣每個buffer都會在新窗口中打開。
    • 俺咋跳到下一個修改過的buffer?
    • 用命令

:bmodified

:sbmodified

    • 有沒有個腳本能讓buffer用起來更簡單點?
    • 有的,有個腳本名字叫

bufexplorer.Vim

        

注意:這個我要看一下

    • 能在Vim會話里面保存buffer list嗎?
    • 顯然啊,在

Viminfo

      中包含

%

      就OK了
    • 俺咋能把buffer list里面的都給刪了?
    • 打開Vim的時候帶個文件名,或者用個命令

:bdelete

    • 啥是隱藏buffer(hidden buffer)?
    • 這個buffer,記錄沒保存的修改,不在窗口顯示。當你同時編輯多個buffer,暫時沒有保存的信息就歸這個隱藏buffer管
    • 俺如何載入多個buffer,其中有這個修改還沒有保存的buffer?
    • 你要先設置

hidden

      ,這樣的話Vim會記住你對buffer做的修改。當你退出Vim,就會詢問你是不是要保存已做的修改。
    • 當一個buffer變成hidden的時候,能不能將其unload或者delete掉?
    • 有幾個選項可以控制,設置

bufhidden

      的時候,你可以指定當一個buffer變成hidden狀態時要怎么處理,如果設置成

delete

      ,那么buffer會被delete掉,如果設置成

unload

      ,那么buffer會unload,如果設置成

hide

      ,那就只是hide而已。
    • 俺怎么能對buffer list里面的所有文件都執行同一個命令?

:bufdo

    • 當俺從buffer list中打開一個buffer,如果那個buffer已經在一個窗口里面,俺想讓那個窗口激活,而不是說再開一個新窗口,那該咋辦?

switchbuf

      選項設置成

useopen

    • buffer里面都存了些啥額外信息?
    • 光標最后所在位置、marks、jump list之流
    • 上面白話了那么多,所謂這個deleteunload到底有什么區別?

unload

      的話,buffer還在buffer list里面待着,不過文件內容要從內存里面移除;

delete

      的話,先unload之,然后從buffer list里面刪掉
    • 有沒有可能做到這樣一件事,重用已經delete的buffer的編號?
    • 別想了,impossible。
    • 俺怎樣得到一個臨時性的buffer(scratch)?
    • 可以這樣設置


:set buftype=nofile
:set bufhidden=hide
:setlocal noswapfile

    • 俺咋能不讓一個buffer加到buffer list里面?

:set nobuflisted

    • 俺咋知道一個buffer是改了還是沒該?
    • 方法有好些。最簡單的就是看標題欄或者狀態欄,上面有個“+”。另外就是查看一下標記位

:set modified?

    • 咋能不讓修改buffer?

:set nomodifiable

      ,要是改變心意了,就

:set modifiable

    • 俺只設定當前這個buffer,咋辦?

:setlocal

      ,比如說吧,

:setlocal textwidth=70

    • 俺只對當前這個buffer用縮寫,怎么辦?

:map 

      或者是

:abb


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM