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

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


当前回答

在插入模式下,ctrl+x,ctrl+p将完成(如果您喜欢的话,可以使用可能的完成菜单)您键入的当前长标识符。

if (SomeCall(LONG_ID_ <-- type c-x c-p here
            [LONG_ID_I_CANT_POSSIBLY_REMEMBER]
             LONG_ID_BUT_I_NEW_IT_WASNT_THIS_ONE
             LONG_ID_GOSH_FORGOT_THIS
             LONG_ID_ETC
             ∶

其他回答

假设您已经编译了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

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

宏可以调用其他宏,也可以调用自身。

eg:

qq0dwj@qq@q

…将删除每行中的第一个单词,直到文件结束。

这是一个非常简单的示例,但它展示了vim的一个非常强大的功能

有时,.vimrc中的设置会被插件或自动命令覆盖。要调试这一点,一个有用的技巧是将:verbose命令与:set结合使用。例如,要确定cindent在何处设置/取消设置:

:verbose set cindent?

这将输出如下内容:

cindent
    Last set from /usr/share/vim/vim71/indent/c.vim

这也适用于地图和高光。(感谢joeytwiddle指出这一点。)例如:

:verbose nmap U
n  U             <C-R>
        Last set from ~/.vimrc

:verbose highlight Normal
Normal         xxx guifg=#dddddd guibg=#111111 font=Inconsolata Medium 14
        Last set from ~/src/vim-holodark/colors/holodark.vim

从十六进制值输入字符(插入模式):

<C-Q>x[type the hexadecimal byte]

让我们看看一些非常小的IDE编辑器如何进行列转换。

:%s/\(.*\)^I\(.*\)/\2^I\1/

解释

\(和\)是如何记住正则表达式中的内容。1、2等是如何检索记忆中的内容。

>>> \(.*\)^I\(.*\)

记住所有内容,然后是^I(tab),然后是所有内容。

>>> \2^I\1

用“你记得的第二件事”替换上面的东西,然后是“你记得第一件事”——本质上是做一个换位。