修改代码时,我发现我经常需要经过几十个文件才能更改最简单的内容。例如,假设我有一个函数pretty_print
,我将其更改为符合驼峰案例prettyPrint
。现在我想查看文件apple1.js
到apple99.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
命令。我意识到这是有效的,但我仍然需要所有其他文件以防万一,例如在标签之间跳转。
答案 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
在它们之间导航。