人们谈论常见技巧的问题很多,特别是“Vim+ctags提示和技巧”。
然而,我并没有提到Vim新手会觉得很酷的常用快捷方式。我所说的是一位经验丰富的Unix用户(无论是开发人员、管理员,还是两者都有),他们认为自己知道99%的人从未听说过或梦想过的东西。这不仅让他们的工作更容易,而且很酷,很粗糙。毕竟,Vim位于世界上最黑暗的角落丰富的操作系统中,因此它应该具有只有少数特权人士知道并想与我们分享的复杂性。
人们谈论常见技巧的问题很多,特别是“Vim+ctags提示和技巧”。
然而,我并没有提到Vim新手会觉得很酷的常用快捷方式。我所说的是一位经验丰富的Unix用户(无论是开发人员、管理员,还是两者都有),他们认为自己知道99%的人从未听说过或梦想过的东西。这不仅让他们的工作更容易,而且很酷,很粗糙。毕竟,Vim位于世界上最黑暗的角落丰富的操作系统中,因此它应该具有只有少数特权人士知道并想与我们分享的复杂性。
当前回答
地图宏
我经常发现,像定义宏一样,动态定义一些键映射非常有用。这里的问题是,映射是递归的,并且一直执行到失败。
例子:
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,
只是一个愚蠢的例子:)。
我完全知道所有的缺点——恰好我发现它在某些场合非常有用。此外,在工作中观看它可能会很有趣;)。
其他回答
这是一个用不同编码重新打开当前文件的好技巧:
:e ++enc=cp1250 %:p
当您必须使用传统编码时,这很有用。支持的编码列在编码值下的表中(请参阅帮助编码值)。类似的事情也适用于++ff,这样您就可以使用Windows/Unix重新打开文件了。如果您第一次出错,则行结束(请参阅帮助ff)。
每个线程
要给一组行加前缀,我使用两种不同的方法之一:
一种方法是块选择(由某事物提及)。通常,可以使用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://::
当我在项目中工作时,我经常使用许多窗口,有时我需要调整它们的大小。以下是我使用的:
map + <C-W>+
map - <C-W>-
这些映射允许增加和减少当前窗口的大小。这很简单,但很快。
使用鼠标右键切换gVim中的插入模式,设置如下在~/.gvimrc中:
"
"------------------------------------------------------------------
" toggle insert mode <--> 'normal mode with the <RightMouse>-key
"------------------------------------------------------------------
nnoremap <RightMouse> <Insert>
inoremap <RightMouse> <ESC>
"
想要IDE吗?
:make将在当前目录中运行makefile,解析编译器输出,然后您可以使用:cn和:cp单步执行编译器错误,打开每个文件并查找有问题的行号。
:syntax on打开vim的语法高亮显示。