在Vim中浏览一系列文件

时间:2011-10-27 20:52:55

标签: vim editor

修改代码时,我发现我经常需要经过几十个文件才能更改最简单的内容。例如,假设我有一个函数pretty_print,我将其更改为符合驼峰案例prettyPrint。现在我想查看文件apple1.jsapple99.js,可能还有一些orange.js个文件。在Vim中有快速的方法吗?

注意:这不是我可以自动化的东西,我实际上需要自己进入并修改代码。

我知道我可以做:b <fileName>,但是,虽然它支持名称完成/模式匹配,但我认为这种模式不会延续。

例如,如果我这样做

:b apple*.js

我点击标签,我会得到

:b apple1.js

但如果我重新访问该功能(通过按: + upArrow或q:),那么如果我点击标签,则不会转到

:b apple2.js

我想要的是指定像

这样的东西
:b apple*.js

编辑文件,然后当我输入:w时,它会移动到下一个缓冲区。我宁愿留在Vim,我不想出来,输入vim apple*.js,回到Vim,然后使用:x命令。我意识到这是有效的,但我仍然需要所有其他文件以防万一,例如在标签之间跳转。

3 个答案:

答案 0 :(得分:1)

从这开始:

:set hidden "required because `argdo` won't load next argument into current window
            "if there is a modified buffer displayed inside this window
:args apple*.js
:argdo %s/\<pretty_print\>/prettyPrint/g
:rewind " if you want to proofread all files then use :next and :prev
:wa

您最好对文件进行版本控制,并在进行此类更改后进行差异处理。

答案 1 :(得分:1)

Wikia的BufSel功能是否符合您的需求?

  

如果您希望能够从列表中选择缓冲区   部分匹配可以使用以下功能。它会跳转到   匹配缓冲区(如果只找到一个匹配项,或者有多个匹配项)   匹配它将打印出匹配缓冲区的列表   命令行区域,并允许您选择一个匹配的缓冲区   按缓冲区编号。

function! BufSel(pattern)
  let bufcount = bufnr("$")
  let currbufnr = 1
  let nummatches = 0
  let firstmatchingbufnr = 0
  while currbufnr <= bufcount
    if(bufexists(currbufnr))
      let currbufname = bufname(currbufnr)
      if(match(currbufname, a:pattern) > -1)
        echo currbufnr . ": ". bufname(currbufnr)
        let nummatches += 1
        let firstmatchingbufnr = currbufnr
      endif
    endif
    let currbufnr = currbufnr + 1
  endwhile
  if(nummatches == 1)
    execute ":buffer ". firstmatchingbufnr
  elseif(nummatches > 1)
    let desiredbufnr = input("Enter buffer number: ")
    if(strlen(desiredbufnr) != 0)
      execute ":buffer ". desiredbufnr
    endif
  else
    echo "No matching buffers"
  endif
endfunction

"Bind the BufSel() function to a user-command
command! -nargs=1 Bs :call BufSel("<args>")

答案 2 :(得分:1)

在这种情况下,对你来说最合适的解决方案可能是使用 集成在Vim中的grep功能。以下命令执行搜索 对于与通配符\<pretty_print\>匹配的文件中的模式apple*.js, 并在quickfix列表中存储模式出现的位置 允许轻松跳过所有比赛。

:vimgrep /\<pretty_print\>/ apple*.js

有关搜索的详细信息,请参阅quickfix列表 在文件中,请参阅my answer问题“Loading a set of files obtained via cmd-exec into Vim buffers”。

如果您只想打开与特定匹配的文件列表 通配符,将文件的名称加载到参数列表中

:args apple*.js

然后像往常一样使用:n:N在它们之间导航。