人们谈论常见技巧的问题很多,特别是“Vim+ctags提示和技巧”。

然而,我并没有提到Vim新手会觉得很酷的常用快捷方式。我所说的是一位经验丰富的Unix用户(无论是开发人员、管理员,还是两者都有),他们认为自己知道99%的人从未听说过或梦想过的东西。这不仅让他们的工作更容易,而且很酷,很粗糙。毕竟,Vim位于世界上最黑暗的角落丰富的操作系统中,因此它应该具有只有少数特权人士知道并想与我们分享的复杂性。


当前回答

通常,我喜欢在编辑时更改当前目录,所以我必须少指定路径。

cd %:h

其他回答

在复制和粘贴到stackoverflow之前:

:retab 1
:% s/^I/ /g
:% s/^/    /

现在复制并粘贴代码。

根据意见要求:

表1。这会将选项卡大小设置为1。但它也会遍历代码并添加额外的制表符和空格,以便格式化不会移动任何实际文本(即文本在ratab之后看起来相同)。

%s/^I//g:请注意,^I是单击制表符的结果。这将搜索所有制表符并用一个空格替换它们。由于我们刚刚进行了重新标记,这不应导致格式更改,但由于将标签放入网站是一触即发的,因此最好将其删除。

%s/^//:用四个空格替换行首。由于实际上不能用任何东西替换行的开头,所以它在行的开头插入四个空格(SO格式需要这样做才能使代码突出)。

为了使vim更像一个IDE编辑器:

为左边空白处的行号设置nu。set cul-高亮显示包含光标的行。

假设您已经编译了Perl和/或Ruby支持,:rubydo和:perldo将在范围内的每一行(默认为整个缓冲区)运行一个Ruby或Perl一行,$_绑定到当前行的文本(减去换行符)。操纵$_将更改该行的文本。

您可以使用它来完成某些在脚本语言中很容易做到的事情,但使用Vim内置程序就不那么明显了。例如,要颠倒一行中单词的顺序:

:perldo $_ = join ' ', reverse split

要在每行末尾插入8个字符(a-Z)的随机字符串,请执行以下操作:

:rubydo $_ += ' ' + (1..8).collect{('A'..'Z').to_a[rand 26]}.join

一次只能执行一行操作,不能添加新行。

我喜欢使用“sudobash”,我的系统管理员讨厌这样。他锁定了“sudo”,因此它只能与少数命令(ls、chmod、chown、vi等)一起使用,但无论如何我都能使用vim获得根shell:

bash$ sudo vi +'silent !bash' +q
Password: ******
root#