Vim入门到入土

0 Vim的操纵模式

Vim实际上可以看出一门语言, 其移动和读写有自己的模式, 了解这个思维实际上比掌握后续的命令更重要, 这里先给出其不同操作的操作模式:

  • common mode
  1. {count}{motion}{operator}{operator}{count}{motion}
    • count: 执行次数
    • motion: 定位
    • operator: 执行的动作
      这个操作模式是完成最基本的动作
      例如:d5w就表示删除往后的5个单词
      其中{count}可以省略, 也就是1,
  2. {operator}{a|i}{text-object}
    • operator: 同样是执行的动作
    • {a|i}: a表示包括指定的文本对象包括空白字符, i表示包括指定的文本对象不包括空白字符
    • {text-object}:
      • w: word
      • s: sentence
      • b|(: ()包裹的内容
      • B|{: {}包裹的内容
      • "|': 被引号包裹的内容
        例如: daw 删除后续包括空白字符的文本对象
  • visual mode
  1. {trigger visual mode}{motion}{operator}
    common mode的第一种操作模式类似, 只不过提前进入visual mode
  • ex命令
  1. :[range]command[options]
    对指定范围的内容执行command, options不固定
    例如: :10,12d a 表示删除10-12行的内容

  2. 搜索替换: :[range]s/{pattern}/{substitute}/{flags}

    • range: 范围
    • s: 就是具体的一个command
    • pattern: 模式, 支持正则表达式
    • substitute:替换内容
    • flags:
    • g: 全局替换
    • i: 无视大小写
    • c: 替换前确认

1 打开/关闭

1.1 新标签页

在Vim中,可以使用tabnew命令来创建一个新的标签页(tab page)。标签页类似于编辑器中的分页,允许你在同一个Vim实例中同时打开多个文件,并在它们之间进行切换。以下是如何使用tabnew命令的一些示例:

  1. 打开一个新的空白标签页:

    1
    :tabnew

    这将创建一个新的空白标签页,你可以在其中开始编辑新的文件。

  2. 打开一个特定的文件在新的标签页中:

    1
    :tabnew filename

    这将在一个新的标签页中打开名为”filename”的文件。可以替换”filename”为你想要打开的实际文件的路径。

  3. 在不同的标签页之间切换:

    • 切换到下一个标签页:按下gt键。
    • 切换到上一个标签页:按下gT键。
    • 可以按下{N}gt,其中{N}是标签页的序号。例如,如果要切换到第三个标签页,可以按下3gt
  4. 关闭当前的标签页:
    :tabclose: 将关闭当前的标签页,并且如果标签页中有未保存的更改,Vim会提示你保存它们。

  5. 查看所有的标签页:
    :tabs : 这将显示所有打开的标签页,并且会在当前标签页前面标记一个”%”。

  6. 使用:tabnext:tabprev命令:
    使用:tabnext:tabprev命令来切换到下一个或上一个标签页:

    • :tabnext: 切换到下一个标签页
    • :tabprev: 要切换到上一个标签页
  7. 退出当前标签页

    • :q: 退出当前标签页
    • :qa: 退出所有标签页
    • tabo: 退出其他标签页
  8. 打开或新建文件
    :edit {relative-path-to-file}

1.2 split分割页

  1. 新建分割页
    :sp {relative-path-to-file}: 水平分页
    :vsp {relative-path-to-file}: 垂直分页
  2. 当前分隔页的副本
    <CTRL-W> S 水平方向
    <CTRL-W> V t垂直方向

1.3 文件IO

  1. :w 保存文件
  2. :wq 保存文件并退出
  3. :q! 强制退出

2 基本字符和单词操作

2.1 基本定位操作

  1. jkhl:这些是光标移动操作。

    • j:向下移动一行。
    • k:向上移动一行。
    • h:向左移动一个字符。
    • l:向右移动一个字符。
  2. w 向前移动一个单词。按下w键会将光标移动到下一个单词的开头。

  3. b 向后移动一个单词。按下b键会将光标移动到前一个单词的开头。

  4. e 移动到单词的末尾。按下e键会将光标移动到当前单词的末尾。

  5. 0 移动到行的开头。按下0键会将光标移动到当前行的开头。

  6. $ 移动到行的末尾。按下$键会将光标移动到当前行的末尾。

  7. ^ 移动到行的第一个非空字符。按下^键会将光标移动到当前行的第一个非空字符处。

  8. Ctrl-d 向下滚动半屏。按下Ctrl-d键会将屏幕内容向下滚动半个屏幕。

  9. Ctrl-u 向上滚动半屏。按下Ctrl-u键会将屏幕内容向上滚动半个屏幕。

  10. G 移动到文件的最后一行。按下G键会将光标移动到文件的最后一行。

  11. gg 移动到文件的第一行。按下gg键会将光标移动到文件的第一行。

  12. L 将光标移动到屏幕的底部行。

  13. M 将光标移动到屏幕的中间行。

  14. H 将光标移动到屏幕的顶部行。

2.2 组合定位

在Vim中,fFtT是用于在当前行内搜索字符的命令,结合它们可以实现各种组合操作。以下是这些命令的详细解释

  1. f{char}:在当前行内查找下一个出现的字符{char},光标会停在找到的字符上。例如,如果你想查找下一个出现的字母a,可以按下fa

  2. F{char}:在当前行内查找上一个出现的字符{char},光标会停在找到的字符上。例如,如果你想查找上一个出现的字母a,可以按下Fa

  3. t{char}:在当前行内查找下一个出现的字符{char},光标会停在找到的字符前一个位置。例如,如果你想查找下一个出现的字母a,可以按下ta

  4. T{char}:在当前行内查找上一个出现的字符{char},光标会停在找到的字符前一个位置。例如,如果你想查找上一个出现的字母a,可以按下Ta

这些命令通常与其他操作一起使用,以便在文本中快速导航和编辑。例如,如果你想删除从光标位置到下一个出现字母a的字符之间的文本,你可以使用dt{char},其中{char}是你想要删除的字符。这些命令的组合允许你在Vim中以精确的方式执行各种文本编辑任务。

重点: 如何连续进行重复的定位操作?

答案: 使用;,:

  • ;: 重复到下一个定位的位置, 例如使用fa后跳转到了往后第一个a出现的位置, 在使用;可以到第二个a出现的位置, 以此类推
  • ,: ;的反向操作

3 插入与删除

3.1 基本插入

  1. i:进入插入模式。按下i键会使光标位于当前位置,你可以在光标前插入文本。

  2. I:进入插入模式并移到行首。按下I键会将光标移到当前行的第一个非空字符位置,然后你可以开始插入文本。

  3. a:进入插入模式并移到光标后面。按下a键会使光标位于当前位置的下一个字符后面,你可以在光标后插入文本。

  4. A:进入插入模式并移到行尾。按下A键会将光标移到当前行的末尾,你可以在行尾插入文本。

  5. o:在下面插入新行并进入插入模式。按下o键会在当前行的下面插入一个新的空行,并将光标移动到新行的起始位置,你可以在新行中插入文本。

  6. O:在上面插入新行并进入插入模式。按下O键会在当前行的上面插入一个新的空行,并将光标移动到新行的起始位置,你可以在新行中插入文本。

这些命令允许你在插入模式中灵活地编辑文本。你可以使用它们来快速插入、编辑和调整文本,提高编辑效率。要退出插入模式并返回正常模式,只需按下Esc键。

3.2 基本删除

  1. x:删除光标下的字符。按下x键会删除光标所在位置的字符。

  2. X:删除光标前面的字符。按下X键会删除光标前一个位置的字符。

  3. dd:删除当前行。按下dd键会删除光标所在行的所有内容,并将其剪切到剪贴板。

  4. D:删除从光标位置到行尾的内容。按下D键会删除从光标位置到行尾的所有字符。

  5. dw:删除从光标位置到下一个单词的开头。按下dw键会删除从光标位置到下一个单词的开头的所有字符。

  6. de:de命令将删除光标位置到当前单词的末尾的文本,包括当前单词的最后一个字符。这个命令通常用于删除一个单词的内容。

  7. db:删除从光标位置到前一个单词的开头。按下db键会删除从光标位置到前一个单词的开头的所有字符。

  8. :n1,n2d:删除从行号n1到行号n2的所有行。例如,:1,5d会删除第1行到第5行的所有行。

  9. :d{n}:删除第n行。例如,:d10会删除第10行。

  10. dG:删除从光标位置到文件末尾的所有行。

  11. dgg:删除从光标位置到文件开头的所有行。

  12. :1,$d:删除整个文件的内容。

这些是一些基本的删除命令,它们可以帮助你在Vim中快速删除文本。请注意,删除的文本通常会被复制到剪贴板,因此可以使用粘贴命令(如p)将其恢复到其他位置。如果你需要撤销删除操作,可以使用撤销命令(如u)来撤销最后的编辑操作。

3.3 基本替换

在Vim中,替换命令是用于替换文本的关键操作之一。c命令(”change”)是用于删除并进入插入模式的命令,通常与其他操作一起使用来替换文本。以下是基本的替换命令以及与c命令相关的一些衍生命令和组合:

  1. c{motion}:使用c命令可以替换{motion}范围内的文本。例如:

    • cw:替换当前单词。
    • c2w:替换下两个单词。
    • c$:替换光标位置到行尾的文本。
  2. cc:替换整行。按下cc键会删除当前行并进入插入模式,允许你替换整行文本。

  3. C:替换从光标位置到行尾的文本。按下C键会删除从光标位置到行尾的文本并进入插入模式。

  4. s:替换当前字符。按下s键会删除光标下的字符并进入插入模式,允许你替换当前字符。

  5. S:替换整行。按下S键会删除整行并进入插入模式,允许你替换整行文本。

  6. r{char}:这是一个简单的字符替换命令。按下r键后,再紧跟一个字符{char},会将光标下的当前字符替换为指定的字符。例如,如果你想将当前字符替换为x,只需按下rx。替换完成后,光标会自动移动到下一个字符。这是一个快速替换单个字符的方式。

  7. R:这是替换模式命令。按下R键后,会进入替换模式,此时你可以连续输入字符,替换光标所在位置及其后续字符。替换模式允许你在一段文本中进行逐字符替换,直到你按下Esc键退出替换模式。这对于逐字符编辑文本非常有用。

  8. :s/{pattern}/{replacement}/g:使用替换命令来替换所有匹配{pattern}的文本。例如,:s/old/new/g会将所有匹配old的文本替换为new

  9. :s/{pattern}/{replacement}/gc:与上述命令类似,但会在替换前要求确认。你可以选择是否替换每个匹配项。

  10. :%s/{pattern}/{replacement}/g:在整个文件中替换所有匹配{pattern}的文本。注意,正则表达式中的特殊字符需要使用\转义。

3.4 复制和粘贴

  1. y 复制当前字符
  2. yy 负责一整行
  3. yw 复制一个单词
  4. y2w 复制2个单词
  5. p 粘贴

4 查找内容和替换

4.1 查找

  1. 查找指定内容
  • 向后查找内容
    1
    /*** search for content***
    n 查找下一个
    N 查找上一个
    1
    2
    - 向前查找内容
    ?*** search for content***
  1. 辅助查找指令
    1. c-G 查看当前位置信息
    2. *G 向前查找内容

4.2 查找并替换

  1. :s/{{old}}/{{new}} 用new替换old,普通替换, 替换范围为当前行的第一个
  2. :s/{{old}}/{{new}} 用new替换old,普通替换, 替换范围为当前行的所有
  3. :%s/{{old}}/{{new}}/g 用new替换old,普通替换, 替换范围为所有文档范围
  4. :%s/{{old}}/{{new}}/gc 用new替换old,普通替换, 替换范围为所有文档范围, 并在每一次替换时进行确认
  5. :{{#}},{{#}}s/old/new/g #指定了替换操的行范围
    范围除了数字外还包括:
    $: 将光标移到文件的最后一行,
    0: 将光标移到文件的第一行
    %: 整个文件
    '<,'>: visual mode下选择的内容

5 组合操作

5.1 跳转组合命令

  1. c-o 返回上一个位置
  2. c-i 重新跳转到某位置

5.2 基本命令组合

1
2
3
10j 向下移动10
10de 向后删除10个单词
c2w 向后删除2个单词并进入编辑模式

5.3 括号组合操作

对于常见的括号包括 [], {}, (), <>, “”, ‘’
以{}为例:

1
2
`ci{` 删除{}内的内容并进入编辑模式
`di{` 删除{}内的内容

6 Visual mode 操作

  1. v 进入模式
  2. V 选择整行
  3. ~:反转大小写

7 其他操作

7.1 导入其他文件内容

1
:r filename

将导入 filename 指定文件的内容

7.2 配置项设置

  1. :set nu 显示行号
  2. :set nonu 取消显示行号
  3. :set ic 输入时忽略大小写
  4. :set noic 取消输入时忽略大小写
  5. :set hls is 高亮匹配查找的内容
  6. :nohlsearch 取消高亮匹配查找的内容
  7. :set nocp 确保vim没有在兼容模式

7.3 执行命令行命令

1
:! command

执行command操作
以下是几个特殊的指令
@:: 重复上一个指令
@@: 继续重复