zoukankan      html  css  js  c++  java
  • vim 命令学习(基础篇)

    【1】三种模式

    vi的三种模式:命令模式、末行模式、编辑模式。

    三种模式相互切换逻辑与命令图:

    1.命令模式是vi的默认模式(即每打开一个文件时的初始模式)。

    2.命令模式切换至末行模式,末行模式切换至命令模式。

    (1)命令模式->末行模式

    命令:冒号(英文)

    (2)末行模式->命令模式

    命令1:按两下esc键

    命令2:删除末行的全部命令

    备注:两种命令等价,任选其一即可。

    3.命令模式切换至编辑模式,编辑模式切换至命令模式。

    (1)命令模式->编辑模式

    命令1:按键i: 在光标所在字符前开始插入

    命令2:按键a: 在光标所在字符后开始插入

    命令3:按键o: 在光标所在行的下面另起一新行插入

    命令4:按键s: 删除光标所在的字符并开始插入

    命令5:按键I: 在光标所在行的行首开始插入(如果行首有空格则在空格之后插入)

    命令6:按键A: 在光标所在行的行尾开始插入

    命令7:按键O: 在光标所在行的上面另起一行开始插入

    命令8:按键S: 删除光标所在行并开始插入

    备注:各命令均可切换至编辑模式,具体情况活学活用。

    (2)编辑模式->命令模式

    命令:按一下esc键

    备注:末行模式不能直接切换至编辑模式,必须先切换到命令模式,再进行切换至编辑模式。

    【2】命令模式

    命令模式基本的操作有:光标的移动、删除、复制、粘贴、更改、翻屏、退出等。

    1、光标的移动

    (1)光标移到最后一行 [G] (大写G)

    (2)光标移到第一行 [两个g] (小写g)

    (3)光标移到指定行 [行数 + G] (大写G)

    (4)光标上移或下移 [行数 + ↑ 或 行数 + ↓]

    (5)光标移至当前行内容的首字符 [^]

    (6)光标移至当前行尾(行内容的尾字符) [$]

         等价于:光标移至当前行尾(行内容的尾字符)[End]

    (7)光标移至当前行首(第一个字符) [0](数字0)

         等价于: 光标移至当前行首(第一个字符)[Home]

    (8)光标左移一个字符 [h]

    (9)光标右移一个字符 [l]

    (10)光标上移一行 [k]

    (11)光标下移一行 [j]

    2、删除

    (1)删除光标下的字符 [x](小写x)

    (2)删除光标后的#个字符(包括当前光标下的字符) [#x](小写x)

    (3)删除光标左边的字符 [X] (大写X)

    (4)删除光标左边的#个字符(不包括当前光标下的字符) [#X] (大写X)

    (5)删除光标所在的行 [dd](注意:删除后行号重置,即后面的行内容上移)

    (6)删除从光标所在行向下的#行 [#dd]

    (7)删除当前行 [D](注意:当前行置空,保留当前行号)

    3、复制

    (1)复制光标所在位置的一个字 [yw]

    (2)复制光标所在位置的#个字 [#yw]

    (3)复制光标所在的一行 [yy]

    (4)复制从光标所在行数的#行 [#yy]

    4、粘贴

    (1)粘贴 [p] (粘贴在所在行的下一行)

    (2)取消操作 [u]

    5、更改

    (1)更改光标所在位置的一个字 [cw]

    (2)更改光标所在位置的#个字 [#cw]

    6、翻屏

    (1)向下翻屏 [Ctrl+f]

    (2)向上翻屏 [Ctrl+b]

    (3)向前翻半屏 [Ctrl+d]

    (4)向后翻半屏 [Ctrl+u]

    7、退出

    (1)在命令模式时,若想退出vi,可以直接输入命令:ZZ (注意:两次大写Z)

         备注:此命令类似末行模式的[:wq],即先保存后退出vi。

    【3】末行模式

    末行模式中基本的操作有:保存、另存、退出、查找、替换。

    1、保存

    命令:[:w] (w即write)

    作用:将已做的更改进行保存。

    2、另存

    命令:[:w + 文件路径]

    作用: 另存和保存命令基本相似,区别在于另存需要指定文件的保存路径。

    3、退出

    (1)命令:[:q] (q即quit)

         作用:不保存退出。

         1.1 若当前文档没有任何改变,此命令可直接退出vi。

         1.2 若当前文档已编辑,使用此命令直接退出时,vi的窗口最末行显示如下信息:

            E37: No write since last change (add ! to override) [翻译:自上次更改以来没有写入(添加!为忽略)]

            发现其实vi并不退出,而是提醒用户当前文档有修改但没有保存,等待用户继续输入命令。

            若的确不想保存修改且要立马退出,可选择强制退出,命令:[:q!](其中!表示强制)

    (2)命令:[:wq]

         作用:先将vi的当前编辑的内容保存,然后再退出vi。

    (3)命令:[:w NewFileName]

         作用:把vi当前文档内容保存到指定的新文件NewFileName中,而当前文档保持不变。

    (4)命令:[:x]

         作用:该命令功能同命令模式下的ZZ命令相同。即同[:wq]。

    4、查找(搜索)

    命令: /或?+ 需要查找的字符串(/用于正向往下搜索,?用于反向往上搜索)

    例如: /abcde 进入搜索abcde字符串的模式

    作用:可使用n(查找下一个)、N(查找上一个),改变光标位置。查找的位置会高亮

    5、替换

    (1)替换命令的完整形式 【:[range]s/src/des/[flags]】

    1.1 [:s/src/des] 把当前行中,src指定的第一个字符串替换成字符串des。src可以是正则表达式。

    1.2 [range]

    有以下一些表示方法:

    不写range : 默认为光标所在的行。

    . : 光标所在的行。

    1 : 第一行。

    $ : 最后一行。

    33 : 第33行。

    'a : 标记a所在的行(之前要使用ma做过标记)。

    .+1 : 当前光标所在行的下一行。

    $-1 : 倒数第二行。(从这条规则可以说明:可以对某一行加减某个数值来取得相对的行)。

    22,33 : 第22~33行。

    1,$ : 第1行 到 最后一行。

    1,. : 第1行 到 当前行。

    .,$ : 当前行 到 最后一行。

    'a,'b : 标记a所在的行 到 标记b所在的行。

    % : 所有行(与 1,$ 等价)。

    ?chapter? : 从当前位置向上搜索,找到的第一个chapter所在的行。(其中chapter可以是任何字符串或者正则表达式)

    /chapter/ : 从当前位置向下搜索,找到的第一个chapter所在的行。(其中chapter可以是任何字符串或者正则表达式)

    备注:上面的所有用于range的表示方法都可以通过+、-操作来设置相对偏移量。

    1.3 [flags]

    这里可用的flags有:

    无 :只对指定范围内的第一个匹配项进行替换。

    g :对指定范围内的所有匹配项进行替换。

    c :在替换前请求用户确认。

    e :忽略执行过程中的错误。

    备注:

    上面的所有flags都可以组合起来使用。

    比如:gc表示对指定范围内的所有匹配项进行替换,并且在每一次替换之前都会请用户确认。

    (2)替换当前行中的内容 [:s/des/to/] (s即substitude)

    [:s/des/to] 将当前行中的第一个des,替换成to。如果当前行含有多个des,则只会替换其中的第一个。

    [:s/des/to/g] 将当前行中的所有des都替换成to。

    [:s/src/des/gc] 将当前行中的所有des都替换成to,但每次替换之前都会询问请求用户确认此操作。

    备注:命令中的src和des都可以是任何字符串,其中src还可以是正则表达式。

    (3)替换某一行的内容 [:#s/src/des/g]

    [:.s/src/des/g] 在当前行进行替换操作。

    [:#s/src/des/g] 在第#行进行替换操作。

    [:$s/src/des/g] 在最后一行进行替换操作。

    (4)替换某些行的内容:[:10,20s/src/des/g]

    [:10,20s/src/des/g] 对第10行到第20行的内容进行替换。

    [:1,$s/src/des/g] 对第一行到最后一行的内容进行替换(即全部文本)。

    [:1,.s/src/des/g] 对第一行到当前行的内容进行替换。

    [:.,$s/src/des/g] 对当前行到最后一行的内容进行替换。

    [:'a,'bs/src/des/g] 对标记a和b之间的行(含a和b所在的行)进行替换。

    其中a和b是之前用m命令所做的标记。

    (5)替换所有行的内容 [:%s/src/des/g]

    [:%s/src/des/g] 对所有行的内容进行替换。

    (6)替换字符串中有/字符

    可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

    [:s#src/#des/#] 替换当前行第一个 src/ 为 des/

    【4】编辑模式

    编辑模式只可以进行编辑输入。

    【5】扩展

    补充几个常用命令

    1、行号显示问题

    一般情况下,vi通过在末行模式中添加:set nu命令进行行号的显示,但这并不是全局的,通常在下一次打开文件时,行号会自动消失。

    为了便于操作,我们通常会修改vi的配置文件,来使得行号显示对全局生效。

    vi的配置文件位于当前用户的家目录。若没有可自行创建。文件名称为.vimrc。

    在当前文件输入:set nu 即可实现全局行号显示有效。

    2、异常关闭处理

    在文件没有正常关闭的情况下,如未保存直接通过远程窗口关闭。

    解决此问题的方式是:删除该文件的交换文件

    提示信息已经十分明确。交换文件.vimrc.swp在文件未被正常关闭时,自动创建。

    所以使用命令:[rm -f .vimrc] 即可

    备注:一般交换文件的通常格式为: 文件名.swp

    3、重做/撤销(末行模式)

    如果想要撤销操作,输入[:u]

    取消撤销为:ctrl + r

    进行多步撤销为: 数字 + u

    4、退出方式:wq与:x有何区别?

    在实际开发中建议使用:x方式退出。两者区别在于:

    (1):wq方式无论文件是否有修改都会对文件的最后修改时间进行重置。

    (2):x只有在文件内容真正改变时才会重置文件最后修改时间。

    5、ctrl + s 的梗

    现象:由于习惯在windows下写程序按ctrl+s保存代码,所以在用vi/vim时,想保存时也习惯性的按ctrl+s

    结果:终端如同死掉了一样卡住没有任何反应。

    分析原因:vi/vim终端按ctrl+s:终止屏幕输出(即停止回显),你敲的依然有效,只是看不见。

    作用其实就像登录系统时输入密码,是不是看不见你敲的东东而已。

    解决方案:

    遇到如上卡死情景:在vi/vim终端,按ctrl+q:恢复屏幕输出,你刚才敲的内容都会显示出来了。

    6、vim编辑器,经常出现字符上有黄色阴影部分

    比如,刚刚不小心在命令行模式同时按了[shift + #]之后,光标下的字符串出现了黄色阴影。

    经过学习,发现可以在编辑器命令行模式执行[: nohlsearch] 即可解决。

    【6】总结

    VI是UNIX操作系统 和 类UNIX操作系统中最通用的全屏幕纯文本编辑器。

    附vim键盘图:

     

    Good Good Study, Day Day Up.

    顺序 选择 循环 总结

  • 相关阅读:
    228. Summary Ranges
    227. Basic Calculator II
    224. Basic Calculator
    222. Count Complete Tree Nodes
    223. Rectangle Area
    221. Maximal Square
    220. Contains Duplicate III
    219. Contains Duplicate II
    217. Contains Duplicate
    Java编程思想 4th 第4章 控制执行流程
  • 原文地址:https://www.cnblogs.com/Braveliu/p/8577375.html
Copyright © 2011-2022 走看看