提升你的 Vim 技能的 5 个方法
创始人
2024-03-02 04:45:07
0

通过一些有趣的小技巧使你的文本编辑器更上一层楼。

Vim 是最受欢迎的文本编辑器之一,因此绝对值得你花时间去学习如何使用它。就算你只是学习使用这个无处不在的 Vi(m) 命令行文本编辑器打开文件、输入和编辑一些文本、保存编辑的文件并退出程序,你都会受益匪浅。

你会发现,使用 Vim 非常方便的的场景几乎总是涉及到运行远程 Shell 操作的任务。如果你时不时地使用 ssh,比如

$ ssh user@hostname.provider.com

并在虚拟专用服务器(VPS)或本地虚拟化容器中工作,那么就可以从这些强大的 Vim 技能中受益匪浅。

将 Vim 设置为默认的文本编辑器

几乎所有的现代 Linux(或 BSD)发行版中,都可以在终端仿真器的 shell 命令提示符下使用 Vim。一旦在你的用户 shell 程序中将 Vim 定义为默认编辑器后,那么就可以使用熟悉的 Vim 键绑定来在内置的实用程序(例如 man)中导航。我将说明如何使用 Bash 和 Z shell(zsh)来实现此目的,zsh 现在是 macOS 用户的默认 shell(自 Catalina 起)。

在 Bash 中将 Vim 设置为默认

Bash 通过点文件的组合来管理设置。最常见的的做法将你的编辑器添加到主目录中的 .bashrc 文件中,但也可以将其添加到 .bash_profile 中。(请阅读 GNU Bash 文档了解两者的不同之处)。

通过在 ~/.bashrc 中添加以下内容,将 Vim 设置为默认编辑器:

# set default editor to Vim
export EDITOR=vim

# 开头的行是可选的注释,这是一个好方法,可以提醒自己该命令的作用。

在 zsh 中将 Vim 设置为默认

zsh 是一种越来越流行的终端仿真器,尤其是在苹果公司的基于 FreeBSD 的 Darwin 系统最近从 Bash 转向 zsh 以来。

zsh 点文件与 Bash 的文件相当,因此你可以在 ~/.zshrc~/.zprofile 之间进行选择。有关何时使用哪一个的详细信息,请参见 zsh文档

将其设置为默认:

# set default editor to Vim
export EDITOR=vim

优化 Vim 配置

Vim 像是终端仿真器 shell 一样,也使用点文件来设置个人偏好。如果你发现了这种模式,则可能已经猜到它是 ~/.vimrc

你可能要更改的第一个设置是将对传统的 Vi 兼容模式切换为“关闭”。由于 Vim 是 Vi 的超集,因此 Vi 中的所有功能在 Vim 中都是可用的,并且在 Vim 中得到了很大的改进,你可以获得许多高级功能。最新版本(8.2)允许你在分割的窗口中以子进程 shell 的方式打开一个终端。

顺便说一句,明确关闭对传统的 Vi 的兼容性看起来没有什么作用(事实上,可能并没有什么作用)。当 Vim 遇到 .vimrc 文件时,它会暗暗地自动将兼容模式切换到关闭。但有时将其明确关闭仍然很重要。缩写 nocpnocompatible 的同义词,作用是一样的。条条大道通罗马,切换首选项有很多方式。

.vimrc 语法中, 以 " 开头的行是注释(就像 .bashrc 文件中的 # 一样),这些注释可以帮助你记住诸如为何选择了一个隐晦的设置名称之类的内容。

要关闭 Vi 兼容性,请将以下内容添加到 ~/.vimrc 文件中:

" ensure that legacy compatibility mode is off
" documentation: '
set nocp

理解模式

Vim 的 “模式”概念是非常重要的,尤其是“普通模式”和“插入模式”之间的区别。对模式的混淆是大多数新用户的困扰。模式并不是 Vim 所独有的,甚至也不是 Vi 所引入的。命令模式是如此的古老,以至于它比 70 年代发明的复制和粘贴功能还要早。

重要的模式

Vim 依赖于不同的模式来定义键盘的敲击行为。需要了解的重要模式有:

  • 普通模式:默认模式,主要用于导航和打开文件。
  • 插入模式(包括替换):这种模式下 Vim 允许将文本输入到打开的文件中。
  • 可视模式:Vim 的行为类似于基于鼠标的输入方式,如复制、编辑、替换等。
  • 命令模式(包括行模式、Ex 命令模式和末行模式):是在 Vim 中做更多事情的强大方法。

每种模式都有很多值得探索的地方。使用 Vimtutorvimtutor)可以交互式地学习移动光标、模式和在末行模式下运行 Ex 命令。一些不可缺少的生产力操作符包括:

操作符说明
:E打开资源管理器,用于定位文件和目录。
.重复上次的编辑操作。
;向前重复上一次的动作或移动
,向后重复上一次的动作或移动。
/向前搜索文档。
?向后搜索文档。
*查找光标所在处的单词的下一个出现的地方。
#查找光标所在处的单词的上一次出现的地方。
~切换大小写。
%()[]{} 的开闭符号之间切换;对编码非常有用。
z=提出拼写建议。

像钢琴一样弹奏 Vim

尽管把 Vim 的操作符“语言”记在记忆中是很重要的,但要想掌握它,难点在于学会像音乐家一样思考,把操作符和动作组合成“和弦”,这样你就可以像弹钢琴一样弹奏 Vim。这就是 Vim 的文本操作能力可以与另一个著名的命令行编辑器 Emacs 相媲美的地方。(虽然其中一个编辑器会让磨损掉你的 Esc 键,而另一个编辑器会让你的 Ctrl 键磨损掉。)

在描述键“和弦”时,Vim 中的传统做法是用大写字母 C 后面加上一个连字符(C-)来指代 Ctrl 键。这并不是通用的,但我将从这里开始遵循这一惯例,并在有可能引起混淆的时候加以说明。

如果你在 Vim 中键入长行,你会想把它设置成可以换行。想要根据你的工作方式对 Vim 进行个性化设置,请考虑一下这个设置:默认情况下,你希望 Vim 启动时如何处理文本换行?开还是关?我喜欢将其关闭,并将其留在运行命令文件之外。当我想让文本自动换行时,我只需在命令行模式下用 :set wrap 设置即可。

让 Vim 设置为默认情况下自动换行并没有错,这只是一个偏好问题 —— 它可能随着时间的推移而改变。同样你也可以控制粘贴、代码语言缩进语法和 Tab 键的设置(制表符还是空格?多少个空格?可也在这里深入研究这些选项)。所有这些默认行为的选项都是完全可配置和可更改的,并且在你使用命令行模式操作时可以实时更改。

你会在社区论坛、Vim 维基和文章(比如这篇文章)中找到很多关于设置 Vim 默认设置的建议。你应该很熟悉为你的个人计算环境设置首选项,Vim 也不例外。我强烈建议你从对设置进行很小的更改开始,慢慢地进行其它更改,以便你可以轻松地恢复设置。这样一来,你就可以好多年避免使用插件或完全不用插件。

Vim 8.2 中的分割、标签和终端

有两种方法可以将你正在处理的文件分割成不同的视图:它们可以并排显示,也可以使用应用程序标签页在全屏(窗口)中切换。这些对应用程序窗口的更改是从命令模式启动的,这需要使用冒号(:)来调起提示符。

每个分割的窗口可以容纳一个文件进行编辑,你可以通过标签页在更多的文件之间随意切换。分割的屏幕空间有限,所以当你想分割更多的屏幕时,标签页是很方便的。想要如何设置,纯属个人喜好的问题。要水平分割一个窗口,使用 :sp,垂直分割时使用 :vs

Vim 8.2 开始,你可以用 :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 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Vim

相关内容

等了30年,微软MS-DO...
曾经称“开源是毒瘤”时有多么嫌弃,现在“微软 ❤️ 开源”就有多么...
2025-06-26 09:11:25
Vim编辑器使用
什么是vim?Vim 是从 vi 发展出来的一个文本编辑器。代码补...
2025-05-31 19:54:52
不知道如何在OS X上在V...
在OS X上,在Vim终端之间复制可以使用Vim的剪贴板功能。以下...
2025-01-12 07:30:30
不支持对函数进行vsvim...
在VSCode中,VSCodeVim插件默认不支持对函数进行调用。...
2025-01-11 22:00:40
不移动光标,VIM 删除外...
在Vim中,可以使用以下命令删除外部/内部标签:删除外部标签:da...
2025-01-11 06:01:18
不要在vim中的逃逸时候向...
要在Vim中逃逸时向后退缩,而不使用映射,可以使用以下代码示例中的...
2025-01-11 04:31:25

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
从 Yum 更新中排除特定/某... 作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。如果是,如...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...
如何检查你的 Linux 系统... 不知道在使用哪个初始化系统?以下是方法。每个主流 Linux 发行版(包括 Ubuntu、Fedor...