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

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


当前回答

gv

重新选择上次视觉选择。

其他回答

这些是我多年来收集的。

" Pasting in normal mode should append to the right of cursor
nmap <C-V>      a<C-V><ESC>
" Saving
imap <C-S>      <C-o>:up<CR>
nmap <C-S>      :up<CR>
" Insert mode control delete
imap <C-Backspace> <C-W>
imap <C-Delete> <C-O>dw
nmap    <Leader>o       o<ESC>k
nmap    <Leader>O       O<ESC>j
" tired of my typo
nmap :W     :w

不太晦涩,但有几个“delete in”命令非常有用,例如。。

指示删除当前单词di(要在当前父对象中删除di“删除引号之间的文本

其他信息可以在:帮助文本对象上找到

也许99%的Vim用户都不知道,但这是我每天使用的东西,任何Linux+Vim超级用户都必须知道。

基本命令,但非常有用。

:w !sudo tee %

我经常在编辑一个我没有写权限的文件之前忘记sudo。当我保存该文件时遇到权限错误时,我只需发出vim命令即可保存该文件,而无需将其保存到临时文件,然后再将其复制回来。

显然,您必须在安装了sudo的系统上,并且具有sudo权限。

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

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

假设您已经编译了Perl和/或Ruby支持,:rubydo和:perldo将在范围内的每一行(默认为整个缓冲区)运行一个Ruby或Perl一行,$_绑定到当前行的文本(减去换行符)。操纵$_将更改该行的文本。

您可以使用它来完成某些在脚本语言中很容易做到的事情,但使用Vim内置程序就不那么明显了。例如,要颠倒一行中单词的顺序:

:perldo $_ = join ' ', reverse split

要在每行末尾插入8个字符(a-Z)的随机字符串,请执行以下操作:

:rubydo $_ += ' ' + (1..8).collect{('A'..'Z').to_a[rand 26]}.join

一次只能执行一行操作,不能添加新行。