一、用拷貝的內容替換
當發生拼寫錯誤或者想要重命名標識符時,就需要用拷貝的內容來替換當前的名字。比如調用函數時寫錯了:
void letus_fuckit_with_vim(){ cout<<"great!";}let_fuckat_with_vom();
只需要先復制上面的函數名,再把光標切換到拼錯的詞首。然后按下viwp,就替換過來了:
void letus_fuckit_with_vim(){ cout<<"great!";}letus_fuckit_with_vim();
v進入可視模式,然后iw來選擇光標所在單詞,最后按下p來粘貼。iw表示inner word
,有用的搭配還有yiw, ciw等。
二、拷貝整個文件
當我們剛開始使用Vim時,大神會告訴我們如何拷貝整個文件:ggvGy, NB一點的大神會告訴我們:ggyG。現在告訴大家:
:%y
三、暫時離開插入模式
當我們處在insert
模式時,有時會希望在normal模式下執行某個命令再馬上回到insert
模式。 可能需要先按下<Esc>,執行命令,再按下i。
Vim為此提供了方便:
當我們需要暫時離開insert模式并執行一個命令時,可以按下<c-o>
執行完后續命令后Vim自動回到insert模式。
例如:
:map <F5> :! g++ % && ./a.out <CR>:imap <F5> <c-o><F5>
四、字符查找
Vim光標跳轉雖然有數十種快捷鍵,但你有沒有發現當我們碰到長單詞時會很無力,比如我想把下面的description替換為keywords:
tmystr_meta_description
是不是要不斷地敲l(或者敲幾次{num}l),其實可以用單詞查找功能。只需要輸入fd便可以查找當前行的下一個字母d。大寫的F可以反向查找。
五、搜索當前詞
按下*即可搜索當前光標所在的詞(word),再次按下搜索下一個。 按下#搜索上一個。
*只匹配出現的單詞,對于中文沒有斷字。如果查找當前詞的所有字串,可以使用g*。
六、命令模式粘貼
如果希望全局查找替換當前光標所在的單詞,我們可能需要手動地在命令模式下敲出來: %s/foo/bar/g
。 但如果當前光標就在那個單詞上的話,可以在敲完%s/之后將它粘貼到命令里:
<Ctrl+R><Ctrl+W>
這是命令模式的<Ctrl+R>工具,用法還包括粘貼當前文件路徑: <Ctrl+R>%
。 更多用法請查看幫助: :help c_CTRL-R
。
七、段落跳轉
這個對中文用戶幾乎無用,但我們在編輯代碼文件時會很有用。()可以調到句首句尾,{}可以調到段首段尾。
八、選區頭尾跳轉
Emmet插件可以進行HTML的標簽匹配,你按下<c-y>d當前標簽首尾之間被選中。你想調到選中區域的尾部怎么辦? 按下o即可切換收尾,再次按下v就能回到Normal模式。
有木有特別想在匹配的括號間跳轉!按下%!
九、原生自動補全
如果你沒有使用任何Vim插件,Vim的自動補全是默認關閉的。在不引入插件的情況下Vim也可以啟用強大的自動補全,只需要設置:
filetype plugin onset omnifunc=syntaxcomplete#Complete
在任何時候,按下<c-x><c-o>
將會觸發自動補全。
參考: http://vim.wikia.com/wiki/Omni_completion
十、用搜索來選區
當你需要選擇一大段文字時,不妨先進入visual模式,再進行正則搜索。例如在markdown中,選擇某個##的內容可以這樣操作: 移動光標到要選中的##上,按下v進入visual模式,輸入/^## 匹配下一個二級標題,按下k回到上一行。
十一、拷貝當前文件名
使用:let @"=expand("%")
可以拷貝當前文件名,我們可以給這個命令設一個快捷鍵:
nnoremap yf :let @f=expand("%:t")<CR>nnoremap yp :let @p=expand("%:p")<CR>
其中yf拷貝當前文件名到寄存器f,yp拷貝完整文件路徑到寄存器p。然后分別按下"fp和"pp即可粘貼。
十二、大小寫不敏感搜索
可以在模式的任何位置加入/c來進行大小寫不敏感搜索,在任何位置加入/C來進行大小寫敏感搜索。 可以設置set ignorecase來默認進行大小寫不敏感搜索,同時可以設置set smartcase: 當模式包含大寫字母時忽略ignorecase設置。
總結
以上就是這篇文章的全部內容了,希望本文的這些小技巧能夠為大家的學習或者工作帶來一定的幫助,如果有疑問大家可以留言交流。
新聞熱點
疑難解答
圖片精選