vim在大型目录结构中有效地编辑/在多个文件之间切换


11

我绝不是vim的高级用户,我才刚刚开始掌握vim的高级动作和命令。但是有一个缺点,我似乎无法解决。

我从小就喜欢用图形程序编写代码,但是最近我才开始在ssh&screen上使用vim来处理具有许多文件夹的相当大的项目。

我很好奇vim大师如何快速轻松地处理多个文件。以Rails应用为例。假设您要编辑控制器以便运行。

vim app/controllers/controller.rb

但是随后您很快想要更改为编辑视图或db迁移,我的第一个直觉是:wq,返回bash导航到该目录,然后在全新的缓冲区中再次启动vim。

这显然是完全错误的。

我了解了以下几件事:

  • 客户端服务器(但是我不想在ssh上使用X,这似乎是唯一的方法)
  • :e通过浏览打开另一个文件,但我似乎做得并不快。Tab complete确实使我感到震惊。
  • 打开整个目录并搜索缓冲区。
  • NERDTree很有前途,但我真的想远离任何图形表示,以迫使我掌握命令行导航

我为您的幼稚而道歉,但是我真的想学习正确的处理方法,即使它过于主观。

您的方法是什么,您会推荐什么?


特别是对于Ruby on Rails,Tim Pope的rails.vim插件具有一些不错的命令(具有完成功能;可扩展到新的层次结构),用于打开模型/视图/控制器/ migrations / tests /… rails-type-navigation文件(请参见文档,或者:help rails-type-navigation在您安装)。
克里斯·约翰森

Answers:


7

可以将vim设置为编辑多个文件而不必退出。您使用多个缓冲区并在它们之间切换。由于您在屏幕内部使用vim,因此可以在〜/ .vimrc中添加以下内容以启用该功能。

   set hidden
   syntax enable
   source $VIMRUNTIME/menu.vim
   set wildmenu
   set cpo-=<
   set wcm=<C-Z>
   map <F4> :emenu <C-Z>
   nmap <Esc>[5D :bp<CR>
   nmap <Esc>Od  :bp<CR>
   nmap <Esc>OD  :bp<CR>
   nmap <Esc>[5C :bn<CR>
   nmap <Esc>Oc  :bn<CR>
   nmap <Esc>OC  :bn<CR>
   nmap <Esc>[3~ :bd<CR>
   nmap ZZ :bd<CR>

这些键映射映射到Ctrl-Left和向右箭头键,以在缓冲区之间切换。F4键调用与GUI相同的菜单。现在,按Tab键时,还会显示一个小菜单,用于选择完成。


很好的提示,这三个答案确实使我感到更加自在。没有插件的良好缓冲区管理是一项很棒的技能。爱野菜单!
2011年

5

哈哈!我曾经和你完全一样,所以我确切地知道你来自哪里。即使现在我知道我在某种程度上正在做什么(我不是vim上帝,但我希望到达那里),我仍然偶尔会执行:wq并返回我的shell。

检查一下 -这可能对您有帮助。(这也将对我有帮助,因为我从来不知道这一点。这就是Stackexchange网站的真棒-您可以通过帮助其他人来学习!)

这是我要做的一些事情。

  1. :e命令。在vim内部,编辑文件时,您可以执行类似的操作:e dir/subdir/otherfile,它将在新缓冲区中打开它,这意味着您将一次打开两个文件。

  2. Ctrl-Shift-6(不知道实际的ascii值)。如果您打开了两个缓冲区,则可以使用此切换按钮快速在它们之间切换。

  3. bd-缓冲区删除。让您清除缓冲区。

  4. 这真的是一个非常方便的人:sh。如果由于某种原因(例如,查看目录并chmod一个文件)必须返回shell,则可以调用vim的shell命令来执行此操作。退出shell会将您带回到vim所在的位置。

  5. 与上述类别相同-键入内容:!,然后输入unix命令将执行该命令。尝试使用ls。(我认为它也可以与shell内置程序一起使用,但是我不确定。)

这些是我一直使用的。还有:n下一个和:p上一个文件,因为您一次可以在vim中打开两个以上的缓冲区(不过,我通常不这样做)。


非常感谢您的提示。我也发现了这一点:wincent.com/products/command-t。我很想开始使用它。唯一的缺点是您需要红宝石(对ssh的东西不太友好),但这正是我想要的。这种结合:sh:e和适当的缓冲管理,事情变得性感
FEBS

在大多数外壳程序中(即具有作业控制的外壳Ctrl+Z程序),应暂停进程(fg从外壳程序中再次显示该进程),这是的替代方法:sh
maxschlepzig 2011年

另一个很棒的提示!优秀的!我将不得不在博客文章或其他内容中编译这些内容。
2011年


2

我还建议使用拆分窗口一次查看多个文件。在VIM中添加一些有关缓冲区和窗口管理的技能,您将很快成为VIM忍者。

对于实际的文档,我将带您参考《VIM Windows文档》,但在这里我将尽力帮助您。

从2个(或更多)水平分割的窗口开始VIM,顶部窗口具有file1,下一个窗口具有file2,依此类推。

vim -o <file1> <file2> (file3 file4 ...)

从2个(或更多)垂直分割的窗口开始VIM,最左边的窗口有file1,下一个窗口有file2,依此类推。

vim -O <file1> <file2> (file3 file4 ...)

将光标移到另一个窗口:

CTRL-W <vim direction key> (h=left, j=up, k=down, l=right)

已经编辑了一个文件,但还想分割窗口并编辑另一个文件:

:split <file2>
:vsplit <file2>

分别用于水平和垂直拆分。

还有一些命令可用于移动窗口,调整窗口大小等。


1

使用vi:split命令打开第二个编辑窗口。split可以同时进行水平和垂直拆分,一次可以进行两次以上拆分。在同一个vi会话中,我已经打开了多达10个文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.