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

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


当前回答

:r! <command>

将外部命令的输出粘贴到缓冲区中。

做一些数学运算,直接在文本中得到结果:

:r! echo $((3 + 5 + 8))

获取编写Makefile时要编译的文件列表:

:r! ls *.c

不要在维基百科上查找你阅读的事实,直接将其粘贴到你正在编写的文档中:

:r! lynx -dump http://en.wikipedia.org/wiki/Whatever

其他回答

映射F5以快速ROT13缓冲区:

map <F5> ggg?G``

您可以将其用作boss密钥:)。

在插入模式下,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
             ∶

地图宏

我经常发现,像定义宏一样,动态定义一些键映射非常有用。这里的问题是,映射是递归的,并且一直执行到失败。

例子:

enum ProcStats
{
        ps_pid,
        ps_comm,
        ps_state,
        ps_ppid,
        ps_pgrp,
:map X /ps_<CR>3xixy<Esc>X

给予:

enum ProcStats
{
        xypid,
        xycomm,
        xystate,
        xyppid,
        xypgrp,

只是一个愚蠢的例子:)。

我完全知道所有的缺点——恰好我发现它在某些场合非常有用。此外,在工作中观看它可能会很有趣;)。

能够在基于客户端/服务器的模式下运行Vim。

例如,假设您正在处理一个项目,其中有大量缓冲区、选项卡和其他信息保存在名为session.vim的会话文件中。

通过发出以下命令,可以打开会话并创建服务器:

vim --servername SAMPLESERVER -S session.vim

请注意,如果要创建服务器,可以打开常规文本文件,而不一定是会话。

现在,假设您在另一个终端中,需要打开另一个文件。如果您通过以下方式定期打开:

vim new_file.txt

您的文件将在单独的Vim缓冲区中打开,这很难与会话中的文件进行交互。要在服务器上的新选项卡中打开new_file.txt,请使用以下命令:

vim --servername SAMPLESERVER --remote-tab-silent new_file.txt

如果没有服务器正在运行,则将像打开常规文件一样打开此文件。

由于每次您想运行这些标志时都提供这些标志是非常乏味的,因此您可以创建一个单独的别名来创建客户端和服务器。

我在bashrc文件中放置了以下内容:

alias vims='vim --servername SAMPLESERVER'
alias vimc='vim --servername SAMPLESERVER --remote-tab-silent'

您可以在以下位置找到有关此的更多信息:http://vimdoc.sourceforge.net/htmldoc/remote.html

==========================================================
In normal mode
==========================================================
gf ................ open file under cursor in same window --> see :h path
Ctrl-w f .......... open file under cursor in new window
Ctrl-w q .......... close current window
Ctrl-w 6 .......... open alternate file --> see :h #
gi ................ init insert mode in last insertion position
'0 ................ place the cursor where it was when the file was last edited