学习VIM之2014
================================================================================

作为一名开发者，你不应该把时间花费在考虑如何去找你所要编辑的代码上。在我转移到完全使用 VIM 的过程中，感到最痛苦的就是它处理文件的方式。从之前主要使用 Eclipse 和 Sublime Text 过渡到 VIM，它没有捆绑一个常驻的文件系统查看器对我造成了不少阻碍，而其内建的打开和切换文件的方式总是让我泪流满面。

就这一点而言，我非常欣赏VIM文件管理功能的深度。在工作环境上我已经装配了这些工具，甚至比起那些视觉编辑器好很多。因为这个是纯键盘操作，可以让我更快地在代码里面穿梭。搭建环境需要花费一些时间，安装几个插件。首先第一步是我明白vim内建功能只是处理文件的一种选择。在这篇文章里我会带你去认识vim文件管理功能与使用更高级的插件。

### 基础篇:打开新文件 ###

学习vim其中最大的一个障碍是缺少可视提示，不像现在的GUI图形编辑器，当你在终端打开一个新的vim是没有明显的提示去提醒你去走什么，所有事情都是靠键盘输入，同时也没有更多更好的界面交互，vim新手需要习惯如何靠自己去查找一些基本的操作指令。好吧，让我开始学习基础吧。

创建新文件的命令是**:e <filename>或:e** 打开一个新缓冲区保存文件内容。如果文件不存在它会开辟一个缓冲区去保存与修改你指定文件。缓冲区是vim是术语，意为"保存文本块到内存"。文本是否能够与存在的文件关联，要看是否每个你打开的文件都对应一个缓冲区。

打开文件与修改文件之后，你可以使用**:w**命令来保存在缓冲区的文件内容到文件里面，如果缓冲区不能关联你的文件或者你想保存到另外一个地方，你需要使用**:w <filename>**来保存指定地方。

这些是vim处理文件的基本知识，很多的开发者都掌握了这些命令，这些技巧你都需要掌握。vim提供了很多技巧让人去深挖。

### 缓冲区管理 ###

基础掌握了，就让我来说更多关于缓冲区的东西，vim处理打开文件与其他编辑器有一点不同，打开的文件不会作为一个标签留在一个可见的地方，而是只允许你同时只有一个文件在缓冲区打开，vim允许你打开多个缓存区。一些会显示出来，另外一些就不会，你需要用**:ls**来查看已经打开的缓存，这个命令会显示每个打开的缓存区，同时会有它们的序号，你可以通过这些序号使用**:b <buffer-number>**来切换或者使用循序移动命令 **:bnext** 和 **:bprevious** 也可以使用它们的缩写**:bn**和**:bp**。

这些命令是vim管理文件缓冲区的一个基础，我发现他们不会按照我的想法映射出来。我不想关心缓冲区的顺序，我只想按照我的想法去到那个文件或者想在当前这个文件.因此必需了解vim更深入的缓存模式，我不是推荐你必须用内部命令来作为主要的文件管理方案。但这些的确是很强大可行的选择。

![](http://benmccormick.org/content/images/2014/Jul/skitch.jpeg)

### 分屏 ###

分屏是vim其中一个最好用的管理文件功能，在vim中你可以将当前窗口同时分开为2个窗口，可以按照你喜欢的配置去重设大小和分配，个别时候，我可以在同时打开6文件每个文件，每个都拥有不同大小。

你可以通过命令**:sp <filename>**来新建水平分割窗口或者 **:vs <filename>**垂直分割窗口。你可以使用这些关键命令去调整你想要的窗口大小，老实说，我喜欢用鼠标处理vim任务，因为鼠标能够给我更加准确的两列的宽度而不需要猜大概的宽度。

创建新的分屏后，你需要使用**ctrl-w [h|j|k|l]**来向后向前切换。这个有一点笨拙，但这个却是很重要、很普遍、很容易、很高效的操作。如果你经常使用分屏,我建议你去.vimrc使用以下代码去设置别名为**ctrl-h** **ctrl-j** 等等。

    nnoremap <C-J> <C-W><C-J> "Ctrl-j to move down a split  
    nnoremap <C-K> <C-W><C-K> "Ctrl-k to move up a split  
    nnoremap <C-L> <C-W><C-L> "Ctrl-l to move    right a split  
    nnoremap <C-H> <C-W><C-H> "Ctrl-h to move left a split  

### 跳转表 ###

分屏是解决多个关联文件同时查看问题,但我们仍然不能解决已打开文件与隐藏文件之间快速移动问题。这时跳转表是一个能够解决的工具。

跳转表是众多插件中看起来奇怪而且很少使用的一个。vim能够追踪每一步命令还有切换你正在修改的文件。每次从一个分屏窗口跳到另外一个，vim都会添加记录到跳转表里面。它记录你去过的地方，这样就不需要担心之前的文件在哪里，你可以使用快捷键去快速追溯你的踪迹。**Ctrl-o**允许你返回你上一次地方。重复操作几次就能够返回到你最先编写的代码段地方。你可以使用**ctrl-i**来向前返回。当你在调试多个文件或在两个文件之间切换时，它能够发挥极大的快速移动功能。

### 插件 ###

如果你想vim像Sublime Text 或者Atom一样，我就让你认清一下，这里有很好的机会让你看清一些难懂，可怕和低效的事情。例如大家会发出"当Sublime有了模糊查找功能，为什么我一定要输入全路径才能够打开文件" "没有侧边栏显示目录树我怎样查看项目结构" 等等。但vim有了解决方案。这些方案不需要破坏vim的核心。我只需要经常修改vim配置与添加一些最新的插件，这里有3个有用的插件可以让你像Sublime管理文件

- [CtrlP][1] 是一个跟Sublime的"Go to Anything"栏一样模糊查找文件.它快如闪电并且非常可配置性。我使用它主要用来打开文件。我只需知道部分的文件名字不需要记住整个项目结构就可以查找了。

- [The NERDTree][2] 这个一个文件管理夹插件，它重复了很多编辑器都有的侧边文件管理夹功能。我实际上很少用它，对于我而言模糊查找会更加快。对于你接手一个项目，尝试学习项目结构与了解什么可以用是非常方便的，NERDTree是可以自己定制配置，安装它能够代替vim内置的目录工具。

- [Ack.vim][3] 是一个专为vim的代码搜索插件，它允许你跨项目搜索文本。它封装了Ack 或 Ag 这[两个极其好用的搜索工具][4]，允许你在任何时候在你项目之间快速搜索跳转。

在vim核心与它的插件生态系统之间，vim 提供足够的工具允许你构建你想要得工作环境。文件管理是软件开发系统的最核心部分并且你值得拥有体验的权利。

开始时需要通过很长的时间去理解它们，然后在找到你感觉舒服的工作流程之后再开始在上面添加工具。但依然值得你去使用，你不用爆头就可以理解如何去使用，能够轻易编写你的代码。

### 更多插件资源 ###

- [Seamlessly Navigate Vim & Tmux Splits][5] 这个插件需要每一个想使用它的人都要懂得使用[tmux][6]，这个跟vim的splits 一样简单好用。

- [Using Tab Pages][7] 它是一个vim的标签功能插件，虽然它的名字用起来有一点疑惑，但它不是文件管理器。对如何在有多个工作可视区使用"tab pages" 在vim wiki 网站上有更好的概述。

- [Vimcasts: The edit command][8] 一般来说 Vimcasts 是大家学习vim的一个好资源。这个屏幕截图与一些内置工作流程很好地描述了之前说的文件操作方面的知识。


--------------------------------------------------------------------------------

via: http://benmccormick.org/2014/07/07/learning-vim-in-2014-working-with-files/

作者：[Ben McCormick][a]
译者：[haimingfg](https://github.com/haimingfg)
校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出

[a]:http://benmccormick.org/2014/07/07/learning-vim-in-2014-working-with-files/
[1]:https://github.com/kien/ctrlp.vim
[2]:https://github.com/scrooloose/nerdtree
[3]:https://github.com/mileszs/ack.vim
[4]:http://benmccormick.org/2013/11/25/a-look-at-ack/
[5]:http://robots.thoughtbot.com/seamlessly-navigate-vim-and-tmux-splits
[6]:http://tmux.sourceforge.net/
[7]:http://vim.wikia.com/wiki/Using_tab_pages
[8]:http://vimcasts.org/episodes/the-edit-command/
[9]:http://feedpress.me/benmccormick
[10]:http://eepurl.com/WFYon
[11]:http://benmccormick.org/2014/07/14/learning-vim-in-2014-configuring-vim/
[12]:http://benmccormick.org/2014/06/30/learning-vim-in-2014-the-basics/
[13]:http://benmccormick.org/2014/07/02/learning-vim-in-2014-vim-as-language/
