• 【无标题】Vim实用技巧_5.在文件间和文件内快速移动


    使用vim编写程序时,如果熟悉了在文件间和文件内的快速跳转,可以极大的提高编辑的效率

    如果不想看下面的技巧,只要熟悉下面几个最常用的命令就可以了

    • w:正向移动到下一个单词的开头
    • b:反向移动到当前单词开头
    • ea:在单词结尾后添加
    • daw:删除当前单词,外加一个空格
    • ciw:只删除单词,且进入插入模式
    • f{char}在光标位置与当前行行尾之间查找指定的字符
    • 命令像后退按钮一样,而与之互补的 命令则像是前进按钮
      在这里插入图片描述

    用动作命令在文件中移动

    本章将重点介绍动作命令(motion),我们可以用这些命令在文档中四处移动(参考:h motion.txt

    技巧046:让手指保持在本位行上

    Vim 针对盲打人员进行了优化。因此,要学会让手不离开本位行就可以移动光标,只有这样才能更快地操作 Vim

    在这里插入图片描述

    建议:通常只用 hl 键来解决 “差一错误” (off-by-one errors)。也就是说,只有在距目标差一两个字符时,我才会用到这两个键

    技巧047:区分实际行与屏幕行

    我们需要了解一下实际行与屏幕行间的差别,不然就很容易产生挫败感。Vim 允许我们针对两者进行操作

    提示:常规移动按键加上g前缀就是操作屏幕行的

    在这里插入图片描述

    操作实际行和屏幕行的命令进行了总结:(简单总结就是加上g前缀就是操作屏幕行的

    在这里插入图片描述

    技巧048:基于单词移动

    Vim 有两组面向单词正向及反向移动的命令。相比一次移动一列来说,这二者允许我们更快地移动

    最常用命令提前总结:

    • w:正向移动到下一个单词的开头
    • b:反向移动到当前单词开头
    • ea:在单词结尾后添加
    • 1.基础命令

    在这里插入图片描述

    简单记忆:w:“(for-)word”;b:“back-word”;在用过这些命令之后,你会发现基于单词进行正向或反向移动,要比用 hl 一次移动一列快得多

    提示:如果实在记不住,只记住wb命令就可以了,毕竟我们是为了快速编辑文档,不是为了背命令…

    • 2.单词与字串

    简单记忆:字串比单词长(句号及单引号都被当成了单词),只要字串是以空白字符分隔就可以了;对应字串的命令是大写的,即 WBEgE

    • 3.示例

    示例1:文本中的单词“fast”改成“faster”(是下面的ea可以是先跳到单词尾部,然后进入插入模式的意思)

    在这里插入图片描述

    示例2:单词和字串移动对比

    在这里插入图片描述

    • 4.总结
    # 字串:如果你想更快地移动的话,可以用面向字串的动作命令;
    # 单词:如果你想以更细的粒度移动的话,则可以用面向单词的动作命令
    
    • 1
    • 2

    技巧049:对字符进行查找(行内)

    Vim 的字符查找命令让我们可以在行内快速移动,并且它们能够在操作符待决模式下很好地工作

    • part1:基础命令

    f{char} 命令是 Vim 中移动的最快方式之一,一定要学会;会在光标位置与当前行行尾之间查找指定的字符

    • 如果找到了,就会把光标移到此字符上

    • 如果未找到,则保持光标不动

    在这里插入图片描述

    解释:fx 命令什么都不做,因为没有x字符;而 fo 命令找到了字符“o”,因此光标会被移到第一个匹配的字符上

    • part2:常用命令

    在这里插入图片描述

    • part3:示例,下面是一个t{char}使用的示例,即删除逗号与句号之间的所有单词(且删除逗号,保留句号)

    在这里插入图片描述

    重要:删除句子的后半句(保留最后一个字符)话则是经常会做的操作;因此我们可以把 f,dt.训练成手指的下意识动作;或者类似的d$更快的删除句子后半部分

    建议

    1.想在当前行内快速移动光标时,倾向于在普通模式中使用 f{char}

    2.当与 d{motion}c{motion} 一起使用时,更倾向于使用 t{char}

    技巧050:通过查找进行移动(文件)

    查找命令允许我们用很少几个键就能快速地进行跳转,跳转的距离可以很近,也可以很远

    • 局限:查找命令(f{chart{char}等)局限性一次只能查找一个字符,并且它们只能在当前行内查找

    • 解决:使用/命令就可以了(hlsearch与高亮有关)

    在这里插入图片描述

    • 提示:查看命令在可视化模式中也可使用上面表格一定要牢记

    技巧051:用精确的文本对象选择选区

    文本对象允许我们操作括号、被引用的文本、XML 标签以及其他文本中的常见结构

    提示:下面介绍的命令不是在普通模式下用的,比如i在普通模式里按下的话,会切换到插入模式

    • 基础命令(分隔符文本对象)

    配对符号具有规整的格式,而 Vim 能够理解其结构,并允许对它们所分隔的区域进行操作,只需几个键就可以选择或操作一大段文本

    提示:下面命令一定要结合如可视命令v等一起使用,否则你直接属于一个i就是进入插入的意思,一定要注意

    在这里插入图片描述

    说明:Vim 的文本对象由两个字符组成,第一个字符永远是 i 或是 a

    在这里插入图片描述

    • 示例1:而我们想高亮选中{}内部的文本,那么就可以用 vi}

    在这里插入图片描述

    扩展:在c++中快速全选{}之间的函数体内容,直接使用vi}来方便了(先进入可视模式,再选)

    • 常规思路

    一般情况下,当我们使用可视模式时,选区的一端固定在一个特定字符上,而另一端可以自由移动:使用 lwf{char} 这类动作命令时,会对高亮区域的活动端进行移动,使选区变大或缩小

    • 分隔符思路

    当我们按下 vi} 时,Vim 会进入可视模式并选中花括号 {} 所括起来的所有字符光标在花括号内部就行

    • 示例2:把文本中的 {url} 替换为 #,然后再用一个文本标记把{title}替换掉

    在这里插入图片描述

    说明c{motion} 命令:会删除指定的文本,然后切换到插入模式

    解读ci" 命令解读为“修改双引号内部的内容”,并进入插入模式;yit 命令拷贝标签内的文本

    技巧052:删除周边,修改内部

    文本对象通常是成对出现的,一个用于操作对象内部的文本,而另一个则操作对象周围的文本

    在本节中,我们将剖析每类文本对象的典型用法

    2个最常用命令:daw删除当前单词,外加一个空格;ciw只删除单词,且进入插入模式

    • Vim 的文本对象
    • 分隔符文本对象:操作以配对的符号作为开始和结束,如 i)i"it

    • 范围文本对象:用于操作文本块,如单词、句子和段落;对后一类的文本对象进行了总结:

    在这里插入图片描述

    命令说明:

    在这里插入图片描述

    在这里插入图片描述

    • 示例1:想删除下句中的单词“excellent”,此时可以用 daw 命令

    在这里插入图片描述

    • 示例2:是想把此单词改成另外一个单词,这次可以用 ciw 命令

    在这里插入图片描述

    技巧053:设置位置标记,以便快速跳回

    Vim 的位置标记允许我们快速跳转到文档中感兴趣的地方。我们可以手动设置位置标记,不过 Vim 也会自动帮我们记录某些感兴趣的位置点

    什么是位置标记?

    m{a-zA-Z} 命令会用选定的字母标记当前光标所在位置(参见:h m );小写位置标记只在每个缓冲区里局部可见,而大写位置标记则全局可见

    • 个数:因为每个字母都能标识一个光标位置,因此可以为每个缓冲区设置最多 26 个小写位置标记

    • 解释:就是将当前光标所在位置用一个字母标识,比如下面的第3行处光标位置用字母a标识(ma命令),想要回到这个位置直接使用``a`命令即可

    • 现象:只有设置时,在vim中能看到明显标识,等执行其他操作,这标识就会消失

    在这里插入图片描述

    • 简化:还有一种更简单的方法(使用字母m),直接使用mm和``m`更方便

    Vim 会自动帮我们设置一些位置标记,这些标记用起来非常方便

    在这里插入图片描述

    其中:高亮选区的起始和结束位置,都会被自动记录成位置标记,这个用/命令查找时会发现有这2个标识符

    技巧054:在匹配括号间跳转

    Vim 提供了一个动作命令,让我们可以在开、闭括号间跳转。在激活了 matchit.vim 插件后,此命令也可以用于成对的 XML 标签,以及某些编程语言中的关键字上

    % 命令:允许我们在一组开、闭括号间跳转(参见 :h % ),它可作用于 ()、{}以及[]

    提示:%在命令模式中代表所有行

    • 示例1:%的使用

    在这里插入图片描述

    • 示例2:要把大括号改成方括号

    在做修改之前,要先执行一次 % 命令。在执行 % 命令时,Vim 会自动为发生跳转的地方设置一个位置标记,而后我们就可以按 `` 跳回那里

    在这里插入图片描述

    其中:t{char} 正向移动到下一个 {char} 所在之处的一个字符上

    注意:在本例中, 命令也能完成 `` 动作命令所做的工作

    在文件间移动

    动作命令:允许我们在一个文件中移动。跳转:与之相似,不过它们也能够让我们在不同的文件之间进行跳转

    技巧055:遍历跳转列表

    Vim 会记录跳转前后的位置,并提供了一些命令让我们能够沿原路返回

    命令像后退按钮一样,而与之互补的 命令则像是前进按钮。这两条命令允许我们对 Vim 的跳转列表进行遍历

    • part1:跳转列表

    直接输入:jumps就可以调出跳转列表;实际上,每个单独的窗口都拥有一份自己的跳转列表

    在这里插入图片描述

    提示:如果你正在使用分割窗口或多标签页,那么 命令会始终在当前活动窗口的跳转列表范围内进行跳转

    • part2:跳转命令

    任何改变当前窗口中活动文件的命令,都可以被称为跳转命令;Vim 会把执行跳转命令之前和之后的光标位置,记录到跳转列表

    哪些是跳转命令呢?

    • 是:[count]G 命令直接跳到指定的行号;面向句子的动作及面向段落的动作都算跳转
    • 不是:每次向上或向下移动一行则不算;面向字符及面向单词的动作则不算; 命令不是

    概括:大范围的动作命令可能会被当成跳转,但小范围的动作命令则只能算移动

    常见跳转动作

    在这里插入图片描述

    扩展

    在这里插入图片描述

    技巧056:遍历改变列表

    每当对文档做出修改后,Vim 都会记录当时光标所在的位置。遍历改变列表的方法很简单,并且这大概是跳到你要去的地方的最快方式

    改变列表(change list):在编辑会话期间维护一张表,里面记载我们对每个缓冲区所做的修改;:changes命令可以查看

    • 1.跳回上次修改的位置

    Vim 为每次修改都记录了行号与列号,我们可以用 g;g,命令反向或正向遍历改变列表

    有2种最常见的方式:

    • u这对撤销和还原命令:最终光标会停留在上次修改过的地方

    • g;跳到上次完成编辑时光标所在的行及列上,好处是不会对文档造成暂态的改变

    • 2.标识上次修改方位的位置标记(对改变列表的补充)

    在这里插入图片描述

    • 3.位置列表与改变标记的区别

    在这里插入图片描述

    技巧057:跳转到光标下的文件

    Vim 会把文档中的文件名当成一个超链接。在进行了正确的配置后,我们就可以用 gf 命令跳转到光标下的文件了

    在这里插入图片描述

    • part1:gf命令

    最简单的方式就是将光标放在文件名上,然后直接gf,如果无法跳转,通常有下面2种情况:

    • 1.路径问题

    当使用 gf 命令时,Vim 会检查 'path' 目录列表中的每个目录,看该目录中是否包含一个匹配光标下文本的文件名。'path' 设置也会用于 :find 命令;想要跳转文件不包含这个路径就是一个常见问题

    # :set path?     		--使用这个命令直接查看path是否包含需要的路径
    path=.,/usr/include,,	-- . 代表当前文件所在的目录;空字符串(由两个连着的逗号界定)则代表工作目录
    
    # 添加自己的路径到path的方法  `:set path+=路径`
    
    • 1
    • 2
    • 3
    • 4
    • 2.文件名后缀

    有一些程序的在编写时可以省去后缀,导致gf命令失败

    ‘suffixesadd’ 选项:允许我们指定一个或多个文件扩展名,当 Vim 用 gf 命令搜寻文件名时,会尝试使用这些扩展名;命令使用示例: :set suffixesadd+=.h

    • part2:跳转到函数定义

    使用vim最想获得的技能?跳转到函数定义;怎么搞?使用(但是需要额外的一些配置,看技巧102)

    技巧058:用全局位置标记在文件间快速跳转

    全局位置标记是一种书签,让我们可以在文件间跳转。全局标记在我们分析完代码,并想快速跳回一个文件时特别有用

    技巧053中用大写字母就可以了

    m{letter} 命令允许我们在当前光标位置创建一个位置标记(参见:h m

    • 小写字母:会创建局部于缓冲区的标记,

    • 大写字母:创建全局标记

    设置好标记后,就可以用 ``{letter}` 命令使光标快速回到标记所在之处

    场景:其实不断按也可以返回,全局标志只使用再你提前知道后续要有很多操作,操作完要返回当前位置的场景

    用处:一般来说,要养成在使用与 quickfix 列表有关的命令前,如:grep:vimgrep:make,设置全局标记的习惯

    参考

    • 《Vim实用技巧》
  • 相关阅读:
    元宇宙虚拟展览馆,感受虚拟世界不一样的展览体验
    Apache Shiro反序列化攻击技术剖析与防护研判分析
    【转】iOS消息推送机制
    计网第六章(应用层)(一)(动态主机配置协议DHCP)
    矩阵补全学习笔记
    2024年2月最新微信域名检测拦截接口源码
    SAP中 查询采购订单已收货未开票信息 MB5S <转载>
    echarts让设置legend宽度不生效
    heap use after free
    CF547E Mike and Friends (AC 自动机+树状数组)
  • 原文地址:https://blog.csdn.net/weixin_44531336/article/details/126192390