Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Vim中有效地处理多个文件_Vim_Vi - Fatal编程技术网

如何在Vim中有效地处理多个文件

如何在Vim中有效地处理多个文件,vim,vi,Vim,Vi,我已经开始使用Vim开发Perl脚本,并开始发现它非常强大 我喜欢的一件事是能够使用以下工具同时打开多个文件: vi main.pl maintenance.pl 然后在它们之间跳跃: :n :prev 并查看打开的文件: :args 要添加一个文件,我可以说: :n test.pl 我希望它会被添加到我的文件列表中,但它会清除我当前的文件列表,当我键入:args时,我只有test.pl打开 那么如何在我的args列表中添加和删除文件呢?Vim(但不是原始Vi!)有我发现(在许多情况下)

我已经开始使用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
可以添加新选项卡;使用常规的
: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个缓冲区
  • :b
    带tab键,可自动完成(棒极了!!)
在vim的某些版本中,
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()