Vim进阶

转载自:https://linux.cn/article-9366-1.html

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

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

vim functions commands & symbols

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

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

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

最终结果

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

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

create function in vim for python

create function in vim for python

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

create function in vim for java

create function in vim for java

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

进一步提高

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

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

autocmd in vimrc

autocmd in vimrc

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

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

为了实现这个功能,您只需将函数片段添加到 .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中国 荣誉推出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339