用一些超酷的功能使 Vim 变得更强大
创始人
2024-03-01 21:53:46
0

Vim 是每个 Linux 发行版]中不可或缺的一部分,也是 Linux 用户最常用的工具(当然是基于终端的)。至少,这个说法对我来说是成立的。人们可能会在利用什么工具进行程序设计更好方面产生争议,的确 Vim 可能不是一个好的选择,因为有很多不同的 IDE 或其它类似于 Sublime Text 3,Atom 等使程序设计变得更加容易的成熟的文本编辑器。

我的感想

但我认为,Vim 应该从一开始就以我们想要的方式运作,而其它编辑器让我们按照已经设计好的方式工作,实际上不是我们想要的工作方式。我不会过多地谈论其它编辑器,因为我没有过多地使用过它们(我对 Vim 情有独钟)。

不管怎样,让我们用 Vim 来做一些事情吧,它完全可以胜任。

利用 Vim 进行程序设计

执行代码

考虑一个场景,当我们使用 Vim 设计 C++ 代码并需要编译和运行它时,该怎么做呢。

(a). 我们通过 Ctrl + Z 返回到终端,或者利用 :wq 保存并退出。

(b). 但是任务还没有结束,接下来需要在终端上输入类似于 g++ fileName.cxx 的命令进行编译。

(c). 接下来需要键入 ./a.out 执行它。

为了让我们的 C++ 代码在 shell 中运行,需要做很多事情。但这似乎并不是利用 Vim 操作的方法( Vim 总是倾向于把几乎所有操作方法利用一两个按键实现)。那么,做这些事情的 Vim 的方式究竟是什么?

Vim 方式

Vim 不仅仅是一个文本编辑器,它是一种编辑文本的编程语言。这种帮助我们扩展 Vim 功能的编程语言是 “VimScript”(LCTT 译注: Vim 脚本)。

因此,在 VimScript 的帮助下,我们可以只需一个按键轻松地将编译和运行代码的任务自动化。

create functions in vim .vimrc

以上是在我的 .vimrc 配置文件里创建的一个名为 CPP() 函数的片段。

利用 VimScript 创建函数

在 VimScript 中创建函数的语法非常简单。它以关键字 func 开头,然后是函数名(在 VimScript 中函数名必须以大写字母开头,否则 Vim 将提示错误)。在函数的结尾用关键词 endfunc

在函数的主体中,可以看到 exec 语句,无论您在 exec 关键字之后写什么,都会在 Vim 的命令模式上执行(记住,就是在 Vim 窗口的底部以 : 开始的命令)。现在,传递给 exec 的字符串是(LCTT 译注::!clear && g++ % && ./a.out) -

vim functions commands & symbols

当这个函数被调用时,它首先清除终端屏幕,因此只能看到输出,接着执行 g++ 处理你工作的文件,然后运行由前一步编译而形成的 a.out 文件。

将 ctrl+r 映射为运行 C++ 代码

我将语句 call CPP() 映射到键组合 Ctrl+r,以便我现在可以按 Ctrl+r 来执行我的 C++ 代码,无需手动输入 :call CPP(),然后按 Enter 键。

最终结果

我们终于找到了 Vim 方式的操作方法。现在,你只需按一个(组合)键,你编写的 C++ 代码就输出在你的屏幕上,你不需要键入所有冗长的命令了。这也节省了你的时间。

我们也可以为其他语言实现这类功能。

对于Python:您可以按下 Ctrl+e 解释执行您的代码。

create function in vim for java

对于Java:您现在可以按下 Ctrl+j,它将首先编译您的 Java 代码,然后执行您的 Java 类文件并显示输出。

进一步提高

所以,这就是如何在 Vim 中操作的方法。现在,我们来看看如何在 Vim 中实现所有这些。我们可以直接在 Vim 中使用这些代码片段,而另一种方法是使用 Vim 中的自动命令 autocmdautocmd 的优点是这些命令无需用户调用,它们在用户所提供的任何特定条件下自动执行。

我想用 autocmd 实现这个,而不是对每种语言使用不同的映射,执行不同程序设计语言编译出的代码。

autocmd in vimrc

在这里做的是,为所有的定义了执行相应文件类型代码的函数编写了自动命令。

会发生什么?当我打开任何上述提到的文件类型的缓冲区, Vim 会自动将 Ctrl + r 映射到函数调用,而 表示回车键,这样就不需要每完成一个独立的任务就按一次回车键了。

为了实现这个功能,您只需将函数片段添加到 .vimrc 文件中,然后将所有这些 autocmd 也一并添加进去。这样,当您下一次打开 Vim 时,Vim 将拥有所有相应的功能来执行所有具有相同绑定键的代码。

总结

就这些了。希望这些能让你更爱 Vim 。我目前正在探究 Vim 中的一些内容,正阅读文档,补充 .vimrc 文件,当我研究出一些成果后我会再次与你分享。

如果你想看一下我现在的 .vimrc 文件,这是我的 Github 账户的链接: MyVimrc

期待你的好评。


via: http://www.linuxandubuntu.com/home/making-vim-even-more-awesome-with-these-cool-features

作者:LINUXANDUBUNTU 译者:stevenzdg988 校对: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...