PTT Editor 板看到的問題:如何搜尋多行文字? 能不能 Visual 選起來搜尋?
以前從 kana 的 vimrc 看到一個自訂函數 search_the_selected_text_literaly('n')
,這個設計是在 Visual mode 打 * 便能尋找選取的文字。
剛剛發現,處理一下換行字元就能支援多行 pattern 了,具體為
substitute(pattern, '\V\n', '\\n', 'g')
。
成品
" Ref: kana - https://github.com/kana/config vnoremap * :<C-U>set hlsearch<CR>:call <SID>search_selected_text_literaly('n')<CR> vnoremap # :<C-U>set hlsearch<CR>:call <SID>search_selected_text_literaly('N')<CR> function! s:search_selected_text_literaly(search_command) call SaveReg('0') call SaveReg('"') normal! gvy let pattern = escape(@0, '\') let pattern = substitute(pattern, '\V\n', '\\n', 'g') let @/ = pattern call histadd('/', '\V' . pattern) execute 'normal!' a:search_command let v:searchforward = a:search_command ==# 'n' call RestoreReg('0') call RestoreReg('"') endfunction
註:SaveReg
和 RestoreReg
是用來備份 register 的自訂函數,此處不重要,就不寫了。