vim 入門到提高

summary

vim基礎

常用的設置

基礎操作:

光標的轉移:

刪除操作

複製操作

Vim進階

1.自動推斷  

2. 跳轉

3. 列模式:

4.錄製宏

5. vimdiff 


vim基礎

常用的設置

ps: vim的設置, 針對當前用戶的設置, 需要修改~/.vimrc, 如果沒有可以自行創建

                            針對所有用戶設置, 需要修改 /etc/vim/viminfo

set ts=4                 ts是tabstop的縮寫,設TAB寬度爲4個空格。
set softtabstop=4 表示在編輯模式的時候按退格鍵的時候退回縮進的長度,當使用 expandtab 時特別有用。
set shiftwidth=4 shiftwidth 表示每一級縮進的長度,一般設置成跟 softtabstop 一樣。
set expandtab expandtab表示縮進用空格來表示,noexpandtab 則是用製表符表示一個縮進。
set autoindent autoindent自動縮進
set nu nu    設置顯示行號
set hlsearch 設置搜索的關鍵詞高亮
set list  顯示所有的不可見字符(空格, tab, 換行符), 用來解決在Linux/Window上出現的對齊問題
set cursorline  在光標所在行下劃線
set cursorcolumn 顯示光標所在列對齊線

基礎操作:

vim 常用的模式有: 命令模式 ===>> vim txt 進入或者ESC 之後的狀態就是此模式

                                 插入模式====>> 當處於修改文件的狀態, 就是此模式

                                 底行模式====>> 進入命令模式後, 鍵盤輸入:在此之後可以輸入一些命令

                                  視圖模式====>> 在命令模式下, 鍵盤輸入v, 就進入此模式

shift + a == A 從命令模式進入插入模式, 並且光標會跳到行尾
shift + i  == I 從命令模式進入插入模式, 並且光標會跳到行尾
a 從命令模式進入插入模式, 在當前光標位置的下一個字符插入
i 從命令模式進入插入模式, 在當前光標位置的下一個字符插入
o 從命令模式進入插入模式, 在當前行的下一行插入一行
O 從命令模式進入插入模式, 在當前行的上一行插入一行
J 將當前行的下一行合併到當前行
K 跳轉到光標所在函數或命令的man手冊
gd 跳到局部的變量定義處,不能跨文件
:r hello  將hello文件讀入當前文件中
:n1,n2 w>>fox 將n1至n2追加到fox文件中
:w fileName 文件另存爲,當我們編輯了很多卻發現當前文件是read only 時候使用

 

光標的轉移:

小寫英文字母 h j k l 分別控制光標左 下 上 右移動,也可以使用箭頭
 Ctrl+b 屏幕往後移動一頁
Ctrl+ f 屏幕往前移動一頁
Ctrl+u 屏幕往後移動半頁
Ctrl+d 屏幕往前移動半頁
Shift+g == G 移動到文章的最後
Shift+4 == $ 移動到光標所在行的行尾
Shift+6 == ^ 移動到光標所在行的行首
0 移動到光標所在行的行首
w 光標跳到下個字的開頭
e 光標跳到下個字的字尾
b 光標回到上個字的開頭
gg 進入到文本的開始
Shift+g == G 進入到文本的末端
2g=15G  第二行至第15行代碼格式化(重置縮進)
zf 100  摺疊100 行
zf% 把光標放在{或者(位置, 前後都行, 輸入zf%, 摺疊此塊代碼
Ctrl + g  顯示當前文件名字
]] 跳轉到函數結尾}
[[ 跳轉到函數開始{

刪除操作

  1. x 刪除光標所在位置字符
  2. X 刪除光標所在位置前一個字符
  3. dw 刪除光標所在位置到下一個非字母
  4. D   刪除光標所在位置到行末的所有字符
  5. dd 刪除當前行

以上操作均可以在在命令前面加數值, 就是把此操作重複N此的意思

複製操作

  1. yy  粘貼當前行

  2. yw 粘貼當前word

以上操作可以在命令前加數字,如10yy, 意爲複製10行到粘貼板, 同時此操作需要與p(粘貼)結合使用

     3. 更復雜的非整行的複製粘貼操作:

j鍵入v 進入視圖模式, 用光標轉移操作來框選內容, 然後y(複製), 然後移動到目標位置, p 粘貼

 

Vim進階

1.自動推斷  

在Windows 中使用vs/Qt等IDE, 會有自動推斷功能, 在vim中也可以有類似的功能:ctrl + p。

Ctrl + p 執行後的形態

鍵入Ctrl + p 就會出現上圖的結構, 可以推斷我們自己寫的函數, 變量, 也能推斷C庫的內容, 只要包含了頭文件就可以

; 然後可以通過⬆/ctrl +p 逐條向上, 或者⬇/ctrl + n 逐條向下 跳轉到自己想要的item

ps: 根據個人的實踐, Ctrl + p 的推斷並不像Qt那麼智能, 只是根據你已經輸入的字符, 機械的匹配單詞(字符串, 只有數字和字母),對定義的結構體和類的推斷, 還是力不從心的。

2. 跳轉

在vim的使用中, 我們經常會查找某個函數或者變量, 光標就會到處跳轉,比如:

step 1: 光標在100行;

step 2: 光標在300行;

step 3: 光標在500行;

step 4: 光標在50行;

step 5: 光標在250行;

在如上場景中, 我現在到了第五步, 光標處在250行, 如果想回到第四步的位置怎麼辦呢??

Ctrl + o 閃亮登場, Ctrl + o 組合鍵可以讓光標回到上一個位置;

Ctrl + i  如果希望回到下一個位置, 則用 ctrl + i.

PS: 根據本人的實踐, Ctrl + o, Ctrl + i 的光標位置跳轉, 不記錄j/k的逐行光標移動, 記錄的是G/100G/:100/查找/gg  這幾類光標跳轉

3. 列模式:

在word 的編輯中, 如果我們需要把N行同時輸入活刪除若干列的內容, 我們可以藉助Alt 鍵的幫助, 在Vim中也可以方便的使用。

同時在N插入:

step 1:將光標移動到您想要插入的第一行第一個字符位置:

step 2:Ctrl + v 進入virtual block 模式

step 3:通過j/k上下移動光標, 至第N行

step 4:shift + i ====I, 輸入想要的內容

step 5:按兩次ESC 退出插入模式

刪除N行M列:

step 1:將光標移動到您想要插入的第一行第一個字符位置:

step 2:Ctrl + v 進入virtual block 模式

step 3:通過h/j/k/l上下左右移動光標, 至第N行M列, 框選出一個NxM的矩陣

step 4:鍵入x, 完成刪除操作

step 5:按兩次ESC 退出插入模式

4.錄製宏

在實踐中, 經常需要重複的操作, 一些簡單操作, 我們可以使用sed來搞定, 對於有一定複雜性的操作, 可以考慮用錄製宏來完成, 事半功倍,操作步驟如下:

step 1:在命令模式下依次鍵入qa,此時在左下角有一個 recording 單詞;

step 2:此時已經開始錄製了, 接下來會記錄你的所有的vim動作;

step 3:動作結束,按ESC退出插入模式, 鍵入a結束錄製, 此時一系列的動作已經保存完成,接下來就是執行已經保存了的動作;

step 5:鍵入@a執行已經保存的動作,也可以用 n@a 來連續執行n次.

5. vimdiff 

在Linux中可以使用vimdiff來查看版本之間的差異:

vimdiff  a.1 a.2       進入vimdiff

]+c(右方括號 + c)    跳轉到下一個不同的位置

[+c(左方括號 + c)    跳轉到上一個不同的位置

Ctrl + 兩次w             光標在對比的文件間切換

d+p                           把光標所在窗口的差異改到另一個窗口(:diffput)

d+o                           把光標所在窗口的差異改爲另一個窗口的(:diffget) o=obtain

z+o                             打開光標下面的一個摺疊(open)

z+O                             打開光標下面的所有摺疊

z+c                              關閉光標下面的一個摺疊(close)

z+C                             關閉光標下面的所有摺疊

:set noscrollbind          取消文件比較中的同步滾屏功能,此時移動光標, 另一個文件不會跟着上下翻頁

:diffupdate                    在對比過程中, 又時候會手動的改變文件的內容, 此時需要更新一下對比的結果

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