我已经开始使用Vim开发Perl脚本,并开始发现它非常强大.
我喜欢的一件事是能够一次打开多个文件,vi main.pl maintenance.pl
然后在它们之间跳转:
:n :prev
并查看打开的文件
:args
要添加文件,我可以说:
:n test.pl
我希望将其添加到我的文件列表中,但它会清除我当前的文件列表,当我输入时:args
我只test.pl
打开了.
那么我怎样才能将文件添加到我的args列表中并将其删除?
为什么不使用标签(在Vim 7中引入)?您可以使用:tabn
和在标签之间切换:tabp
,:tabe
您可以添加新标签; 并使用常规:q
或:wq
关闭选项卡.如果映射:tabn
和:tabp
你的F7/ F8键,您可以文件之间轻松切换.
如果没有那么多文件或者你没有Vim 7,你也可以将屏幕分成多个文件::sp
.然后你可以在Ctrl+ 之间切换分屏,W然后在想要移动的方向上切换箭头键(或者代替箭头键,w用于下一个和W之前的分屏)
要查看当前缓冲区列表,我使用:
: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 .
:ls
用于打开缓冲区列表
:bp
前缓冲区
:bn
下一个缓冲区
:bn
(n
一个数字)移动到第n个缓冲区
:b
使用tab键提供自动完成功能(真棒!!)
在某些版本的Vim,bn
而bp
实际上是bnext
和bprevious
分别.选项卡自动完成在这种情况下很有用.
或者当您处于正常模式时,使用^
切换到您正在处理的最后一个文件.
另外,您可以保存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):bd
(删除缓冲区).:e
将只是打开一个新的缓冲区.
我想您可能正在使用错误的命令来查看已打开的文件列表.
尝试执行: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寄存器.如果您想重用之前删除的某些文本,这将非常有用.
Vim(但不是原来的Vi!)有一些标签,我发现(在许多情况下)优于缓冲区.您可以说:tabe [filename]
在新选项卡中打开文件.通过单击选项卡或按键组合[ n ] gt
和,可以在选项卡之间循环gT
.Graphical Vim甚至还有图形标签.
这里有很多答案!我使用的是在不重新发明轮子的情况下 - 最着名的插件(不会很快就会死掉并且被很多人使用)是超快速和令人讨厌的.
ctrlpvim/ctrlp.vim - 按名称模糊搜索按位置或仅名称查找文件
jlanzarotta/bufexplorer - 浏览打开的缓冲区(当你不记得最近打开和修改了多少文件而你不记得它们在哪里时,可能是因为你用Ag搜索了它们)
rking/ag.vim搜索关于gitignore的文件
scrooloose/nerdtree查看目录结构,环视,添加/删除/修改文件
更新:最近我使用dyng/ctrlsf.vim 搜索上下文视图(如Sublime搜索),我将引擎从ag切换到ripgrep.表现非常出色.
喜欢的东西: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/*
这个帖子中的一些答案建议使用制表符,其他人建议使用缓冲区来完成同样的事情.标签和缓冲区是不同的.我强烈建议你阅读这篇文章Vim Tab madness - Buffers vs Tabs
这是我从文章中摘录的一个很好的总结:
摘要:
缓冲区是文件的内存中文本.
窗口是缓冲区上的视口.
标签页是一组窗口.
在vim中使用多个文件时,我主要使用这些命令(打开~350个文件):
:b
(跳转到缓冲区)
:bw
(缓冲区擦除,删除缓冲区)
:e
(编辑,打开一个新的缓冲区>
pltags
- 启用跳转到子例程/方法定义
您可能想要使用Vim全局标记.
这样,您可以快速在文件之间跳转,甚至可以在文件中的标记位置跳转.此外,关键命令很简单:
'C
带我到我正在使用的代码,
'T
带我到我正在使用的单元测试.
更改位置时,也可以快速重置标记:
mC
标记新的代码点,
mT
标记新的测试点.
添加另一个答案,因为任何答案都没有涵盖
要更改要tab
查看的所有缓冲区.
:tab sball
将打开所有缓冲区到选项卡视图.然后我们可以使用任何与标签相关的命令
gt or :tabn " go to next tab gT or :tabp or :tabN " go to previous tab
详细信息:help tab-page-commands
.
我们可以指示vim以标签视图打开多个文件vim -p file1 file2
.
alias vim='vim -p'
会有用的.
通过以下自动命令也可以实现同样的目的~/.vimrc
au VimEnter * if !&diff | tab all | tabfirst | endif
无论如何回答问题:添加到arg列表:arga file
,
要从arg列表中删除: argd pattern
更多 :help arglist
我为GVim和命令行vim使用相同的.vimrc文件.我倾向于在命令行vim中使用GVim中的选项卡和缓冲区,所以我设置了我的.vimrc以便更容易地使用它们:
" Movement between tabs OR buffers nnoremap L :call MyNext()nnoremap H :call MyPrev() " 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"表示前一个; 无论您使用制表符还是缓冲区,都可以获得预期的结果.
如果您打算使用多个缓冲区,我认为最重要的是设置隐藏,这样即使您要离开的缓存中有未保存的更改,它也可以让您切换缓冲区.
如果只使用vim内置命令,那么我在多个缓冲区之间切换的最好的命令是:
nnoremapf :set nomore :ls :set more :b
它完美地结合了两个命令:ls
和:b
命令 - 列出所有打开的缓冲区并等待您输入命令切换缓冲区.
在vimrc中给出上面的映射,一旦你键入
,
显示所有打开的缓冲区
您可以:
输入23
到缓冲区23,
输入#
要转到备用/ MRU缓冲区,
键入文件的部分名称,然后键入
或
自动完成,
或者只是
或
留在当前的缓冲区
上述键映射的输出快照是:
:set nomore|:ls|:set more 1 h "script.py" line 1 2 #h + "file1.txt" line 6 -- '#' for alternative buffer 3 %a "README.md" line 17 -- '%' for current buffer 4 "file3.txt" line 0 -- line 0 for hasn't switched to 5 + "/etc/passwd" line 42 -- '+' for modified :b 'here'
在上面的快照中:
第二列:%a
对于当前,h
对于隐藏,#
对于先前,为空尚未切换到.
第三栏:+
进行修改.
另外,我强烈建议set hidden
.见:help 'hidden'
.
我有效处理多个文件的方法是使用tmux.
它允许您垂直和水平分割窗口,如下所示:
我在mac和linux机器上以这种方式工作,我发现它比提供的本机窗格切换机制(在Mac上)更好.我发现切换更容易,只有使用tmux我才能在我的mac上运行"在同一个当前目录下的新页面"(尽管事实上似乎有在同一目录中打开新窗格的选项),这是一个令人惊讶的关键作品.当前位置的即时新窗格非常有用.为两个操作系统创建具有相同组合键的新窗格的方法对我来说至关重要,并为将来的个人兼容性提供奖励.除了多个tmux窗格,我还尝试使用多个选项卡,例如 和多个新窗口,例如 最后我发现多个tmux窗格对我来说最有用.我非常"视觉化",喜欢把我的各种情境放在我面前,连在一起作为窗格.
tmux还支持水平和垂直窗格,而老版本screen
没有(虽然mac的iterm2似乎支持它,但同样,当前的目录设置对我来说不起作用).tmux 1.8
我使用以下内容,这为您提供了许多其他编辑器所具有的功能,例如Sublime Text/Textmate
使用缓冲区而不是"标签页".缓冲区与几乎所有其他编辑器中的选项卡相同.
如果你想要有相同的标签,你可以使用vim-airline插件,并在你的.vimrc
:let g:airline#extensions#tabline#enabled = 1
.如果没有打开标签页,则会自动将所有缓冲区显示为标签页眉
使用Tim Pope的vim-unmpaired,它分别提供[b和]b移动到上一个/下一个缓冲区(加上一大堆其他好东西)
有set wildmenu
你.vimrc
那么当你输入:b
+ Tab一个缓冲区,你会得到可能的缓冲区的列表,你可以使用左/右箭头键滚动
使用Tim Pope的vim-obsession插件来存储与航空公司很好地合作的会话(我对会话和插件有很多痛苦)
使用Tim Pope的vim-vinegar插件.这适用于本机,:Explore
但使其更容易使用.您只需键入-
以打开资源管理器,该资源管理器与浏览器中的目录相同.使导航更快(但是使用fzf我很少使用它)
fzf(可以作为vim插件安装)也是一个非常强大的模糊查找器,可用于搜索文件(和缓冲区).fzf也很好用fd(更快的发现版本)
使用Ripgrep和vim-ripgrep搜索你的代码库,然后你可以使用:cdo
结果进行搜索和替换