什么是VIM的阴暗角落你的妈妈从来没有告诉过你? [关闭] 什么是VIM的阴暗角落你的妈妈从来没

2019-05-12 14:55发布

有问题过多,人们谈论常见的技巧,特别是“ Vim的+ C标签提示和技巧 ”。

不过,我不指常用的快捷方式,新的人在Vim会觉得很酷。 我讲的是一个经验丰富的Unix用户(无论是开发人员,管理员,都等),谁认为他们知道的东西我们的99%的人从未听说过或梦想。 东西不仅使他们的工作更容易,而且凉爽的hackish。 毕竟,Vim的驻留在世界上最丰富的黑角操作系统,因此它应该有,只有少数特权了解,并希望与我们分享错综复杂。

Answer 1:

可能不是一个Vim的99%的用户不知道,但它的东西,我每天都使用,并且任何Linux + Vim的高级用户必须知道。

基本的命令,但非常有用的。

:w !sudo tee %

我经常编辑一个文件,我没有上写权限之前忘了须藤。 当我来到保存文件并获得许可的错误,我只是为了保存文件,而无需将其保存到一个临时文件颁发VIM命令,然后它再copy回去。

显然,你必须与须藤安装在系统上,并有sudo的权利。



Answer 2:

这是我刚刚发现,我认为是非常酷:

:earlier 15m

恢复文件回到它是如何在15分钟前。 可以采取的时间量各种争论要回滚,并且依赖于undolevels。 可以用相反的命令被逆转:later



Answer 3:

:! [command] :! [command]当你在Vim的是执行的外部命令。

但冒号后面加一个点, :.! [command] :.! [command] ,它会转储命令的输出到当前窗口。 这就是: . ! : . !

例如:

:.! ls

我用这个有很多的东西,如添加当前日期插入到文档中我打字:

:.! date


Answer 4:

不完全是模糊的,但有几个“删除”命令,这是非常有用的,如..

  • diw删除当前字
  • di(当前的括号内删除
  • di"删除引号之间的文本

其他上可以找到:help text-objects



Answer 5:

按删除一切,直到字的末尾。 在你的心脏的欲望。

CI(XYZ [Esc]键 -这是一个奇怪的一个在这里,“我”并不意味着插入模式相反,它意味着在括号内所以这个序列内削减你站在括号中的文字,并用其替换。 “XYZ”它也可以在方图括号-只是做CI [或C {相应当然,你可以做二(如果你只是想删除所有文字,而无需输入任何你也可以做。 a ,而不是i如果你想删除的括号以及不只是文本中他们。

CI” -削减在当前报价中的文本

CIW -削减当前的单词。 这个工程就像前一个不同之处在于(被替换为w

Ç -切断预定线的其余部分,并切换到插入模式。

ZZ -保存并关闭当前文件(WAY比按Ctrl-F4更快地关闭当前标签!)

DDP -移动当前行一行下来

XP -移动当前字符一个位置向右

ü -大写的,所以viwU upercases字

-开关的情况下,所以viw~将扭转整个字的壳体

按Ctrl + U / Ctrl键+ d滚动页面半个屏幕向上或向下。 这似乎是因为它可以更容易地看到两个屏幕如何与比通常全屏页面更加有用。 对于那些谁仍然希望一次滚动整个屏幕有按Ctrl + F向前和Ctrl键用于向后+ B。 按Ctrl + Y和Ctrl + E向下滚动或向上一行在同一时间。

疯了,但非常有用的命令是ZZ -它滚动屏幕,使这条线出现在中间。 这是极好的把一张你在你关注的中心工作代码。 同级命令 - ZT和ZB - 使这条线的顶部或在其上是不太有用的筛网底部的一个。

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

-从当前位置删除到单词的末尾(你也可以做dE删除,直到下一个空格)

BDE -删除当前的字,由左到右定界符

DF [空格] -删除直到并包括下一个空格

DT。 - 删除直到下一个点

DD -删除整行

你们(或叶) -猛拉文本从这里到单词的末尾

CE -切过单词的末尾

再见 -复制当前单词(使我不知道什么是“喜”呢!)

YY -复制当前行

CC -削减当前行,你也可以做S来代替。 还有下侧盖s其削减当前字符并切换到插入模式。

viwy或viwc。 猛拉或改变当前的单词。 打w多次以保持选择每个后续字,用b向后移动

六{ -选择图中的括号内的所有文本。 VA { - 选择包括所有文字{} s ^

VI(P -突出里面的()一切都好,并与粘贴的文本替换

b和e将光标移动字的字,类似于为Ctrl +箭头通常怎么办 。 词的定义是一个有点不同不过,因为连续几个delmiters作为一个词处理。 如果你开始在词的中间,按b总是会得到你当前单词的开头,并且每个连续的B会跳转到下一个单词的起始处。 同样,易记, e得到光标移动到当前的结束,以后每次,字。

类似于b / e ,资本BE移动仅使用空格作为分隔符光标字的字。

资本d(深呼吸)删除行的其余部分,将光标的右侧,相同SHIFT + END /德尔在正常编辑器(通知2次按键-平移+ d -代替3-)



Answer 6:

一,我很少发现在大多数Vim的教程,但它是非常有用的(至少对我来说),是

g; and g,

移动(前进,后退)通过变更列表。

让我告诉我如何使用它。 有时候,我需要复制和粘贴一段代码或串,说在一个CSS文件中的十六进制颜色代码,所以我搜索,跳跃(不关心这里的匹配),复制它,然后往回跳(G)到我编辑的代码,最后粘贴。 无需创建标记。 简单。

只是我的2分钱小费。



Answer 7:

:%!xxd

使Vim成十六进制编辑器。

:%!xxd -r

还原。

警告:如果你没有用二进制(-B)编辑,你可能会损坏文件。 - 乔希李的意见。



Answer 8:

gv

去年重新选择可视选择。



Answer 9:

有时候,在你的.vimrc的设置将通过一个插件或者自动得到覆盖。 调试这一个有用的技巧是使用:会同verbose命令:集。 例如,为了找出其中cindent得到了设置/取消:

:verbose set cindent?

这将输出类似:

cindent
    Last set from /usr/share/vim/vim71/indent/c.vim

这也适用于地图和亮点。 (感谢joeytwiddle指出这。)例如:

:verbose nmap U
n  U             <C-R>
        Last set from ~/.vimrc

:verbose highlight Normal
Normal         xxx guifg=#dddddd guibg=#111111 font=Inconsolata Medium 14
        Last set from ~/src/vim-holodark/colors/holodark.vim


Answer 10:

不知道这是否在所有算作暗的角落十岁上下,但我刚刚学会了...

:g/match/y A

将抽出(复制)含有“匹配”的所有线路, "a / @a注册。(资本化作为A让VIM 追加 yankings而不是替换以前的寄存器的内容。)我最近使用了很多使Internet Explorer的样式表时。



Answer 11:

:%TOhtml

创建当前文件的HTML渲染。



Answer 12:

想看看你的:命令历史记录?

q:

然后浏览,编辑和最后执行的命令。

曾经做出类似修改两个文件并来回切换它们之间? (说,源和头文件?)

:set hidden
:map <TAB> :e#<CR>

然后标签来回这些文件之间。



Answer 13:

Vim会打开一个URL,例如

vim http://stackoverflow.com/

尼斯当你​​需要拉起页面的源代码以供参考。



Answer 14:

宏可以调用其他宏,也可以调用本身。

例如:

qq0dwj@qq@q

...将删除每一行的第一个字,直到文件的末尾。

这是一个非常简单的例子,但它说明了VIM的一个非常强大的功能



Answer 15:

假设你有Perl和/或Ruby的支持编译, :rubydo:perldo将运行在每一行一个Ruby或Perl的一个班轮在一个范围内(默认为整个缓冲区),以$_绑定到当前行的文本(减去行)。 操作$_会改变该行的文本。

您可以使用此做某些事情,很容易使用脚本语言做的,但不是很明显使用议会建宏。 例如扭转的一列的单词的顺序:

:perldo $_ = join ' ', reverse split

要插入的每行的端部8个字符(AZ)的随机字符串:

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

您只能作用于一个行的时间和您不能添加新行。



Answer 16:

^ o ^和我

转到旧/更新位置。 当你通过文件移动(通过搜索,移动命令等)VIM的rember这些“跳跃”,这样你就可以向后重复这些跳跃(^○ - ○旧)和前锋(^我 - 就在旁边我键盘上)。 我发现它非常有用编写代码和进行大量的搜索时。

转至插入模式停止的最后一个位置。 我发现自己经常编辑,然后寻找的东西。 要返回编辑的位置按GI。

GF

把光标放在文件名(如包含头文件),按GF和文件被打开

中gF

类似的GF,但承认格式“[文件名]:[行号]”。 按中gF打开[文件名],并设置光标移动到[行号]。

^ P和^ N

自动完成文本编辑时(^ P - 以前的比赛和^ N下一场比赛)

^ X ^大号

当编辑完成对同一行(用于编程有用)。 你写的代码,然后你还记得你的文件保存在某个有相同的代码。 只需按下^ X ^ L和全线竣工

^ X ^ F

完整的文件名。 你写的“在/ etc /通”嗯。 你忘了文件名。 只需按下^ X ^ F和文件名完成

^ Z或:SH

移动临时的外壳。 如果你需要一个快速的抨击:

  • 按^ Z(把背景六)恢复到原来的壳,然后按FG返回VIM回
  • 按:SH去子壳,然后按^ d / exit返回至vi回


Answer 17:

这是一个很好的把戏重新使用不同的编码当前文件:

:e ++enc=cp1250 %:p

有用当你有旧的编码工作。 支持的编码都在表中列出encoding-values (见help encoding-values )。 类似的事情也适用于++ff ,这样就可以重新使用Windows / Unix行的文件,如果你弄错了,第一次(见结束help ff )。



Answer 18:

" insert range ip's
"
"          ( O O )
" =======oOO=(_)==OOo======

:for i in range(1,255) | .put='10.0.0.'.i | endfor


Answer 19:

打字==将纠正当前行的基于上面的行缩进。

其实,你可以做一个等号(=)后跟任何运动指令。 = {}运动

例如,你可以使用%的移动,其匹配的括号之间移动。 在光标{​​下面的代码的位置:

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

并按=%立即得到这样的:

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

或者,你可以做一个= {代码块中,而不是定位自己正确的{字符。



Answer 20:

imap jj <esc>


Answer 21:

让我们来看看一些漂亮的小IDE的编辑器做列换位。

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

说明

\(\)是如何记得在正则表达式土地的东西。 而\1\2等是如何检索记住的东西。

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

记得所有的事情,然后^I (标签),随后的一切。

>>> \2^I\1

本质上做了转 - 用后跟“你还记得第一次的东西”,“你还记得第2个东西”替换上面的东西。



Answer 22:

不完全是一个黑暗的秘密,但我喜欢把下面的映射到我的.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:野生动物园般的标签导航:

map <S-D-Right> :tabnext<cr>
map <S-D-Left> :tabprevious<cr>


Answer 23:

我喜欢用“sudo的庆典”,和我的系统管理员讨厌这一点。 他锁定“须藤”,所以它只能用命令(LS,输入chmod,CHOWN,六等)的少数使用,但我可以使用vim来获得一个root shell反正:

bash$ sudo vi +'silent !bash' +q
Password: ******
root#


Answer 24:

通常情况下,我喜欢改变当前目录,同时修改 - 所以我必须指定路径少。

cd %:h


Answer 25:

我经常使用多个窗口时,我在一个项目上工作,有时我需要调整它们的大小。 下面是我用什么:

map + <C-W>+
map - <C-W>-

这些映射允许增加和减少当前窗口的大小。 这是很简单,但它的速度快。



Answer 26:

没有一个不起眼的功能,但非常有用和节省时间。

如果您想保存您打开的缓冲区,标签,标志和其他设置会话,可以发出以下命令:

mksession session.vim

您可以通过打开会话:

vim -S session.vim


Answer 27:

:r! <command>

粘贴的外部命令的输出到缓冲器。

做一些数学和文字直接得到结果:

:r! echo $((3 + 5 + 8))

获取的文件列表中写一个Makefile时编译:

:r! ls *.c

别看了这一事实,你在维基百科上阅读,也直接粘贴到你正在写的文件:

:r! lynx -dump http://en.wikipedia.org/wiki/Whatever


Answer 28:

地图F5快速ROT13您的缓冲区:

map <F5> ggg?G``

您可以使用它作为一个老板键:)。



Answer 29:

我今天这样一个刚刚发现通过NSFAQ :

注释的代码块。

按CTRL-V进入块模式。

选取您要评论的块。

打我(我的资本),并在该行的开头输入您的注释字符串。 (//为C ++)

击中ESC和选定的所有行将具有//预置到该行的前面。



Answer 30:

我使用vim几乎任何文本编辑我做的,所以我很多时候使用复制和粘贴。 问题是,VIM在默认情况下会时常歪曲进口通过粘贴文本。 停止这个问题的方法是使用

:set paste

之前您的数据粘贴。 这将阻止它搞乱。

请注意,您必须发出:set nopaste恢复自动缩进。 粘贴预格式化文本的两种方式是剪贴板寄存器( *+ ),和:r!cat (你将不得不结束与^ d粘贴片段)。

有时还有助于开启高对比度配色方案。 这是可以做到的

:color blue

我注意到,它并没有在VIM我用的所有版本工作,但它确实在大多数。



文章来源: What are the dark corners of Vim your mom never told you about? [closed]
标签: unix vim editor vi