在使用編輯器的過程當中,咱們會常常使用到搜索 / 替換,大部分編輯器能夠經過快捷鍵呼出搜索框來搜索 / 替換,經過選擇不一樣的選項能夠作到匹配大小寫,精準匹配,模糊匹配等等。那麼在vim中,這些操做該如何實現?本文將介紹在vim中經常使用的搜索文本,替換文本操做以及如何結合插件實現更強大的搜索。git
對於搜索當前打開文件,vim自帶搜索功能足以應對,在Normal modal下鍵入/
,便可進入搜索模式,此時輸入想要搜索的單詞而後回車,便可完成搜索,光標會跳到當前搜索到的第一個匹配的單詞。按下n
,光標跳到下一個匹配的單詞,按下N
(shift+n
)光標會跳到上一個匹配的單詞。github
除了在Normal modal下能夠鍵入/
開始搜索外,還能夠鍵入如下符號開始搜索:golang
?
:與/
相反,鍵入該符號後反向向上搜索*
:搜索當前光標所在單詞,例如:若是當前光標所在單詞是set
,則至關於鍵入/\<set\>
#
:搜索當前光標所在單詞,至關於鍵入?\<set\>
其中\<
是單詞界定符,表示只匹配單詞的開頭,/>
表示只匹配單詞的末尾vim
此外vim搜索還支持正則,例如輸入/se$
表示搜索以se
結尾的單詞,輸入/^se
表示搜索以se
開頭的單詞編輯器
默認狀況下,搜索的結果不會高亮,只是光標會跳到搜索到的單詞,若是想要高亮搜索結果,能夠在Normal modal下輸入:set hlsearch
,或者在.vimrc
文件中設置:函數
" search result heighligh, when enter `:noh` in command line , clean heightlight set hlsearch 複製代碼
這樣設置後,在搜索完成後,全部的匹配文本都會高亮,想要取消搜索結果的高亮能夠在Normal modal下輸入:nohlsearch
或其簡寫:noh
ui
在使用vim的搜索默認是大小寫不敏感的,若是想要讓vim搜索作到大小寫敏感,能夠在輸入想要搜索的單詞後面添加\C
,對應的若是使用\c
,則表示搜索大小寫不敏感。spa
或者直接在.vimrc
中添加設置:插件
" 開啓大小寫不敏感(默認值) set ignorecase " 開啓智能推測
set smartcase
複製代碼
開啓智能推測後,若是輸入的文本帶有大寫字母,vim會認爲你當前搜索是區分大小寫的,不然不區分大小寫。即開啓後,若是輸入:Set
,則只能搜索到Set
,可是若是輸入:set
,則能夠搜索到set
和Set
。命令行
對於替換當前打開文件中的文本,vim提供以下語法:
:{做用範圍}s/{目標字符}/{替換的字符}/{替換標誌}
複製代碼
做用範圍:用於指定替換的範圍,1,3
表示替換第一行至第三行,1,$
表示替換第一行到最後一行,也能夠直接用%
表示。 替換標誌(能夠組合使用):
具體的用法能夠查看下圖(摘自Reddit):
:%s/remember/me/n
命令不會替換任何東西。 只是告訴咱們若是咱們運行命令,受影響的行數。實際操做過程當中,在vim中運行該命令,顯示89 matches on 89 lines
:%s/remember/me/&
命令沒看明白作什麼用
有時候須要在整個項目中搜索文件或者文本,這類操做藉助插件更方便一些。
提及vim中搜索文件,就必定會想到大名鼎鼎的ctrlp.vim,但該插件早已再也不維護(最近一次提交是在2015年11月30日),那是否還有其餘替代插件呢?答案是有的,可使用fzf.vim。fzf.vim支持文件搜索,全局文本搜索,buffer搜索,git log搜索等,這裏只介紹最經常使用的全局文本搜索和文件搜索。
首先使用vim-plug安裝插件:
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
複製代碼
從以上安裝能夠看到要想使用fzf.vim,須要首先安裝fzf。
fzf是一款golang編寫的命令行模糊查找器,支持文件,命令等的模糊搜索。強烈建議使用,對於常常使用終端的同窗來講太方便了。
備註:
若是要安裝fzf,在macOS直接:brew install fzf
便可。若是經過brew
安裝過fzf,則vim-plug的配置以下:
Plug '/usr/local/opt/fzf'
Plug 'junegunn/fzf.vim'
複製代碼
安裝完成後在.vimrc
中添加以下配置:
" fzf " fzf use rg search config
let g:fzf_layout = { 'down': '~70%' }
command! -bang -nargs=* Rg
\ call fzf#vim#grep(
\ "rg --column --line-number --no-heading --color=always --smart-case "
\ .(len(<q-args>) > 0 ? <q-args>: '""'),
\ 1,
\ <bang>0 ? fzf#vim#with_preview({'options': '--delimiter : --nth 4..'}, 'up:60%')
\ : fzf#vim#with_preview({'options': '--delimiter : --nth 4..'}, 'right:50%:hidden', '?'),
\ <bang>0)
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, fzf#vim#with_preview(), <bang>0)
" fzf vim nnoremap <silent> <Leader>rg :Rg<CR> nnoremap <leader>b :Buffers<CR> nnoremap <C-p> :Files<CR> 複製代碼
關於fzf.vim的配置有幾點說明:
fzf_layout
用於設置調用fzf搜索的窗口位置以及大小,能夠設置left
、right
、down
、up
。fzf#vim#grep
函數,支持調用第三方搜索,接收參數:fzf#vim#grep(command, [has_column bool], [spec dict], [fullscreen bool])
command
:要運行的命令;has_column
:是否打印列號;spec
:展現預覽窗口;fullscreen
:是否全屏,<bang>0
是vim script,在vim命令中若是輸入!
則<bang>0
轉換成1,不然爲0;fzf#vim#with_preview
用於配置展現預覽窗口。配置好後在vim中輸入:Rg
就能夠啓動在整個項目搜索文本,:Files
在整個項目中搜索文件。以上配置就能夠知足咱們平常開發中的搜索/替換文本,搜索文件等經常使用功能了。