Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • 说明
  • Vim

  • VSCode

  • Chrome

  • iTerm

  • mac

  • Obsidian

  • lazygit

  • 学习双拼
  • Vim 技巧

    • Vim 技巧 - 说明
    • Vim 技巧 - 以退为进
    • Vim 技巧 - 点范式
    • Vim 技巧 - 把撤销单元切成块
    • Vim 技巧 - 构造可重复的修改
    • Vim 技巧 - 用次数做简单的算术运算
    • Vim 技巧 - 能够重复,就别用次数
    • Vim 技巧 - 在插入模式中可即时更正错误
    • Vim 技巧 - 结识插入 - 普通模式
    • Vim 技巧 - 不离开插入模式,粘贴寄存器中的文本
    • Vim 技巧 - 重复执行面向行的可视命令
    • Vim 技巧 - 只要可能,最好用操作符命令,而不是可视命令
    • Vim 技巧 - 结识 Vim 的命令行模式
    • Vim 技巧 - 在一行或多个连续行上执行命令
    • Vim 技巧 - 使用‘:t’和‘:m’命令复制和移动行
    • Vim 技巧 - 在指定范围上执行普通模式命令
    • Vim 技巧 - 重复上次的 Ex 命令
    • Vim 技巧 - 把当前单词插入到命令行
    • Vim 技巧 - 回溯历史命令
    • Vim 技巧 - 运行 Shell 命令
    • Vim 技巧 - 将工作区切分成窗
    • Vim 技巧 - 区分实际行与屏幕行
    • Vim 技巧 - 通过查找进行移动
    • Vim 技巧 - 遍历改变列表
    • Vim 技巧 - 用无名寄存器实现删除、复制与粘贴操作
    • Vim 技巧 - 深入理解 Vim 寄存器
    • Vim 技巧 - 用寄存器中的内容替换高亮选区的文本
    • Vim 技巧 - 把寄存器的内容粘贴出来
    • Vim 技巧 - 宏的读取与执行
    • Vim 技巧 - 规范光标位置、直达目标以及中止宏
    • Vim 技巧 - 加次数回放宏
    • Vim 技巧 - 在连续的文本行上重复修改
    • Vim 技巧 - 给宏追加命令
    • Vim 技巧 - 编辑宏的内容
    • Vim 技巧 - 调整查找模式的大小写敏感性
    • Vim 技巧 - 查找使用 v 或 V 模式
    • Vim 技巧 - 界定单词的边界
    • Vim 技巧 - 转义问题字符
    • Vim 技巧 - 结识查找命令
    • Vim 技巧 - 在执行查找前预览第一处匹配
    • Vim 技巧 - 将光标偏移到查找匹配的结尾
    • Vim 技巧 - 利用查找历史,迭代完成复杂的模式
    • Vim 技巧 - 结识 substitute 命令
    • Vim 技巧 - 在文件范围内查找并替换每一处匹配
    • Vim 技巧 - 手动控制每一次替换操作
    • Vim 技巧 - 重用上次的查找模式
    • Vim 技巧 - 用寄存器的内容替换
    • Vim 技巧 - 重复上一次 substitute 命令
    • Vim 技巧 - 使用子匹配重排 CSV 文件的字段
    • Vim 技巧 - 自动补全整行文本
    • Vim 技巧 - 以 g 开头的命令
    • Vim 技巧 - 以 z 开头的命令
    • Vim 技巧-ctrl 命令
    • Vim 技巧
    • 每日一 Vim 笔记
  • 键盘侠
  • Vim 技巧
Henry
2022-09-11

Vim 技巧 - 区分实际行与屏幕行

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

与许多文本编辑器不同,Vim 会区分实际行与屏幕行。当‘wrap’设置被启用时(缺省启用),每个超出窗口宽度的文本行都会被回绕显示,以保证没有文本显示不出来。这样一来,文件中的一行也许会被显示为屏幕上的若干行。

要想知道实际行与屏幕行之间的不同,最简单的方法是启用‘number’设置。启用后,以行号开头的行对应着一个实际行,它们会占据着屏幕上的一行或几行;当一行文本为适应窗口宽度而回绕时,回绕行的前面则不会显示行号。下面的屏幕截图中显示了一个缓冲区,它包括 3 个实际行(以行号标识),不过却显示为 9 个屏幕行。

理解实际行与屏幕行间的差别很重要,因为 Vim 提供了不同的动作命令来操作这两者。j 和 k 命令会根据实际行向下及向上移动,而 gj 和 gk 则是按屏幕行向下及向上移动。

以上面的屏幕截图为例,假设我们想把光标向上移,把它移到单词“vehicula”上。目标单词位于光标之上的一个屏幕行,因此我们按 gk 就可以移到那里;但如果是用 k 键的话,它会向上移动一个实际行,就把光标移到单词“ac”上去了,这并不是我们想要的结果。

另外,Vim 也提供了直接跳到行首及行尾的命令。下表对操作实际行和屏幕行的命令进行了总结:

你可以留意到这样一个特点,即 j、k、0 和 $ 都用于操作实际行,而如果在这些键前加上 g 前缀的话,就会让 Vim 对屏幕行进行操作。

除 Vim 以外,其他大多数文本编辑器都没有实际行的概念,它们只提供操作屏幕行的手段。刚开始了解到 Vim 会区分对待这两者时,你可能会感觉不适。但当你学会使用 gj 和 gk 命令后,你就会感谢 j 和 k 可以让你用更少的键移动更远的距离。

重新映射面向行的动作命令

如果你想让 j 及 k 命令操作屏幕行而不是实际行,你可以重新映射一下它们。

"vim.normalModeKeyBindings": [
  {
    "before": ["j"],
    "after": ["g", "j"]
  },
  {
    "before": ["k"],
    "after": ["g", "k"]
  },
  {
    "before": ["H"],
    "after": ["g", "^"]
  },
  {
    "before": ["L"],
    "after": ["g", "$"]
  },
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
编辑 (opens new window)
#Vim
上次更新: 5/27/2023, 1:02:05 PM
Vim 技巧 - 将工作区切分成窗
Vim 技巧 - 通过查找进行移动

← Vim 技巧 - 将工作区切分成窗 Vim 技巧 - 通过查找进行移动→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式