1. 程式人生 > >簡單問題:VIM中 查詢 “上一個” 的快捷鍵是什麼?

簡單問題:VIM中 查詢 “上一個” 的快捷鍵是什麼?

/pattern 向下搜尋 n繼續搜尋下一個
?pattern 向上搜尋 #繼續搜尋上一個

1. 暫時顯示/取消行號
使用Vim開啟檔案後,在Normal模式下輸入
:set number(或 :set nu)顯示行號
:set nonumber (或 :set nonu)取消行號
2. 永久顯示行號
查詢Vim設定檔案 
sudo find / -name vimrc
修改Vim設定檔案 /etc/vimrc ,末尾新增
set number (或 set nu)
儲存即可。

  1. set nocompatible                 "去掉有關vi一致性模式,避免以前版本的bug和侷限    
  2. set nu!                                    "顯示行號
  3. set guifont=Luxi/ Mono/ 9   " 設定字型,字型名稱和字號
  4. filetype on                              "檢測檔案的型別     
  5. set history=1000                  "記錄歷史的行數
  6. set background=dark          "背景使用黑色
  7. syntax on                                "語法高亮度顯示
  8. set autoindent                       "vim使用自動對齊,也就是把當前行的對齊格式應用到下一行(自動縮排)
  9. set cindent                             "(cindent是特別針對 C語言語法自動縮排)
  10. set smartindent                    "依據上面的對齊格式,智慧的選擇對齊方式,對於類似C語言編寫上有用   
  11. set tabstop=4                        "設定tab鍵為4個空格,
  12. set shiftwidth =4                   "設定當行之間交錯時使用4個空格     
  13. set ai!                                      " 設定自動縮排 
  14. set showmatch                     "設定匹配模式,類似當輸入一個左括號時會匹配相應的右括號      
  15. set guioptions-=T                 "去除vim的GUI版本中得toolbar   
  16. set vb t_vb=                            "當vim進行編輯時,如果命令錯誤,會發出警報,該設定去掉警報       
  17. set ruler                                  "在編輯過程中,在右下角顯示游標位置的狀態行     
  18. set nohls                                "預設情況下,尋找匹配是高亮度顯示,該設定關閉高亮顯示     
  19. set incsearch                        "在程式中查詢一單詞,自動匹配單詞的位置;如查詢desk單詞,當輸到/d時,會自動找到第一個d開頭的單詞,當輸入到/de時,會自動找到第一個以ds開頭的單詞,以此類推,進行查詢;當找到要匹配的單詞時,別忘記回車 
  20. set backspace=2           " 設定退格鍵可用
  21. 修改一個檔案後,自動進行備份,備份的檔名為原檔名加“~”字尾
  •       if has("vms")
  •       set nobackup
  •       else
  •       set backup
  •       endif

如果設定完成後,發現功能沒有起作用,檢查一下系統下是否安裝了vim-enhanced包,查詢命令為:

        $rpm -q vim-enhanced
注意:如果設定好以上設定後,VIM沒有作出相應的動作,那麼請你把你的VIM升級到最新版,一般只要在終端輸入以下命令即可:s

跳躍指令 (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 -R . 生成 ctags 檔案. 
* <ctrl> + ] 檢視函式定義. 
* <ctrl> + T 返回. 
* shift + k 檢視函式 man 幫助資訊.

* ! <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 撤銷最後編輯的行上的操作 
* . 重做.

鍵盤移動 (Move)

一切都從鍵盤的移動 
k -> 上 up 
j -> 下 down 
h -> 左 left 
l -> 右 right 
z -> 重畫螢幕,當前游標變成螢幕的第一行 (redraw current line at top of window) 
CTRL-f -> 跳到下一頁 (page down) 
CTRL-b -> 跳到上一頁 (page up)

跳躍指令 (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

視覺模式 (visual)

v -> 進入視覺模式 
在視覺模式內可以作block的編輯 
CTRL-v -> visual block

列印 (print)

:hardcopy -> 列印vim中的內容 (print text) 
混合視覺模式 (visual) 可以選擇列印的區域 
沒試過是否可以直接給值列印(應該可以)例如 :1,15hardcopy 列印前15行

將檔案寫成網頁格式 (html)

:source $VIMRUNTIME/syntax/2html.vim -> change current open file to html

格式 (format)

dos/windows跟unix/linux對於檔案的結束是不一樣的。vim可以直接設定/更改格式 
用紙令:set fileformats=unix,dos 可以改變檔案的格式 (change format)

:set ff=unix -> 設定檔案成unix格式 (set file in unix format) 
:set ff=dos -> 設定檔案成dos格式 (set file in dos format) 
:set ff? -> 檢查當前檔案格式 (check the format of current file) 
如果改變格式,直接:w存檔就會存成新的格式了。

加密 (encryption)

vim可以給檔案加密碼 
vim -x 檔名 (filename) -> 輸入2次密碼,儲存後文件每次都會要密碼才能進入 (encrypt the file with password) 
vim 處理加密檔案的時候,並不會作密碼驗證,也就是說,當你開啟檔案的時候,vim不管你輸入的密碼是否正確,直接用密碼對本文進行解密。如果密碼錯誤,你看 到的就會是亂碼,而不會提醒你密碼錯誤(這樣增加了安全性,沒有地方可以得知密碼是否正確)當然了,如果用一個夠快的機器作窮舉破解,vim還是可以揭開 的

vim 語法顯示 (syntax)

:syntax enable -> 開啟語法的顏色顯示 (turn on syntax color) 
:syntax clear -> 關閉語法顏色 (remove syntax color) 
:syntax off -> 完全關閉全部語法功能 (turn off syntax) 
:syntax manual -> 手動設定語法 (set the syntax manual, when need syntax use :set syntax=ON)

輸入特殊字元 (special character)