mirror of
https://gitlab.com/wsdjeg/vim-galore-zh_cn.git
synced 2025-01-31 15:39:29 +08:00
WIP ##Ranges
This commit is contained in:
parent
2f3e45f992
commit
44aa8aed1b
166
README.md
166
README.md
@ -332,88 +332,108 @@ Vim 是一个文本编辑器。每次文本都是作为**缓冲区**的一部分
|
||||
:h 05.3
|
||||
|
||||
## 快捷键前缀
|
||||
## 范围
|
||||
"Leader" 键是一个触发器,默认为 `\\`。我们可以通过在 `map` 中调用 `<leader>` 来为 `<leader>` 键设置映射
|
||||
|
||||
```vim
|
||||
nnoremap <leader>h :helpgrep<space>
|
||||
```
|
||||
|
||||
这样,我们只需要先按 <kbd>\\</kbd> 然后按 <kbd>h</kbd> 就可以执行 `:helpgrep<space>` 了。如果你想通过先按 <kbd>空格</kbd> 键来触发,只需要这样做:
|
||||
|
||||
```vim
|
||||
let mapleader = ' '
|
||||
nnoremap <leader>h :helpgrep<space>
|
||||
```
|
||||
|
||||
另外,还有一个叫 `<localleader>` 的,可以把它理解为局部环境中的 `<leader>`,默认值依然为 <kbd>\\</kbd>。当我们需要只对某一个条件下(比如,特定文件类型的插件)的缓冲区设置特别的 `<leader>` 键,那么我们就可以通过修改当前环境下的 `<localleader>` 来实现
|
||||
|
||||
**注意**:如果你打算设置 Leader 键,请确保在设置按键映射之前,先设置好 Leader 键。如果你先设置了含有 Leader 键的映射,然后又修改了 Leader 键,那么之前映射的 Leader 键是不会因此而改变的。你可以通过执行 `:nmap <leader>` 来查看普通模式中已绑定给 Leader 键的所有映射
|
||||
|
||||
请参阅 `:h mapleader` 与 `:h maploacalleader` 来获取更多帮助
|
||||
|
||||
## 寄存器
|
||||
## 标注
|
||||
## 补全
|
||||
## 动作,操作符,文本对象
|
||||
## 自动命令
|
||||
## 变更历史,跳转历史
|
||||
## 内容变更历史记录
|
||||
## 全局位置信息表,局部位置信息表
|
||||
## 宏
|
||||
## 颜色主题
|
||||
## 折叠
|
||||
## 会话
|
||||
## 局部化
|
||||
# 用法
|
||||
|
||||
## 获取离线帮助
|
||||
## 获取离线帮助(备选)
|
||||
## 获取在线帮助
|
||||
## 执行自动命令
|
||||
### 用户自定义事件
|
||||
### 内部自带事件
|
||||
## 剪贴板
|
||||
## 剪贴板使用 (Windows, OSX)
|
||||
## 剪贴板使用 (Linux, BSD, ...)
|
||||
## 打开文件时恢复光标位置
|
||||
## 备份文件,交换文件,撤销文件以及 viminfo 文件的处理
|
||||
## 编辑远程文件
|
||||
## 插件管理
|
||||
## 片段插入
|
||||
## 使用外部程序和过滤器
|
||||
## MatchIt
|
||||
# 技巧
|
||||
寄存器就是存储文本的地方。我们常用的"复制"操作就是把文本存储到寄存器,"粘贴"操作就是把文本从寄存器中读出来。顺便,在 Vim 中复制的快捷键是 <kbd>y</kbd>,粘贴的快捷键是 <kbd>p</kbd>
|
||||
|
||||
## 聪明的使用 n 和 N
|
||||
## 聪明的使用命令行历史
|
||||
## 智能 Ctrl-l
|
||||
## 禁用错误报警声音和图标
|
||||
## 快速移动当前行
|
||||
## 快速添加空行
|
||||
## 快速编辑自定义宏
|
||||
## 快速跳转到源(头)文件
|
||||
## 在 GUI 中快速改变字体大小
|
||||
## 根据模式改变光标类型
|
||||
## 防止水平滑动的时候失去选择
|
||||
## 重新载入保存文件
|
||||
## 智能当前行
|
||||
## 更快的关键字补全
|
||||
# 命令
|
||||
Vim 为我们提供了如下的寄存器:
|
||||
| 类型 | 字符 | 读写者 | 是否为只读 | 包含的字符来源 |
|
||||
|---------------------|------------------------|------------|-------------|---------------------|
|
||||
| Unnamed | `"` | vim | [ ] | 最近一次的复制或删除操作 (`d`, `c`, `s`, `x`, `y`) |
|
||||
| Numbered | `0` to `9` | vim | [ ] | 寄存器 `0`: 最近一次复制。寄存器 `1`: 最近一次删除。寄存器 `2`: 倒数第二次删除,以此类推。对于寄存器 `1` 至 `9`,他们其实是只读的最多包含 9 个元素的队列。这里的队列即为数据类型 [queue](https://en.wikipedia.org/wiki/Queue_(abstract_data_type)) |
|
||||
| Small delete | `-` | vim | [ ] | 最近一次,内容在一行以内的删除 |
|
||||
| Named | `a` to `z`, `A` to `Z` | user | [ ] | 如果你通过复制操作存储文本至寄存器 `a`,那么 `a` 中的文本就会被完全覆盖。如果你存储至 `A`,那么会将文本添加给寄存器 `a`,不会覆盖之前已有的文本 |
|
||||
| Read-only | `:`, `.`, `%` | vim | [x] | `:`: 最近一次使用的命令,`.`: 最近一次添加的文本,`%`: 当前的文件名 |
|
||||
| Alternate buffer | `#` | vim | [ ] | 大部分情况下,这个寄存器是当前窗口中,上一次访问的缓冲区。请参阅 `:h alternate-file` 来获取更多帮助 |
|
||||
| Expression | `=` | user | [ ] | 复制 VimL 代码时,这个寄存器用于存储代码片段的执行结果。比如,在插入模式下复制 `<c-r>=5+5<cr>`,那么这个寄存器就会存入 10 |
|
||||
| Selection | `+`, `*` | vim | [ ] | `*` 和 `+` 是 [剪贴板](#剪贴板) 寄存器 |
|
||||
| Drop | `~` | vim | [x] | 存储最近一次添加进 Vim 中的文本 |
|
||||
| Black hole | `_` | vim | [ ] | 对于当前操作,如果你不希望在其他寄存器中保留文本,那就在命令前加上 `_`。比如,`"_dd` 命令不会将文本放到寄存器 `"`、`1`、`+` 或 `*` 中 |
|
||||
| Last search pattern | `/` | vim | [ ] | 最近一次通过 `/`、`?` 或 `:global` 等命令调用的正则表达式 |
|
||||
|
||||
## :global - 在所有匹配行执行命令
|
||||
## :normal and :execute - 脚本梦之队
|
||||
## :redir - 重定向消息
|
||||
# 调试
|
||||
只要不是只读的寄存器,用户都有权限修改它的内容,比如:
|
||||
|
||||
## 常规建议
|
||||
## 查看启动日志
|
||||
## 查看运行时日志
|
||||
## 调整日志等级
|
||||
## vim 脚本调试
|
||||
## 语法文件调试
|
||||
# 杂项
|
||||
```vim
|
||||
:let @/ = 'register'
|
||||
```
|
||||
|
||||
## 附加资源
|
||||
## Vim 配置集合
|
||||
## 内置插件
|
||||
## 将 Control 映射到 CapsLock
|
||||
## 复活节彩蛋
|
||||
## 为何使用 hjkl
|
||||
# 怪癖
|
||||
这样,我们按 <kbd>n</kbd> 的时候就会跳转到单词 "register" 出现的地方
|
||||
|
||||
## 编辑小文件很慢
|
||||
## 编辑大文件很慢
|
||||
## 新行用于 NUL
|
||||
## 相同部分粘贴 (要不为什么我总要设置‘粘贴’?)
|
||||
## 在终端使用 Esc 延时
|
||||
## 无法重复函数中执行的搜索
|
||||
## 主题列表
|
||||
有些时候,你的操作可能已经修改了寄存器,而你没有察觉到。请参考 `:h registers` 获取更多帮助
|
||||
|
||||
# 插件列表
|
||||
上面提到过,复制的命令是 <kbd>y</kbd>,粘贴的命令是 <kbd>p</kbd> 或者 <kbd>P</kbd>。但请注意,Vim 会区分"字符选取"与"行选取"。请参考 `:h linewise` 获取更多帮助
|
||||
|
||||
**行选取**:
|
||||
命令 `yy` 或 `Y` 都是复制当前行。这时移动光标至其他位置,按下 `p` 就可以在光标下方粘贴复制的行,按下 `P` 就可以在光标上方粘贴至复制的行
|
||||
|
||||
**字符选取**:
|
||||
命令 `0yw` 可以复制第一个单词。这时移动光标至其他位置,按下 `p` 就可以在当前行、光标后的位置粘贴单词,按下 `P` 就可以在当前行、光标前的位置粘贴单词
|
||||
|
||||
**将文本存到指定的寄存器中**:
|
||||
命令 `"aY` 可以将当前行复制,并存储到寄存器 `a` 中。这时移动光标至其他位置,通过命令 `"AY` 就可以把这一行的内容扩展到寄存器 `a` 中,而之前存储的内容也不会丢失
|
||||
|
||||
为了便于理解和记忆,建议大家现在就试一试上面提到的这些操作。操作过程中,你可以随时通过 `:reg` 来查看寄存器的变化
|
||||
|
||||
**有趣的是**:
|
||||
在 Vim 中,`y` 是复制命令,源于单词 "yanking"。而在 Emacs 中,"yanking" 代表的是粘贴(或者说,重新插入刚才删掉的内容),而并不是复制
|
||||
|
||||
## 范围
|
||||
范围 (Ranges) 其实很好理解,但很多 Vim 用户的理解不到位
|
||||
|
||||
- 很多命令都可以加一个数字,用于指明操作范围
|
||||
- 可以是一个 "地址",用于指定某一行
|
||||
- 可以是一个 "地址" 或者一对通过 `,` 或 `;` 分割的一对 "地址"
|
||||
- 大部分命令,默认只作用于当前行
|
||||
- 只有 `:white` 和 `:global` 是默认作用于所有行的
|
||||
|
||||
范围的使用是十分直观的。以下为一些例子(其中,`:d` 为 `:delete` 的缩写:
|
||||
|
||||
| 命令 | 操作的行 |
|
||||
|---------|----------------|
|
||||
| `:d` | 当前行 |
|
||||
| `:.d` | 当前行 |
|
||||
| `:1d` | 第一行 |
|
||||
| `:$d` | 最后一行 |
|
||||
| `:1,$d` | 所有行 |
|
||||
| `:%d` | 所有行(这是 `1,$` 的语法糖) |
|
||||
| `:.,5d` | 当前行至第 5 行 |
|
||||
| `:,5d` | 当前行至第 5 行 |
|
||||
| `:,+3d` | 当前行及接下来的 3 行 |
|
||||
| `:1,+3d` | 第一行至当前行再加 3 行 |
|
||||
| `:,-3d` | 当前行及向上的 3 行(Vim 会弹出提示信息,因为这是一个保留的范围) |
|
||||
| `:3,'xdelete` | 第三行至[标记](#标记) 为 x 的那一行 |
|
||||
| `:/^foo/,$delete` | 当前行以下,以字符 "foo" 开头的那一行至结尾 |
|
||||
| `:/^foo/+1,$delete` | 当前行以下,以字符 "foo" 开头的那一行的下一行至结尾 |
|
||||
|
||||
需要注意的是,`;` 也可以用于表示范围。区别在于,`a,b` 的 `b` 是以当前行作为参考的。而 `a;b` 的 `b` 是以 `a` 行作为参考的。举个例子,现在你的光标在第 5 行。这时 `:1,+1d` 会删除第 1 行至第 6 行,而 `:1;+1d` 会删除第 1 行和第 2 行
|
||||
|
||||
你可以在通过在地址前加上 `/` 来设置多个地址,比如:
|
||||
|
||||
```vim
|
||||
:/foo//bar//quux/d
|
||||
```
|
||||
|
||||
这就会删除当前行之后的某一行。定位方式是,现在当前行之后寻找第一个包含 "foo" 字符的那一行,然后在找到的这一行之后寻找第一个包含 "bar" 字符的那一行,然后再在找到的这一行之后寻找第一个包含 "quux" 的那一行。删除的就是最后找到的这一行
|
||||
|
||||
# Neovim
|
||||
|
||||
## 加入我们
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user