![vim 在大型目录结构中有效地在多个文件之间编辑/切换](https://linux22.com/image/2417/vim%20%E5%9C%A8%E5%A4%A7%E5%9E%8B%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%E4%B8%AD%E6%9C%89%E6%95%88%E5%9C%B0%E5%9C%A8%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B9%8B%E9%97%B4%E7%BC%96%E8%BE%91%2F%E5%88%87%E6%8D%A2.png)
我绝不是 vim 高级用户,我刚刚开始掌握 vim 的高级动作和命令。但有一个我似乎无法克服的缺点。
我是伴随着用于编写代码的图形程序长大的,但我最近才开始使用 vim over ssh 和 screen 来处理具有许多文件夹的相当大的项目。
我很好奇 vim 大师如何快速轻松地处理多个文件。以 Rails 应用程序为例。假设您要编辑一个控制器,以便运行。
vim app/controllers/controller.rb
但随后您很快想要更改为编辑视图或数据库迁移,我的第一反应是:wq
返回 bash 导航到该目录并在全新的缓冲区中再次启动 vim。
这显然是完全错误的。
我了解到一些事情,例如:
- 客户端服务器(但我不想通过 ssh 使用 X,这似乎是唯一的方法)
:e
通过浏览打开另一个文件,但我似乎不能很快做到这一点。 Tab Complete 真的让我很困惑。- 打开整个目录并搜索缓冲区。
- NERDTree 很有前途,但我真的想远离任何图形表示,以不断迫使我掌握命令行导航
我为自己的天真道歉,但我真的很想学习正确的方法,即使它非常主观。
您的方法是什么?您会推荐什么?
答案1
可以设置 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-左箭头键和右箭头键以在缓冲区之间切换。 F4 键调用 GUI 将显示的相同菜单。按 Tab 键现在还会显示一个小菜单,用于在按 Tab 键时选择完成。
答案2
哈!我曾经和你一模一样,所以我知道确切地你来自哪里。即使现在我在一定程度上知道我在做什么(我不是 vim 大神,但我希望能做到这一点),我仍然偶尔会执行 :wq 并返回到我的 shell。
看一下这个- 这可能对你有帮助。 (它也会对我有帮助,因为我从来不知道这一点。这就是 stackexchange 网站的伟大之处 - 你可以通过帮助别人学习来学习!)
以下是我所做的一些事情。
命令
:e
。在 vim 内部,编辑文件时,您可以执行类似操作:e dir/subdir/otherfile
,它将在新缓冲区中打开它,这意味着您将同时打开两个文件。Ctrl-Shift-6
(不知道实际的 ascii 值)。如果您打开了两个缓冲区,则可以使用此开关在它们之间快速切换。bd
- 缓冲区删除。让您清除缓冲区。这是一个非常非常方便的工具 -
:sh
。如果您出于任何原因必须返回 shell(例如,查看目录并 chmod 文件),您可以调用 vim 的 shell 命令 do 执行此操作。退出 shell 会立即返回到 vim 中的位置。在与上面相同的类别中 - 键入
:!
和随后的 unix 命令将执行该命令。尝试这个与ls
. (我认为它也适用于 shell 内置函数,但我不确定。)
这些是我一直使用的。还有:n
下一个文件和:p
上一个文件,因为你可以在 vim 中同时打开两个以上的缓冲区(不过我通常不这样做)。
答案3
这就是你开始使用的地方插件。用于文件(或缓冲区)管理书呆子树和迷你缓冲区浏览器是常见的选择。在你的情况下我会谷歌“vim 红宝石IDE“并按照我找到的众多教程之一进行操作。我使用 Python 和 3 个命令本教程从 Vim 中配置我需要的一切。
答案4
使用 vi :split 命令打开第二个编辑窗口。 split 可以进行水平和垂直分割,并且一次可以进行两个以上分割。我在同一个 vi 会话中打开了多达 10 个文件。