Friday, June 29, 2012

vim tips: folding fun



本文參考自 : https://www.linux.com/learn/tutorials/442438-vim-tips-folding-fun


介紹 vim 的 folding 技巧,也就是如何乾淨的把 code 折疊起來





首先,vim folding 指令都是由 z 開頭,我的記法是 zip the code

z 開頭的指令 zt zz zb 這三個很好用,順便提一下

功能是把游標目前所在的行捲到螢幕的 top / center / bottom


這在臨時上下捲動頁面半頁或是要邊寫 function 時很好用

vim 底下:h z 可以看到 folding 相關的指令 (這邊把其他不相干的刪減掉了)

BTW,最完整的教學在 :h fold.txt 裏面可以看到


zA              zA                 open a closed fold or close an open fold     
                                   recursively                                  
zC              zC                 close folds recursively                      
zD              zD                 delete folds recursively                     
zE              zE                 eliminate all folds                          
zF              zF                 create a fold for N lines                    
zO              zO                 open folds recursively                       
za              za                 open a closed fold, close an open fold       
zc              zc                 close a fold                                 
zd              zd                 delete a fold                               
zf              zf{motion}         create a fold for Nmove text                 
zj              zj              1  move to the start of the next fold           
zk              zk              1  move to the end of the previous fold         


看的懂英文應該基本上就知道這幾個要怎麼用了XD

最常用的是 zf + {motion} 

像是 zf2j 可以向下折疊兩行 (zip folding 2 j),就跟你用 2j 在 vim 裏面往下移動兩行一樣

另外一種方法是在 normal mode 下 :N, M fold ,N M 是行數,把  N, M 行之間的 code 折起來

再來一種是 {Visual}zf 也就是用 visual 模式下選取要 folding 的區域,然後再用 zf 幫你折起來

zf 的 motion 也可以搭配 vim 的 text object 來使用,像是 zfa} 或是 zfa{ 可以向下或向上折疊一段落

當然,也可以搭配 searching 來找,zf/pattern 就是折疊到第一個你找到的 pattern


接下來是使用 folding 的方法

zo / zc 則是拿來 open/close folding 的

zO / zC 可以 打開/關閉 底下的子 folding

當然,za zA 可以把 folding 當成電燈開關一樣,打開 folded 的區塊, fold 被打開的區塊

zr / zm 是將 fold level 開啟和關閉一層

zR / zM 是對所有的 fold level 作,也就是打開 / 關閉整個檔案裡所以的 folding

在被 folded 的 code 間移動有很快的作法, zj / zk ,如同你所想的,移動到 上 / 下個 folded 的 code


zd delete 掉游標所在的 folding

zE delete 所有的 folding


最後, vim 在處理被 folding 起來的區塊時,會把他當成像是一行文一樣,也就是說,可以對他做一行的操作,像是 dd 和 yy


No comments:

Post a Comment