vim - vim如何有效地使用多个文件?

  显示原文与译文双语对照的内容

我已经开始使用Vim开发Perl脚本并开始发现它非常强大。

我喜欢的一件事是能够用 比如 vi main.pl maintenance.pl 同时打开多个文件,然后在它们之间跳转:

 
:n
:prev

 

查看哪个文件是打开

 
:args

 

要添加一个文件,我可以说:

 
:n test.pl

 

我将把它添加到我的文件列表中,但是它将清除我当前的文件列表,当我键入 :args 时,我只打开 test.pl

那么如何将文件添加到我的参数列表中?

时间:

为什么不使用制表符( 在 Vim 7中引入)? 你可以使用 :tabn:tabp 在选项卡之间进行 switch,使用 :tabe <filepath> 可以添加新的选项卡;使用常规 :q 或者 :wq 你可以关闭标签。 如果你将 :tabn:tabp 映射到你中七/F8 按键可以方便地在文件间 switch 。

如果没有多个文件或者你没有 Vim 7,你也可以将屏幕分割为多个文件: :sp <filepath> 。然后可以用 splitscreens之间 switch Ctrl + W 然后按相应的箭头键在所需移动方向( 也可以代替方向键,为下一步并为上一个 splitscreen WW )

列表

要查看当前缓冲区的列表,我使用:

 
:ls

 

正在打开

要打开一个新文件,我使用

 
:e. ./myFile.pl

 

使用增强的制表符补全( 将 set wildmenu 放入你的.vimrc 中) 。

注意。你也可以使用 :find 它会为你的一组路径寻优,但需要先来定制这些路径。


正在切换

要在所有打开的文件之间进行 switch,我使用

 
:b myfile

 

使用增强的制表符补全( set wildmenu 仍然) 。

注意::b# 选择最近访问过的文件,所以你可以在两个文件之间快速使用它。


使用 Windows

Ctrl-W sCtrl-W v 用于水平和垂直拆分当前窗口。 你也可以使用 :split:vertical split ( :sp:vs )

打开 Windows 和之间 Ctrl-W w 到 switch Ctrl-W h ( 或者 j 或者 k 或者 l ) 来浏览打开 Windows 。

Ctrl-W c 关闭当前窗口,Ctrl-W o 关闭除当前窗口之外的所有 Windows 。

使用 -o 或者 -o 标志启动vim将打开它自己的每个文件。


有了所有这些我不需要标签真空感应熔炼和我的手指找到我的缓冲区,而不是我的眼睛。

注意:如果希望所有文件都转到相同的Vim实例,使用 --remote-silent 选项启动 Vim 。

 
:ls

 

打开缓冲区列表

  • :bp 上一个缓冲区
  • :bn 下一个缓冲区
  • :bn ( n 一个数字) 移动到n 个缓冲区
  • :b <filename-part> 带tab-key提供 auto-completion ( ) !

在某些vim版本中,bnbp 分别是 bnextbprevious 。 选项卡auto-complete在这种情况下很有用。

或者当你处于正常模式时,使用 ^ 到你正在使用的最后一个文件。

另外,你可以保存vim的会话


:mksession! ~/today.ses

上面的命令将当前打开的文件缓冲区和设置保存到 ~/today.ses 。 你可以通过使用

 
vim -S ~/today.ses

 

记住你昨天离开的位置没有问题。 ; )

要添加到 args 列表: :argadd

要从 args 列表中删除: :argdelete

在你的示例中,可以使用 :argedit test.pl 将 test.pl 添加到 args 列表中,并在一个步骤中编辑该文件。

:help args 提供更多细节和高级用法

我使用缓冲命令- :bn ( 下一个缓冲区),:bp ( 上一个缓冲区) :buffers ( 列出打开的缓冲区) :b<n> ( 打开缓冲区n ) :bd ( 删除缓冲区) 。 :e <filename> 将只打开一个新缓冲区。

我认为你可能使用了错误的命令来查看你打开的文件列表。

尝试执行 :ls 查看已经打开的文件列表,你将看到:


 1 %a"./checkin.pl" line 1
 2 #"./grabakamailogs.pl" line 1
 3"./grabwmlogs.pl" line 0
 etc.

你可以通过引用这些文件的编号来跳过这些文件,比如: 3b

或者你可以通过输入数字来分割屏幕,而不是仅仅使用。

% 是指当前可见的文件,而 # 指的是替代文件。

你可以很容易地切换这两个文件之间通过按 Ctrl移位6

编辑:像 :ls 一样,你可以使用 :reg 查看你的寄存器的当前内容,包括包含你已经删除内容的0 -9寄存器。 如果你想重用以前删除的一些文本,这一点尤其有用。

Vim ( 但不是原来的Vi ) 有标签,我发现( 在许多环境中) 优于缓冲区。 你可以说 :tabe [filename] 在新标签中打开一个文件。 选项卡之间的循环通过单击选项卡或者组合键 [ n ] gtgt 完成。 图形Vim甚至有图形化标签。

:e:badd 这样的东西只接受一个参数,因此以下将失败


:e foo.txt bar.txt
:e/foo/bar/*.txt
:badd/foo/bar/*

如果要在vim中添加多个文件,请使用 arga[dd]


:arga foo.txt bar.txt
:arga/foo/bar/*.txt
:argadd/foo/bar/*

于GVim和相关 命令行 vim,我使用相同的. vimrc file. 我倾向于在 命令行 vim中的GVim和buffer中使用制表符,所以我将. 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

clobbers和L的现有映射,但它使得文件之间的切换非常快速和容易。 只需点击"h"为下一个和"l";无论你使用的是制表符还是缓冲器,你都会得到预期的结果。

你可能需要使用 Vim全局标记

这样,你可以快速在文件之间来回移动,甚至在文件中的标记位置。 同时,关键命令是短的: 'C 将我带到我正在使用的代码,'T 将我带到我正在使用的单元测试 。

更改位置时,重置标记也会很快: mC 标记新的代码点,mT 标记新的测试点。

...