vim 參考手冊



索引


 

跳躍指令 (jumps)

跳躍指令類似於游覽器中的<前進><后退>按鈕
CTRL-] -> 跟着link/tag轉入 (follow link/tag)
CTRL-o -> 回到上一次的jump (go back)
CTRL-i -> 跳回下一個 (go forward)
:ju -> 顯示所有的可以跳躍的地方 (print jump list)


 

重做/回復

u -> undo
CTRL-r -> redo
vim的undo是樹結構的,你可以回到這個結構中的任何地方
:undo 2 -> undo 到結構的2層 (undo to tree 2)
:undolist -> 顯示所有的undo列表 (show undo list)
:earlier 10s -> undo到10秒前的編輯 (undo to 10 seconds ago)
:earlier 10h -> undo到10小時前的編輯 (back to 10 hours ago)
:earlier 1m -> undo到1分鍾前 (back to 1 minutes ago)
下面是undo的tree結構的解釋
………..one
…………. |
……..change 1
…………. |
………one too
………. /……..\
…..change 2 ……. change 3
………… | ………………… |
…….one two ………. me too
……….. |
….. change 4
………..|
…… not two


 

代碼折疊

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" 時有效。

關於vim的代碼折疊,小弟也是初學,僅做參考。

 

* zo 將當前折疊打開
* zc 折疊光標所在處
* zr 打開所有折疊層次(依層次打開)
* zm 折疊所有層次(依層次折疊)
* zR 打開所有折疊  zn
* zM 折疊所有      zN
* zi 切換折疊與不折疊指令


 

緩沖區

* vim file1 file2 多個文件調入緩沖
* :e filename 在vim中再打開文件
* :ls 列出所有的緩沖區
* :n 編輯下一個文件
* :bp 跳轉到上一個緩沖區
* :bn 跳轉到下一個緩沖區
* :bN 跳轉到指定編號的緩沖區:b3
* :bd1 刪除編號為1的緩沖區


 

標簽

* :tabnew 打開新標簽頁.
* :tabe <file> 在新標簽頁打開文件.
* <ctrl> + PageUp, PageDown 切換標簽頁.
* :tabnext, tabprev 切換標簽頁,Putty 下只能用這個.


 

文件打開保存

* :e <file> 打開文件.
* :enew 新文件.
* :w 保存.
* :wa 全部保存.
* :w <file> 另存為.
* :wq 保存並退出.
* :q 退出.
* :qa 全部退出.
* :q! 強制退出.
* ZZ 退出vim並保存文檔


 

快捷插入

* esc 切換命令模式 (距離太遙遠了,用 Ctrl+C 代替吧).
* i 插入模式.
* I 在當前行開頭插入.
* R 替換模式.
* a 在光標后插入.
* A 在當前行尾部插入.
* o 將在光標所在行下面加入一行,並進入編輯模式。
* O 將在光標上面加入一行,注意是大寫。
* v Visual 模式按字符選擇.
* V Visual 模式按行選擇.


 

光標移動

  • h 左移光標.
  • j 下移光標.
  • k 上移光標.
  • l 右移光標.
  • gg 將光標移到文件頭部.
  • G 將光標移到文件尾部.
  • #G 移動光標到指定行#. 例如: 5G
  • % 跳轉到配對的括號去
  • [[ 跳轉到代碼塊的開頭去(但要求代碼塊中’{‘必須單獨占一行)
  • gD 跳轉到局部變量的定義處
  • ” 跳轉到光標上次停靠的地方, 是兩個’, 而不是一個”
  • mx 設置書簽,x只能是a-z的26個字母
  • `x 跳轉到書簽處(“`”是1左邊的鍵)
  • fx:移動光標到當前行的下一個 x 處。很明顯,x 可以是任意一個字母,而且你可以使用 ; 來重復你的上一個 f 命令。
  • tx:和上面的命令類似,但是是移動到 x 的左邊一個位置。(這真的很有用)
  • Fx:和 fx 類似,不過是往回找。

 

  • w : 向后詞移動 (前面加數字移動多少個詞)
  • b : 向前詞移動 (前面加數字移動多少個詞)
  • e : 向后移到詞末
  • ge : 向前移到詞末

 

  • 0:移動光標到當前行首。
  • ^:移動光標到當前行的第一個字母位置。
  • $:移動光標到行尾。
  • ):移動光標到下一個句子。
  • ( :移動光標到上一個句子
  • tx : 向右查找本行的x並移到那兒(大寫時向左)
  • 33G : 移到文件的第33行
  • gg : 文件首行
  • G : 文件尾行
  • 33% : 文件的33%處
  • H/M/L : 屏幕的首/中/尾行
  • zt/zz/zb : 當前行移到屏幕的首/中/底部

 

復制粘貼刪除

  •  yy 拷貝當前行到剪貼板.
  • nyy 復制從當前行開始的n行
  •  y^ 從文件頭開始拷貝.
  •  y$ 拷貝到文件尾部.
  •  :#,&y 拷貝 # 到 & 行. 例如: 4,5y
  •  p 在光標后粘貼.
  •  P 粘貼到光標前.
  •  dd 刪除當前行.
  •  d^ 刪除到行首.
  •  d$ 刪除到行尾.
  •  :#,&d 刪除 # 到 & 行. 例如: 3,5d
  • D 當前光標開始刪除到行尾
  • ndd 從當前行開始向后刪除n行
  • d1G 刪除第1行到當前行的數據
  • dnG 刪除第n行到當前行的數據
  • dG 刪除當前行到最后一行的數據
  • x 向后刪除1個字符
  • nx 向后刪除n個字符
  • X 向前刪除1個字符

 



縮進
  >> 增大縮進.
  << 減少縮進.
  == 自動縮進.


 

查找替換

  • /# 查找 #. 例如: /printf
  • ?# 反向查找 #.
  • n 查找下一個.
  • N 反向查找下一個.
  • :s/old/new/g 當前行無提示替換.
  • :%s/old/new/g 無提示替換.
  • :%s/old/new/gc 確認替換.
  • :#,&s/old/new/g 從 # 到 & 行無提示替換.
  • *  查找光標所在單詞

 

書簽跳轉

* :marks 查看所有書簽, 輸入 “:<num>” 可跳轉.
* m<name> 定義書簽, 如 ma 在當前行定義名為 a 的書簽.
* `<name> 跳轉到某書簽, “`” 為鍵盤 Tab 上一行第一鍵.
* :jumps 查看所有跳轉記錄, 輸入 “:<num>” 可跳轉.
* <ctrl> + o 返回上一次跳轉處.
* <ctrl> + i 和 <ctrl> + o 反向轉處.


 

Ctags

* :! ctags -R . 生成 ctags 文件.
* <ctrl> + ] 查看函數定義.
* <ctrl> + T 返回.
* shift + k 查看函數 man 幫助信息.

 


 

cmd

* ! <command> 執行命令.
* :r <file> 插入文件內容.
* :r !<command> 插入命令輸出結果.
* :cd <path> 修改默認工作目錄.


 

自動補全

Ctrl+X Ctrl+L整行補全

Ctrl+X Ctrl+N 根據當前文件里關鍵字補全

Ctrl+X Ctrl+K 根據字典補全

Ctrl+X Ctrl+T 根據同義詞字典補全

Ctrl+X Ctrl+I 根據頭文件內關鍵字補全

Ctrl+X Ctrl+] 根據標簽補全

Ctrl+X Ctrl+F 補全文件名

Ctrl+X Ctrl+D 補全宏定義

Ctrl+X Ctrl+V 補全vim命令

Ctrl+X Ctrl+U 用戶自定義補全方式

Ctrl+X Ctrl+S 拼寫建議


 

分屏

分屏啟動Vim    注釋: n是數字,表示分成幾個屏。

vim -On file1 file2 …     使用大寫的O參數來垂直分屏。

vim -on file1 file2 …   使用小寫的o參數來水平分屏。

Ctrl+W c   關閉分屏  關閉當前窗口。

Ctrl+W q    關閉當前窗口,如果只剩最后一個了,則退出Vim

     分屏

Ctrl+W s        上下分割當前打開的文件。

:sp filename    上下分割,並打開一個新的文件。

Ctrl+W v    左右分割當前打開的文件。

:vsp filename    左右分割,並打開一個新的文件。

    移動光標    Vi中的光標鍵是h, j, k, l,要在各個屏間切換,只需要先按一下Ctrl+W

Ctrl+W l     把光標移到右邊的屏。

Ctrl+W h    把光標移到左邊的屏中。

Ctrl+W k    把光標移到上邊的屏中。

Ctrl+W j    把光標移到下邊的屏中。

Ctrl+W w    把光標移到下一個的屏中。.

   移動分屏    這個功能還是使用了Vim的光標鍵,只不過都是大寫。當然了,如果你的分屏很亂很復雜的話,這個功能可能會出現一些非常奇怪的症狀。

Ctrl+W L    向右移動。

Ctrl+W H    向左移動

Ctrl+W K    向上移動

Ctrl+W J    向下移動

   屏幕尺寸    下面是改變尺寸的一些操作,主要是高度,對於寬度你可以使用Ctrl+W <或是>,但這可能需要最新的版本才支持。

Ctrl+W =    讓所有的屏都有一樣的高度。

Ctrl+W +    增加高度。

Ctrl+W -    減少高度。

ctrl+w >    向右擴展

ctrl+w <    向左擴展


 

 diff 模式

  參考

比較 A , B 文件, vim – d A B 或者這樣

或先打開文件 A,然后 :vsp(全名vsplit) 打開 B,然后輸入命令 :diffthis

或 vimdiff   FILE_LEFT FILE_RIGHT

]c 跳轉到下一差異點

[c 反向跳轉

 

上下文折疊 參考

默認情況下,vimdiff會將文件中不同之處上下6行之外的相同文本折疊隱藏,可通過 :set diffopt=context:3 修改顯示的上下文行數。

zo 打開折疊

zc 關閉折疊

文件合並

dp 將當前窗口光標位置處的內容復制到另一窗口

do 將另一窗口光標位置處的內容復制到當前窗口

diffupdate 重新比較兩個文件,如果手動修改文件的話有時不會自動同步

 

 


 

其他


gg=G 源碼格式化

:e! 強行重新編輯
shift insert 從系統拷貝到vim
u 撤銷上一步操作.
U 撤銷最后編輯的行上的操作
* . 重做.


免責聲明!

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



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