gVim是一款強大的編輯器,可以滿足大部分語言的編程需要。尤其是其自帶的模板定制功能對於Verilog來說非常受用。然而gVim有很多操作是不同於其他編輯器的,這讓很多初學者望而卻步,因此,本文將gVim的一些常用技巧列舉了出來。
一、_vimrc中可能用到的設置
1.gVim的默認設置
安裝和配置好gVim后,在Program Files (x86)\Vim目錄下有個“_vimrc”文件,雙擊選擇gVim軟件打開,這里可以對gVim進行一些默認設置,我的設置如下所示
1 "亂碼設置 2 "----------------------------------------------------------------- 3 let &termencoding=&encoding 4 set fileencodings=utf-8,gbk,gb18030,gb2312,cp936,ucs-bom,latin1 5 6 "常用設置 7 "----------------------------------------------------------------- 8 set showmatch "高亮顯示匹配的括號 9 set matchtime =2 "高亮括號的閃爍時間 10 set shiftwidth =4 "自動縮進符 11 set tabstop =4 "tab制表符 12 set softtabstop =4 "4個空格符視為tab符 13 set expandtab "tab符視為空格符 14 set smarttab "使用退格鍵時辨別tab 15 set number "行號顯示 16 "set cursorline "突出顯示當前行 17 set lbr "折行顯示時不折斷單詞 18 set guifont=Consolas:h16 "Consolas字體和16字號 19 "set guifont=Courier_New:h16 "Courier_New字體和16字號 20 "set guifont=新宋體:h16:cGB2312 "新宋體,16字號,gb2312編碼方式 21 set nobackup "不生成備份文件~ 22 set noswapfile "不生成交換文件.swp 23 "set lines=30 columns=100 "啟動時窗口大小設置 24 au GUIEnter * simalt ~x "啟動時窗口最大化 25 "set nowrap "不折行 26 "set guioptions+=b "添加水平滾動條 27 filetype indent on "載入相關縮進格式實現自動縮進
這些設置都寫了注釋,就不一一解釋了。重點說一下亂碼現象,什么情況會出現亂碼?
①小偉用gVim編寫.v文件里面有中文注釋,文件被gVim默認保存為ANSI格式。之后小馬用quartus ii打開此文件看到中文是亂碼。
②小馬很生氣,於是用quartus ii在里面寫了一句 I am angry 並保存,因為里面有中文(雖然是亂碼)所以文件被quartus ii默認保存為UTF-8格式。之后小偉用gVim打開此文件看到所有中文都亂碼了,全亂套了!
這是因為quartus ii默認的文件編碼格式是ANSI,而當里面有中文時則保存為UTF-8。gVim默認情況下不管有沒有中文都是ANSI。quartus ii無法識別ANSI格式下的中文,而gVim又無法識別UTF-8格式下的中文。能不能把gVim設置成和quartus ii一樣,無中文時是ANSI格式有中文時是UTF-8格式呢?可以的,只要在“_vimrc”文件里添加了上述代碼中3-4行語句,這樣使得gVim編碼和顯示時都按utf-8,gbk,gb18030,gb2312,cp936,ucs-bom,latin1的順序去探測,這樣用gVim保存文件時和quartus ii編碼方式完全一致,無中文時是ANSI格式,有中文時是UTF-8格式,而且查看文件時也不再顯示亂碼了。(看.v文件是什么編碼格式保存的只要.v文件右鍵選擇記事本打開,點另存為就能看到編碼格式了。)網上很多別的教程說修改encoding=utf-8,可是這樣一改菜單就亂碼了,於是又加一些改變菜單亂碼的語句,打開一看貌似好了。如果你這樣做會發現兩個問題:一是這種方式下中文的雙引號 “ ” 是不正常顯示的;二是這種方式下模板定制時不能出現漢字,否則調出模板時的漢字是亂碼。所以還是按上面的方法來吧。
補充:
③問題解決后,小蔡用quartus ii打開.v文件后,又用gVim打開這個.v文件修改並保存,回到quartus ii界面加載內容后發現這個里面的中文又亂碼了!說好的解決亂碼呢?
對於這種情況就算換成notepad++也是一樣亂碼,純粹是因為quartus ii自帶的編譯器太垃圾了。所以quartus ii自帶編譯器打開了代碼時最好直接在里面修改保存,或者叉掉.v文件后再用第三方編譯器修改保存。當然,如果棄用quartus ii自帶編譯器,讓quartus ii與第三方編譯器直接關聯好,那么這個問題也就不存在了。
2.gVim多標簽設置(慎用)
gVim是默認無標簽的,多標簽打開文件需要用命令,Windows下還是有點麻煩。但是可以通過對注冊表進行操作達到默認多標簽的修改。方法:
①打開Windows系統注冊表,桌面左下角輸入regedit即可進入注冊表。
②找到"HKEY_CLASSES_ROOT\Applications\gvim.exe\shell\edit\command,如下圖所示:

③在“ab默認”那鼠標右鍵點擊修改,將其修改為 D:\Program Files\Vim\vim72\gvim.exe -p --remote-tab-silent "%1"
這樣用gVim打開多個文件時它就自動啟用多標簽模式了。
缺點,無法再另外打開一個窗口顯示代碼,所以是否要這樣設置得看個人喜好了。同時由於更改了注冊表,可能導致Windows狀態欄中的gVim圖標異常顯示,只需要按以下步驟即可恢復:
①新建TXT文檔
②寫上以下代碼
taskkill /im explorer.exe /f cd /d %userprofile%\appdata\local del iconcache.db /a start explorer.exe exit
③文檔重命名為xxx.bat
④雙擊允許,重啟軟件
⑤若無法解決,就以管理員身份運行
二、常用命令,這些命令可滿足日常90%編碼需要
1 一、編輯模式(i鍵光標停在左側,a鍵光標停在右側) 2 3 1.補全:ctrl + p,按住ctrl鍵再按p鍵可以進行代碼選擇,按Enter鍵確認 4 5 6 二、命令模式(Esc鍵) 7 8 1.復制、粘貼、刪除 9 (1)yy :光標所在行,復制整行 10 (2)y5y :光標所在行往下數,復制5行 11 (3)p :光標所在行,粘貼 12 (4)5p :光標所在行往下數,粘貼5次 13 (5)dd :光標所在行,刪除整行 14 (6)d5d :光標所在行往下數,刪除5行 15 16 2.搜索 17 (1)搜索單個單詞 :*鍵 18 (2)搜索單詞局部 :/需要選中的代碼,按Enter鍵。 19 (3)搜索字符“/” :需添加\,如“/\/”表示搜索字符“/” 20 (4)向上搜索 :N 21 (5)向下搜索 :n 22 (6)退出 ::noh,按Enter鍵 23 24 3.跳轉 25 (1)文件頭 :gg 26 (2)文件尾 :G 27 (3)第7行 ::7,按Enter鍵 28 (4)行頭 :^ 29 (5)行尾 :$ 30 31 4.替換 32 (1)局部替換 :第20行到第30行的i0替換成i1::20,30s/i0/i1/gc,按Enter鍵,按y表同意替換,按n表跳過的替換 33 (2)全局替換 ::%s/i0/i1/gc,按Enter,按Enter鍵,按y表同意替換,按n示跳過替換 34 35 5.分窗口 36 (1)上下窗口 ::sp,按Enter鍵 37 (2)左右窗口 ::vs,按Enter鍵 38 (3)退出 ::q,按Enter鍵 39 40 6.列操作: 41 (1)選中 :按住Alt鍵,用鼠標鍵選中范圍 42 (2)刪除 :選中需要刪除的范圍,按刪除鍵 43 (3)插入 :輸入數據,再按ese退出 44 45 46 三、列操作模式(命令模式下按ctrl + q鍵) 47 48 1.選中 :hjkl表示左下上右 49 2.刪除 :按delete刪除 50 3.插入 :按I再輸入數據,按ese退出 51 4.鼠標 :可先鼠標選中范圍,再ctrl+q進入列操作模式 52 5.如果不習慣,建議直接使用命令模式下的列操作方法 53 54 55 四、其他常用功能 56 57 1.代碼文件對比功能 58 菜單 >>> 文件 >>> 分割比較,把文件添加進來,gVim自動分成兩個窗口,自動將異同顯示高亮 59 60 2.錄制命令功能 61 qa開始錄制,開始操作命令,q結束錄制,100@a表示重復命令100次
三、gVim中文速查表(搬運)
1 ############################################################################## 2 # VIM CHEATSHEET (中文速查表) - by skywind (created on 2017/10/12) 3 # Version: 43, Last Modified: 2018/12/26 15:17 4 # https://github.com/skywind3000/awesome-cheatsheets 5 ############################################################################## 6 7 8 ############################################################################## 9 # 光標移動 10 ############################################################################## 11 12 h 光標左移,同 <Left> 鍵 13 j 光標下移,同 <Down> 鍵 14 k 光標上移,同 <Up> 鍵 15 l 光標右移,同 <Right> 鍵 16 CTRL-F 下一頁 17 CTRL-B 上一頁 18 CTRL-U 上移半屏 19 CTRL-D 下移半屏 20 0 跳到行首(是數字零,不是字母O),效用等同於 <Home> 鍵 21 ^ 跳到從行首開始第一個非空白字符 22 $ 跳到行尾,效用等同於 <End> 鍵 23 gg 跳到第一行,效用等同於 CTRL+<Home> 24 G 跳到最后一行,效用等同於 CTRL+<End> 25 nG 跳到第n行,比如 10G 是移動到第十行 26 :n 跳到第n行,比如 :10<回車> 是移動到第十行 27 10% 移動到文件 10% 處 28 15| 移動到當前行的 15列 29 w 跳到下一個單詞開頭 (word: 標點或空格分隔的單詞) 30 W 跳到下一個單詞開頭 (WORD: 空格分隔的單詞) 31 e 跳到下一個單詞尾部 (word: 標點或空格分隔的單詞) 32 E 跳到下一個單詞尾部 (WORD: 空格分隔的單詞) 33 b 上一個單詞頭 (word: 標點或空格分隔的單詞) 34 B 上一個單詞頭 (WORD: 空格分隔的單詞) 35 ge 上一個單詞尾 36 ) 向前移動一個句子(句號分隔) 37 ( 向后移動一個句子(句號分隔) 38 } 向前移動一個段落(空行分隔) 39 { 向后移動一個段落(空行分隔) 40 <enter> 移動到下一行首個非空字符 41 + 移動到下一行首個非空字符(同回車鍵) 42 - 移動到上一行首個非空字符 43 H 移動到屏幕上部 44 M 移動到屏幕中部 45 L 移動到屏幕下部 46 fx 跳轉到下一個為 x 的字符,2f/ 可以找到第二個斜桿 47 Fx 跳轉到上一個為 x 的字符 48 tx 跳轉到下一個為 x 的字符前 49 Tx 跳轉到上一個為 x 的字符前 50 ; 跳到下一個 f/t 搜索的結果 51 , 跳到上一個 f/t 搜索的結果 52 <S-Left> 按住 SHIFT 按左鍵,向左移動一個單詞 53 <S-Right> 按住 SHIFT 按右鍵,向右移動一個單詞 54 <S-Up> 按住 SHIFT 按上鍵,向上翻頁 55 <S-Down> 按住 SHIFT 按下鍵,向下翻頁 56 gm 移動到行中 57 gj 光標下移一行(忽略自動換行) 58 gk 光標上移一行(忽略自動換行) 59 60 61 ############################################################################## 62 # 插入模式:進入退出 63 ############################################################################## 64 65 i 在光標處進入插入模式 66 I 在行首進入插入模式 67 a 在光標后進入插入模式 68 A 在行尾進入插入模式 69 o 在下一行插入新行並進入插入模式 70 O 在上一行插入新行並進入插入模式 71 gi 進入到上一次插入模式的位置 72 <ESC> 退出插入模式 73 CTRL-[ 退出插入模式(同 ESC 等價,但更順手) 74 75 76 ############################################################################## 77 # INSERT MODE - 由 i, I, a, A, o, O 等命令進入插入模式后 78 ############################################################################## 79 80 <Up> 光標向上移動 81 <Down> 光標向下移動 82 <Left> 光標向左移動 83 <Right> 光標向右移動 84 <S-Left> 按住 SHIFT 按左鍵,向左移動一個單詞 85 <S-Right> 按住 SHIFT 按右鍵,向右移動一個單詞 86 <S-Up> 按住 SHIFT 按上鍵,向上翻頁 87 <S-Down> 按住 SHIFT 按下鍵,向下翻頁 88 <PageUp> 上翻頁 89 <PageDown> 下翻頁 90 <Delete> 刪除光標處字符 91 <BS> Backspace 向后刪除字符 92 <Home> 光標跳轉行首 93 <End> 光標跳轉行尾 94 CTRL-W 向后刪除單詞 95 CTRL-O 臨時退出插入模式,執行單條命令又返回插入模式 96 CTRL-\ CTRL-O 臨時退出插入模式(光標保持),執行單條命令又返回插入模式 97 CTRL-R 0 插入寄存器(內部 0號剪貼板)內容,CTRL-R 后可跟寄存器名 98 CTRL-R " 插入匿名寄存器內容,相當於插入模式下 p粘貼 99 CTRL-R = 插入表達式計算結果,等號后面跟表達式 100 CTRL-R : 插入上一次命令行命令 101 CTRL-R / 插入上一次搜索的關鍵字 102 CTRL-F 自動縮進 103 CTRL-U 刪除當前行所有字符 104 CTRL-V {char} 插入非數字的字面量 105 CTRL-V {number} 插入三個數字代表的 ascii/unicode 字符 106 CTRL-V 065 插入 10進制 ascii 字符(兩數字) 065 即 A字符 107 CTRL-V x41 插入 16進制 ascii 字符(三數字) x41 即 A字符 108 CTRL-V o101 插入 8進制 ascii 字符(三數字) o101 即 A字符 109 CTRL-V u1234 插入 16進制 unicode 字符(四數字) 110 CTRL-V U12345678 插入 16進制 unicode 字符(八數字) 111 CTRL-K {ch1} {ch2} 插入 digraph(見 :h digraph),快速輸入日文或符號等 112 113 114 ############################################################################## 115 # 文本編輯 116 ############################################################################## 117 118 r 替換當前字符 119 R 進入替換模式,直至 ESC 離開 120 s 替換字符(刪除光標處字符,並進入插入模式,前可接數量) 121 S 替換行(刪除當前行,並進入插入模式,前可接數量) 122 cc 改寫當前行(刪除當前行並進入插入模式),同 S 123 cw 改寫光標開始處的當前單詞 124 ciw 改寫光標所處的單詞 125 caw 改寫光標所處的單詞,並且包括前后空格(如果有的話) 126 c0 改寫到行首 127 c^ 改寫到行首(第一個非零字符) 128 c$ 改寫到行末 129 C 改寫到行尾(同c$) 130 ci" 改寫雙引號中的內容 131 ci' 改寫單引號中的內容 132 cib 改寫小括號中的內容 133 cab 改寫小括號中的內容(包含小括號本身) 134 ci) 改寫小括號中的內容 135 ci] 改寫中括號中內容 136 ciB 改寫大括號中內容 137 caB 改寫大括號中的內容(包含大括號本身) 138 ci} 改寫大括號中內容 139 cit 改寫 xml tag 中的內容 140 cis 改寫當前句子 141 c2w 改寫下兩個單詞 142 ct( 改寫到小括號前 143 x 刪除當前字符,前面可以接數字,3x代表刪除三個字符 144 X 向前刪除字符 145 dd 刪除當前行 146 d0 刪除到行首 147 d^ 刪除到行首(第一個非零字符) 148 d$ 刪除到行末 149 D 刪除到行末(同 d$) 150 dw 刪除當前單詞 151 diw 刪除光標所處的單詞 152 daw 刪除光標所處的單詞,並包含前后空格(如果有的話) 153 di" 刪除雙引號中的內容 154 di' 刪除單引號中的內容 155 dib 刪除小括號中的內容 156 di) 刪除小括號中的內容 157 dab 刪除小括號內的內容(包含小括號本身) 158 di] 刪除中括號中內容 159 diB 刪除大括號中內容 160 di} 刪除大括號中內容 161 daB 刪除大括號內的內容(包含大括號本身) 162 dit 刪除 xml tag 中的內容 163 dis 刪除當前句子 164 d2w 刪除下兩個單詞 165 dt( 刪除到小括號前 166 dgg 刪除到文件頭部 167 dG 刪除到文件尾部 168 d} 刪除下一段 169 d{ 刪除上一段 170 u 撤銷 171 U 撤銷整行操作 172 CTRL-R 撤銷上一次 u 命令 173 J 鏈接多行為一行 174 . 重復上一次操作 175 ~ 替換大小寫 176 g~iw 替換當前單詞的大小寫 177 gUiw 將單詞轉成大寫 178 guiw 將當前單詞轉成小寫 179 guu 全行轉為小寫 180 gUU 全行轉為大寫 181 << 減少縮進 182 >> 增加縮進 183 == 自動縮進 184 CTRL-A 增加數字 185 CTRL-X 減少數字 186 187 188 ############################################################################## 189 # 復制粘貼 190 ############################################################################## 191 192 p 粘貼到光標后 193 P 粘貼到光標前 194 v 開始標記 195 y 復制標記內容 196 V 開始按行標記 197 CTRL-V 開始列標記 198 y$ 復制當前位置到本行結束的內容 199 yy 復制當前行 200 Y 復制當前行,同 yy 201 yiw 復制當前單詞 202 3yy 復制光標下三行內容 203 v0 選中當前位置到行首 204 v$ 選中當前位置到行末 205 viw 選中當前單詞 206 vib 選中小括號內的東西 207 vi) 選中小括號內的東西 208 vi] 選中中括號內的東西 209 viB 選中大括號內的東西 210 vi} 選中大括號內的東西 211 vis 選中句子中的東西 212 vab 選中小括號內的東西(包含小括號本身) 213 va) 選中小括號內的東西(包含小括號本身) 214 va] 選中中括號內的東西(包含中括號本身) 215 vaB 選中大括號內的東西(包含大括號本身) 216 va} 選中大括號內的東西(包含大括號本身) 217 gv 重新選擇上一次選中的文字 218 :set paste 允許粘貼模式(避免粘貼時自動縮進影響格式) 219 :set nopaste 禁止粘貼模式 220 "?yy 復制當前行到寄存器 ? ,問號代表 0-9 的寄存器名稱 221 "?d3j 刪除光標下三行內容,並放到寄存器 ? ,問號代表 0-9 的寄存器名稱 222 "?p 將寄存器 ? 的內容粘貼到光標后 223 "?P 將寄存器 ? 的內容粘貼到光標前 224 :registers 顯示所有寄存器內容 225 :[range]y 復制范圍,比如 :20,30y 是復制20到30行,:10y 是復制第十行 226 :[range]d 刪除范圍,比如 :20,30d 是刪除20到30行,:10d 是刪除第十行 227 ddp 交換兩行內容:先刪除當前行復制到寄存器,並粘貼 228 "_[command] 使用[command]刪除內容,並且不進行復制(不會污染寄存器) 229 "*[command] 使用[command]復制內容到系統剪貼板(需要vim版本有clipboard支持) 230 231 232 ############################################################################## 233 # 文本對象 - c,d,v,y 等命令后接文本對象,一般為:<范圍 i/a><類型> 234 ############################################################################## 235 236 $ 到行末 237 0 到行首 238 ^ 到行首非空字符 239 tx 光標位置到字符 x 之前 240 fx 光標位置到字符 x 之處 241 iw 整個單詞(不包括分隔符) 242 aw 整個單詞(包括分隔符) 243 iW 整個 WORD(不包括分隔符) 244 aW 整個 WORD(包括分隔符) 245 is 整個句子(不包括分隔符) 246 ib 小括號內 247 ab 小括號內(包含小括號本身) 248 iB 大括號內 249 aB 大括號內(包含大括號本身) 250 i) 小括號內 251 a) 小括號內(包含小括號本身) 252 i] 中括號內 253 a] 中括號內(包含中括號本身) 254 i} 大括號內 255 a} 大括號內(包含大括號本身) 256 i' 單引號內 257 a' 單引號內(包含單引號本身) 258 i" 雙引號內 259 a" 雙引號內(包含雙引號本身) 260 2i) 往外兩層小括號內 261 2a) 往外兩層小括號內(包含小括號本身) 262 2f) 到第二個小括號處 263 2t) 到第二個小括號前 264 265 266 ############################################################################## 267 # 查找替換 268 ############################################################################## 269 270 /pattern 從光標處向文件尾搜索 pattern 271 ?pattern 從光標處向文件頭搜索 pattern 272 n 向同一方向執行上一次搜索 273 N 向相反方向執行上一次搜索 274 * 向前搜索光標下的單詞 275 # 向后搜索光標下的單詞 276 :s/p1/p2/g 將當前行中全替換p1為p2 277 :%s/p1/p2/g 將當前文件中全替換p1為p2 278 :%s/p1/p2/gc 將當前文件中全替換p1為p2,並且每處詢問你是否替換 279 :10,20s/p1/p2/g 將第10到20行中所有p1替換為p2 280 :%s/1\\2\/3/123/g 將“1\2/3” 替換為 “123”(特殊字符使用反斜杠標注) 281 :%s/\r//g 刪除 DOS 換行符 ^M 282 283 284 ############################################################################## 285 # VISUAL MODE - 由 v, V, CTRL-V 進入的可視模式 286 ############################################################################## 287 288 > 增加縮進 289 < 減少縮進 290 d 刪除高亮選中的文字 291 x 刪除高亮選中的文字 292 c 改寫文字,即刪除高亮選中的文字並進入插入模式 293 s 改寫文字,即刪除高亮選中的文字並進入插入模式 294 y 拷貝文字 295 ~ 轉換大小寫 296 o 跳轉到標記區的另外一端 297 O 跳轉到標記塊的另外一端 298 u 標記區轉換為小寫 299 U 標記區轉換為大寫 300 g CTRL-G 顯示所選擇區域的統計信息 301 <Esc> 退出可視模式 302 303 304 ############################################################################## 305 # 位置跳轉 306 ############################################################################## 307 308 CTRL-O 跳轉到上一個位置 309 CTRL-I 跳轉到下一個位置 310 CTRL-^ 跳轉到 alternate file (當前窗口的上一個文件) 311 % 跳轉到 {} () [] 的匹配 312 gd 跳轉到局部定義(光標下的單詞的定義) 313 gD 跳轉到全局定義(光標下的單詞的定義) 314 gf 打開名稱為光標下文件名的文件 315 [[ 跳轉到上一個頂層函數(比如C語言以大括號分隔) 316 ]] 跳轉到下一個頂層函數(比如C語言以大括號分隔) 317 [m 跳轉到上一個成員函數 318 ]m 跳轉到下一個成員函數 319 [{ 跳轉到上一處未匹配的 { 320 ]} 跳轉到下一處未匹配的 } 321 [( 跳轉到上一處未匹配的 ( 322 ]) 跳轉到下一處未匹配的 ) 323 [c 上一個不同處(diff時) 324 ]c 下一個不同處(diff時) 325 [/ 跳轉到 C注釋開頭 326 ]/ 跳轉到 C注釋結尾 327 `` 回到上次跳轉的位置 328 '' 回到上次跳轉的位置 329 `. 回到上次編輯的位置 330 '. 回到上次編輯的位置 331 332 333 ############################################################################## 334 # 文件操作 335 ############################################################################## 336 337 :w 保存文件 338 :w <filename> 按名稱保存文件 339 :e <filename> 打開文件並編輯 340 :saveas <filename> 另存為文件 341 :r <filename> 讀取文件並將內容插入到光標后 342 :r !dir 將 dir 命令的輸出捕獲並插入到光標后 343 :close 關閉文件 344 :q 退出 345 :q! 強制退出 346 :wa 保存所有文件 347 :cd <path> 切換 Vim 當前路徑 348 :pwd 顯示 Vim 當前路徑 349 :new 打開一個新的窗口編輯新文件 350 :enew 在當前窗口創建新文件 351 :vnew 在左右切分的新窗口中編輯新文件 352 :tabnew 在新的標簽頁中編輯新文件 353 354 355 ############################################################################## 356 # 已打開文件操作 357 ############################################################################## 358 359 :ls 查案緩存列表 360 :bn 切換到下一個緩存 361 :bp 切換到上一個緩存 362 :bd 刪除緩存 363 :b 1 切換到1號緩存 364 :b abc 切換到文件名為 abc 開頭的緩存 365 :badd <filename> 將文件添加到緩存列表 366 :set hidden 設置隱藏模式(未保存的緩存可以被切換走,或者關閉) 367 :set nohidden 關閉隱藏模式(未保存的緩存不能被切換走,或者關閉) 368 n CTRL-^ 切換緩存,先輸入數字的緩存編號,再按 CTRL + 6 369 370 371 ############################################################################## 372 # 窗口操作 373 ############################################################################## 374 375 :sp <filename> 上下切分窗口並在新窗口打開文件 filename 376 :vs <filename> 左右切分窗口並在新窗口打開文件 filename 377 CTRL-W s 上下切分窗口 378 CTRL-W v 左右切分窗口 379 CTRL-W w 循環切換到下一個窗口 380 CTRL-W W 循環切換到上一個窗口 381 CTRL-W p 跳到上一個訪問過的窗口 382 CTRL-W c 關閉當前窗口 383 CTRL-W o 關閉其他窗口 384 CTRL-W h 跳到左邊的窗口 385 CTRL-W j 跳到下邊的窗口 386 CTRL-W k 跳到上邊的窗口 387 CTRL-W l 跳到右邊的窗口 388 CTRL-W + 增加當前窗口的行高,前面可以加數字 389 CTRL-W - 減少當前窗口的行高,前面可以加數字 390 CTRL-W < 減少當前窗口的列寬,前面可以加數字 391 CTRL-W > 增加當前窗口的列寬,前面可以加數字 392 CTRL-W = 讓所有窗口寬高相同 393 CTRL-W H 將當前窗口移動到最左邊 394 CTRL-W J 將當前窗口移動到最下邊 395 CTRL-W K 將當前窗口移動到最上邊 396 CTRL-W L 將當前窗口移動到最右邊 397 CTRL-W x 交換窗口 398 CTRL-W f 在新窗口中打開名為光標下文件名的文件 399 CTRL-W gf 在新標簽頁中打開名為光標下文件名的文件 400 CTRL-W R 旋轉窗口 401 CTRL-W T 將當前窗口移到新的標簽頁中 402 CTRL-W P 跳轉到預覽窗口 403 CTRL-W z 關閉預覽窗口 404 CTRL-W _ 縱向最大化當前窗口 405 CTRL-W | 橫向最大化當前窗口 406 407 408 ############################################################################## 409 # 標簽頁 410 ############################################################################## 411 412 :tabs 顯示所有標簽頁 413 :tabe <filename> 在新標簽頁中打開文件 filename 414 :tabn 下一個標簽頁 415 :tabp 上一個標簽頁 416 :tabc 關閉當前標簽頁 417 :tabo 關閉其他標簽頁 418 :tabn n 切換到第n個標簽頁,比如 :tabn 3 切換到第三個標簽頁 419 :tabm n 標簽移動 420 :tabfirst 切換到第一個標簽頁 421 :tablast 切換到最后一個標簽頁 422 :tab help 在標簽頁打開幫助 423 :tab drop <file> 如果文件已被其他標簽頁和窗口打開則跳過去,否則新標簽打開 424 :tab split 在新的標簽頁中打開當前窗口里的文件 425 :tab ball 將緩存中所有文件用標簽頁打開 426 :set showtabline=? 設置為 0 就不顯示標簽頁標簽,1會按需顯示,2會永久顯示 427 ngt 切換到第n個標簽頁,比如 2gt 將會切換到第二個標簽頁 428 gt 下一個標簽頁 429 gT 上一個標簽頁 430 431 432 ############################################################################## 433 # 書簽 434 ############################################################################## 435 436 :marks 顯示所有書簽 437 ma 保存當前位置到書簽 a ,書簽名小寫字母為文件內,大寫全局 438 'a 跳轉到書簽 a所在的行 439 `a 跳轉到書簽 a所在位置 440 `. 跳轉到上一次編輯的行 441 'A 跳轉到全文書簽 A 442 [' 跳轉到上一個書簽 443 ]' 跳轉到下一個書簽 444 '< 跳到上次可視模式選擇區域的開始 445 '> 跳到上次可視模式選擇區域的結束 446 447 448 ############################################################################## 449 # 常用設置 450 ############################################################################## 451 452 :set nocompatible 設置不兼容原始 vi 模式(必須設置在最開頭) 453 :set bs=? 設置BS鍵模式,現代編輯器為 :set bs=eol,start,indent 454 :set sw=4 設置縮進寬度為 4 455 :set ts=4 設置制表符寬度為 4 456 :set noet 設置不展開 tab 成空格 457 :set et 設置展開 tab 成空格 458 :set winaltkeys=no 設置 GVim 下正常捕獲 ALT 鍵 459 :set nowrap 關閉自動換行 460 :set ttimeout 允許終端按鍵檢測超時(終端下功能鍵為一串ESC開頭的掃描碼) 461 :set ttm=100 設置終端按鍵檢測超時為100毫秒 462 :set term=? 設置終端類型,比如常見的 xterm 463 :set ignorecase 設置搜索是否忽略大小寫 464 :set smartcase 智能大小寫,默認忽略大小寫,除非搜索內容里包含大寫字母 465 :set list 設置顯示制表符和換行符 466 :set number 設置顯示行號,禁止顯示行號可以用 :set nonumber 467 :set relativenumber 設置顯示相對行號(其他行與當前行的距離) 468 :set paste 進入粘貼模式(粘貼時禁用縮進等影響格式的東西) 469 :set nopaste 結束粘貼模式 470 :set spell 允許拼寫檢查 471 :set hlsearch 設置高亮查找 472 :set ruler 總是顯示光標位置 473 :set incsearch 查找輸入時動態增量顯示查找結果 474 :set insertmode Vim 始終處於插入模式下,使用 ctrl-o 臨時執行命令 475 :set all 列出所有選項設置情況 476 :syntax on 允許語法高亮 477 :syntax off 禁止語法高亮 478 479 480 ############################################################################## 481 # 幫助信息 482 ############################################################################## 483 484 :h tutor 入門文檔 485 :h quickref 快速幫助 486 :h index 查詢 Vim 所有鍵盤命令定義 487 :h summary 幫助你更好的使用內置幫助系統 488 :h CTRL-H 查詢普通模式下 CTRL-H 是干什么的 489 :h i_CTRL-H 查詢插入模式下 CTRL-H 是干什么的 490 :h i_<Up> 查詢插入模式下方向鍵上是干什么的 491 :h pattern.txt 正則表達式幫助 492 :h eval 腳本編寫幫助 493 :h function-list 查看 VimScript 的函數列表 494 :h windows.txt 窗口使用幫助 495 :h tabpage.txt 標簽頁使用幫助 496 :h +timers 顯示對 +timers 特性的幫助 497 :h :! 查看如何運行外部命令 498 :h tips 查看 Vim 內置的常用技巧文檔 499 :h set-termcap 查看如何設置按鍵掃描碼 500 :viusage NORMAL 模式幫助 501 :exusage EX 命令幫助 502 :version 顯示當前 Vim 的版本號和特性 503 504 505 ############################################################################## 506 # 外部命令 507 ############################################################################## 508 509 :!ls 運行外部命令 ls,並等待返回 510 :r !ls 將外部命令 ls 的輸出捕獲,並插入到光標后 511 :w !sudo tee % sudo以后保存當前文件 512 :call system('ls') 調用 ls 命令,但是不顯示返回內容 513 :!start notepad Windows 下啟動 notepad,最前面可以加 silent 514 :sil !start cmd Windows 下當前目錄打開 cmd 515 :%!prog 運行文字過濾程序,如整理 json格式 :%!python -m json.tool 516 517 518 ############################################################################## 519 # Quickfix 窗口 520 ############################################################################## 521 522 :copen 打開 quickfix 窗口(查看編譯,grep等信息) 523 :copen 10 打開 quickfix 窗口,並且設置高度為 10 524 :cclose 關閉 quickfix 窗口 525 :cfirst 跳到 quickfix 中第一個錯誤信息 526 :clast 跳到 quickfix 中最后一條錯誤信息 527 :cc [nr] 查看錯誤 [nr] 528 :cnext 跳到 quickfix 中下一個錯誤信息 529 :cprev 跳到 quickfix 中上一個錯誤信息 530 531 532 ############################################################################## 533 # 拼寫檢查 534 ############################################################################## 535 536 :set spell 打開拼寫檢查 537 :set nospell 關閉拼寫檢查 538 ]s 下一處錯誤拼寫的單詞 539 [s 上一處錯誤拼寫的單詞 540 zg 加入單詞到拼寫詞表中 541 zug 撤銷上一次加入的單詞 542 z= 拼寫建議 543 544 545 ############################################################################## 546 # 代碼折疊 547 ############################################################################## 548 549 za 切換折疊 550 zA 遞歸切換折疊 551 zc 折疊光標下代碼 552 zC 折疊光標下所有代碼 553 zd 刪除光標下折疊 554 zD 遞歸刪除所有折疊 555 zE 刪除所有折疊 556 zf 創建代碼折疊 557 zF 指定行數創建折疊 558 zi 切換折疊 559 zm 所有代碼折疊一層 560 zr 所有代碼打開一層 561 zM 折疊所有代碼,設置 foldlevel=0,設置 foldenable 562 zR 打開所有代碼,設置 foldlevel 為最大值 563 zn 折疊 none,重置 foldenable 並打開所有代碼 564 zN 折疊 normal,重置 foldenable 並恢復所有折疊 565 zo 打開一層代碼 566 zO 打開光標下所有代碼折疊 567 568 569 ############################################################################## 570 # 宏錄制 571 ############################################################################## 572 573 qa 開始錄制名字為 a 的宏 574 q 結束錄制宏 575 @a 播放名字為 a 的宏 576 @@ 播放上一個宏 577 @: 重復上一個ex命令(即冒號命令) 578 579 580 ############################################################################## 581 # 其他命令 582 ############################################################################## 583 584 CTRL-X CTRL-F 插入模式下文件路徑補全 585 CTRL-X CTRL-O 插入下 Omnifunc 補全 586 CTRL-X CTRL-N 插入模式下關鍵字補全 587 CTRL-X CTRL-E 插入模式下向上滾屏 588 CTRL-X CTRL-Y 插入模式下向下滾屏 589 CTRL-E 向上滾屏 590 CTRL-Y 向下滾屏 591 CTRL-G 顯示正在編輯的文件名,以及大小和位置信息 592 g CTRL-G 顯示文件的:大小,字符數,單詞數和行數,可視模式下也可用 593 zz 調整光標所在行到屏幕中央 594 zt 調整光標所在行到屏幕上部 595 zb 調整光標所在行到屏幕下部 596 ga 顯示光標下字符的 ascii 碼或者 unicode 編碼 597 g8 顯示光標下字符的 utf-8 編碼字節序 598 gi 回到上次進入插入的地方,並切換到插入模式 599 K 查詢光標下單詞的幫助 600 ZZ 保存文件(如果有改動的話),並關閉窗口 601 ZQ 不保存文件關閉窗口 602 CTRL-PgUp 上個標簽頁,GVim OK,部分終端軟件需設置對應鍵盤碼 603 CTRL-PgDown 下個標簽頁,GVim OK,部分終端軟件需設置對應鍵盤碼 604 CTRL-R CTRL-W 命令模式下插入光標下單詞 605 CTRL-INSERT 復制到系統剪貼板(GVIM) 606 SHIFT-INSERT 粘貼系統剪貼板的內容(GVIM) 607 :set ff=unix 設置換行為 unix 608 :set ff=dos 設置換行為 dos 609 :set ff? 查看換行設置 610 :set nohl 清除搜索高亮 611 :set termcap 查看會從終端接收什么以及會發送給終端什么命令 612 :set guicursor= 解決 SecureCRT/PenguiNet 中 NeoVim 局部奇怪字符問題 613 :set t_RS= t_SH= 解決 SecureCRT/PenguiNet 中 Vim8.0 終端功能奇怪字符 614 :set fo+=a 開啟文本段的實時自動格式化 615 :earlier 15m 回退到15分鍾前的文件內容 616 :.!date 在當前窗口插入時間 617 :%!xxd 開始二進制編輯 618 :%!xxd -r 保存二進制編輯 619 :r !curl -sL {URL} 讀取 url 內容添加到光標后 620 :g/^\s*$/d 刪除空行 621 :g/green/d 刪除所有包含 green 的行 622 :v/green/d 刪除所有不包含 green 的行 623 :g/gladiolli/# 搜索單詞打印結果,並在結果前加上行號 624 :g/ab.*cd.*efg/# 搜索包含 ab,cd 和 efg 的行,打印結果以及行號 625 :v/./,/./-j 壓縮空行 626 :Man bash 在 Vim 中查看 man,先調用 :runtime! ftplugin/man.vim 激活 627 /fred\|joe 搜索 fred 或者 joe 628 /\<\d\d\d\d\> 精確搜索四個數字 629 /^\n\{3} 搜索連續三個空行 630 631 632 ############################################################################## 633 # Plugin - https://github.com/tpope/vim-commentary 634 ############################################################################## 635 636 gcc 注釋當前行 637 gc{motion} 注釋 {motion} 所標注的區域,比如 gcap 注釋整段 638 gci{ 注釋大括號內的內容 639 gc 在 Visual Mode 下面按 gc 注釋選中區域 640 :7,17Commentary 注釋 7 到 17 行 641 642 643 ############################################################################## 644 # Plugin - https://github.com/junegunn/vim-easy-align 645 ############################################################################## 646 647 :EasyAlign = 以第一個匹配的=為中心對齊 648 :EasyAlign *= 匹配並且對齊所有= 649 650 651 ############################################################################## 652 # Plugin - https://github.com/tpope/vim-unimpaired 653 ############################################################################## 654 655 [space 向上插入空行 656 ]space 向下插入空行 657 [e 替換當前行和上一行 658 ]e 替換當前行和下一行 659 [x XML 編碼 660 ]x XML 解碼 661 [u URL 編碼 662 ]u URL 解碼 663 [y C 字符串編碼 664 ]y C 字符串解碼 665 [q 上一個 quickfix 錯誤 666 ]q 下一個 quickfix 錯誤 667 [Q 第一個 quickfix 錯誤 668 ]Q 最后一個 quickfix 錯誤 669 [f 切換同目錄里上一個文件 670 ]f 切換同目錄里下一個文件 671 [os 設置 :set spell 672 ]os 設置 :set nospell 673 =os 設置 :set invspell 674 [on 顯示行號 675 ]on 關閉行號 676 [ol 顯示回車和制表符 :set list 677 ]ol 不顯示回車和制表符 :set nolist 678 [b 緩存切換到上一個文件,即 :bp 679 ]b 緩存切換到下一個文件,即 :bn 680 [B 緩存切換到第一個文件,即 :bfirst 681 ]B 緩存切換到最后一個文件,即 :blast 682 683 684 ############################################################################## 685 # Plugin - https://github.com/skywind3000/asyncrun.vim 686 ############################################################################## 687 688 :AsyncRun ls 異步運行命令 ls 結果輸出到 quickfix 使用 :copen 查看 689 :AsyncRun -raw ls 異步運行命令 ls 結果不匹配 errorformat 690 691 692 ############################################################################## 693 # Plugin - https://github.com/gaving/vim-textobj-argument 694 ############################################################################## 695 696 cia 改寫函數參數 697 caa 改寫函數參數(包括逗號分隔) 698 dia 刪除函數參數 699 daa 刪除函數參數(包括逗號分隔) 700 via 選取函數參數 701 vaa 選取函數參數(包括逗號分隔) 702 yia 復制函數參數 703 yaa 復制函數參數(包括逗號分隔) 704 705 706 ############################################################################## 707 # 網絡資源 708 ############################################################################## 709 710 最新版本 https://github.com/vim/vim 711 Windows 最新版 https://github.com/vim/vim-win32-installer/releases 712 插件瀏覽 http://vimawesome.com 713 reddit https://www.reddit.com/r/vim/ 714 正確設置 ALT/BS 鍵 http://www.skywind.me/blog/archives/2021 715 視頻教程 http://vimcasts.org/ 716 中文幫助 http://vimcdoc.sourceforge.net/doc/help.html 717 中文版入門到精通 https://github.com/wsdjeg/vim-galore-zh_cn 718 五分鍾腳本入門 http://www.skywind.me/blog/archives/2193 719 腳本精通 http://learnvimscriptthehardway.stevelosh.com/ 720 中文腳本幫助 vimcdoc.sourceforge.net/doc/eval.html 721 十六年使用經驗 http://zzapper.co.uk/vimtips.html 722 配色方案 http://vimcolors.com/ 723 724 725 ############################################################################## 726 # TIPS 727 ############################################################################## 728 729 - 永遠不要用 CTRL-C 代替 <ESC> 完全不同的含義,容易錯誤中斷運行的后台腳本 730 - 很多人使用 CTRL-[ 代替 <ESC>,左手小指 CTRL,右手小指 [ 熟練后很方便 731 - 某些終端中使用 Vim 8 內嵌終端如看到奇怪字符,使用 :set t_RS= t_SH= 解決 732 - 某些終端中使用 NeoVim 如看到奇怪字符,使用 :set guicursor= 解決 733 - 多使用 ciw, ci[, ci", ci( 以及 diw, di[, di", di( 命令來快速改寫/刪除文本 734 - 在行內左右移動光標時,多使用w b e或W B E,而不是h l或方向鍵,這樣會快很多 735 - SHIFT 相當於移動加速鍵, w b e 移動光標很慢,但是 W B E 走的很快 736 - 自己要善於總結新技巧,比如移動到行首非空字符時用 0w 命令比 ^ 命令更容易輸入 737 - 在空白行使用 dip 命令可以刪除所有臨近的空白行,viw 可以選擇連續空白 738 - 縮進時使用 >8j >} <ap >ap =i} == 會方便很多 739 - 插入模式下,當你發現一個單詞寫錯了,應該多用 CTRL-W 這比 <BackSpace> 快 740 - y d c 命令可以很好結合 f t 和 /X 比如 dt) 和 y/end<cr> 741 - c d x 命令會自動填充寄存器 "1 到 "9 , y 命令會自動填充 "0 寄存器 742 - 用 v 命令選擇文本時,可以用 o 掉頭選擇,有時很有用 743 - 寫文章時,可以寫一段代碼塊,然后選中后執行 :!python 代碼塊就會被替換成結果 744 - 搜索后經常使用 :nohl 來消除高亮,使用很頻繁,可以 map 到 <BackSpace> 上 745 - 搜索時可以用 CTRL-R CTRL-W 插入光標下的單詞,命令模式也能這么用 746 - 映射按鍵時,應該默認使用 noremap ,只有特別需要的時候使用 map 747 - 當你覺得做某事很低效時,你應該停下來,u u u u 然后思考正確的高效方式來完成 748 - 用 y復制文本后,命令模式中 CTRL-R 然后按雙引號 0 可以插入之前復制內容 749 - Windows 下的 GVim 可以設置 set rop=type:directx,renmode:5 增強顯示 750 751 752 ############################################################################## 753 # References 754 ############################################################################## 755 756 https://github.com/groenewege/vimrc/blob/master/vim_cheat_sheet.txt 757 http://blog.g-design.net/post/4789778607/vim-cheat-sheet 758 http://www.keyxl.com/aaa8263/290/VIM-keyboard-shortcuts.htm 759 http://jmcpherson.org/editing.html 760 http://www.fprintf.net/vimCheatSheet.html 761 http://www.ouyaoxiazai.com/article/24/654.html 762 http://bbs.it-home.org/thread-80794-1-1.html 763 http://www.lpfrx.com/wp-content/uploads/2008/09/vi.jpg 764 http://michael.peopleofhonoronly.com/vim/ 765 https://github.com/hobbestigrou/vimtips-fortune/blob/master/fortunes/vimtips 766 https://github.com/glts/vim-cottidie/blob/master/autoload/cottidie/tips 767 768 769 # vim: set ts=4 sw=4 tw=0 noet noautoindent fdm=manual :
四、gVim記憶圖(搬運)



五、代碼片段
安裝和配置好gVim后,在Program Files (x86)\Vim目錄下有個“_vimrc”文件,雙擊選擇gVim軟件打開,在里面添加代碼片段就行了。如果做模板時就打開了一個.v文件,保存后,在那個.v文件中是無法馬上使用剛剛添加的代碼片段的,得關閉重新打開才行。代碼片段格式如下:

“ 雙引號是注釋,相當於我們常用的 // ,:ab是命令,sx1是代碼片段的調出名稱,然后就是模板了。所以格式是 ab: 名稱 代碼,注意一下空格符。
編寫模板程序時可以放心的打空格了。但是注意一點,這里不能按Enter鍵,如果要達到程序換行的目的,用<Enter>就行了。因為安裝時配置好了Verilog的使用,所以模板里的程序被調出時會按Verilog語法自動對齊。上圖的模板在用gVim正常寫代碼時,輸入zh2按Enter鍵即可出現模板,如下所示:

將自己常用的代碼片段都設置進去,以后寫代碼就方便多啦!
六、gVim中文文檔
https://github.com/yianwillis/vimcdoc/releases
七、出現過的問題
1.打開文件時下方出現紅色警告:E576: viminfo: 缺少 '>' 位於行:
解決辦法:刪除C:\Users\lenovo\_viminfo
親測有效!
