VIM常見問題彙總

雖然使用VIM已經有5年,不過很多用法還是很不熟悉,需要上網查找。所以,決定以後遇到的問題都記錄在此,以便日後查閱。


一、塊操作

1. 整塊縮進或者去掉縮進。默認情況下,使用ctrl+v選中待操作的塊後,使用shift + < 或者 shift + >可以使得整塊左移或者右移。但是是按照tab移動的。如果使用python語言的話,非常不方便。因爲python語言通常縮進距離是2個空格。我以前採用非常傻的方法,先按照tab移動,然後再利用:set tabstop=2 以及:retab!來達到目的。有的時候操作不當,還會產生各種混亂的縮進。今天上網查了一下,發現有個方法非常方便,依次使用如下commands即可:

  a) :set sw=2 (想移動幾個空格就設爲幾,另外,=號左右不能有空格)

  b) ctrl+v 選中操作塊

  c) shift + < 或者 shift + > 移動即可。

2. Block comment

   a) ctrl+v 選中操作塊

   b) shift + I 進入insert mode

   c) input the comment character, eg "#" in shell or "//" in c or c++

   d) hit "esc" key two times

   DONE!

3. Block uncomment

   a) ctrl+v select the target block

   b) hit "d" key once

   DONE!

二、Useful Commands

1. % : 匹配(,{ ,/*等。

2. . : repeat the last operation.

3. Ctrl+R: redo, that is, undo the last undo.

4. [{: Jump back to the "{" at the start of the current code block.


三、塊摺疊

1. 摺疊方式
可用選項 'foldmethod' 來設定摺疊方式:set fdm=*****。
有 6 種方法來選定摺疊:
         manual           手工定義摺疊
         indent             更多的縮進表示更高級別的摺疊
         expr                用表達式來定義摺疊
         syntax             用語法高亮來定義摺疊
         diff                  對沒有更改的文本進行摺疊
         marker            對文中的標誌摺疊
注意,每一種摺疊方式不兼容,如不能即用expr又用marker方式,我主要輪流使用indent和marker方式進行摺疊。

使用時,用:set fdm=marker 命令來設置成marker摺疊方式(fdm是foldmethod的縮寫)。
要使每次打開vim時摺疊都生效,則在.vimrc文件中添加設置,如添加:set fdm=syntax,就像添加其它的初始化設置一樣。

2. 摺疊命令
選取了摺疊方式後,我們就可以對某些代碼實施我們需要的摺疊了,由於我使用indent和marker稍微多一些,故以它們的使用爲例:
如果使用了indent方式,vim會自動的對大括號的中間部分進行摺疊,我們可以直接使用這些現成的摺疊成果。
在可摺疊處(大括號中間):
zc      摺疊
zC     對所在範圍內所有嵌套的摺疊點進行摺疊
zo      展開摺疊
zO     對所在範圍內所有嵌套的摺疊點展開
[z       到當前打開的摺疊的開始處。
]z       到當前打開的摺疊的末尾處。
zj       向下移動。到達下一個摺疊的開始處。關閉的摺疊也被計入。
zk      向上移動到前一折疊的結束處。關閉的摺疊也被計入。

當使用marker方式時,需要用標計來標識代碼的摺疊,系統默認是{{{和}}},最好不要改動之:)
我們可以使用下面的命令來創建和刪除摺疊:
zf      創建摺疊,比如在marker方式下:
                  zf56G,創建從當前行起到56行的代碼摺疊;
                  10zf或10zf+或zf10↓,創建從當前行起到後10行的代碼摺疊。
                  10zf-或zf10↑,創建從當前行起到之前10行的代碼摺疊。
                  在括號處zf%,創建從當前行起到對應的匹配的括號上去((),{},[],<>等)。
zd      刪除 (delete) 在光標下的摺疊。僅當 'foldmethod' 設爲 "manual" 或 "marker" 時有效。
zD     循環刪除 (Delete) 光標下的摺疊,即嵌套刪除摺疊。
         僅當 'foldmethod' 設爲 "manual" 或 "marker" 時有效。
zE     除去 (Eliminate) 窗口裏“所有”的摺疊。
         僅當 'foldmethod' 設爲 "manual" 或 "marker" 時有效。

在.vimrc中修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章