127 lines
4.8 KiB
Markdown
127 lines
4.8 KiB
Markdown
---
|
|
title: vim学习手记(1)
|
|
date: 2019-03-27 22:23:34
|
|
tags:
|
|
- linux
|
|
- vim
|
|
categories:
|
|
- linux
|
|
---
|
|
|
|
Vim作为Linux平台首选编辑器, 支持目录树, 语法高亮, 代码补全等等功能
|
|
以及可以通过插件进行定制化的扩展
|
|
<!--more-->
|
|
## vim的四种模式
|
|
1. 一般模式: 刚进入vim的时候, 所在的就是一般模式
|
|
2. 编辑模式: 也就是可对文件内容进行修改的状态, 比如在一般模式按`i`就进入了输入模式 ( INSERT 状态 )
|
|
按`shift+r`可以进入 REPLACE 状态
|
|
3. 命令模式: 在一般模式下输入`:`进入命令模式
|
|
4. 可视模式: 在一般模式下输入`v`进入可视模式, 在该模式下可以使用鼠标选择文本进行操作
|
|
|
|
在 2 3 4 模式下按`Esc`返回到一般模式
|
|
|
|
## vimrc
|
|
`vimrc`指的是**vim run command** , 也就是运行命令
|
|
|
|
在一般模式下输入`:`进入到命令模式
|
|
|
|
### set命令
|
|
set命令用于设置vim的配置项
|
|
|
|
比如最常见的使用命令为vim设置行号的显示
|
|
就是`set number`
|
|
如果后面加上一个`?` 那么就是可以返回该设置项当前的设置
|
|
`set nonumber`就是取消行号的显示
|
|

|
|
|
|
|
|
每次打开文件都执行一些基本设置的命令显然过于繁琐
|
|
我们通常把一些通用的设置放在`.vimrc`文件当中
|
|
+ **系统级** : 默认路径为`/usr/share/vim/.vimrc`
|
|
+ **用户级** : 默认路径为`~/.vimrc`
|
|
|
|
比如我们在.vimrc当中如果加入set number
|
|
那么每次使用vim打开文件默认就是显示行号的
|
|
|
|
> 其他常用的选项
|
|
+ **ruler** - 设置以后会在右下角显示当前所在位置的百分比
|
|
+ **hlsearch** 或者 **hls** - 使用`/`开头执行搜索的时候会高亮所有匹配到的内容
|
|
+ **ignorecase** - 执行搜索时忽略大小写
|
|
+ **wrap** - 自动折行
|
|
+ 自动调整缩进 : **autoindent** 与 **smartindent**
|
|
前者在新插入一行的时候会自动复制上一行的缩进值
|
|
后者则会自动识别一些编程语言的语法结构, 比如{}代码块当中的内容
|
|
|
|
### map命令
|
|
map命令用于设置宏按键
|
|
比如
|
|
```
|
|
map <F3> i<html><CR><body></body><CR></html>
|
|
```
|
|
这样在vim当中按下F3的时候, 就相当于输入后面的所有内容
|
|
> 宏按键只在一般模式下起作用, 所以后面的内容中先写一个i, 相当于进入到输入模式
|
|
|
|
## 光标的移动
|
|
这些操作只在一般模式下起作用
|
|

|
|
|
|
基本移动
|
|
+ `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当中剪切可以当做删除使用
|
|
( 也就是所有涉及删除的操作, 实际上都会放入寄存器当中, 使用`p`可以粘贴 )
|
|
|
|
+ `dd` - 剪切整行 ( delete )
|
|
+ `{n}dd` - 向下剪切n行 ( 包含当前光标所在的行 )
|
|
+ `yy` - 复制整行 ( yank )
|
|
+ `p` - 粘贴 ( paste )
|
|
+ `u` - 撤销 ( undo )
|
|
+ `Ctrl+r` - 重做 ( redo )
|
|
|
|
> 在vim当中存在一个独立的寄存器空间, 它不同于操作系统中的剪贴板
|
|
执行剪切或复制的内容都会置于寄存器当中
|
|
使用命令`reg`可以查看寄存器当中存储的内容
|
|
|
|
### 组合删除
|
|
删除其实就是剪切, 按`p`可以直接粘贴最近一次删除的内容
|
|
+ `x/X` - 删除光标下/前单个字符
|
|
+ `dw` - delete word, 删除光标之后的整个单词 ( 光标应位于词首 )
|
|
+ `d$/D` - 删除从光标处到行尾的所有字符
|
|
+ `d^` - 删除从光标处到行首的所有字符
|
|
|
|
> 这是vim当中比较通用的一种组合方式
|
|
也就是`[count]operation+[count]motion`组合
|
|
比如前面的`d`是删除, 属于操作
|
|
后面的`w`本来是光标向后移动一个单词, 属于动作
|
|
所以组合起来就是向后删除一个单词
|
|
操作和动作都是可以添加数字的
|
|
代表重复执行若干次
|
|
比如**2d3w**, 就代表删除光标后的3个单词, 重复该操作2次 ( 当然也可以写作**d6w**, 作用是一样的 )
|
|
|
|
前面在光标的移动当中提到的动作, 都可以按照这种方式进行组合
|