人们谈论常见技巧的问题很多,特别是“Vim+ctags提示和技巧”。
然而,我并没有提到Vim新手会觉得很酷的常用快捷方式。我所说的是一位经验丰富的Unix用户(无论是开发人员、管理员,还是两者都有),他们认为自己知道99%的人从未听说过或梦想过的东西。这不仅让他们的工作更容易,而且很酷,很粗糙。毕竟,Vim位于世界上最黑暗的角落丰富的操作系统中,因此它应该具有只有少数特权人士知道并想与我们分享的复杂性。
人们谈论常见技巧的问题很多,特别是“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)
其他回答
我使用vim进行几乎所有的文本编辑,所以我经常使用复制和粘贴。问题是默认情况下vim经常会通过粘贴扭曲导入的文本。阻止这种情况的方法是使用
:set paste
在粘贴数据之前。这将使它不致混乱。
注意,您必须发出:set nopaste以恢复自动缩进。粘贴预格式化文本的替代方法是剪贴板寄存器(*和+)和:r!cat(您必须用^D结束粘贴的片段)。
打开高对比度配色方案有时也很有用。这可以通过
:color blue
我注意到它不适用于我使用的所有版本的vim,但它适用于大多数版本。
使移动在换行模式下在当前屏幕行上操作的映射。不久前,我在Vim提示的一条评论中发现了这一点,事实证明它非常方便。
function! ScreenMovement(movement)
if &wrap
return "g" . a:movement
else
return a:movement
endif
endfunction
onoremap <silent> <expr> j ScreenMovement("j")
onoremap <silent> <expr> k ScreenMovement("k")
onoremap <silent> <expr> 0 ScreenMovement("0")
onoremap <silent> <expr> ^ ScreenMovement("^")
onoremap <silent> <expr> $ ScreenMovement("$")
nnoremap <silent> <expr> j ScreenMovement("j")
nnoremap <silent> <expr> k ScreenMovement("k")
nnoremap <silent> <expr> 0 ScreenMovement("0")
nnoremap <silent> <expr> ^ ScreenMovement("^")
nnoremap <silent> <expr> $ ScreenMovement("$")
也许99%的Vim用户都不知道,但这是我每天使用的东西,任何Linux+Vim超级用户都必须知道。
基本命令,但非常有用。
:w !sudo tee %
我经常在编辑一个我没有写权限的文件之前忘记sudo。当我保存该文件时遇到权限错误时,我只需发出vim命令即可保存该文件,而无需将其保存到临时文件,然后再将其复制回来。
显然,您必须在安装了sudo的系统上,并且具有sudo权限。
这里有些不明显的地方。如果你的$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
我什么都用Vim。编辑电子邮件时,我使用:
gqap(或gwap)
即使使用引号引导字符,也可以在逐段基础上轻松正确地重新格式化。为了实现此功能,我还添加了:
-c’集合fo=tcrq’-c’集合tw=76’
到外部调用编辑器的命令。一个值得注意的添加是将“a”添加到fo(formatoptions)参数中。这将在您键入和浏览内容时自动重新格式化段落,但可能会干扰或导致消息中错误或奇怪格式的问题。