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

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


当前回答

每个线程

要给一组行加前缀,我使用两种不同的方法之一:

一种方法是块选择(由某事物提及)。通常,可以使用ctrl-V键选择矩形区域,然后移动光标。高亮显示矩形后,按shift-I将在矩形左侧插入字符,或shift-a将在矩形右侧追加字符。因此,您可以使用此技术创建一个矩形,其中包含要添加前缀的行的最左列,单击shift-I,键入前缀,然后单击escape。

另一种方法是使用替换(如Brian Agnew所述)。Brian的替换将影响整个文件(命令中的%表示“所有行”)。要只影响几行,最简单的方法是在第一行/最后一行时按shift-V(启用视觉行模式),然后移动到最后一行/第一行。然后键入:

:s/^/您的前缀/

^是一个正则表达式(在本例中,是行的开头)。通过在视觉行模式下键入此项,您将看到“<,”>自动插入s之前。这意味着替代的范围将是视觉选择。

额外提示:如果前缀包含斜杠,可以用反斜杠转义,也可以在命令中使用不同的标点符号作为分隔符。例如,要添加C++行注释,我通常会写:

:s:^://:

对于添加后缀,替换方法通常更容易,除非所有行的长度完全相同。只需在模式中使用$而不是^,您的字符串将被追加而不是预挂起。

如果要同时添加前缀和后缀,可以执行以下操作:

:s/.*/前缀和后缀/

.*匹配整行。替换中的&将匹配的文本(整行)放回原处,但现在它将添加前缀和后缀。

顺便说一句:在注释代码时,您可能希望稍后取消注释。您可以使用视觉块(ctrl-V)选择斜线,然后单击d删除它们,或者可以使用替换(可能使用视觉线选择,使用shift-V)删除前导斜线,如下所示:

:s://::

其他回答

使用鼠标右键切换gVim中的插入模式,设置如下在~/.gvimrc中:

"
"------------------------------------------------------------------
" toggle insert mode <--> 'normal mode with the <RightMouse>-key
"------------------------------------------------------------------
nnoremap  <RightMouse> <Insert>
inoremap  <RightMouse> <ESC>
"

^O和^I

转到较旧/较新的位置。当您在文件中移动时(通过搜索、移动命令等),vim会记住这些“跳跃”,这样您就可以向后(^O-O表示旧的)和向前(^I-就在键盘上的I旁边)重复这些跳跃。我发现它在编写代码和执行大量搜索时非常有用。

gi

转到上次停止插入模式的位置。我发现自己经常编辑然后搜索一些东西。要返回编辑位置,请按gi。

gf

将光标放在文件名上(例如包含头文件),按gf,文件打开

gF

类似于gf,但识别格式“[文件名]:[行号]”。按gF将打开[文件名]并将光标设置为[行号]。

^P和^N

编辑时自动完成文本(^P-上一匹配项和^N下一匹配项)

^X^L

当编辑完成到同一行时(对编程有用)。您编写代码,然后回想文件中的某个位置有相同的代码。只需按^X^L,即可完成整行

^X^F

完整的文件名。你写了“/etc/pass”嗯,你忘了文件名。只需按^X^F,文件名就完成了

^Z或:sh

将临时文件移动到外壳。如果您需要快速抨击:

按^Z(将vi放在背景中)返回原始shell,按fg返回vim back按:sh转到子shell,按^D/exit返回vi

我最近发现了一件我觉得很酷的事:

:earlier 15m

将文档还原为15分钟前的状态。可以为您想要回滚的时间量提供各种参数,并且取决于撤消级别。可以用相反的命令反转:稍后

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

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

我很少在大多数Vim教程中找到一个,但它非常有用(至少对我来说),那就是

g;和g,

在变更列表中移动(向前、向后)。

让我来演示一下我是如何使用它的。有时我需要复制并粘贴一段代码或字符串,比如CSS文件中的十六进制颜色代码,所以我搜索、跳转(不在乎匹配的位置)、复制它,然后跳回(g;)编辑代码的位置以最终粘贴它。不需要创建标记。更简单。

只是我的20美分。