代码之家  ›  专栏  ›  技术社区  ›  user

vim中精确的多行字符串搜索

vim
  •  1
  • user  · 技术社区  · 8 年前

    我有缓冲器。在该缓冲区中存在跨越多个行的字符串:

    asdf
    qrughatuxlnjtzu
    ... tens more lines...
    

    我的光标下有一个这个字符串的实例。我想找 其他 该多行字符串在同一缓冲区中的实例,无需手动将所述多行字符串的重要部分复制/编辑到命令缓冲区中(注意,用其等效regex替换换行是重要的编辑)。

    我试过用 How do I search for the selected text? (可视选择->拖动->命令缓冲区)+ Exact string match in vim? (Like 'regex-off' mode in less.) (逐字搜索),但这些方法似乎不适用于多行。

    如何在vim中对所选字符串执行精确的多行搜索?

    3 回复  |  直到 8 年前
        1
  •  2
  •   Fabius Wiesner    8 年前
    nnoremap <your keys> :<c-u>let @/=@"<cr>gvy:let [@/,@"]=[@",@/]<cr>/\V<c-r>=substitute(escape(@/,'/\'),'\n','\\n','g')<cr><cr>
    

    然后用视觉方式选择线条 V (或 v 部分线路),然后点击 <ESC> 和 <your keys> 是的。

    来源是 here (见彼得·林克的回答)。

        2
  •  0
  •   B.G.    8 年前

    你可以用 \n 作为换行符:

    /asdf\nqrughatuxlnjtzu
    
        3
  •  0
  •   Spangen Ashraf Maher    8 年前

    根据文件中的换行符,您也可以在搜索中包含行尾字符,

    例如,对于可以搜索的unix行结尾

    /asdf\nqrughatuxlnjtzu$
    

    对于您将使用的windows行结尾 \r\n 相反。

    这个 $ 上面的字符将搜索到行尾,因此将排除任何行尾,但这对于避免在诸如

    asdf
    qrughatuxlnjtzuNotToBeMatched
    

    另见 http://vim.wikia.com/wiki/Search_across_multiple_lines