51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

vim 学习笔记(二)—— 基本导航命令

课程链接:https://www.bilibili.com/video/BV1Cb411u7L9?p=7

本节课介绍基本的文本导航命令。

导航命令 {#导航命令}

命令模式下:

移动光标 {#移动光标}

  • j: 下移一行
  • k: 上移一行
  • l: 右移一列
  • h: 左移一列

  • Ctrl+f: 下翻页
  • Ctrl+f: 上翻页

单词切换 {#单词切换}

  • w: 下一个单词,分辨标点
  • W: 下一个单词,只识别空格
  • b: 上一个单词,分辨标点
  • B: 上一个单词,只识别空格

光标复位 {#光标复位}

  • z - Enter: 将光标所在位置复位至中上部

行间切换 {#行间切换}

  • 0: 光标移至行首
  • ^: 光标移至行内第一个单词
  • $: 光标移至行尾
  • num - gg: 移动至num行第一个单词
  • num - G: 移动至num行第一个单词
  • :num - Enter: 移动至num行第一个单词
  • :$ - Enter: 移动至num行第一个单词
  • gg: 返回文件首部第一个单词
  • G: 到文件最末行第一个单词

工作状态 {#工作状态}

  • Ctrl+g: 显示文件名 工作状态 当前行数

  • g - Ctrl+g: 显示当前行列详细信息

  • :set ruler: 开启标尺信息

开启标尺后,Ctrl+g不再显示重复信息

  • :set noruler: 关闭标尺信息
  • :set ruler!: 对当前ruler设置取反(如果关闭则打开,如果打开则关闭)

快捷键汇总 {#快捷键汇总}

滚动整页或半页 {#滚动整页或半页}

| 导航键 | 描述 | |--------|--------| | CTRL+F | 向下滚动整页 | | CTRL+B | 向上滚动整页 | | CTRL+D | 向下滚动半页 | | CTRL+U | 向上滚动半页 | | CTRL+E | 向下滚动一行 | | CTRL+Y | 向上滚动一行 |

字的导航 {#字的导航}

| 导航键 | 描述 | |-----|----------------| | w | 移动到下一个word的开始处 | | W | 移动到下一个WORD的开始处 | | e | 移动到当前word的末尾 | | E | 移动到当前WORD的末尾 | | b | 移动到前一个word的开始处 | | B | 移动到前一个WORD的开始处 |

word和WORD的区别 {#word和WORD的区别}

word由一系列的字符、数字和下划线构成,而WORD是由非空白符组成的字符串,有空格分开。例如image[0].x = 192.15,那么这个有很多的word组成,而只有三个WORD组成,分别为:image[0].x、=和192.15。

一行中的几个光标特殊位置 {#一行中的几个光标特殊位置}

| 导航键 | 描述 | |-----|------------------| | 0 | 跳转至当前行的开始 | | $ | 跳转至当前行的结束 | | ^ | 跳转至当前行开始的第一个非空字符 | | g_ | 跳转至当前行最后一个非空的字符 |

段落、章节、语句的跳转 {#段落、章节、语句的跳转}

| 导航键 | 描述 | |------|------------| | { | 移动至当前段落的开始 | | } | 移动至下一段落的开始 | | [[ | 移动至当前章节的开始 | | ]] | 移动至下一章节的开始 | | ( | 移动至当前语句的开始 | | ) | 移动至下一语句的开始 |

好好体会段落、章节和语句的含义。其中段落比较使用,可以从一个子函数中来回的跳转。章节:大跳转。语句:空白行分割。

屏幕导航 {#屏幕导航}

| 导航键 | 描述 | |-----|-----------------| | H | 移到屏幕顶端的行-home | | M | 移到屏幕中央的行-middle | | L | 移到屏幕底端的行-last | | nH | 移到屏幕顶端往下的第n行 | | nL | 移到屏幕底端网上的第n行 |

使用当前行重绘屏幕 {#使用当前行重绘屏幕}

| 导航键 | 描述 | |-------------|-----------------| | z然后ENTER | 将光标行移到屏幕顶端并滚动屏幕 | | z. | 将光标行移到屏幕中心并滚动屏幕 | | z- | 将光标行移到屏幕底端并滚动屏幕 | | 200z然后ENTER | 会把第200行移到屏幕顶端 |

快速跳转至文件首尾 {#快速跳转至文件首尾}

| 导航键 | 描述 | |-----|------------| | :0 | 跳转至文件头-方法1 | | gg | 跳转至文件头-方法2 | | 1G | 跳转至文件头-方法3 | | 😒 | 跳转至文件尾-方法1 | | G | 跳转至文件尾-方法2 |

跳转至文件的第N个字符、N% {#跳转至文件的第N个字符、N}

| 导航键 | 描述 | |----------|-----------------------------------| | 50% | 跳转至文件的50%处,即文件中间 | | 75% | 跳转至文件的75%处,即3/4处 | | 100l | 跳转至从当前位置开始计算的第100个字符 | | 100 | 跳转至从当前字符开始计算的第100个空格处,与上述100l含义相同 | | :goto 25 | 移动至从文件开始处的第25个字符 | | 25 | | 移动到当前行的第25个字符 |

显示当前行数 {#显示当前行数}

| 命令 | 描述 | |------------------------|----------------------------------| | :set number:set nu | 显示行数 | | :set nonumber:set nonu | 不显示行数 | | :set numberwidth=10 | 行数显示默认宽度为4个字符,我们可以通过该命令来设为10个字符。 |

跳转至特定行 {#跳转至特定行}

| 导航键 | 描述 | |------|------------| | :50 | 跳转至50行-方法1 | | 50gg | 跳转至50行-方法2 | | 50G | 跳转至50行-方法3 |

源码导航 {#源码导航}

下面的几个对与经常写程序源码的或者写shell脚本的系统管理员比较有用。

| 导航键 | 描述 | |-----|-----------------------| | % | 跳转至匹配对,可以是()、{}或者[] | | [( | 跳转至前一个没有匹配的( | | [) | 跳转至前一个没有匹配的) | | [{ | 跳转至前一个没有匹配的{ | | [} | 跳转至前一个没有匹配的} |

在插入状态移动光标 {#在插入状态移动光标}

在常规状态下,我们可以通过w和W来在word中移动光标,但是一旦进入了插入模式,就不能使用这两个导航键了,但是我们也不需要退出插入模式,然后在使用w导航,我们可以使用SHIFT+方向键来快速移动。

使用CTRL+O和CTRL+L跳转 {#使用CTRL-O和CTRL-L跳转}

Vim会保存我们在其中的所有导航操作到一个列表,我们可以使用:jumps来查看该列表,同时可以使用下述导航键来进行跳转。

| CTRL+O | 跳转至前一个记录点 | |---------|--------------| | CTRL+L | 跳转至后一个记录点 | | 5CTRL+O | 跳转至当前记录点的前5个 | | 5CTRL+L | 跳转至当前记录点的后5个 |

在很长的一行中导航 {#在很长的一行中导航}

我们知道一般终端的每一行都会有个字数限制,如果一行的字符数超过了这个限制,就会自动跳转到下一行,比如实际的一行可能你看起来是5、6行的样子,那么这个时候你如果使用j、k那么就有种跳转了N行的假象。在这种情况下,如果在视觉情况下,跳转到下一行(其实是同一行),使用下述导航键。

| 导航键 | 描述 | |-----|----------| | gj | 视觉中的下一行 | | gk | 视觉中的上一行 | | g^ | 当前视觉行的行首 | | g$ | 当前视觉行的行尾 | | gm | 当前视觉行的中间 |

Vim命令行导航 {#Vim命令行导航}

在我们使用vim打开文件的时候,就可以按照自己的需要跳转到指定的位置。

| 命令行 | 描述 | |-------------------|------------------------------------| | vim +143 | 打开文件filename,并跳转到143行 | | vim +/search-term | 打开文件filename,并跳转到从文件头开始的第一个符合条件的位置 | | vim +?search-term | 打开文件filename,并跳转到从文件尾开始的第一个符合条件的位置 | | vim --t TAG | 跳转到一个特定的TAG |

使用标记创建本地书签 {#使用标记创建本地书签}

有两种书签,本地书签和全局书签,区别在于本地使用小写字母,全局使用大写字母。

| 书签命令 | 描述 | |------|--------------| | ma | 在光标位置创建书签a | | `a | 跳转到书签a的精确位置 | | 'a | 跳转到书签a所在行的行首 |

创建全局书签 {#创建全局书签}

将ma改为mA就可以创建全局书签A。

这个主要用在当我们打开多个文件的时候,创建全局书签可以方便的在各个文件中跳转。

显示所有的书签 {#显示所有的书签}

可以使用命令:marks来显示所有的书签。我们会发现不过什么时候打开所有书签,都会有', ",[ ,]和.。这几个都是默认的书签,有特殊的含义。

| 默认书签 | 描述 | |------|-----------------| | `" | 退出前最后编辑的位置 | | `[ | 上次修改或者复制的第一个字符 | | `] | 上次修改或者复制的最后一个字符 | | `< | 上次visual区域的第一行 | | `> | 上次visual区域的最后一行 | | `. | 最后一次修改的位置 | | `^ | 最后一次插入模式停止的位置 |

还可以使用:marks a来显示所有关于书签a的详细信息。

使用ctags来有效地在源码中跳转 {#使用ctags来有效地在源码中跳转}

  1. 当然使用之前,需要先行安装ctags包;

  2. 在源码文件夹中,使用ctags *.c来生成一个文件名为tags的信息tags文件;

  3. 然后vim main.c 后,输入:ta main就可以直接跳转到mian定义处,

  4. 也可以使用CTRL+]来跳转到函数的定义处,使用它CTRL+T返回到原文件;

  5. 还可以使用它:ta *然后按tab来便利需要查询的函数;

| Vim命令 | 描述 | |-------|----------------| | :ts | 显示所有的tag表 | | :tn | 跳转到列表中的下一个tag | | :tp | 跳转到列表中的前一个tag | | :tf | 跳转到列表中的第一个tag | | :tl | 跳转到列表中的最后一个tag |

参考资料 {#参考资料}



文章链接:
https://www.zywvvd.com/notes/tools/vim/vim-nootbook-2/

赞(0)
未经允许不得转载:工具盒子 » vim 学习笔记(二)—— 基本导航命令