Vim基本操作
Vim一般认为有三种模式
- 命令模式:该模式下是不能直接对文件进行编辑,可以输入快捷键进行一些操作(删除行,复制行,移动光标,粘贴等等)【打开文件默认进入的模式】
- 编辑模式(输入模式):该模式下可以对文件的内容进行编辑
- 末行模式(尾行模式):该模式下可以在末行输入命令来对文件进行操作(搜索,替换,保存,退出,撤销,高亮等等)
Vim的打开文件方式
- 【vim 文件路径】:打开指定的文件
- 【vim +数字 文件路径】:打开指定的文件,并且将光标移动到指定行
- 【vim +/关键字 文件路径】:打开指定的文件,并且高亮显示关键词
- 【vim 文件路径1 文件路径2 文件路径3】:同时打开多个文件
Vim的保存和关闭命令
- 在没有输入其他键的情况下,按下 “:q” 然后 “enter” 键退出
- 有修改之后,按 ESC 键 跳到命令模式,然后:
-
- :x:保存并退出,类似【:wq】命令,但是与【:wq】有几点不同
- ① 如果文件没有修改,那么【:x】表示直接退出;如果文件有修改,【:x】表示保存并退出
- ② 如果文件没有修改,但是使用【:wq】进行退出,则文件的修改时间会被更新;但是如果使用【:x】进行退出,文件的修改时间不会被更新。
- :w 保存文件但不退出vim
- :w file 将修改另外保存到file中,不退出vim
- :w! 强制保存,不退出vim
- :wq 保存文件并退出vim
- :wq! 强制保存文件,并退出vim
- q: 不保存文件,退出vim
- :q! 不保存文件,强制退出vim
- :e! 放弃所有修改,从上次保存文件开始再编辑
- :x:保存并退出,类似【:wq】命令,但是与【:wq】有几点不同
不要使用【:X】大写的X,这会对文件进行加密。
(注意按下":"时其实已经切换到了末行模式)
Vim模式的切换
- 命令模式 -> 末行模式 【:(英文)】【/(仅限搜索时)】
- 末行模式 -> 命令模式 【1次ESC/2次ESC/退格键删除全部命令】
- 命令模式 -> 编辑模式 【i/a/等】更多方式进入编辑模式
- 编辑模式 -> 命令模式 【ESC】
末行模式和编辑模式之间不能相互切换,他们的转变需要经过命令模式进行中转。
命令模式
- 该模式下是不能直接对文件进行编辑,可以输入快捷键进行一些操作(移动光标,删除行,复制行,粘贴等等)
- 注意:该模式是打开文件的第一个看到的模式(打开文件即可进入)
光标移动
① 光标移动到行首 【shift+6(注意:是T字母右上的6,不是小键盘的数字6) 或者说 ^ 符号】
② 光标移动到行尾 【shift+4(注意:是E字母右上的4,不是小键盘的数字4) 或者说 $ 符号】
③ 光标移动到首行 【gg】
④ 光标移动到末行 【G】
⑤ 翻屏
向上翻屏 【Ctrl+b(before) 或者 PgUp】
向下翻屏 【Ctrl+f(after) 或者 PgDn】
复制操作
① 复制光标所在行 按下【yy】然后在需要粘贴的地方按下【p】键
② 以光标所在的行为准(包含光标所在行)向下复制指定行数 按下【行数yy】然后在需要粘贴的地方按下【p】键
③ 可视化复制 按下【Ctrl+v】,然后使用 ↑,↓,←,→ 方向键来选择需要复制的区块,按下【yy】键进行复制,接着在需要粘贴的地方按下【p】键
剪切/删除
① 剪切/删除光标所在行 按下【dd】,如果要粘贴,就在需要粘贴的位置按下【p】键,不需要粘贴就是删除(剪切/删除之后下一行上移)
② 以光标所在的行为准(包含光标所在行)向下剪切/删除指定行数 按下【行数dd】然后在需要粘贴的地方按下【p】键(剪切/删除之后下一行上移)
* 注意:【dd】严格意义上说是剪切命令,但是如果剪切了不粘贴就是删除效果
③ 剪切/删除光标所在行,但是剪切/删除之后下一行不上移 按下【D】然后在需要粘贴的地方按下【p】键 (剪切/删除之后当前行变成空白)
撤销/恢复
* 撤销:【:u】(不属于命令模式)然后回车 或者 【u】(undo)
* 恢复:【Ctrl+r】 恢复(取消)之前的撤销操作
光标的快速移动
① 快速将光标移动到指定的行数 【数字G】
② 以光标当前行为准向上/向下移动指定行 【数字↑/数字↓】
③ 以光标当前行为准向左/向右移动指定字符数 【数字←/数字→】
④ 末行模式下快速移动方式:移动到指定行 【:数字】然后回车
末行模式(尾行模式)
- 该模式下可以在末行输入命令来对文件进行操作(搜索,替换,保存,退出,撤销,高亮等等)
- 进入:由命令模式进入,按下英文【:】即可进入 或者 【/(仅限搜索时)】
- 退出:使用指令【1次ESC】【2次ESC】【退格键(Backspace)删除全部命令】
保存操作(write)
① 保存文件 【:w】然后回车
② 另存文件 【:w 路径】然后回车
退出操作(quit)
退出操作 【:q】然后回车
保存并退出
保存并退出操作 【:wq】然后回车
强制(!)
① 强制不保存退出 【:q!】
② 强制保存 【:w!】
③ 强制保存并退出 【:wq!】
调用外部命令
有时候在vim编辑的过程中,需要调用其他的命令,那么在末行模式中可以使用如下指令进行临时调用外部命令 **【:!外部命令】**如:【:!ls】:表示在vim的末行模式中调用了外部的 "ls" 指令,那么终端就会显示外部命令 "ls" 的执行结果(界面会提示怎样重新进入vim中)
搜索/查找
* 搜索命令 【/搜索关键字】
* 在搜索结果中切换上一个/下一个结果 【N/n】
* 取消高亮显示 【:nohl】(no highlight)
替换
① 语法1 【:s/需要替换的内容/新的内容】 :替换光标所在行的第一处符合条件的内容
② 语法2 【:s/需要替换的内容/新的内容/g】 :替换光标所在行的全部符合条件的内容
③ 语法3 【:%s/需要替换的内容/新的内容】 :替换整个文档中每行第一个符合条件的内容
④ 语法3 【:%s/需要替换的内容/新的内容/g】 :替换整个文档中所有符合条件的内容
%表示整个文件,g表示全局
显示/取消行号
* 显示行号 【:set nu】 (number)
* 隐藏行号 【:set nonu】
注意:这个设置只是临时设置,关闭vim之后再重新打开就没有了。
使用Vim打开多个文件,在末行模式下进行切换文件
* 查看当前打开的文件名称 【:files】
字段名称 | 字段说明 | 字段说明 | 字段说明 |
---|---|---|---|
1 | %a | “a.txt” | 第 35 行 |
2 | “b.log” | 第 0 行 | |
3 | “c.log” | 第 0 行 |
- 在 %a 的位置有2中显示可能
- %a:active,表示当前正在打开的文件
- # :表示上一个打开的文件
切换文件的方式
① 指定切换文件的名称 【:open 以打开的文件名】
② 切换到下一个文件 【:bn】(back next)
③ 切换到上一个文件 【:bp】 (back previous)
编辑模式(输入模式)
-
该模式下可以对文件的内容进行编辑
-
进入编辑模式:
- i:在光标所在字符前开始插入
- a:在光标所在字符后开始插入
- o:在光标所在行的下面另起一行开始插入
- I:在光标所在行的行首开始插入,如果行首后空格,则在空格之后开始插入
- A:在光标所在行的行尾开始插入
- O:在光标所在行的上面另起一行开始插入
- S:删除光标所在行并开始插入
-
退出编辑模式:
- 按一次ESC键 【ESC】
实用功能
代码着色
- 关闭代码着色:【syntax off】
- 打开代码着色:【syntax on】
这种方式为临时方式,重新打开之后恢复默认。
vim中计算器的实用
当在编辑文件中,突然需要使用计算器来计算出一些公式时,此时需要使用计算器,我们可以退出vim,然后计算完在重新编辑,但是vim中已经集成了计算器。
步骤:
a:进入编辑模式
b:按下【Ctrl+r】,然后输入 “=”,此时光标会移动到最后一行
c:输入需要计算的内容,然后回车
vim的扩展
vim的配置
vim的配置主要有三种情况:
- 在文件打开的时候在末行模式下进行配置(这个是临时的,如上面的行号设置、代码着色)
- 个人配置文件(/.vimrc)(:表示当前用户家目录,使用命令【cd~】或者【cd】进入)
- 全局配置文件(vim自带,/etc/vimrc)
使用个人配置
① 新建号配置文件,然后进入编辑(文件目录:/.vimrc;(:表示当前用户家目录,使用命令【cd~】或者【cd】进入))
② 在配置文件中进行配置,比如:
显示行号,输入:set nu
vim配置文件的优先级
临时配置 > 个人配置 > 全局配置
异常退出
在编辑文件之后,并没有正常去保存退出(wq),而是突然关闭终端或者断电的情况,则在下次打开时不能正常显示了,而是会出现一些提示信息,主要是发现了交换文件 “.passwd.swp” (我编辑的文件是 passwd ,所以交换文件名为.passwd.swp,交换文件名的规则是:.编辑文件名.swp)等等,并且会提示应该怎样解决问题,一般情况下是直接删除交换文件即可(删除文件命令【rm -f .passwd.swp】)
别名机制
作用:相当于创建一些属于自己自定义命令
别名机制主要依靠一个别名映射文件:~/.bashrc (:表示当前用户家目录,使用命令【cd】或者【cd】进入)
alias rm='rm -i'
alias cls='clear' # 自定义的类似window系统的清屏命令
注意:使用别名时,在配置文件(~/.bashrc)中创建了新的命令,想要新的命令生效,必须要重新登录当前用户。