王清欢Randy 王清欢Randy
首页
  • 编程语言

    • C/C++ 学习笔记
    • Golang 学习笔记
  • 算法分析

    • LeetCode 刷题笔记
  • 操作系统

    • Linux 基础
    • Vim 实用技巧
    • Shell 脚本编程
    • GDB 学习笔记
  • 开发工具

    • Git 学习笔记
  • 分布式理论

    • 共识算法
    • 分布式事务
  • 数据库内核

    • PostgreSQL
    • Postgres-XL
  • hidb
  • pgproxy
  • 实用技巧
  • 学习方法
  • 资源分享
GitHub (opens new window)
首页
  • 编程语言

    • C/C++ 学习笔记
    • Golang 学习笔记
  • 算法分析

    • LeetCode 刷题笔记
  • 操作系统

    • Linux 基础
    • Vim 实用技巧
    • Shell 脚本编程
    • GDB 学习笔记
  • 开发工具

    • Git 学习笔记
  • 分布式理论

    • 共识算法
    • 分布式事务
  • 数据库内核

    • PostgreSQL
    • Postgres-XL
  • hidb
  • pgproxy
  • 实用技巧
  • 学习方法
  • 资源分享
GitHub (opens new window)
  • Linux 基础

    • 基本Linux命令
    • 文件与目录操作
    • 进程与线程
    • 线程同步与进程通信
    • Linux 文件权限
    • Linux 命令行快捷键
  • Vim 实用技巧

    • Vim常用技巧
    • Vim解决问题的方式
      • Vim解决问题的方式
        • 技巧1 . 命令
        • 技巧2 不要自我重复
        • 技巧3 以退为进
        • 技巧4 重复与回退
        • 技巧5 查找并手动替换
        • 技巧6 ·命令范式
    • Vim普通模式
    • Vim插入模式
    • Vim可视模式
    • Vim命令行模式
  • Shell 脚本编程

    • 目录
  • GDB学习笔记

    • GDB基础调试
    • GDB调试Coredump
  • Linux操作系统编程
  • Vim 实用技巧
王清欢
2023-04-30
目录

Vim解决问题的方式

# Vim解决问题的方式

​ Vim的特点在于它能够高效的简化工作中的重复内容,成倍的节省时间。而它能够高效的重复是应为它能够记录最近的操作,让使用者可以用一次按键就能重复上次的修改。

# 技巧1 . 命令

. 命令的作用

​ .命令实现的是重复上一次修改,而修改内容可以指代很多东西,一次修改的单位可以是字符、整行,甚至是整个文件。

使用示例

​ 例如字符删除命令x、文本行删除命令dd都可以配合.命令来重复操作,而文档缩进命令>配合到文档末尾处命令G实现从当前行到末尾行整体的缩进,这种对文档整体操作的命令也可以通过.命令来重复。

# 技巧2 不要自我重复

避免自我重复

​ 在合适的使用场景中,尽量使用复合的单键命令来代替其等效的长命令,然后配合·命令可以极大提高效率。一些常用的符合命令如下表。

复合命令 等效的长命令 复合命令 等效的长命令
C c$ A $a
s cl o A
S ^c O ko
I ^i

使用示例

​ 例如在代码中需要为每一行末尾添加;,首先想到的是可以使用$命令将光标移动到行末,然后使用a命令在当前光标之后添加分号后退出编辑模式。接下来就使用j命令移动到下一行并在此使用$命令移动到行末然后使用.命令重复a;<Esc>这三步动作。

​ 显然,在上述的重复过程中,移动过程较为繁琐,为了减少这无关的移动可以使用在当前行末尾添加内容的A命令来代替a命令,这样就可以简化重复过程中的移动不需要再使用$命令。

# 技巧3 以退为进

替换操作

​ 当需要对某个字符或单词进行替换时,考虑在全文都进行替换的情况下就要进行重复操作,那就要使得修改和移动都可以重复。vim中的实现可以使用替换字符串的s命令配合·命令使得修改操作可重复,然后使用查找下一处指定字符位置的f{char}命令配合用于重复上次f命令操作的;命令使得移动可重复,将他们合二为一便可以简化替换操作。

使用示例

​ 例如要在printf("%d+%d+%d=%d",a,b,c,a+b+c);代码中将+替换成前后带空格的+。首先需要使用f+命令找到+号的位置,然后使用s命令替换内容并退出编辑模式,这样就可以使用;.的组合命令完成重复替换操作。

# 技巧4 重复与回退

可重复的操作以及如何回退

​ 在使用可重复操作进行重复性工作时可能出现命令使用错误导致的错误操作,这时候就需要回退到上一步操作,一般可重复的操作都是可以回退的,它们都是成对出现的,一些可重复的操作和其回退方式如下表所示。

含义 操作 重复命令 回退命令
做出一个修改 {edit} . u
文本行内查找下一指定字符 f{char}/t{char} ; ,
文本行内查找上一指定字符 F{char}/T{char} ; ,
文档内查找下一处匹配项 /{pattern} n N
文档内查找上一处匹配项 ?{pattern} n N
替换 s{replacements} & u
执行一系列修改 qx{changes}q @x u

# 技巧5 查找并手动替换

无输入的查找命令

​ 前面已经提到文本行内字符查找可以使用f{char}/t{char}等命令,文档内的匹配项查找可以使用查找提示符/命令并输入完整的目标匹配项进行查找/pattern。除了这些方法,还可以使用*命令实现无输入的查找,只需要将光标移到目标匹配项上然后按下*键。使用*命令会产生两个结果,一是光标会从当前匹配项跳到下一个匹配项,二是文档中所有的匹配项都会高亮显示。和/查找提示符一样也可以使用n/N实现重复和回退。

替换

​ 匹配项的替换无法使用s命令实现,但是也有对应的替换命令cw,使用该命令会删除从光标到单词结尾的所有字符,并进入插入模式。cw实现的替换操作和其他修改操作一样,vim编辑器会将从进入插入模式到离开的全部操作记录下来视为一次修改操作,可以使用·命令实现重复。

使用示例

​ 例如要将文档中多个content替换为copy,首先将光标移动到任一content匹配项的开头,然后使用*命令查找所有匹配项。在第一个要修改的匹配项使用cw命令进行替换并退出插入模式。完成了查找和修改的可重复设定,就可以使用n/N命令来查找想要修改的匹配项,然后使用.重复修改操作完成替换任务。

# 技巧6 ·命令范式

一键移动 一键执行

​ 本章中所有提到的使用示例都是基于这种一键移动 一键执行的·命令范式实现的,让在文档中的光标移动可重复,然后让修改操作可重复,这样便是一个较为理想的重复工作解决方案,把繁琐的重复操作简化到一键移动 一键执行的范式。

上次更新: 2023/11/19, 12:55:48
Vim常用技巧
Vim普通模式

← Vim常用技巧 Vim普通模式→

Theme by Vdoing | Copyright © 2023-2024 Wang Qinghuan | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式