我已经开始使用Vim开发Perl脚本,并开始发现它非常强大.
我喜欢的一件事是能够一次打开多个文件,vi main.pl maintenance.pl然后在它们之间跳转:
:n
:prev
Run Code Online (Sandbox Code Playgroud)
并查看打开的文件
:args
Run Code Online (Sandbox Code Playgroud)
要添加文件,我可以说:
:n test.pl
Run Code Online (Sandbox Code Playgroud)
我希望将其添加到我的文件列表中,但它会清除我当前的文件列表,当我输入时:args我只test.pl打开了.
那么我怎样才能将文件添加到我的args列表中并将其删除?
fij*_*ter 1145
为什么不使用标签(在Vim 7中引入)?您可以使用:tabn和在标签之间切换:tabp,:tabe <filepath>您可以添加新标签; 并使用常规:q或:wq关闭选项卡.如果映射:tabn和:tabp你的F7/ F8键,您可以文件之间轻松切换.
如果没有那么多文件或者你没有Vim 7,你也可以将屏幕分成多个文件::sp <filepath>.然后你可以在Ctrl+ 之间切换分屏,W然后在想要移动的方向上切换箭头键(或者代替箭头键,w用于下一个和W之前的分屏)
Séb*_*rra 540
要查看当前缓冲区列表,我使用:
:ls
Run Code Online (Sandbox Code Playgroud)
要打开一个新文件,我使用
:e ../myFile.pl
Run Code Online (Sandbox Code Playgroud)
增强的标签完成(放入set wildmenu你的.vimrc).
注意:您也可以使用:find哪个路径搜索一组路径,但您需要先自定义这些路径.
要在所有打开的文件之间切换,我使用
:b myfile
Run Code Online (Sandbox Code Playgroud)
增强的标签完成(仍然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 .
shy*_*yam 228
:ls
Run Code Online (Sandbox Code Playgroud)
用于打开缓冲区列表
:bp 前缓冲区:bn 下一个缓冲区:bn(n一个数字)移动到第n个缓冲区:b <filename-part> 使用tab键提供自动完成功能(真棒!!)在某些版本的Vim,bn而bp实际上是bnext和bprevious分别.选项卡自动完成在这种情况下很有用.
或者当您处于正常模式时,使用^切换到您正在处理的最后一个文件.
另外,您可以保存vim的会话
:mksession! ~/today.ses
Run Code Online (Sandbox Code Playgroud)
上面的命令将当前打开的文件缓冲区和设置保存到~/today.ses.您可以使用加载该会话
vim -S ~/today.ses
Run Code Online (Sandbox Code Playgroud)
没有麻烦记住你昨天离开的地方.;)
Mar*_*rkB 109
要添加到args列表:
:argadd
Run Code Online (Sandbox Code Playgroud)
要从args列表中删除:
:argdelete
Run Code Online (Sandbox Code Playgroud)
在您的示例中,您可以使用:argedittest.pl将test.pl添加到args列表中并一步编辑该文件.
:help args 提供更多细节和高级用法
And*_*eld 48
我使用缓冲区命令 - :bn(下一个缓冲区),:bp(前一个缓冲区):buffers(列表打开缓冲区):b<n>(打开缓冲区n):bd(删除缓冲区).:e <filename>将只是打开一个新的缓冲区.
Rob*_*lls 40
我想您可能正在使用错误的命令来查看已打开的文件列表.
尝试执行:ls以查看已打开的文件列表,您将看到:
1 %a "./checkin.pl" line 1
2 # "./grabakamailogs.pl" line 1
3 "./grabwmlogs.pl" line 0
etc.
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过列出的数字引用它们来反弹文件,例如:3b
或者您可以通过输入数字来分割屏幕,但使用sb而不是b.
旁边%表示当前可见的文件,#表示备用文件.
按下即可轻松切换这两个文件 Ctrl Shift 6
编辑:就像:ls您可以:reg用来查看寄存器的当前内容,包括包含已删除内容的0-9寄存器.如果您想重用之前删除的某些文本,这将非常有用.
Kon*_*lph 35
Vim(但不是原来的Vi!)有一些标签,我发现(在许多情况下)优于缓冲区.您可以说:tabe [filename]在新选项卡中打开文件.通过单击选项卡或按键组合[ n ] gt和,可以在选项卡之间循环gT.Graphical Vim甚至还有图形标签.
Pet*_*bev 26
这里有很多答案!我使用的是在不重新发明轮子的情况下 - 最着名的插件(不会很快就会死掉并且被很多人使用)是超快速和令人讨厌的.
更新:最近我使用dyng/ctrlsf.vim 搜索上下文视图(如Sublime搜索),我将引擎从ag切换到ripgrep.表现非常出色.
puk*_*puk 23
喜欢的东西:e,并:badd只接受一个参数,因此下面将失败
:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*
Run Code Online (Sandbox Code Playgroud)
如果要从vim中添加多个文件,请使用 arga[dd]
:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*
Run Code Online (Sandbox Code Playgroud)
And*_*rew 19
这个帖子中的一些答案建议使用制表符,其他人建议使用缓冲区来完成同样的事情.标签和缓冲区是不同的.我强烈建议你阅读这篇文章Vim Tab madness - Buffers vs Tabs
这是我从文章中摘录的一个很好的总结:
摘要:
zig*_*don 18
在vim中使用多个文件时,我主要使用这些命令(打开~350个文件):
:b <partial filename><tab> (跳转到缓冲区):bw (缓冲区擦除,删除缓冲区):e <file path> (编辑,打开一个新的缓冲区>pltags - 启用跳转到子例程/方法定义dlm*_*tei 13
添加另一个答案,因为任何答案都没有涵盖
要更改要tab查看的所有缓冲区.
:tab sball
Run Code Online (Sandbox Code Playgroud)
将打开所有缓冲区到选项卡视图.然后我们可以使用任何与标签相关的命令
gt or :tabn " go to next tab
gT or :tabp or :tabN " go to previous tab
Run Code Online (Sandbox Code Playgroud)
详细信息:help tab-page-commands.
我们可以指示vim以标签视图打开多个文件vim -p file1 file2.
alias vim='vim -p'会有用的.
通过以下自动命令也可以实现同样的目的~/.vimrc
au VimEnter * if !&diff | tab all | tabfirst | endif
Run Code Online (Sandbox Code Playgroud)
无论如何回答问题:添加到arg列表:arga file,
要从arg列表中删除: argd pattern
更多 :help arglist
Max*_*tor 12
我为GVim和命令行vim使用相同的.vimrc文件.我倾向于在命令行vim中使用GVim中的选项卡和缓冲区,所以我设置了我的.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
Run Code Online (Sandbox Code Playgroud)
这破坏了H和L的现有映射,但它使文件之间的切换非常快速和容易.只需按"H"表示下一个,"L"表示前一个; 无论您使用制表符还是缓冲区,都可以获得预期的结果.
如果只使用vim内置命令,那么我在多个缓冲区之间切换的最好的命令是:
nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>
Run Code Online (Sandbox Code Playgroud)
它完美地结合了两个命令:ls和:b命令 - 列出所有打开的缓冲区并等待您输入命令切换缓冲区.
在vimrc中给出上面的映射,一旦你键入<Leader>f,
23到缓冲区23,#要转到备用/ MRU缓冲区,<Tab>或<C-i>自动完成,<CR>或<Esc>留在当前的缓冲区上述键映射的输出快照是:
: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 '<Cursor> here'
Run Code Online (Sandbox Code Playgroud)
在上面的快照中:
%a对于当前,h对于隐藏,#对于先前,为空尚未切换到.+进行修改.另外,我强烈建议set hidden.见:help 'hidden'.
小智 8
对于我和其他许多 vim 用户来说,最好的选择是,
:e 文件名.扩展名
然后只需Ctrl+6即可更改为最后一个缓冲区。或者,您可以随时按
:ls 列出缓冲区,然后使用 b 后跟缓冲区编号来更改缓冲区。
:vsp 用于垂直分割
:sp 水平分割
然后<C-W><C-H/K/L/j>改变工作分配。
您当然可以以任意数量的分割编辑任何文件。
我有效处理多个文件的方法是使用tmux.
它允许您垂直和水平分割窗口,如下所示:

我在mac和linux机器上以这种方式工作,我发现它比提供的本机窗格切换机制(在Mac上)更好.我发现切换更容易,只有使用tmux我才能在我的mac上运行"在同一个当前目录下的新页面"(尽管事实上似乎有在同一目录中打开新窗格的选项),这是一个令人惊讶的关键作品.当前位置的即时新窗格非常有用.为两个操作系统创建具有相同组合键的新窗格的方法对我来说至关重要,并为将来的个人兼容性提供奖励.除了多个tmux窗格,我还尝试使用多个选项卡,例如
和多个新窗口,例如
最后我发现多个tmux窗格对我来说最有用.我非常"视觉化",喜欢把我的各种情境放在我面前,连在一起作为窗格.
tmux还支持水平和垂直窗格,而老版本screen没有(虽然mac的iterm2似乎支持它,但同样,当前的目录设置对我来说不起作用).tmux 1.8
我使用以下内容,这为您提供了许多其他编辑器所具有的功能,例如Sublime Text/Textmate
.vimrc:let g:airline#extensions#tabline#enabled = 1.如果没有打开标签页,则会自动将所有缓冲区显示为标签页眉set wildmenu你.vimrc那么当你输入:b <file part>+ Tab一个缓冲区,你会得到可能的缓冲区的列表,你可以使用左/右箭头键滚动:Explore但使其更容易使用.您只需键入-以打开资源管理器,该资源管理器与浏览器中的目录相同.使导航更快(但是使用fzf我很少使用它):cdo结果进行搜索和替换