Vim 进阶1
Vim 進(jìn)階1
所有你覺得簡單重復(fù),可以自動(dòng)化實(shí)現(xiàn)的操作,都是可以自動(dòng)化實(shí)現(xiàn)的。
Vim光標(biāo)移動(dòng)拾遺
w:下一個(gè)單詞的開頭,e:下一個(gè)單詞的結(jié)尾,b:上一個(gè)單詞的開頭,
0:行首(最行首,不管行首字符是否為空),$:行尾,^:非空字符行首,
%:匹配括號(hào)處,前跳后,后跳前都可,
gd:跳到某變量定義處(其實(shí)是當(dāng)前函數(shù)體內(nèi),該變量第一次出現(xiàn)的位置),gD:整個(gè)文件內(nèi)該變量第一次出現(xiàn)的位置,*,#,n,N
[{:移動(dòng)到前一個(gè)沒有匹配的左大括號(hào)處,(用于跳到函數(shù)、循環(huán)等作用域的開頭)
r:normal 模式下替換一個(gè)字符,如 ra 將當(dāng)前字符替換為 a,R:normal模式下從當(dāng)前到行尾替換
cw:刪除單詞并進(jìn)入編輯模式,C:輸出到行尾并進(jìn)入編輯模式。S:刪除整行并進(jìn)入編輯模式,s:刪除當(dāng)前字符并進(jìn)入編輯模式,
~:替換大小寫,并后移一個(gè)字符
自定義計(jì)數(shù)操作
-
d2w:刪除(其實(shí)d都是剪切)兩個(gè)單詞
-
2dw:刪除單詞,做兩遍。4dd == d3j
Vim 修飾詞
-
i inner
dip:(delete inner paragraph) 刪除一段文字(空行分隔),刪除操作不包括空行
di(:刪除括號(hào)內(nèi)內(nèi)容
-
a around
dap:刪除一段文字,刪除操作包括空行
-
t till
dt):刪除從當(dāng)前光標(biāo)到本行下一個(gè) ) 處,刪除操作不包括 )
-
f find
df):刪除從當(dāng)前光標(biāo)到本行下一個(gè) ) 處,刪除操作包括 )
vim mark標(biāo)簽
- m 生成一個(gè) mark 標(biāo)簽,如 a ,生成一個(gè)名為 a 的標(biāo)簽
- ` 跳轉(zhuǎn)到一個(gè) mark 標(biāo)簽,如 a ,跳轉(zhuǎn)到名為 a 的標(biāo)簽處,恢復(fù)行列位置
- ’ 跳轉(zhuǎn)到一個(gè) mark 標(biāo)簽,如 a ,跳轉(zhuǎn)到名為 a 的標(biāo)簽處,僅恢復(fù)行位置,即跳到標(biāo)簽所在行行首
- `` 或 ‘’ 在起跳點(diǎn)和標(biāo)簽 a 間反復(fù)橫跳
mark 還有很多用法,可參考 https://vimjc.com/vim-mark.html
vim多標(biāo)簽頁
對(duì)于vim這個(gè)來說, 單純的用多子窗口(sp、vsp)來操作, 感覺還是不夠的, 還要結(jié)合標(biāo)簽頁tab pages來,才能更好的操作。
所有關(guān)于標(biāo)簽的命令都是以 :tab 開始的, 可以用tab鍵來查看提示
-
:tabnew 新建標(biāo)簽
-
:tabedit fileName 在新標(biāo)簽中打開文件,簡寫為 :tabe
-
:tabc 關(guān)閉當(dāng)前標(biāo)簽, :tabo 關(guān)閉其他所有標(biāo)簽
-
:tabfirst 切換到第一個(gè)標(biāo)簽
-
:tablast 切換到最后一個(gè)標(biāo)簽
-
:tabp 切換到前一個(gè)標(biāo)簽 tab previous
-
:tabn 切換到下一個(gè)標(biāo)簽 tab next
-
:tabs 查看標(biāo)簽
-
gt,gT 常規(guī)模式下直接切換標(biāo)簽
visual模式
- v:逐字符選中
- V:整行選中
- C-v:矩形塊 block 選中
搜索替換
:[range]s/from/to[flags]:在 range 范圍內(nèi),將 from 替換為 to。 range、flags 常用含義如下
flags
| % | 復(fù)制上次替換命令的flags |
| g | 替換每行所有的匹配值(默認(rèn)只替換每行的第一個(gè)匹配值) |
| c | 替換前需確認(rèn) |
| e | 替換失敗時(shí)不報(bào)錯(cuò) |
| i / I | 大小寫不敏感 / 敏感 |
range
| 21 | 21行 |
| $ | 最后一行 |
| % | 全部行 |
| 21,25 | 從21行到25行 |
| . | 當(dāng)前行 |
| .+3 | 當(dāng)前行后的第3行 |
| .,$ | 當(dāng)前行到最后一行 |
| .,.5 / .,.+5 | 當(dāng)前行及之后5行 |
多個(gè)文件內(nèi)替換
:args *.c *.h :argdo %s/ext4/ext5/g :argdo update :argdo exit注意 Vim 中的替換與 sed 中的替換其實(shí)是很像的:
sed -i "[range]s/from/to/[flags]" filename 將?件 filename 內(nèi)的 from 替換為 to
-i 表示直接編輯文件內(nèi)容,不加將會(huì)打印輸出到 stdout。
Vim 宏
如生成從 1 到 1000 的序列等多次雷同的操作
- 錄制宏:q,如 qa 表示開始錄制名稱為 a 的宏。
- 運(yùn)行宏:@,如 @a 表示執(zhí)行名稱為 a 的宏,10@a 表示執(zhí)行 10 次。
詳見:Vim 重復(fù)操作的宏錄制
安裝插件
- mkdir -p ~/.vim/pack/vendor/start
- 將插件 clone 到該目錄下即可
ctags
生成 tags 方便跳轉(zhuǎn)看代碼,支持多種語言
- 安裝 ctags:sudo apt install exuberant-ctags
- 創(chuàng)建 tags 文件 ctags -R .
- 若查找 inode_operations 的定義
- No tags file
- 當(dāng)前目錄不存在 tags 文件
- 在父目錄中尋找 tags 文件:在 .vimrc 中添加 set tags=./tags;,tags
- No tags file
- 使用:
- 查找當(dāng)前文件中的某個(gè)變量的定義:光標(biāo)在該變量上,Crtl+]
- 列出所有某個(gè)變量的定義及引用:g]
- 直接打開定義 inode_operations 的文件:直接在當(dāng)前目錄下,命令行中 vim -t inode_operations
shell使用vim鍵位
-
bash : set -o vi
-
zsh : bindkey -v
-
fish : fish_vi_key_bindings
這里說一下 bash 中默認(rèn)是 emacs 模式,具體當(dāng)前是什么模式可以用 set -o 命令查看,然后通過 set -o enacs 和 set -o vi 來回切換。
鍵位圖中文版
其他常用插件
- gitgutter
- easymotion
- fzf
- Vim-linux-coding-style
- cscope
- …
Ref:
https://www.bilibili.com/video/BV1PL411M7bg?from=search&seid=12655157522675339145&spm_id_from=333.337.0.0
總結(jié)
- 上一篇: 手把手教你入门Git --- Git使用
- 下一篇: Nvidia CUDA初级教程2 并行程