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

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


当前回答

想要IDE吗?

:make将在当前目录中运行makefile,解析编译器输出,然后您可以使用:cn和:cp单步执行编译器错误,打开每个文件并查找有问题的行号。

:syntax on打开vim的语法高亮显示。

其他回答

:sp%:h-目录列表/文件选择器,使用当前文件的目录

(属于rampion的cd提示下的评论,但我还没有评论权限)

^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

我最喜欢在窗口之间来回切换的食谱:

function! SwitchPrevWin()
    let l:winnr_index = winnr()
    if l:winnr_index > 1
       let l:winnr_index -= 1
    else
       "set winnr_index to max window open
        let l:winnr_index = winnr('$')
    endif
    exe l:winnr_index . "wincmd w" 
endfunction

nmap <M-z> :call SwitchPrevWin()
imap <M-z> <ESC>:call SwitchPrevWin()

nmap <C-z> :wincmd w
imap <C-z> <ESC>:wincmd w

键入==将根据上面的行更正当前行的缩进。

实际上,您可以在任何移动命令后执行一个=符号={移动}

例如,可以使用在匹配大括号之间移动的%移动。将光标放在以下代码中的{上:

if (thisA == that) {
//not indented
if (some == other) {
x = y;
}
}

然后按=%立即获得:

if (thisA == that) {
    //not indented
    if (some == other) {
        x = y;
    }
}

或者,您可以在代码块中执行=a{,而不是将自己定位在{字符上。

尝试使用perltdy通过=正常模式命令进行格式化

:set equalprg=perltidy