--- title: vim学习手记 date: 2019-03-27 22:23:34 tags: - linux - vim categories: - linux --- Vim作为Linux平台首选编辑器, 支持目录树, 语法高亮, 代码补全等等功能 以及可以通过插件进行定制化的扩展 ## vim的四种模式 1. 一般模式: 刚进入vim的时候, 所在的就是一般模式 2. 编辑模式: 也就是可对文件内容进行修改的状态, 比如在一般模式输入`i`就进入了输入模式(INSERT状态) 3. 命令模式: 在一般模式下输入`:`进入命令模式 4. 可视模式: 在一般模式下输入`v`进入可视模式, 在该模式下可以使用鼠标选择文本进行操作 在 2 3 4 模式下按`Esc`返回到一般模式 ## vimrc `vimrc`指的是**vim run command** , 也就是运行命令 在一般模式下输入`:`进入到命令模式 ### set命令 set命令用于设置vim的配置项 比如最常见的使用命令为vim设置行号的显示 就是`set number` 如果后面加上一个`?` 那么就是可以返回该设置项当前的设置 `set nonumber`就是取消行号的显示 ![vimrc](/images/linux/vimrc.png) 每次打开文件都执行一些基本设置的命令显然过于繁琐 我们通常把一些通用的设置放在`.vimrc`文件当中 + **系统级** : 默认路径为`/usr/share/vim/.vimrc` + **用户级** : 默认路径为`~/.vimrc` 比如我们在.vimrc当中如果加入set number 那么每次使用vim打开文件默认就是显示行号的 > 其他常用的选项 + **ruler** - 设置以后会在右下角显示当前所在位置的百分比 + **hlsearch** 或者 **hls** - 使用`/`开头执行搜索的时候会高亮所有匹配到的内容 + **ignorecase** - 执行搜索时忽略大小写 + 自动调整缩进 : **autoindent** 与 **smartindent** 前者在新插入一行的时候会自动复制上一行的缩进值 后者则会自动识别一些编程语言的语法结构, 比如{}代码块当中的内容 ### map命令 map命令用于设置宏按键 比如 ``` map i ``` 这样在vim当中按下F3的时候, 就相当于输入后面的所有内容 > 宏按键只在一般模式下起作用, 所以后面的内容中先写一个i, 相当于进入到输入模式 ## 光标的移动 这些操作只在一般模式下起作用 ![光标的移动](/images/linux/vi-vim-tutorial-1.gif) 基本移动 + `h` ⬅️ 向左移动 + `l` ➡️ 向右移动 + `j` ⬇️ 向下移动 + `k` ⬆️ 向上移动 以单词为距离的移动, 以空白以及特殊字符(比如逗号)作为单词分隔 + `w/W` - 向后移动一个单词, 其中小写的是特殊字符也作为一个单词处理, 大写是将特殊字符归到附近的一个单词 + `b/B` - 向前移动一个单词, 大小写区别同上 + `e/E` - 向后移动一个单词(光标会置于单词末尾) + `ge` - 向前移动一个单词(光标会置于单词末尾) 行操作 + `0` 或者 `^` - 移动至行首(如果行首有缩进, 0会将光标置于缩进之前, ^会将光标置于缩进之后) + `$` - 移动至行尾 ^和$与正则表达式中表示字符串的开头与末尾是一致的 ## 跳转 + `Ctrl+f` - 下一页 ( forward ) + `Ctrl+b` - 上一页 ( back ) + `Ctrl+d` - 向下翻半页 + `Ctrl+u` - 向上翻半页 + `gg` - 跳转到文件首行 + `G` - 跳转到文件尾行 + `:行数` - 跳转到指定的行 ## 剪切 复制 粘贴 在vim当中剪切可以当做删除使用 + `dd` - 剪切整行 ( delete ) + `yy` - 复制整行 ( yank ) + `p` - 粘贴 ( paste ) + `u` - 撤销 ( undo ) + `Ctrl+r` - 重做 ( redo ) > 在vim当中存在一个独立的寄存器空间, 它不同于操作系统中的剪贴板 执行剪切或复制的内容都会置于寄存器当中 使用命令`reg`可以查看寄存器当中存储的内容