linux利器之vim编辑器操作大全

本文详细介绍了Vim编辑器的基本模式、光标移动、删除与恢复、可视模式及快速移动大段文字的方法,帮助读者掌握Vim的高级功能,提高编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    作为一个使用vim挺长时间的人,现在来写这篇东西确实是尴尬的,就像很多大神们说的,vim是世界上最好用的编辑器,没有之一。然后前两天又重新看了看vim的那些功能和使用方法,更觉得这么长时间使用vim却远没有用到它的强大之处。所以这里对常用的vim功能和用法做一个总结,自己时常也能翻看熟悉一下。

    看过学习vim使用方法的几条建议,也一并写来警示一下自己吧:学习vim在开始时是痛苦的;需要时间和不断地练习,就像你学习一个乐器一样;不要期望你能在3天内把vim练得比别的编辑器更有效率(像博主这种应该需要两周以上的苦练)。

    首先需要说明一下的是,vim有四种基本模式:

        1)命令行模式:键入的内容被解释为命令。

        2)插入模式:键入的内容被插入文件。

        3)可视模式:通过键盘选择、剪切、复制文本。

        4)Ex 模式:使用更多命令(例如:存储文件、替换文本等)。

    博主最先接触vim的时候,也试图像其他的编辑器一样使用,即进入到插入模式后进行笨拙的操作。而事实上,vim真正强大和快速的地方在于其命令行模式。在真正熟练vim之后会发现,使用插入模式的时间越来越少,而越来越倾向于使用便捷的命令行模式。

一、关于打开关闭和模式切换

    可以通过以下命令启动Vim:

    $ vim test.txt

    然后文档被打开了,但还不能进行编辑,此时 Vim 处在命令行模式。该模式下可以使用键盘执行 Vim 命令。

    要插入文本,将光标定位至插入位置(下几节中会说明高效的光标定位方法),然后按 i 进入插入模式。

    按 Esc 即可返回命令行模式。

    编辑完毕后输入:wq再回车可以保存退出,或者:q!可以不保存退出。

    在命令行模式下,有以下一些值得注意的地方:

        1):e <path/to/file>  →打开一个文件

        2):w  →存盘

        3):saveas <path/to/file>  →另存为 <path/to/file>

        4):x, ZZ 或 :wq →保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)

        5):q! →退出不保存 :qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。

        6):bn 和 :bp  →在同时打开很多文件时,可通过这两个命令来切换下一个或上一个文件。

二、关于光标移动

    Vim 中的确可以使用←↓↑→移动光标,不管是命令行模式下还是插入模式下,然而Vim非常不鼓励大家这么做。因为这样你需要把右手从字母区移动到方向键,严重影响效率。

    强烈建议使用hjkl 来移动光标,一个简单的记忆方法是j 就像一个下垂的钩子,是向下移动的。

    另外一些在命令行模式下常用的光标移动基本方法包括:

        1)0 → 数字零,到行头

        2)^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)

        3)$ → 到本行行尾

        4)g_ → 到本行最后一个不是blank字符的位置。

        5)/pattern → 搜索 pattern 的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)

    还有一些用熟练之后很强大的光标定位功能:

        1)NG  →到第 N 行,注意G是大写的

        2)gg  →到第一行。

        3)G  →到最后一行。

        4)w →到下一个单词的开头。

        5)e →到下一个单词的结尾。

        6)% : 匹配括号移动,包括小中大括号(需要把光标先移到括号上)

        7)*和#: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)

        8)fx:移动光标到当前行的下一个 x 处。x 可以是任意一个字母。

        9)tx:和上面的命令类似,但是是移动到 x 的左边一个位置。

        10)Fx:和 fx 类似,不过是往回找。

三、删除、撤销与恢复

    1)x  →删除光标所在处的字符(X 删除光标前的字符)。

    2)d  →代表你将要删除一些内容,在按下 d 之后,搭配移动光标的命令,可指定需要删除的内容。(dW 可以删除至下一个单词,d^ 可以删至行首)

    3)dd  →删除整行。

    4)cw  →删除并替换当前单词。

    5)u  →命令行模式下撤销上一个命令

    6)Ctrl+r  →恢复之前撤销的命令。

四、关于可视模式

    命令行模式按 v 进入可视模式,该模式下会高亮一些文本,可以通过光标移动选择文本。选定后按 y 可以复制文本,c 可以剪切。之后可以使用 p 在光标后粘贴,P 在光标前。

    V 是行选取模式,以行为单位进行选取。

    Ctrl+v是块选取模式,可以选取一块矩形区域中的文本。

五、快速移动大段文字

    在很明确的知道想拷贝或者剪切什么,其实无需进入可视选择模式。在命令行模式下使用一些快捷操作可以节省更多时间:

    1)d{motion}  →剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。

    2)y{motion}  →和上面类似,不过是拷贝。

    3)c{motion}  →和 d{motion} 类似,不过最后进入插入模式。

    4)dd  →剪切当前行。

    5)yy  →拷贝当前行。

    6)cc  →剪切当前行并且进入插入模式。

    7)D  →剪切从光标位置到行尾到剪贴板。

    8)Y  →拷贝当前行。

    9)C  →和 D 类似,最后进入插入模式。

    10)x  →剪切当前字符到剪贴板。

    11)s  →和x类似,不过最后进入插入模式。

    12)p  →粘贴

    13)N<command>  →重复某个命令N次

六、关于搜索和替换

    Vim中有类似正则表达式的搜索查找功能,非常好用。命令行模式下,按下 /,输入搜索内容,按下回车即可。n 查找下一处匹配,N 查找上一处。

    替换文本需要使用 :s/命令(注意冒号),格式为:[范围]s/[原字符串]/[新字符串]/[参数]。

命令

作用

 :s/xxx/yyy/

将当前行中的第一个「xxx」替换为「yyy」

 :s/xxx/yyy/g

将当前行中的所有「xxx」替换为「yyy」

 :s/xxx/yyy/gc

同上,但每次替换都会询问

 :%s/xxx/yyy/g

将整个文件中的所有「xxx」替换为「yyy」

    可以用 :g/ 命令匹配字符串(注意冒号),并对每个匹配执行同一操作。格式为:[范围]:g/[模式串]/[命令]。例如:

命令

作用

 :g/^#/d

删除所有以「#」打头的行

 :g/^$/d

删除所有空行


    看过一个总结的很好的思维导图,整张图放在这里看不清,因此按照不同的操作类型拆分成多张图,列在下面了:








  •                     <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#csdnc-thumbsup"></use>
                        </svg><span class="name">点赞</span>
                        <span class="count">8</span>
                        </a></li>
                        <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#icon-csdnc-Collection-G"></use>
                        </svg><span class="name">收藏</span></a></li>
                        <li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#icon-csdnc-fenxiang"></use>
                        </svg>分享</a></li>
                        <!--打赏开始-->
                                                <!--打赏结束-->
                                                <li class="tool-item tool-more">
                            <a>
                            <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                            </a>
                            <ul class="more-box">
                                <li class="item"><a class="article-report">文章举报</a></li>
                            </ul>
                        </li>
                                            </ul>
                </div>
                            </div>
            <div class="person-messagebox">
                <div class="left-message"><a href="https://blog.youkuaiyun.com/yaoqiang2011">
                    <img src="https://profile.csdnimg.cn/F/5/8/3_yaoqiang2011" class="avatar_pic" username="yaoqiang2011">
                                            <img src="https://g.csdnimg.cn/static/user-reg-year/1x/11.png" class="user-years">
                                    </a></div>
                <div class="middle-message">
                                        <div class="title"><span class="tit"><a href="https://blog.youkuaiyun.com/yaoqiang2011" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">寒小阳</a></span>
                                                    <span class="flag expert">
                                <a href="https://blog.youkuaiyun.com/home/help.html#classicfication" target="_blank">
                                    <svg class="icon" aria-hidden="true">
                                        <use xlink:href="#csdnc-blogexpert"></use>
                                    </svg>
                                    博客专家
                                </a>
                            </span>
                                            </div>
                    <div class="text"><span>发布了121 篇原创文章</span> · <span>获赞 1985</span> · <span>访问量 298万+</span></div>
                </div>
                                <div class="right-message">
                                            <a href="https://bbs.youkuaiyun.com/forums/p-yaoqiang2011" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-messageboard">他的留言板
                        </a>
                                                            <a class="btn btn-sm attented bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">已关注</a>
                                    </div>
                            </div>
                    </div>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值