hello/world
たとえば、それをヤンクして、他のインスタンスの検索に貼り付けたいと思いますhello/world
ヤンクしてから入力する/\v ctr-r 0
と、検索バーに全体hello/world
が配置されますが、実際には、hello
.
検索で貼り付け中に特殊文字を自動的にエスケープする方法はありますか?
hello/world
たとえば、それをヤンクして、他のインスタンスの検索に貼り付けたいと思いますhello/world
ヤンクしてから入力する/\v ctr-r 0
と、検索バーに全体hello/world
が配置されますが、実際には、hello
.
検索で貼り付け中に特殊文字を自動的にエスケープする方法はありますか?
あなたはこれに興味があるかもしれません:
" return a representation of the selected text
" suitable for use as a search pattern
function GetVisualSelection()
let old_reg = @a
normal! gv"ay
let raw_search = @a
let @a = old_reg
return substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap <leader>r :<C-u>%s/<C-r>=GetVisualSelection()<CR>/
上記とほぼ同じ戦略を使用しますが、少しクリーンで再利用可能な方法で使用します。
hello/world
ます。<leader>r
。:%s/hello\/world/
、次の操作を行う準備が整いました。</li>
<CR>
。これをvimrcファイルに追加すると、何かを視覚的に選択して*を押すと、エスケープ文字で検索されます
vnoremap <silent> * :<C-U>
\let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR>
\gvy/<C-R><C-R>=substitute(
\escape(@", '/\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR><CR>
\gV:call setreg('"', old_reg, old_regtype)<CR>
vnoremap <silent> # :<C-U>
\let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR>
\gvy?<C-R><C-R>=substitute(
\escape(@", '?\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR><CR>
\gV:call setreg('"', old_reg, old_regtype)<CR>