1. vim
[TOC]
vim有3种模式:
- 一般模式(NORMAL):会在屏幕的底部显示文件名或者是空白。在打开vim 时默认处于一般模式。可以执行大量操作。
- 输入模式:底部会显示
–INSERT–。 - 命令行模式:键入
:进入。 - 可视模式:底部显示的是
–VISUAL–。可使用d删除选择内容,y复制选择内容。v:进入字符选择模式。Shift+v:进入行选择模式Ctrl+v:进入块(区域)选择模式
- 搜索模式:键入
/(正向查找)或?(反向查找) 进入。按n或N进行正向或反向遍历。\*:查找光标所在位置的单词。:n1,n2s/word1/word2/g:在第n1和第n2行之间,查找word1这个字符串,并用word2来替换。:1,$s/word1/word2/g:在整个文件中,查找word1这个字符串,并用word2来替换。:n1,n2s/word1/word2/gc:在替换前询问使用者是否替换(conform)。
无论编辑器当前在什么模式, 按下 Esc 键,它都会回到一般模式。有时需要按两次Esc。
一般模式下移动光标:
| 快捷键 | h/← |
j/↓/Enter |
k/↑ |
l/→ |
^/0 | $ | w | b | G |
|---|---|---|---|---|---|---|---|---|---|
| 含义 | 左移 | 下移 | 上移 | 右移 | 行首 | 行尾 | 下一个单词 | 上一个单词 | 最后一行 |
| 快捷键 | H | M | L |
|---|---|---|---|
| 含义 | 光标移到屏幕最上方那一行 | 光标移到屏幕中间那一行 | 光标移动到屏幕最下方那一行 |
| 快捷键 | gg | nG | n$ | Ctrl+o | f/F <字母> |
|---|---|---|---|---|---|
| 含义 | 第一行 | 第n行行首 | 第n行行尾 | 回到上一次光标所在位置 | 向后/前搜索字母并移动光标 |
| 快捷键 | Ctrl+f/PgDn |
Ctrl+b/PgUp |
Ctrl+d |
Ctrl+u |
|---|---|---|---|---|
| 含义 | 屏幕向下移动一页 | 屏幕向上移动一页 | 屏幕向下移动半页 | 屏幕向上移动半页 |
| 快捷键 | << | >> |
Ctrl+l |
Ctrl+g |
|
|---|---|---|---|---|---|
| 含义 | 整行向左缩进 | 整行向右缩进 | 刷新屏幕(load) | 显示文件状态,行数、行号等 |
一般模式下对文本进行删除:
| 键 | x/Delete | X/BackSpace | d^ | d$/D | dd | dw/daw/dnw | dG | d1G |
|---|---|---|---|---|---|---|---|---|
| 含义 | 删除光标所在的字符 | 删除光标前的字符 | 删除至行首 | 删除至行尾 | 删除/切剪当前行 | 删除1/n个单词 | 删除至文档结尾 | 删除至文档首部 |
还可以在命令前加上数字,表示执行多次相同操作。如5dd表示删除5行。
其他命令:
| 键 | J | u/u {n} | Ctrl+r | Shift+z+z | . | ~ |
|---|---|---|---|---|---|---|
| 含义 | 删除换行符 | 撤回1/n次修改 | redo,反撤回 | 保存并退出 | 重复上一次操作 | 大小写转换 |
| 键 | yy | y^/y0 | p | P | ddp |
|---|---|---|---|---|---|
| 含义 | 复制当前行 | 复制到行首(不含光标) | 粘贴到光标后 | 粘贴到光标前 | 交换光标所在行与下面一行 |
| 键 | r <字符> | R | cc | C |
|---|---|---|---|---|
| 含义 | 替换光标处的字符 | 连续替换,直到按Esc | 删除当前行并进入插入模式 | 删除至行末并插入 |
把光标移到一个括号(()/{}/[])上,按 % 可以快速将光标移动到与其匹配的另一个括号上。
从一般模式进入插入模式:
| 快捷键 | i | I | a | A | o | O | |||
|---|---|---|---|---|---|---|---|---|---|
| 含义 | 当前光标 | 行首插入 | 光标后插入 | 行尾插入 | 在当前行下面插入新行 | 在当前行上面插入新行 |
1.1.1. 命令行模式
在命令行模式下,可以使用 :! 外部命令 执行外部的shell命令。如 :! ls 显示当前目录内容。
| 键 | :ce |
:ri |
:le |
|||
|---|---|---|---|---|---|---|
| 含义 | 是本行文本居中(center) | 靠右(right) | 靠左(left) |
| 键 | :10,50d |
:1,.d |
:.,$d |
:10,50y |
||
|---|---|---|---|---|---|---|
| 含义 | 删除10到50行 | 删除文件首行到当前行 | 删除当前行到尾行 | 复制10到50行 |
| 键 | 5,10co56 |
:5,10m56 |
||||
|---|---|---|---|---|---|---|
| 含义 | 复制5-10行到56行下 | 移动5-10行到56行下 |
命令模式下,常用命令:
| 键 | w | w <文件名> | wq | q | q! | e <文件路径> |
|---|---|---|---|---|---|---|
| 含义 | 保存修改 | 另存为 | 保存修改并退出 | 退出 | 不保存,强制退出 | 打开相应文件 |
| 键 | r <filename> |
n1,n2 w <filename> |
e! |
|---|---|---|---|
| 含义 | 将filename中的内容插入当前行的后面 | 将n1到n2行的内容保存到filename中 | 将文件还原到最初状态 |
进行设置:
| 键 | set nu | set nu? | set shiftwidth=10 | set all | ||
|---|---|---|---|---|---|---|
| 含义 | 显示行号 | 查看"显示行号"的属性 | 设置缩进为10 | 显示所有设置 |
要获取帮助命令,输入:help 或者按下 F1 键。 vim 会显示一个帮助概览的窗口。
1.1.2. 同时编辑多个文件
vim a.txt b.txt:默认进入a.txt的编辑页面。
:n:向后切换到b.txt的编辑页面。可以使用:n!进行强制切换,即不保存修改。:N:反向切换
常用命令:
:e 3.txt:打开新文件:e#:回到前一个文件:files:列出目前这个vim打开的所有文件:ls:列出以前编辑过的文档:ls 1 # "a" line 1 2 %a "tp.py" line 7:b tp.py或者:b 2:直接进入tp.py进行编辑:f:显示正在编辑的文件名:f new.txt:将当前正在编辑的文件copy一份,命名为new.txt,需要:w保存后才会正在创建。
1.1.3. 视窗操作
vim可以在一个界面中打开多个窗口进行编辑,这些编辑窗口称为vim的视窗。
常用命令:
new:打开一个水平视窗。sp 1.txt:打开新的水平分屏视窗来编辑1.txt。省略文件名,表示两个窗口为同一文件内容,同步显示。vsp 2.txt:打开新的垂直分屏视窗来编辑2.txtCtrl+w s:将当前窗口分割成两个水平的窗口Ctrl+w v:将当前窗口分割成两个垂直的窗口Ctrl+w q:即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q!Ctrl+w o:打开一个视窗并且隐藏之前的所有视窗Ctrl+w j:移至下面视窗Ctrl+w k:移至上面视窗Ctrl+w h:移至左边视窗Ctrl+w l:移至右边视窗Ctrl+w J:将当前视窗移至下面Ctrl+w K:将当前视窗移至上面Ctrl+w H:将当前视窗移至左边Ctrl+w L:将当前视窗移至右边Ctrl+w -:减小当前视窗的高度Ctrl+w +:增加当前视窗的高度
1.1.4. 其他
vim的配置文件为~/.vimrc,
由于断电等意外原因没有保存文档,可以使用vim -r 进入文档后,按:ewcover a.txt 来恢复a.txt文件。
当编辑一个文件时,在这个文件所处的目录底下就会有一个临时文件,文件名为 编辑的文件名.swp,这是一个隐藏文件, 所有修改都会暂时存在这个文件中。在编辑过程中,系统或者 vi 非正常关闭了,那么再重新用 vi 打开这个文件时,系统就会询问是否『Recovery』。按下 R ,就可以将数据回复到修改 ,就可以将数据回复到修改过程的样子,再将 swp 文件删除。
vim -x a.txt:对a.txt进行加密,需要保存后才能生效。
vim的“死机”现象:vi 编辑结束后执行存盘操作,结果导致屏幕卡死,输入任何信息都 再有显示(死机,终端死机)。原因是 vi 编辑结束后按下 Ctrl+S,因为 Windows编辑器一般设置 Ctrl+S热键的动作为 Save ,但 Linux 却进入流量控制状态。解决方法是按下 Ctrl+Q 后流量控制解除。
流量控制:终端的显示速度跟不上主机的发送速度,需要对主机发送的内容进行暂停显示。
意外终止问题:vi 编辑结束后存盘,程序意外中止,编辑成果丢失,文件内容未发生变化。原因是vi存盘命令为 Shift+z+z, 结果按错成 Ctrl+z+z,而Ctrl+z按键导致当前运行程序被挂起(suspend),暂停了运行。解决方法:调用bash作业的管理机制,恢复运行stopped状态的进程:
jobs:列出当前被Stopped的进程fg %1或%1:将1号作业恢复到前台(foreground)运行
1.1.5. 多行编辑
多行插入:
Ctrl+V进入visual模式- 选定相关行数,可以使用上下键 ,也可以使用
Shift+G等快捷键 - 按
I(大写的i),进入编辑模式,编辑相应内容 - 按
ESC键,刚才的操作会应用到选中的所有行。