如何有效地在Vim中处理多个文件?
我已经开始使用Vim开发Perl脚本,并且开始发现它非常强大。
我喜欢的一件事是例如可以一次打开多个文件。 vi main.pl maintenance.pl
,然后在它们之间跳转:
:n :prev
并查看打开哪个文件
:args
要添加文件,我可以说:
:n test.pl
我期望它将被添加到我的文件列表中,但是却清除了当前文件列表,当我键入:args
时,我只打开了test.pl
。
那么如何将文件添加和删除到我的args列表中?
解决方案
回答
Vim(但不是原始的Vi!)有一些选项卡,我发现(在许多情况下)这些选项卡比缓冲区更高级。我们可以说:tabe [filename]
在新标签页中打开文件。标签之间的循环是通过单击标签或者组合键[n] gt和gT来完成的。图形Vim甚至具有图形选项卡。
回答
为什么不使用选项卡(在Vim 7中引入)?
我们可以使用:tabn
和:tabp
在标签之间切换,
用:tabe <filepath>
可以添加一个新标签。并使用常规的:q
或者:wq
关闭标签。
如果将:tabn
和:tabp
映射到F7
/F8
键,则可以轻松地在文件之间切换。
如果没有那么多文件,或者我们没有Vim 7,我们也可以将屏幕分为多个文件::sp <filepath>
。然后,我们可以使用Ctrl + W键然后在要移动的方向上用箭头键在拆分屏幕之间进行切换(或者用箭头键替代,用w键代表下一个,而用W键代表上一个拆分屏幕)
回答
要添加到args列表中:
:argadd
要从args列表中删除:
:argdelete
在示例中,我们可以使用:argedit
test.pl将test.pl添加到args
列表中,然后一步编辑文件。
:help args
提供了更多细节和高级用法
回答
我认为我们可能使用了错误的命令来查看已打开的文件列表。
尝试执行:ls
来查看已打开的文件列表,我们将看到:
1 %a "./checkin.pl" line 1 2 # "./grabakamailogs.pl" line 1 3 "./grabwmlogs.pl" line 0 etc.
然后,我们可以通过列出的数字引用文件来跳出文件,例如
:3b
或者我们可以通过输入数字来拆分屏幕,但使用sb而不是b。
顺便说一句,%是指当前可见的文件,是备用文件。
我们可以通过按Ctrl + Shift 6轻松在这两个文件之间切换
编辑:像:ls
一样,我们可以使用:reg
来查看寄存器的当前内容,包括包含已删除内容的0-9寄存器。如果我们想重复使用先前删除的某些文本,此功能特别有用。
回答
我使用缓冲区命令:bn
(下一个缓冲区),:bp
(上一个缓冲区):buffers
(列出打开缓冲区):b <n>
(打开缓冲区n):bd
(删除缓冲区) 。 :e <filename>
只会打开一个新的缓冲区。
回答
清单
要查看当前缓冲区的列表,我使用:
:ls
开场
要打开一个新文件,我使用
:e ../myFile.pl
增强了制表符的完成效果(将set wildmenu
放入.vimrc
中)。
注意:我们还可以使用:find
来为我们搜索一组路径,但是我们需要首先自定义这些路径。
交换
要在所有打开的文件之间切换,我使用
:b myfile
具有增强的制表符完成功能(仍设置set wildmenu)。
注意::b#
选择最后访问的文件,因此我们可以使用它在两个文件之间快速切换。
使用视窗
Ctrl-W s和Ctrl-W v可以水平和垂直拆分当前窗口。我们还可以使用:split
和:vertical split
(:sp
和:vs
)
" Ctrl-W w"可在打开的窗口之间切换,而" Ctrl-W h"(或者" j"或者" k"或者" l")可浏览打开的窗口。
Ctrl-W c关闭当前窗口,Ctrl-W o关闭当前窗口以外的所有窗口。
以-o
或者-O
标志开头的vim会以自己的分割打开每个文件。
有了这些,我不需要Vim中的选项卡,我的手指可以找到我的缓冲区,而不是我的眼睛。
注意:如果希望所有文件都进入Vim的同一实例,请使用--remote-silent选项启动Vim。
回答
如果我们要使用多个缓冲区,我认为最重要的是
设为隐藏
这样,即使我们要更改的缓冲区中未保存的更改,也可以让我们切换缓冲区。
回答
在vim中使用多个文件时,我主要使用以下命令(打开约350个文件):
:b <部分文件名> <tab>
(跳转到缓冲区):bw
(缓冲区擦除,删除缓冲区):e <文件路径>
(编辑,打开一个新的缓冲区>pltags
-允许跳转到子程序/方法定义
回答
:ls
有关打开缓冲区的列表
:bp
前一个缓冲区:bn
下一个缓冲区:bn
(n
a number)移到第n个缓冲区:b <filename-part>
,带有制表符,可提供自动补全功能(太棒了!)
在某些版本的vim中," bn"和" bp"实际上分别是" bnext"和" bprevious"。标签自动完成在这种情况下很有用。
或者,当我们处于普通模式时,使用^
切换到我们正在处理的最后一个文件。
另外,我们可以保存vim的会话
:mksession! ~/today.ses
上面的命令将当前打开的文件缓冲区和设置保存到〜/ today.ses
。我们可以使用加载该会话
vim -S ~/today.ses
别忘了昨天我们从哪里离开。 ;)
回答
我使用多个设置为隐藏在我的〜/ .vimrc文件中的缓冲区。
迷你缓冲区资源管理器脚本也很不错,可以很好地紧凑地列出缓冲区。然后,:b1
或者:b2
......转到相应的缓冲区,或者使用迷你缓冲区浏览器并在缓冲区中使用Tab键。
回答
我为GVim和命令行vim使用相同的.vimrc文件。我倾向于在GVim中使用选项卡,在命令行vim中使用缓冲区,因此我设置了.vimrc以便于使用它们更加容易:
" Movement between tabs OR buffers nnoremap L :call MyNext()<CR> nnoremap H :call MyPrev()<CR> " MyNext() and MyPrev(): Movement between tabs OR buffers function! MyNext() if exists( '*tabpagenr' ) && tabpagenr('$') != 1 " Tab support && tabs open normal gt else " No tab support, or no tabs open execute ":bnext" endif endfunction function! MyPrev() if exists( '*tabpagenr' ) && tabpagenr('$') != '1' " Tab support && tabs open normal gT else " No tab support, or no tabs open execute ":bprev" endif endfunction
这掩盖了H和L的现有映射,但是它使文件之间的切换非常快捷和容易。只需按" H"代表下一个,按" L"代表上一个;无论我们使用制表符还是缓冲区,都将获得预期的结果。