搜索一个被拉动的文本并自动转义特殊字符

时间:2013-10-03 09:49:03

标签: vim

例如,我想抓住hello/world并将其粘贴到搜索其他hello/world

的实例中

我尝试过yanking,然后输入/\v ctr-r 0并在搜索栏中放置整个hello/world但实际上,它只搜索了hello

有没有办法在搜索粘贴期间自动转义特殊字符?

2 个答案:

答案 0 :(得分:3)

您可能对此感兴趣:

" 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>/

它使用或多或少与上述相同的策略,但采用稍微清洁和可重复使用的方式。

  1. 选择hello/world
  2. 点击<leader>r
  3. 命令行填充:%s/hello\/world/,准备就绪......
  4. 输入替换文字和...
  5. 点击<CR>

答案 1 :(得分:0)

将其添加到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>

source