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

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


当前回答

不确定这是否算是黑暗角落,但我只是刚刚学会了。。。

:g/match/y A

将把所有包含“match”的行拖(复制)到“a/@a”寄存器中。(大写字母a使vim附加了“yankings”,而不是替换之前的寄存器内容。)我最近在制作Internet Explorer样式表时经常使用它。

其他回答

这不是一个秘密,但我喜欢将以下映射放到我的.vimrc文件中,这样我可以随时点击“-”(减号)打开文件浏览器,显示与我刚才编辑的文件相邻的文件。在文件浏览器中,我可以点击另一个“-”来向上移动一个目录,提供对复杂目录结构的无缝浏览(就像现在MVC框架所使用的那样):

map - :Explore<cr>

这些可能对某人也有用。我喜欢滚动屏幕并同时移动光标:

map <c-j> j<c-e>
map <c-k> k<c-y>

选项卡导航-我喜欢选项卡,我需要在它们之间轻松移动:

map <c-l> :tabnext<enter>
map <c-h> :tabprevious<enter>

仅在Mac OS X上:类似Safari的选项卡导航:

map <S-D-Right> :tabnext<cr>
map <S-D-Left> :tabprevious<cr>

当我在项目中工作时,我经常使用许多窗口,有时我需要调整它们的大小。以下是我使用的:

map + <C-W>+
map - <C-W>-

这些映射允许增加和减少当前窗口的大小。这很简单,但很快。

地图宏

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

例子:

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教程中找到一个,但它非常有用(至少对我来说),那就是

g;和g,

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

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

只是我的20美分。

映射F5以快速ROT13缓冲区:

map <F5> ggg?G``

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