vim学习笔记

1 vim 简介

1.1 vim 介绍

  • vi 介绍: vi是visual interface的简称,是Linux中最经典的文本编辑器,具有 “编辑器之神” 的称号。vi的核心设计思想是:让程序员的手始终保持在键盘的核心区域就能够完成所有的编辑操作。

  • vim 介绍: vim是vi improved的简称,是从vi发展出来的一个文本编辑器,在代码补全、编译及错误跳转等方便编程的功能上特别丰富,在程序员中被广泛使用。vim的设计理念是命令的组合。用户学习了各种各样的文本间移动、跳转的命令和其它的普通模式的编辑命令,并且能够灵活组合使用这些命令,则能够比那些没有模式的编辑器更加高效的进行文本编辑。同时vim与很多快捷键设置和正则表达式类似,可以辅助记忆。并且vim针对程序员做了优化。

1.2 vim 使用

  • vim 使用:在shell终端中使用以下命令即可以使用vim打开指定路径下的指定文件,然后即可对文件内容进行编辑。
    vim /path/filename
    
    说明:如果打开的文件不存在,则会创建该文件。

1.3 vim 模式

  • 常用模式: vim有多种工作模式,但是常用的只有以下种:

    模式名称模式说明
    命令模式用户启动vim时,首先进入的便是命令模式。在该模式下,键盘输入的字符都会被当做命令而被执行。
    该模式下可进行:跳转、查找、删除、替换、复制、粘贴、撤销、恢复、缩进等操作。
    插入模式在该模式下,可以对文本的内容进行编辑。
    末行模式在该模式下,可以执行保存、退出等操作。
    可视模式在该模式下,可以对内容进行选取等操作。
  • 模式切换:
    在这里插入图片描述
    切换说明:插入模式、末行模式、可视模式,这三者之间都不能直接切换,必须先切换成命令模式才能切换到对应模式。

1.4 vim 键盘

  • vim 键盘:
    在这里插入图片描述

2 命令模式

2.1 跳转命令

  • 方向移动:

    命令功能
    h光标向左移一位
    j光标向下移一位
    k光标向上移一位
    l光标向右移一位
  • 行内移动:

    命令功能
    0光标移至行首
    $光标移至行尾
    ^光标移至当前行的第一个非空字符
    g_光标移至当前行的最后一个非空字符
    b光标移至上一个词的开头
    w光标移至下一个词的开头
    e光标移至下一个词的结尾
    ge光标移至上一个词的结尾
    fa光标移至下一个a出现的位置
    Fa光标移至上一个a出现的位置
    ta光标移至下一个a出现位置的前一个位置
    Ta光标移至上一个a出现位置的后一个位置
  • 行间移动:

    命令功能
    gg光标移至文首
    G光标移至文尾
    nggnG光标移至第n行的行首
  • 语义移动:

    命令功能
    (光标移至上一句首
    )光标移至下一句尾
    {光标移至上一段首
    }光标移至下一段尾
  • 屏幕移动:

    命令功能
    H光标移至屏幕最顶行的行首
    M光标移至屏幕中间行的行首
    L光标移至屏幕最底行的行首
    Ctrl + u向上翻半页
    Ctrl + d向下翻半页
    Ctrl + b向上翻一页
    Ctrl + f向下翻一页

2.2 查找命令

  • 正向查找命令:在命令模式下输入字符 /,后面紧跟要查找的字符串,然后按回车键,即可执行正向查找,并且查找到指定字符串后,将光标停在该字符串的开头。

    /要查找的字符串
    
  • 反向查找命令:在命令模式下输入字符 ?,后面紧跟要查找的字符串,然后按回车键,即可执行反向查找,并且查找到指定字符串后,将光标停在该字符串的开头。

    ?要查找的字符串
    
  • 查找快捷键:当使用查找命令查找到指定字符串之后,就可以使用以下快捷键继续查找。

    快捷键功能
    n查找下一个
    N查找上一个
    *向下查找当前光标所在的词
    #向上查找当前光标所在的词

2.3 删除命令

  • 删除命令:在命令模式下可以使用删除命令对文本内容进行删除。

    命令功能
    x删除光标处的字符
    nx删除光标处至右侧的 n 个字符(包括光标处的字符)
    dd删除光标所在行
    ndd删除光标处至下方的 n 行
    dw删除光标右侧的词,并删除空隙(包括光标处的字符)
    ndw删除光标右侧的 n 个词,并删除空隙(包括光标处的字符)
    db删除光标左侧的词,不删除空隙(不包括光标处的字符)
    ndb删除光标左侧的 n 个词,不删除空隙(不包括光标处的字符)
    d0删除光标左侧至行首的内容(不包括光标处的字符)
    d$删除光标右侧至行尾的内容(包括光标处的字符)
    D删除光标右侧至行尾的内容(包括光标处的字符)
    J删除本行的回车符,并和下一行合并
  • 删除说明:删除命令删除的内容并没有真正丢失,而是被剪切到了一个内存缓冲区中,可以使用命令将其粘贴到指定位置。

2.4 替换命令

  • 替换模式:在命令模式下可以使用替换命令对文本内容进行替换。

    命令功能
    r把光标处的字符替换成即将输入的 1 个字符
    nr把光标处至右侧的 n 个字符全部替换成即将输入的 1 个字符(包括光标处的字符)
    R进入替换模式,每输入 1 个字符就替换 1 个字符,并使光标向右移动一位
    s进入插入模式,并删除光标处的 1 个字符,以便在删除的位置插入新的内容
    ns进入插入模式,并删除光标处至右侧的 n 个字符,以便在删除的位置插入新的内容
    S进入插入模式,并删除光标所在行的内容,以便重新编辑该行的内容
    nS进入插入模式,并删除光标处至下方的 n 行的内容,以便重新编辑该行的内容
    cw进入插入模式,并删除光标右侧的词,以便在删除的位置插入新的内容
    ncw进入插入模式,并删除光标右侧的 n 个词,以便在删除的位置插入新的内容
    cb进入插入模式,并删除光标左侧的词,以便在删除的位置插入新的内容
    ncb进入插入模式,并删除光标左侧的 n 个词,以便在删除的位置插入新的内容
    c0进入插入模式,并删除光标左侧至行首的内容,以便在删除的位置插入新的内容
    c$进入插入模式,并删除光标右侧到行尾的内容,以便在删除的位置插入新的内容

2.5 复制命令

  • 复制命令:复制命令用于把选择的内容复制到内存缓冲区中,以便稍后使用。

    命令功能
    yaw复制光标处所在的词到内存缓冲区
    yw复制光标处至词尾的内容到内存缓冲区
    yy复制当前行的内容到内存缓冲区
    nyy复制光标处至下方的 n 行的内容到内存缓冲区

2.6 粘贴命令

  • 粘贴命令:粘贴命令用于把内存缓冲区中的内容粘贴到指定的位置。

    命令功能
    p把缓冲区中的内容粘贴到光标的后面
    P把缓冲区中的内容粘贴到光标的前面
  • 粘贴说明:如果缓冲区中的内容是字符或字,则是粘贴在光标的前面或后面;如果缓冲区中的内容为整行正文,则是粘贴在当前光标所在行的上一行或下一行。

2.7 撤销命令

  • 撤销命令:

    命令功能
    u撤销前一次命令的影响

2.8 恢复命令

  • 恢复命令:

    命令功能
    Ctrl + r恢复前一次撤销命令的影响,相当于重做

2.9 缩进命令

  • 缩进命令:

    命令功能
    >>把当前行的内容向右缩进
    <<把当前行的内容向左缩进

2.10 其它命令

  • 其它命令:

    命令功能
    .在新的光标位置重复前面执行过的编辑命令
    ~把光标处的字母大小写转换,并把光标右移一位
    Ctrl + a把光标处的数字加1
    Ctrl + x把光标处的数字减1

3 插入模式

  • 相关命令:从命令模式输入以下命令,即可进入插入模式,并在不同的位置开始对文本内容进行编辑。

    命令功能
    i在光标左侧插入内容
    a在光标右侧插入内容
    o在当前行的下方插入一个新行
    O在当前行的上方插入一个新行
    I在当前行的行首插入内容
    A在当前行的行尾插入内容

4 末行模式

4.1 文件命令

  • 文件命令:在末行模式下,可以对文件执行退出、保存、读取、打开、恢复等命令。

    命令功能
    :q对文件中的内容没有修改的情况下,直接退出
    :q!对文件中的内容做了修改的情况下,退出且不保存
    :wq对文件中的内容做了修改的情况下,先保存再退出
    :w保存当前文件中的内容,但不退出
    :w file把当前文件中的内容另存到新文件 file 中,但不保存当前文件中的内容,也不退出
    :n w file把第 n 行的内容写到新文件 file 中
    :n, m w file把第 n 行至第 m 行的内容写到新文件 file 中
    :1,. w file把第 1 行至当前行的内容写到新文件 file 中
    :.,$ w file把当前行至文末的内容写到新文件 file 中
    :.,.+n w file把从当前行开始的连续 n 行的内容写到新文件 file 中
    :e file在已经启动的vim窗口中打开文件 file
    :r file读取文件 file 中的内容,并插入到光标所在行的后面

4.2 跳转命令

  • 行号命令:在末行模式下,可以跳转到指定行。

    命令功能
    :n跳转到第 n 行的行首

4.3 查找命令

  • 字符串查找命令:插入模式下可以查找指定的字符串,即可以正向查找,也可以反向查找,而且可以使用正则表达式。

    命令功能
    :/str/正向查找字,并将光标移动到下一个包含字符串 str 的行的行首
    :?str?反向查找, 并将光标移动到上一个包含字符串 str 的行的行首
    :/str/w file正向查找,并将第一个包含字符串 str 的行写到文件 file 中
    :/str1/, /str2/w file正向查找,并将包含字符串 str1 的行至包含字符串 str2 的行写到文件 file 中

4.4 删除命令

  • 删除命令:

    命令功能
    :d删除光标所在的行
    :nd删除第 n 行
    :m,nd删除第 m 行至第 n 行
    :1,.d删除第 1 行至当前行
    :.,$d删除当前行至文末
    :/str/d删除从当前行开始的首个包含有字符串 str 的行
    :/str1/,/str2/d删除字符串 str1 至 字符串 str2 的所有行

4.5 替换命令

  • 字符串替换命令:插入模式下可以进行字符串替换,即可以替换首次匹配,也可替换全部匹配,而且可以使用正则表达式。

    命令功能
    : s/str1/str2/在行内查找字符串 str1,如果找到了就用字符串 str2 替换首个的字符串 str1
    : s/str1/str2/g在行内查找字符串 st1,如果找到了就用字符串 str2 替换所有的字符串 str1
    : % s/str1/str2/g在全文中查找字符串 st1,如果找到了就用字符串 str2 替换所有的字符串 str1
    :m,n s/str1/str2/g在第 m 行至第 n 行中查找字符串 str1, 如果找到了就用字符串 str2 替换所有的字符串 str1
    :1,. s/str1/str2/g在第 1 行至当前行中查找字符串 str1,如果找到了就用字符串 str2 替换所有的字符串 str1
    :.,$ s/str1/str2/g在当前行至文末中查找字符串 str1,如果找到了就用字符串 str2 替换所有的字符串 str1
  • 替换命令说明:s 表示后面跟着一串替换的命令;% 表示替换范围是全文;g 表示对指定范围内查找到的字符串全都替换。

4.6 分屏命令

  • 分屏命令

    命令功能
    :sp垂直切分当前窗口,新窗口仍显示当前缓冲区中的内容
    :sp file垂直切分当前窗口,新窗口显示文件 file 中的内容
    :clo关闭活动窗口
    :on只保留活动窗口,关闭其他所有窗口
    Ctrl + w + h切换到当前分屏的左边一屏
    Ctrl + w + l切换到当前分屏的右边一屏
    Ctrl + w + j切换到当前分屏的下方一屏
    Ctrl + w + k切换到当前分屏的上方一屏
    Ctrl + w + w在分屏之间切换
  • 其它分屏:在shell终端里启动vim时也可以开启分屏操作。

    # 垂直分屏
    vim -on file1 file2 ...
    # 水平分屏
    vim -On file1 file2 ...
    

4.7 行号命令

  • 行号命令:在末行模式下,可以设置是否显示行号。

    命令功能
    :set nu显示行号
    :set nonu隐藏行号

5 可视模式

5.1 选择内容

  • 选择内容:进入可视模式之后,利用跳转命令即可选择内容。

    命令功能
    h选中左侧的单位内容
    j选中下方的单位内容
    k选中上方的单位内容
    l选中右侧的单位内容

5.2 替换内容

  • 替换内容:选择内容之后,利用替换命令即可把已选择的内容替换成指定字符。

    命令功能
    r把已选择的所有字符全部替换成即将输入的 1 个字符

5.3 删除内容

  • 删除内容:选择内容之后,利用删除命令即可删除已选择的内容。

    命令功能
    x删除已选中的内容
    d删除已选中的内容
    D删除已选中的内容所在的行

5.4 复制内容

  • 复制内容:选择内容之后,利用复制命令即可复制已选择的内容。

    命令功能
    y复制已选中的内容

5.5 字符转换

  • 字符转换:选择内容之后,利用字符转换命令即可实现字符大小写转换。

    命令功能
    u把已选择的所有字符全部转换成小写字符
    U把已选择的所有字符全部转换成大写字符

如果觉得本文对您有帮助,请关注博主的微信公众号,会经常分享一些Java和大数据方面的技术案例!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值