如何在Vim中有效地处理多个文件
我已经开始使用Vim开发Perl脚本,并开始发现它非常强大 我喜欢的一件事是能够使用以下工具同时打开多个文件:如何在Vim中有效地处理多个文件,vim,vi,Vim,Vi,我已经开始使用Vim开发Perl脚本,并开始发现它非常强大 我喜欢的一件事是能够使用以下工具同时打开多个文件: vi main.pl maintenance.pl 然后在它们之间跳跃: :n :prev 并查看打开的文件: :args 要添加一个文件,我可以说: :n test.pl 我希望它会被添加到我的文件列表中,但它会清除我当前的文件列表,当我键入:args时,我只有test.pl打开 那么如何在我的args列表中添加和删除文件呢?Vim(但不是原始Vi!)有我发现(在许多情况下)
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
可以添加新选项卡;使用常规的:q
或:wq
关闭选项卡。
如果将:tabn
和:tabp
映射到F7/F8键,则可以轻松地在文件之间切换
如果没有那么多文件或者您没有Vim 7,您也可以将屏幕分割为多个文件::sp
。然后,您可以使用Ctrl+W在拆分屏幕之间切换,然后按您想要移动的方向按箭头键(或代替箭头键,W代表下一个拆分屏幕,W代表上一个拆分屏幕)添加到args
列表:
:argadd
:argdelete
要从args
列表中删除:
:argadd
: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):bd
(删除缓冲区)<代码>:e
将打开到一个新的缓冲区。清单
要查看当前缓冲区的列表,我使用:
:ls
开放 要打开新文件,我使用
:e ../myFile.pl
通过增强的制表符完成功能(将set-wildmenu
放入.vimrc
)
注意:您也可以使用:find
,它将为您搜索一组路径,但您需要首先自定义这些路径
转换 要在所有打开的文件之间切换,我使用
:b myfile
具有增强的选项卡完成功能(仍然set-wildmenu
)
注意::b#
选择上次访问的文件,因此您可以使用它在两个文件之间快速切换
使用windows
Ctrl-W s
和Ctrl-W v
水平和垂直拆分当前窗口。您还可以使用:拆分
和:垂直拆分
(:sp
和:vs
)
Ctrl-W
在打开的窗口之间切换,以及Ctrl-W h
(或j
或k
或l
)在打开的窗口中导航
Ctrl-W c
关闭当前窗口,以及Ctrl-W o
关闭除当前窗口外的所有窗口
使用-o
或-o
标志启动vim将在其各自的拆分中打开每个文件
有了这些,我不需要Vim中的标签,我的手指可以找到缓冲区,而不是眼睛
注意:如果希望所有文件都转到同一个Vim实例,请使用
--remote silent
选项启动Vim。如果要使用多个缓冲区,我认为最重要的是
隐藏
这样,即使在离开的缓冲区中有未保存的更改,也可以切换缓冲区。在vim中使用多个文件时,我主要使用以下命令(打开约350个文件):
(跳转到缓冲区):b
(缓冲区擦除,移除缓冲区):bw
(编辑,打开新缓冲区>:e
-允许跳转到子例程/方法定义pltags
上一个缓冲区:bp
下一个缓冲区:bn
(:bn
一个数字)移动到第n个缓冲区n
带tab键,可自动完成(棒极了!!):b
bn
和bp
实际上分别是bnext
和bprevious
。在这种情况下,选项卡自动完成很有帮助
或者在正常模式下,使用^
切换到您正在处理的最后一个文件
另外,您还可以保存vim的会话
:mksession! ~/today.ses
上面的命令将当前打开的文件缓冲区和设置保存到~/today.ses
。您可以使用
vim -S ~/today.ses
记住你昨天在哪里停下来,没有什么麻烦。我使用多个缓冲区,这些缓冲区被设置为隐藏在我的
~/.vimrc
文件中
mini buffer explorer脚本也很好,可以获得缓冲区的紧凑列表。然后:b1
或:b2
。。。拨款
:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*
:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*
alias gvim="gvim --servername \$(git rev-parse --show-toplevel || echo 'default') --remote-tab"
nmap <C-p> :tabprevious<CR>
nmap <C-n> :tabnext<CR>
nmap <CR> :CtrlPBuffer<CR>
nnoremap <leader><leader> <c-^>
set winwidth=84
set winheight=5
set winminheight=5
set winheight=999
nnoremap <C-w>v :111vs<CR>
nnoremap <C-w>s :rightbelow split<CR>
set splitright
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>
: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'
:tab sball
gt or :tabn " go to next tab
gT or :tabp or :tabN " go to previous tab
au VimEnter * if !&diff | tab all | tabfirst | endif
alias vim="vim -p"
let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim'
if empty(glob(data_dir . '/autoload/plug.vim'))
silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree'
call plug#end()