真正的计算机科学家使用vi。
一、文件
(一)打开
| vim [file] | 打开并编辑文件 |
| e [file] | 加载并编辑文件 |
| open [file] | 加载并编辑文件 |
| r [file] | 加载file至当前文件光标处 |
(二)关闭
| q | 直接退出 |
|---|---|
| q! | 强制退出 |
| w | 保存 |
| w [filename] | 另存为[filename] |
| wq | 保存并退出 |
| wq! | 保存并强制退出 |
| n1,n2 w [file] | 将 n1 到 n2 的内容储存成 file |
(三)浏览
| Vexplorer | 打开文件浏览器 |
|---|
二、编辑
(一)插入
| o | 行下方插入 |
| O | 行上方插入 |
| a | 光标后插入 |
| A | 从光标所在行的最后一个字符处开始输入 |
| i | 光标处插入 |
| J | 将光标所在行与下一行的数据结合成同一行 |
|---|
(二)删除
| x / #x | 删除光标所在位置的一个字符或#个字符,包括自己【左侧 ------> 右侧】 |
| X / #X | 删除光标所在位置的一个字符或#个字符,包括自己【左侧 ------> 右侧】 |
| dd | 删除光标所在行 |
| #dd | 删除光标所在行开始向下#行【包括当前行】 |
| dw | 删除一个单词 |
| d^ | 删除光标至行首的所有字符 |
| D/d$ | 删除光标至行尾所有字符 |
| d0 | 数字 0 ,删除游标所在处,到该行的最前面一个字符 |
| di' | 删除单引号'内的字符,保存引号。【单引号可替换为双引号,括号等】 |
| da' | 删除单引号'内的字符及引号。【单引号可替换为双引号,括号等】 |
|---|
Vim快速选中、删除、复制引号或括号中的内容
VIM中有快速对引号或括号等标点内的内容进行选中、删除、复制操作的超级技巧,非常实用。可以极大的提高编辑效率。
以下命令可以对标点内的内容进行操作。
ci'、ci"、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容
di'、di"、di(或dib、di[、di{或diB、di< - 分别删除这些配对标点符号中的文本内容
yi'、yi"、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容
vi'、vi"、vi(、vi[、vi{、vi< - 分别选中这些配对标点符号中的文本内容
(三)复制
| yw | 将光标所在之处到当前字尾的字符复制到缓冲区中。 |
| #yw | 复制#个字到缓冲区 |
| y#w | 从光标处开始复制3个字到缓冲区 |
| yy | 复制光标所在行到缓冲区。 |
| #yy | 「5yy」表示拷贝从光标所在的该行"往下数"5行文字【包括光标所在行】 |
| y0 | 复制光标所在的那个字符到该行行首的所有数据 |
| y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
|---|
(四)粘贴
| p | 将缓冲区内的字符贴到光标所在位置这一行的下一行。 |
| #p | 「5p」表示拷贝从光标所在的该行"往下数"5行文字。【包括光标所在行】 |
|---|
(五)撤销
| u | 如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次"u"可以执行多次复原。 |
|---|---|
| ctrl + r | 撤销的恢复,相当于对撤销的撤销 |
| . | 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用) |
(六)替换
| r | 单次替换光标下的字符 |
| R | 多次替换光标下的字符,直到按下 ESC 为止; |
|---|
三、光标
(一)行移
键盘上↑↓←→来进行移动移动,或h、j、k、l键。
| h | 左 |
| #h | 左移#个字符 |
|---|---|
| j | 下 |
| #j | 下移#行 |
| k | 上 |
| #k | 上移#行 |
| l | 右 |
| #l | 右移#个字符 |
| #<enter> | 向下移动#行 |
(二)屏移
|--------|---------------|
| ctrl+b | 屏幕往"后"(上)移动一页 |
| ctrl+f | 屏幕往"前"(下)移动一页 |
| ctrl+u | 屏幕往"后"(上)移动半页 |
| ctrl+d | 屏幕往"前"(下)移动半页 |
(三)跳转
| gg | 进入到文本开始 |
| G | 进入文本末端【shift + g】 |
| #gg | 光标移到第#行,如:5gg |
| $ | 移动到光标所在行的"行尾"【shift + 4】 |
|---|---|
| ^ | 移动到光标所在行的"行首"【shift + 6】 |
| w | 光标跳到下个字的开头 |
| W | 光标移到下一个单词 |
| b | 光标回到上个字的开头 |
| B | 光标移到上一个单词 |
| e | 光标跳到下个字的字尾 |
| #l | 光标移到该行的第#个位置,如:5l,56l |
四、查找
|-----|------------|
| /xx | 向后查找字符串xx |
| ?xx | 向前查找字符串xx |
| n | 查找下一个字符串xx |
| N | 查找上一个字符串xx |
五、替换
:[range]s/pattern/string/[c,e,g,i]
range\]表示替换范围,如"1,4"、"8,$",字符%代表全文。 |----|----------| | 标志 | 功能 | | c | 替换前询问 | | e | 不显示错误信息 | | g | 替换一行所有匹配 | | i | 忽略大小写 | ## 六、分屏 |-----------|-------------------| | vnew | 新建空白垂直分屏 | | new | 新建空白水平分屏 | | vsplit/vs | 新建垂直分屏,分屏内容与当前屏一样 | | split | 新建水平分屏,分屏内容与当前屏一样 | | ctrl+ww | 分屏切换 | ## 七、配置 |---------------------------|----------| | :set number | 显示行号 | | :set cindent shiftwidth=N | 设置行缩进字符数 | | :set autoindent | 设置自动缩进 | | :set tabstop=N | 设置tab宽度 | | :set ignorecase | 查找时忽略大小写 | | :syntax on | 语法高亮 | ## 八、Shell命令执行 |---------------------|-----------| | :terminal | 新建水平控制台分屏 | | :tab terminal | 新建控制台全屏 | | :!\[shell command\] | 执行shell命令 |