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

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


当前回答

de按删除单词末尾的所有内容。在你心中的愿望。

ci(xyz[Esc]——这是一个奇怪的例子。这里,“i”并不意味着插入模式。相反,它意味着在括号内。因此,这个序列剪切了括号内的文本,并将其替换为“xyz”。它也适用于方括号和数字括号内——只需相应地执行ci[或ci{。自然,您可以执行di(如果你只想删除所有文本而不键入任何内容。如果你想删除括号而不仅仅是括号内的文本,你也可以用a代替i。

ci“-剪切当前引号中的文本

ciw-剪切当前单词。这与前一个工作原理相同,只是(被替换为w。

C-切割线路的其余部分并切换到插入模式。

ZZ—保存并关闭当前文件(关闭当前选项卡的速度比Ctrl-F4快得多!)

ddp-将当前行向下移动一行

xp—将当前字符向右移动一个位置

U-大写,所以viwU大写

~-切换大小写,因此viw~将反转整个单词的大小写

Ctrl+u/Ctrl+d向上或向下滚动页面半个屏幕。这似乎比通常的全屏分页更有用,因为它更容易看到两个屏幕之间的关系。对于那些仍然希望一次滚动整个屏幕的用户,Ctrl+f表示向前,Ctrl+b表示向后。Ctrl+Y和Ctrl+E一次向下或向上滚动一行。

疯狂但非常有用的命令是zz——它滚动屏幕使这一行显示在在中间。这非常适合将您正在处理的代码放在您的注意力中心。Sibling命令——zt和zb——使这一行成为sreen上的最上面或最下面的一行,这并不太有用。

%找到并跳转到匹配的括号。

de--从光标删除到单词末尾(也可以执行de删除,直到下一个空格)

bde--删除当前单词,从左到右分隔符

df[space]—删除直到并包括下一个空格

日期——删除到下一个点

dd--删除整行

ye(或ye)--将文本从这里拖到单词末尾

ce-贯穿单词的结尾

bye--复制当前单词(让我想知道“hi”是什么意思!)

yy--复制当前行

cc——剪切当前行,也可以改为S。还有较低的大写字母,用于剪切当前字符并切换到插入模式。

viwy或viwc。修改或更改当前单词。多次单击w以继续选择每个后续单词,使用b向后移动

vi{-选择图括号中的所有文本。va{-选中包括{}s的所有文本

vi(p-突出显示()s中的所有内容,并替换为粘贴的文本

b和e一个字一个字地移动光标,类似于Ctrl+箭头通常的操作。但是,单词的定义有点不同,因为连续的几个三角形被视为一个单词。如果你从一个单词的中间开始,按b键将始终转到当前单词的开头,而每个连续的b键将跳转到下一个单词开头。同样,容易记住的是,e将光标指向当前单词的末尾,以及随后的每个单词。

与b/e类似,大写字母b和e仅使用空格作为分隔符逐词移动光标。

大写D(深呼吸)删除光标右侧的行的其余部分,与普通编辑器中的Shift+End/Del相同(注意2个键--Shift+D--而不是3)

其他回答

这里有些不明显的地方。如果你的$HOME中有很多自定义插件/扩展,你需要从su/sudo/。。。有时,这可能是有用的。

在~/.bashrc中:

export VIMINIT=“:so$HOME/.vimrc”

在~/.vimrc中:

如果$HOME=='/root'如果$USER=='root'如果是目录('/home/your_typeualusername')let rtuser='your_typeal_user'elseif是目录('/home/your_other_username')let rtuser='your_other_username'结束符其他的let rtuser=$USER结束符让&runtimepath=替换(&runtimepath,$HOME,'/HOME/'.rutter,'g')结束符

它将允许您的本地插件加载-无论您使用何种方式更改用户。

您可能还想将*.swp文件从当前路径中取出,并放入~/vimtmp(这将放入.vimrc中):

如果isdirectory(展开('~/vimtmp'))调用mkdir(展开('~/vimtmp'))结束符如果是目录(展开('~/vimtmp'))设置目录=~/vimtmp其他的设置目录=/var/tmp、/tmp结束符

此外,我使用一些映射来简化编辑-使ctrl+s可以像escape和ctrl+h/l那样切换选项卡:

inoremap<C-s><ESC>vnoremap<C-s><ESC>noremap<C-l>gtnoremap<C-h>gT

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

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

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

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

然后按=%立即获得:

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

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

这不是一个秘密,但我喜欢将以下映射放到我的.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>

想要IDE吗?

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

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

让我们看看一些非常小的IDE编辑器如何进行列转换。

:%s/\(.*\)^I\(.*\)/\2^I\1/

解释

\(和\)是如何记住正则表达式中的内容。1、2等是如何检索记忆中的内容。

>>> \(.*\)^I\(.*\)

记住所有内容,然后是^I(tab),然后是所有内容。

>>> \2^I\1

用“你记得的第二件事”替换上面的东西,然后是“你记得第一件事”——本质上是做一个换位。