0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vim使用技巧总结

马哥Linux运维 来源:未知 作者:胡薇 2018-06-06 09:20 次阅读

转眼上vim的“贼船”有一年多了。从PHP到C,都在用。想要真正用vim于日常的编码工作,必然需要一些插件的支持。不过本文并不打算总结插件,笔者认为 vim 的两个精髓:组合和重复跟插件也没有什么关系。

命令模式应该是常态

在大多数编辑器中,相信大家都喜欢敲几个单词就 “保存(ctrl+s)” 一下。而在 vim 中,保存是:w,而且需要在命令模式下进行。因此,往往要按Esc:w多达三个键才能保存。很多初学者十分诟病这个设计。事实上,经常使用Esc切换到命令模式才是 vimer 需要练就的第一个重要的反射行为。可以毫不夸张的说,只要你不在输入文字,就应该切换在命令模式下,命令模式应该是常态!

HJKL 让右手歇歇,毕竟右手 “很累”

这是 vim 中的光标上下左右的移动,刚开始使用 vim 的同学可能觉得这并没有什么卵用,我用键盘上的上下左右就可以了!我们知道,vim 的大部分快捷键需要在命令模式下完成,而且 HJKL 也是需要在命令模式下才生效的,如果你经常在插入模式下工作,当然不会去用 HJKL。然而,当你真正开始更多的使用命令模式的时候,你会懒到不想把右手挪到 “上下左右” 那儿去,这个时候 HJKL 成为无需思考的反射行为。HJKL 的好处就是减少了右手的位移距离。毕竟右手还有很多 “事情” 要做。

让你的操作可重复

我们来举个例子,假设如下文本

onetwo three four five six

我希望改成

"one","two","four","five","six"

首先光标定位在该行的行首,可使用^。然后键入f␣(␣表示空格),此时光标定位在 one 和 two 之间的空格处,然后键入c␣","(修改空格,进入插入模式,然后增加","):

one","two three four five six

接着按;.,光标将先查找下一个空格,即重复f␣,这个空格位于 two 和 three 之间,然后.可以重复上一次的修改操作,即c␣",":

one","two","three four five six

接着重复按若干次;.即可完成所有中间字符的修改:

one","two","three","four","five","six

最后应用I和A,添加开始和最后的双引号就可以了。

通过这个例子,vimer 必须要领会的一个精髓是:让你的操作可重复!!。如果上面的例子,我们用l或者->来定位空格的话,由于 one、two、three 这些单词的长度是不确定的,我们无法事先知道需要按多少次l,所以l定位是不可重复的。而通过f可以重复我们的查找操作,从而精确的定位到空格。另外,如果我们通过xi","代替c␣","也是不可重复的,因为xi","表示先删除空格,然后进入插入模式后键入",",这样就是两次分开的修改操作,而最近的操作变成了 “进入插入模式后键入","”,如果通过.重复这个操作,是无法删除空格的。

这需要大量的实践和练习,才能改掉鼠标流的思维定式。一般来说,尽量多用f、c、r是不错的选择。另外,尽可能的利用A、a、o、O来进入插入模式,而不是每次通过i进入插入模式。

高效移动

光标移动效率是 vim 程序员达到甚至超过鼠标流程序员的关键技能。vim 中的移动光标的方式有很多,我来举几个我实际使用过程中应用比较频繁的技巧:

set relativenumber(显示相对行号)。我无意间发现的一个十分实用的技巧,比set number显示行号更好用。通过这个设置,行号的显示会根据当前的光标的相对位置显示成偏移数,并动态变化。这个好处是,可以利用数字+j数字+k来进行多行跳转,因为是编译行数,所以数字不会太大。否则就算要向下移动 10 行,我们可能也需要用138gg。

w、e、b:按照单词进行前后光标跳转,也可以组合数字进行跳转,不过以我的经验,与其去算要跳多少个单词,不如多按几次吧。

I、A:移动到行首或行末的第一个字符处,并进入插入模式。

H、M、L:光标分别跳转到可视区域的最上面、中间、最下面。

Ctrl+D、Ctrl+U:有时,需要看的文本不在可视区域,通过这些组合进行上下翻页。

^、$、0:光标移动到行首和行尾(0 是绝对行首)。不过因为^和$都需要同时按住 shift,而且数字键我们往往难以盲打,所以我一般直接使用I+Esc、A+Esc。

%:移动到与当前括号匹配的括号处。

gj、gk:有时可视区域不够宽,而一行的字符有很多,导致了 wrap。那么通过 jk 是无法直观的定位到同一物理行,却不在同一个可视行里的位置,此时需要gj和gk。

f、F:通过上面的例子,我们知道,f是 find 的意思,可以在一行内查找某个字符出现的位置,并直接跳转过去。比如f<可以从当前光标开始向右,找到第一个<,并移动过去。F 是向左查找。

;:重复上一次的f查找操作

.:重复上一次的修改操作,跟;可以说是好基友,经常用来实现一些简单的重复操作,比录制宏要简单很多。经常有意识的使用这种简单重复,是 vimer 编辑思路进阶的分水岭。

高效修改

vim 的另一个优势是高效修改。在 vim 下修改就要改掉传统鼠标流的思维方式,切忌提到修改就按i。有很多高效的修改办法,而且这些办法往往是可重复的。下面举一些我常用的例子:

r:替换模式,替换当前光标所在位置的一个字符。虽然你同样可以i进入插入模式,然后删掉那个字符,再输入需要的字符,但这种操作是鼠标流思维方式。替换是一个可重复操作,多用没坏处。

cw:change word可以删除从当前位置到一个单词的结尾,并进入插入模式。这种操作常用于修改一个变量。比如对于:int count=0;希望把count改成cnt,那么当光标位于c字符处的时候,按cw可直接删除count,并进入插入模式。然后直接继续输入cnt即可。

caw:change a word可以删除当前光标所在位置的单词。对于int count=0;的例子,如果此时光标在count中间某处,比如u处,直接键入caw可以达到同样的效果。所以caw更强大一些。

c$、c^:举一反三,可以猜到c$是从当前位置删除到行尾,并进入插入模式。

ci":change inside "可以用于修改当前位置附近,在相同配对的"中的内容。比如对于const char *str="hello world";。当在双引号中间的任意位置键入ci"可以直接清空字符串,并继续输入新的希望的字符串。

ci(、ci[:举一反三change inside (change inside [。

cit:这个比较特殊,可以直接编辑匹配的 xml 标签中的内容!经常编写 html 的童鞋可以熟悉一下。

yi":yank inside "猜猜是啥意思?类似ci"只是把编辑操作编程复制操作,因为y是复制!是不是很强大。

ya":yank around "复制整个字符串,包括双引号。

yw、yaw、daw、d$…:好了,这些可以” 发明” 出来了。

o、O:向下向上增加空行

u、Ctrl+r:undo 和 redo

上面的例子体现了 vim 组合的思想,很多命令可以通过组合得到不同的效果。

Visual 模式是鼠标流后遗症,不过也有妙用

v、V、Ctrl+v是 Visual 模式,类似用鼠标选中一些文本。我在早期使用 vim 时候,十分喜欢用v,比如要删除一个单词,我往往会用vwd,试图用vw选中一个单词,然后d删除。这种方式明显是鼠标流的后遗症。直到我学会上面介绍的一些技巧后,v已经很少用了。不过Ctrl+v是Block Visual模式,类似选中列,这个技巧有时很有用。比如有如下文本:

onetwothreefour

希望变成

"one, two, three, four"

首先将光标定位到 one 的 o 处,Ctrl+v,3j,$,A,,,Esc,V,3j,J。这一套连招下来,出来了:

one, two, three, four,

如果要合的行数很多,就比较有优势了。问我怎么知道按3j,上文提到的set relativenumber帮到你。

总结

在开发效率上,不敢说 vim 优于 IDE,不过 vim 的编辑和修改速度是比鼠标快的。使用 vim 的过程就是自我否定和自动重塑的过程,如果你不断的学习技巧的话,编辑习惯会一再被推翻,一再重塑。不断有新的理解注入到日常的工作中。最终会形成自己编辑风格。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • VIM
    VIM
    +关注

    关注

    0

    文章

    129

    浏览量

    15177
  • PHP
    PHP
    +关注

    关注

    0

    文章

    451

    浏览量

    26445

原文标题:练了一年再来总结的 Vim 使用技巧

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    12个超实用的vim编辑技巧

    vim 是一个很好用的编辑器,应用十分广泛。但关于 vim,总有一些你不知道的事情,我们需要持续不断的学习。
    发表于 11-25 09:26 750次阅读

    关于linux vim命令 总结(二)

    文件的字符数:w :write的缩写:edit(e) 打开,编辑ZZ保存并退出zz将光标所在行移至窗口中间:q退出vim -R file 用只读模式打开file unix中view file等效,通过w
    发表于 09-04 10:27

    关于linux vim命令 总结(二)

    文件的字符数:w :write的缩写:edit(e) 打开,编辑ZZ保存并退出zz将光标所在行移至窗口中间:q退出vim -R file 用只读模式打开file unix中view file等效,通过w
    发表于 09-10 10:38

    linux vim命令总结

    命令的参数 如 :write !wc 返回当前文件的字符数 :w :write的缩写 :edit(e) 打开,编辑 ZZ保存并退出 zz将光标所在行移至窗口中间 :q退出 vim -R file 用只读模式
    发表于 07-03 00:27

    VIM for windows

    VIM for windows Vim目前已经有类Unix版和Windows版,尽管vim较vi已经改良了不少,但是初次使用还是会一头雾水,不知如何操作,所以学习vim要首先过2关。
    发表于 03-13 14:41 30次下载

    vi/vim使用进阶

    vi/vim使用进阶
    发表于 10-29 11:00 28次下载
    vi/<b class='flag-5'>vim</b>使用进阶

    VIM高级技巧

    VIM高级技巧
    发表于 10-29 11:06 9次下载
    <b class='flag-5'>VIM</b>高级技巧

    总结使用 Vim 的过程中不得不了解的一些指令和注意事项

    Vim 是一个上古神器,本篇文章主要持续总结使用 Vim 的过程中不得不了解的一些指令和注意事项,以及持续分享一个前端工作者不得不安装的一些插件,而关于 Vim 的简介,主题的选择,以
    的头像 发表于 12-27 16:44 4579次阅读

    干货:两个关于Vim的使用问题及小技巧

    最近在使用 VIM 时遇到两个新的问题,觉得还很挺有价值的。现在将处理方法总结后,分享给大家。
    的头像 发表于 08-31 12:09 2698次阅读
    干货:两个关于<b class='flag-5'>Vim</b>的使用问题及小技巧

    pathogen.vim Vim插件

    ./oschina_soft/vim-pathogen.zip
    发表于 05-24 10:21 0次下载
    pathogen.<b class='flag-5'>vim</b> <b class='flag-5'>Vim</b>插件

    vim-go Vim的Go开发插件

    ./oschina_soft/vim-go.zip
    发表于 05-24 09:42 1次下载
    <b class='flag-5'>vim</b>-go <b class='flag-5'>Vim</b>的Go开发插件

    vim-switchtoinc Vim插件

    ./oschina_soft/vim-switchtoinc.zip
    发表于 05-24 09:19 3次下载
    <b class='flag-5'>vim</b>-switchtoinc <b class='flag-5'>Vim</b>插件

    vim-vala vim的vala扩展

    ./oschina_soft/vim-vala.zip
    发表于 05-24 16:57 3次下载
    <b class='flag-5'>vim</b>-vala <b class='flag-5'>vim</b>的vala扩展

    Vim指令总结

    对于未使用过 Vim 的朋友来说,可能还无法体会到这种感觉。由于使用 Vim 有一定的学习成本,只有做到非常熟练的程度才能感受到它带来的快捷。 这里我就自己日常有使用过的 Vim 指令做一个
    的头像 发表于 11-01 10:15 250次阅读

    linux怎么保存退出vim

    在Linux系统中,使用vim作为编辑器是非常常见的。vim是一个强大的文本编辑器,拥有丰富的功能和快捷键。保存并退出vim可以通过以下步骤完成: 打开vim编辑器:在Linux命令行
    的头像 发表于 11-27 14:19 3290次阅读