TranslateProject/translated/tech/20200331 5 ways to level up your Vim skills.md
Xingyu Wang 780bb15cec TSL
2020-04-03 11:42:34 +08:00

156 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[#]: collector: (lujun9972)
[#]: translator: (wxy)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (5 ways to level up your Vim skills)
[#]: via: (https://opensource.com/article/20/3/vim-skills)
[#]: author: (Detlef Johnson https://opensource.com/users/deckart)
提升你的 Vim 技能的 5 个方法
======
> 通过一些有趣的技巧使你的文本编辑器更上一层楼。
![Computer keyboard typing][1]
Vim 是最受欢迎的文本编辑器之一,因此绝对值得花时间学习如何使用它。如果你使用这个无处不在的 [Vi(m)][2] 命令行文本编辑器来做的只是打开文件、输入和编辑一些文本、保存编辑的文件并退出程序,那么你还有很大的提示空间、。
在某些情况下你会发现,使用 Vim 非常方便的的场景几乎总是涉及到运行远程 Shell 操作的任务。如果你时不时地使用 ssh比如
```
$ ssh user@hostname.provider.com
```
并在虚拟专用服务器VPS或本地虚拟化容器中工作那么就可以从这些强大的 Vim 技能中受益匪浅。
### 将 Vim 设置为默认的文本编辑器
几乎在所有现代 Linux或 BSD发行版中都可以在终端仿真器的 shell 命令提示符下使用 Vim。在用户 shell 程序中将 Vim 定义为默认编辑器后,即可使用熟悉的 Vim 键绑定来浏览内置的实用程序,例如 `man`。我将说明如何使用 Bash 和 Z shellzsh来实现此目的zsh 现在是 macOS 用户的默认shell自 Catalina 起)。
#### 在 Bash 中将 Vim 设置为默认
Bash 通过点文件的组合来管理设置。将首选编辑器添加到主目录中的 `.bashrc` 文件中是最常见的,但也可以将其添加到 `.bash_profile` 中。(请阅读 [GNU Bash 文档][3]了解不同之处)。
通过在 `~/.bashrc` 中添加以下内容,将 Vim 设置为默认编辑器:
```
# set default editor to Vim
export EDITOR=vim
```
`#` 开头的行是可选的注释,这是提醒自己该命令的功能的好方法。
#### 在 zsh 中将 Vim 设置为默认
zsh 是一种越来越流行的终端模拟器,尤其是自苹果的基于 FreeBSD 的 Darwin 系统最近从 Bash 切换到 zsh 以来。
zsh 点文件与 Bash 的文件相当,因此你可以在 `~/.zshrc``~/.zprofile` 之间进行选择。有关何时使用哪一个的详细信息,请参见 [zsh文档][4]。
将其设置为默认:
```
# set default editor to Vim
export EDITOR=vim
```
### 优化 Vim 配置
Vim 很像终端仿真器外壳,它使用点文件来设置个人偏好。如果发现该模式,则可能已经猜到它是 `~/.vimrc`
你可能要更改的第一个设置是将对旧 Vi 兼容模式切换为“关”。由于 Vim 是 Vi 的超集,因此 Vi 中的所有功能都可用,并在 Vim 中进行了很大的改进你可以获得许多高级功能。最新版本8.2)允许你在拆分的窗口中打开终端运行一个子进程 shell 程序。
顺便说一句,关闭旧版兼容性似乎没有做什么事情([事实上,可能不是][5])。当遇到一个 `.vimrc` 文件时Vim 会自动将该模式切换为关闭。但有时将其明确关闭仍然很重要。缩写 `nocp``nocompatible` 的同义词,也可以使用它。[条条大道通罗马][6],切换首选项有很多方式。
`.vimrc` 语法中, 以 `"` 开头的行是注释(就像 `.bashrc` 文件中的 `#` 一样),这些注释可以帮助你记住诸如为何选择一个隐秘的设置名称之类的内容。
要关闭 Vi 兼容性,请将以下内容添加到 `~/.vimrc` 文件中:
```
" ensure that legacy compatibility mode is off
" documentation: <http://vimdoc.sourceforge.net/htmldoc/options.html\#'compatible>'
set nocp
```
### 理解模式
Vim的 “模式”概念是非常重要的,尤其是“正常模式”和“插入模式”之间的区别。对模式的混淆是大多数新用户的困扰。模式并不是 Vim 所独有的,甚至也不是 Vi 所引入的。命令模式是如此的古老,以至于它比 70 年代的[复制和粘贴][7]功能的发明还要早。
#### 重要的模式
Vim 依赖于不同的模式来定义键盘的敲击行为。需要了解的重要模式有
* 正常模式:默认模式,主要用于导航和打开文件。
* 插入模式(包括替换):这种模式下 Vim 允许将文本输入到打开的文件中。
* 可视模式Vim 的行为类似于基于鼠标的输入方式,如复制、编辑、替换等。
* 命令模式包括行模式、Ex 命令模式和末行模式):在 Vim 中做更多事情的强大方法。
每种模式都有很多值得探索的地方。使用 [Vimtutor][8]`vimtutor`)可以交互式地学习移动光标、模式和在末行模式下运行 Ex 命令。一些不可缺少的生产力操作符包括:
`:E` | 打开资源管理器,用于定位文件和目录。
--- | ---
`.` | 重复上次的编辑操作。
`;` | 向前重复上一次的动作或移动
`,` | 向后重复上一次的动作或移动。
`/` | 向前搜索文档。
`?` | 向后搜索文档。
`*` | 查找光标所在处的单词的下一个出现的地方。
`#` | 查找光标所在处的单词的上一次出现的地方。
`~` | 切换大小写。
`%` | 在打开和关闭的 `()`、`[]` 和 `{}` 之间切换;对编码非常有用。
`z=` | 提出拼写建议。
### 像钢琴一样弹奏 Vim
把 Vim 的操作符“语言”记在记忆中是很重要的,但要想掌握它,难点在于学会像音乐家一样思考,把操作符和动作组合成“和声和弦”,这样你就可以像弹钢琴一样弹奏 Vim。这就是 Vim 的文本操作能力可以与另一个著名的命令行编辑器 Emacs 相媲美的地方。(虽然其中一个编辑器会让磨损掉你的 `Esc` 键,而另一个编辑器会让你的 `Ctrl` 键磨损掉。)
在描述和弦时Vim 中的传统做法是用大写字母 `C` 来指代 `Ctrl` 键,后面加上一个连字符(`C-`)。这并不是通用的,但我将从这里开始遵循这一惯例,并在有可能引起混淆的时候加以说明。
如果你在 Vim 中键入长行,你会想把它设置成可以换行你的文字。想要根据你的工作方式对 Vim 进行个性化设置,请考虑一下这个设置:当 Vim 启动时,你希望 Vim 默认情况下如何处理文本换行?开着还是关着?我喜欢将其关闭,并在运行时用命令打开它。当我想让文本换行时,我只需在命令行模式下用 `:set wrap` 设置即可。
让 Vim 设置为默认文字换行并没有什么问题。这只是一个偏好的问题 —— 它可能随着时间的推移而改变。同样你也可以控制粘贴、代码语言缩进语法和 `Tab` 键的设置(制表符还是空格?多少个空格?可也在[这里][9]深入研究这些选项)。所有这些默认行为的选项都是完全可配置的,并且在你使用命令行模式操作时可以实时更改。
你会在社区论坛、Vim 维基和文章中找到很多关于设置 Vim 默认设置的建议比如这篇文章。为你的个人计算环境设置首选项对你来说应该相当熟悉Vim 也不例外。我强烈建议你从对你的设置进行非常小的更改开始,慢慢地进行更多的更改,这样你就可以轻松地恢复设置。这样一来,你就可以避免使用插件好多年或完全不用。
### Vim 8.2中的分割、标签和终端
有两种方法可以将你正在处理的文件分割成不同的视图:它们可以并排显示,也可以使用应用程序标签页在全屏(窗口)中切换。这些对应用程序窗口的更改是从命令模式启动的,这需要使用冒号(`:`)来调起提示符。
每个分割的窗口可以容纳一个文件进行编辑,你可以通过标签页在更多的文件之间随意切换。分割的屏幕空间是有限的,所以当你想分割更多的屏幕时,标签页是很方便的。想要如何设置,纯属个人喜好的问题。要横向分割一个窗口,使用 `:sp`,垂直分割时使用 `:vs`
从 [Vim 8.2][10] 开始,你可以用 `:vert term` 打开一个垂直分割的终端 shell 子进程,来在你的代码旁边在命令行进行操作。你需要键入 `exit` 来关闭你的终端进程,就像你结束一个 shell 会话一样,但你关闭这个分割的窗口和标签页的方式和关闭任何普通的 Vim 窗口一样,用 `:q` 来关闭。
要初始化一个标签页,请使用一个特殊的编辑命令:`:tabedit`,它会自动切换到新打开的标签页。如果你给该命令一个文件名作为参数,将会打开该文件并进行编辑。如果你忽略了给它一个文件名作为参数,可以在命令行模式下的使用编辑命令 `:e filename.txt`,就像在任何一个普通的 Vim 窗口中一样。可以使用下一个(`:tabn`)和上一个(`:tabp`)命令在标签页间导航。
要使用分割,你需要知道如何使用组合键 `C-w` 和你想要移动的方向的移动键,例如左(`h`)、下(`j`)、左(`k`)、右(`l`)。如果你想学习更多的组合键,请阅读 Vim 手册中的 `:help split``:help tabpage`
### 获取帮助
虽然可以在 Vimtutor 中打开参考 Vim 手册,但用 `:help` 打开 Vim 帮助,可以让你自己把时间花在编辑器上,不用完全依赖像这样的文章,就能获得更多的成果。经验是掌握 Vim 的关键。经验有助于提高你的整体计算直觉,因为 Vim 中的很多东西都是从 Unix 宇宙中汲取的。
祝你在探索 Vim 之美的过程中玩得开心,有什么问题可以在评论中分享。
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/3/vim-skills
作者:[Detlef Johnson][a]
选题:[lujun9972][b]
译者:[wxy](https://github.com/wxy)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/deckart
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/keyboaord_enter_writing_documentation.jpg?itok=kKrnXc5h (Computer keyboard typing)
[2]: https://www.vim.org/
[3]: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html
[4]: http://zsh.sourceforge.net/Intro/intro_3.html
[5]: http://vimdoc.sourceforge.net/htmldoc/starting.html#compatible-default
[6]: https://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it
[7]: https://www.npr.org/2020/02/22/808404858/remembering-the-pioneer-behind-your-computers-cut-copy-and-paste-functions
[8]: http://www2.geog.ucl.ac.uk/~plewis/teaching/unix/vimtutor
[9]: https://opensource.com/article/18/9/vi-editor-productivity-powerhouse
[10]: https://www.vim.org/vim-8.2-released.php