# vim 技巧

LLMS 索引： [llms.txt](/llms.txt)

---

## vim
vim是一个常用的文本编辑工具，在远程服务器中更改系统配置中经常使用。

基础
vim的模式
Vim一般分为三种不同的模式，普通模式( normal mode )、编辑模式和命令模式.
### 普通模式( normal mode )
使用vim打开文件则进入普通模式。在普通模式下可通过按键 h、j、k、l来控制光标的移动，通过 x、d(delete) 、 y(yank) 、p(put)等按键可对文本进行操作，在该模式下，键盘按键被视为类似 Word下的快捷键的功能，而不是被视为简单的文本输入。

### 编辑模式
在编辑模式下可对文件内容进行编辑。编辑模式下按键输入均被视为文本输入，而不再具备普通模式下的各种功能。用户可以通过按键ESC从编辑模式返回普通模式。
### 命令模式
在普通模式下，键盘输入 ' : '、 ' / '、 ' ? '则光标移动至界面最下行，并等待进一步输入。之后Vim会根据用户输入执行相应的动作，如保存和退出、查找和替换、执行外部命令等。命令模式下同样通过ESC键返回普通模式。

普通模式下的操作文件。
```python
vim filename　　　//打开名为filename的文件
    :w               //保存修改至源文件
    :wq              //保存修改并退出
    :q!              //不保存修改，直接退出
    :w filename      //保存修改(选中的部分)至filename(其中filename为不存在重名的新文件)
```
## 进入编辑模式
常用小写的i和o即可，i代表当行这个光标位插入，o代表下一行插入。
```python
    i    //insert即插入模式，从光标所在位置开始插入，即插入的内容位于原光标所在位置字符之前
    I    //从光标所在行的行首开始插入
    a    //append即附加模式，从光标所在位置之后附加，即新增内容位于原光标所在位置字符之后
    A    //从光标所在行的行末开始附加
    o    //在光标所在行的下一行加入新一行
    O    //在光标所在行的上一行加入新一行
    R    //进入替换模式，屏幕下方会出现Replace提示，此时的输入会直接替换光标所在位置的字符，与Windows下的 0 作用类似，同样通过ESC键返回
```
## 删除操作
在普通模式下使用dd命令即可删除当行

```python
    x        //删除光标所在处的字符(其大写形式X为将光标之前的字符删除，相当于Backspace)
    dd     　//删除光标所在行的操作(常用)
    dw         //删除一个单词
    d3w      　//删除三个单词
    d$         //删除光标所在处至行尾的字符
    d4l        //删除光标所在处起的四个字符
    d2j        //删除两行
```
同样的，如 2dd 指令则表示将dd指令重复两次，即为删除两行操作，2d2w 则表示将 d2w 操作执行两次，即删除四个单词。

## 复制与粘贴
复制即通过 v 指令选定文本段，通过 y 指令复制内容，再通过 p 指令将文本放置在指定位置；剪切即通过 v 指令选定文本段，通过 d (或 x )指令删除内容，再通过 p 指令将文本放置在指定的位置； p 指令除了用于复制内容的粘贴外，还可以将上一次删除的内容粘贴在指定的位置，故而可以达到类似剪切的效果。对于 v 指令选中的文本，可以进行多种操作，包括复制(y)、删除(x/d)、另存(:w filename)等，读者完全可以自行进行组合尝试。指令y和d的指令形式有许多相同之处，除了均有yy和dd这种针对一行内容的处理指令外，指令y可以与光标移动指令相结合，得到更好的使用效果。
```python
    p                    //put命令，将剪贴的内容(注意，既可以是复制的内容，也可以为之前删除的内容)放置在光标后的位置，其大小字母P则表示放置在光标之前的位置
    v                    //进入虚拟选择模式(visual selection)，被选择的文本段被高亮显示(v的选择对象为字符，对应的大写字母V则是以行为单位选择)
　　Ctrl + v　　　　　　　 //以矩形框的形式进行内容选择
    y                    //复制通过 v 操作选择的文本，或则其本身也可以与光标移动指令一同使用
    y5w                     //如y5w，则复制5个单词(注意复制是从光标所在处开始的)
    yy    //复制光标所在行的内容
    y0    //复制光标所在位置至行首的内容
    y$    //复制光标所在位置至行尾的内容
    yG    //复制光标所在位置至文本结束的内容
    ynG   //复制指令与nG指令的结合
　　　　　　//以及诸如y3w、y3j等指令
```

## 行跳转
```python
    gg        //跳转至文件第一行
    G         //跳转至文件最后行
    nG        //跳转至文件第 n 行  

```
## 撤销
```python
    u            //撤销上一次操作
    U            //撤销对光标所在行的所有操作
    Ctrl+r    　 //重做上一操作
```

## 查找
```python
    /keyword         //按默认方向查找关键字
    ?keyword         //按与默认方向相反的方向查找关键字
    n                //按与之前相同的查找顺序匹配下一个出现相同关键字的位置
    N                //按与之前相反的查找顺序匹配下一个出现相同关键字的位置
    　　　　　　　　　 //用户也可以通过Ctrl + o 和 Ctrl + i 进行位置的切换
 
```

## 替换
```python
    :s/old/new           //将光标所在行出现的第一个old替换为new(仅对该行的第一个old)             
    :s/old/new/g      　 // 将光标所在行出现的所有old替换为new            
    :s/old/new/gc     　 //同上，替换之前提示用户确认是否替换      
    :n,ms/old/new/g　　　//在n和m指定的行之间进行检查和替换    
    :%s/old/new/g　　　　//针对整个文本进行替换
```

##  修改编辑选项
修改 ～/.vimrc 文件
```python

    :set nu        　//显示行号，相应的set nonu则为不显示行号
    :set ic        　//搜索忽略大小写(ignore case),取消即为 set noic
    :set hlsearch    //搜索时匹配的结果高亮显示
    :set incserch    //设置搜索时的搜索顺序
                    //可以看到，在对应的选项前面加入前缀no即表示取消取消对应的选项
    :set ruler　　　　//右下角展示状态栏
    :set             //显示与系统默认设置不同的参数情况，即被修改过的参数情况
    :set syntax on　 //设置Vim会根据语法以不同颜色显示不同的内容
    :set syntax off
```
