跳到一长串重复模式的末尾

时间:2012-07-18 14:10:17

标签: vim

我有一个大文件,其中包含许多共享相同模式的行,如下所示:

dbn.py:206 ... (some other text)  <-- I am here
dbn.py:206 ... (some other text)
...
(something I don't know)          <-- I want to jump here

Vim是否有快速跳转到dbp.py:206继承结束的地方?

3 个答案:

答案 0 :(得分:5)

/ ^\(dbn.py\)\@!

匹配第一行,该行不以转义括号内的文本开头。

如果您想快速访问此内容,可以添加一个vmap,它会将视觉上选定的文字拉出来并将其插入正确的位置(但首先使用escape(var, '/')将其删除。

试试这个vmap:vmap <leader>n "hy<Esc>/^\(<C-R>=escape(@h,'/')<CR>\)\@!<CR>
在视觉上选择要跳过的文本时按n,您应该放在下一行不以选择开头的位置。

答案 1 :(得分:1)

我只是编写一个函数来选择相同的行:

nnoremap vii :call SelectIdenticalLines()<CR>
fun! SelectIdenticalLines()
    let s = getline('.')
    let n = line('.')
    let i = n
    let j = n
    while getline(i)==s && i>0
        let i-=1
    endwhile

    while getline(j)==s && j<=line('$')
        let j+=1
    endwhile

    call cursor(i+1, 0)
    norm V
    call cursor(j-1, 0)
endfun

  • 键入 vii 以选择相同的行(随意更改键绑定)
  • 输入 zf 折叠它们。
  • 键入 za 以切换折叠

当你想挤出几条空线时很方便。 它在emacs中的作用类似于 C-x C-o

答案 2 :(得分:0)

一个选项是转到文件的底部并向后搜索您想要的最后一行,然后按下一行:

G ?^dbn\.py:206?+1