linux vim.md

  1. buffer操作
  2. 操作
  3. 如何在vim中编译程序
  4. 执行shell命令
  5. 挂起操作
  6. 宏操作
  7. 不常用

启动

command desp
vim -u vimrc_file 指定配置文件启动
vim -c n file 在第n行打开file
vim + file 在最后一行打开file
vim +/pattern file 在第一个出现pattern的地方打开file
vim -R file/view file 只读打开
-o[n] 以水平分屏的方式打开多个文件
-O[n] 以垂直分屏的方式打开多个文件

打开退出

command desp
:e test.txt 打开test.txt文件进行编辑,文件不存在则创建
e! 放弃修改,重新加载原始文件,不退出
E 创建新文件 并命名
:w 保存文档,但不退出vim编辑器
w! 强制保存,不退出—
w filename 另存为filename文件 不退出
w! filename 强制另存为filename文件 不退出
:q 不保存文档,退出vim编辑器。
:q! 放弃所有修改强制退出
:wq/:x/ZZ 保存文档然后退出vim编辑器。。
x! 强制保存文件并退出
r filename (read)读入filename指定的文件内容插入到光标位置
:qa 全部关闭
:x 写入文件同时离开文件 只有文件被修改才会写入
:w file.new 另存文件
:230 $w file
:. 600w newfile
:e! 复原修改

插入
|command| desp|
—|—
|i |在光标前插入 |
|I |在行首插入 |
|a |在光标后插入 |
|A |在行末插入 |
|o |在当前行之下新建行 |
|O |在当前行之上新建行 |
|c| 更改(删除)文本 后面跟bwj之类的操作|
|cc| 更改(删除)一行|
|C| 更改(删除)到行尾|
|ctx|删除到下一个字符跨过的字符 删除并进入插入模式 不包括x字符 |
|cfx|删除当前字符到下一个字符处的所有字符 并进入插入模式 包括x字符|
|c{motion} |删除motion跨过的字符 删除并进入插入模式 |
|r| 替换一个字符|
|s| 替换(删除)多个 删除当前字符并进入编辑模式|
|S| 替换(删除)一行|
|25i* + esc| 插入25对*—|

命令模式下
|command| desp|
—|—
|:!ls| !后面可以跟系统命令 |
|:sh| 创建一个shell 结束后返回vi |
|:history | 列出所有的历史记录 |
|:his c | 列出所有的行命令记录 |
|:his s | 列出所有的搜索记录 |

===============================

移动

command desp
h/Space/num+h 光标向右移动
l/Backspace/num+l 光标向左移动
j/Enter/num+j 光标向下移动一行
k/-/num+k 光标向上移动一行
w/num+w/W 下一个字符串首/跳num个字符/长跳
e/ge/num+e/E 当前或下个word的末尾/上个word的末尾/num个word的末尾/长跳
b/num+b/B 上一个字符串首/上num个word的开头/长跳
ctrl+u/ctrl+d 上翻半页/下翻半页
Ctrl+f/PageDown 向前滚动一页
Ctrl+b/PageUp 向后滚动一页
z+enter/z./z- 调整屏幕位置 将光标移到屏幕顶端/中心/底端,并滚动屏幕
ctrl+l 重画屏幕
nH/nL 移到屏幕顶端 往下/往上 第n行
0(零)/Home 键 移至行首(包含空白字符,如缩进的空格)
^ 移到行首第一个非空白字符。
$/End 将光标移到行末
gg/G 将鼠标指针移到文件头/尾
ngg/nG/:n 跳到第n行
n | 将光标移动到本行第n个字符
:num+j 将光标移到第几行,并连接后一行
% 移动到匹配的{}.().[]处
H/M/L 将光标移至屏幕 顶部/中间/底部 第一个非空白字符

其他
|command| desp|
—|—
|J| 合并两行|
|:nj |将光标移到第n行,并连接后一行 |
|J….可以连接4行文字 |

跳转

command desp
gd 跳至当前光标所在的变量的声明处
ctrl+o 返回上一个位置
``/‘’ 返回上次光标所在位置/行开头 搜索编辑后也可用
[[ 向前跳到顶格第一个{
[] 向前跳到顶格第一个}
][ 向后跳到顶格的第一个{
]] 向后跳到顶格的第一个}
[{ 跳到本代码块的开头
]} 跳到本代码块的结尾

其他
|command| desp|
—|—
|% | 移动到匹配的{}.().[]处 |
|(/) | 光标移至句首/光标移至句尾 句子是以. ? ! 标点来判断的。 |
|{/} | 光标移至段落的开头/光标移至段落的结尾 段落是以空白行来判断的。 |
|[[/]]|移到这一节开头/结尾|
|ctrl+g| 显示当前光标所在行|

剪切复制

剪切的命令是d,即delete,d与y命令基本类似,所以两个命令用法一样,包括含有数字的用法.

command desp
x/X 删除字符/向前删除字符
d 剪切选定块到缓冲区
du 取消删除准备
dd 剪切整行
D 剪切到行尾
dw 剪切一个word
d^/d$ 剪切至行首/行尾
dgg/dG 剪切至档首/档尾
nd+向上键/nd+向下键 删除光标所在行及向上/向下的n行
d$ 剪切选定块到缓冲区 后面跟移动操作符例如j^$

|dtx|删除motion跨过的字符 删除但不进入插入模式 不包括x字符 |
|dfx|删除当前字符到下一个字符处的所有字符 包括x字符 |
|d{motion}|删除motion跨过的字符 删除但不进入插入模式 |

大小写转换

command desp
~ 切换大小写,当前字符
g~~ 将当前行小写的转换成大写, 大写的转换成小写
guu/gUU 将当前行全部小写/大写
Vu/VU 将选中的行(单行或多行)全部小写/大写

搜索

command desp
/ regexp 向后搜索
? regexp 向前搜索
// 重复上一次搜索
n 向同一个方向重复搜索
N 向相反方向重复搜索
/+enter 往后重复搜索
?+enter 往前重复搜索
* 查找光标所在处的单词,向下查找
# 查找光标所在处的单词,向上查找

行内搜索
|command| desp|
—|—
|fx/nfx|把光标移动到本行中下一个出现x的地方|前面加n就搜索x第n次出现的地方|
|Fx/nFx|把光标移动到本行中上一个出现x的地方|
|tx|把光标移动到本行中下一个出现x的前一个字符|
|Tx|把光标移动到本行中下一个出现x的后一个字符|
|;/,|重复上一个搜索命令,方向相同/方向相反|
|dfx/ndfx|删除查找x之间的字符|
|yfx/nyfx|复制查找x之间的字符|

编辑操作
|command| desp|
—|—
|. |重复前一个编辑操作命令 |

修改

command desp
xp 对调两个字符
nr& 替换n个字符为&
R 新字符替换当前字符,直到esc

撤销
|command| desp|
—|—
|u| 撤销最近一个操作|
|U| 撤销一行操作|
|ctrl+r| 撤销一次撤销操作|

复制
|command| desp|
—|—
|:reg| 查看缓冲区|
|y/Y |在使用v模式选定了某一块的时候,复制选定块到缓冲区用 |
|yy/Y |复制整行 nyy/yny|
|y^ | 复制当前到行头的内容|可以跟移动操作符|
|ygg/yG | 复制至档首/档尾 |
|nyG/ynG/nygg/yngg|从当前复制到第n行|

粘贴
|command| desp|
—|—
|xp| 交换两个字符|
|ddp|交换两行|
|p | 放置在光标后 |
|P | 放置在光标前|
|np|放置多次|

insert模式

command desp
ctrl+n(p) 自动补全
ctrl+w 回删一个word
ctrl+u 删除到行首(包括行首空白)
ctrl+t/ctrl+d 向右缩进/向左缩进
ctrl+h 对应Backspace键
ctrl+j 对应回车键
ctrl+m 回车键

恢复缓冲区
|command| desp|
—|—
|ex -r/vi -r|查看因为死机被保存的缓冲区文件|
|vi -r file|从缓冲区恢复文件|
|:pre|强制(手动)保存到缓冲区|

删除缓冲区
删除操作最近9次会保存在编号缓冲区中
复制操作可以被放到字母标识的26个缓冲区中

command desp
“2p 将第2个删除缓冲区中的数据粘贴
“1pu.u.u 不断尝试缓冲区 u撤销 .会让缓冲区标号增加

复制缓冲区
|command| desp|
—|—
|”dyy| 将当前行放到缓冲区d中|
|”dp/“dP| 把缓冲区d的内容粘贴|
|”a5dd|将删除的5行保存到缓冲区a中|
|”Zy)”|将下一句子添加到缓冲区z中 大写表示追加到该缓冲区|
|”+yy | 复制当前行到剪切板, +号表示系统粘贴板|
|”+p | 将剪切板内容粘贴到光标后面|
|”ayy | 复制当前行到寄存器 a|
|”ap | 将寄存器 a 中的内容粘贴到光标后面|

标记,查看浏览器书签
|command| desp|
—|—
|mx|将当前位置标记x,而且只能用小写字母|
|’x|将光标移到标记x所在行的第一个字符|
|`x|将光标移到标记x的字符|
|``|回到上一个或上下文的确切位置|
|’’|回到上一个标记或上下文所在行的开头|

可视模式、操作
|command| desp|
—|—
|v | 可视模式
|V | 可视行模式
|ctrl+v |块选择
|可视模式下 d | 删除选定的块 |
|可视模式下 按c | 删除选定的块然后进入插入模式 |
|可视模式下 IESC | 在选中的块同是插入相同的字符 |

光标移至括号内,按shift+v进入行选模式,然后
|command| desp|
—|—
|ib | 选中括号中内容,不包括括号
|ab | 选中括号中内容,包括括号
|i{ | 选大括号中内容,不包括大括号
|a{ | 选大括号中内容,包括大括号

自动排版
|command| desp|
—|—
|gg=G | 自动排版|

窗口操作
|command| desp|
—|—
|:split/:vsplit | 分隔一个窗口 |
|:new/:vnew | 创建一个窗口 |
|sf/sp {filename} | 在新窗口打开文件:|
|:close | 关闭当前窗口 |
|:only | 仅保留当前窗口 |
|CTRL-Wo | 等效于 :only |
|CTRL-Wc | 等效于 :close! |
|CTRL-W= | 所有窗口等高, 适合 diff 时自己移动了 window 大小 |
|ctrl + w, h | 到左边窗口 |
|ctrl + w, l | 到右边窗口 |
|ctrl + w, k | 到上边窗口 |
|ctrl + w, j | 到下边窗口 |
|ctrl + w, t | 到顶部窗口 |
|ctrl + w, b | 到底部窗口 |
|ctrl + w, w | 顺序切换窗口|

多文件编辑 https://www.cnblogs.com/end/archive/2012/06/12/2546757.html

command desp
vim file1.. 同时打开多个文件
:next/:prev 切换到下个文件/前个文件
:n/:N 切换到下个文件/前个文件
:next!/:prev! 不保存当前编辑文件并切换到下个文件/上个文件
:wnext/:wprev 保存当前编辑文件并切换到下个文件/上个文件
:first/:last 定位首文件/定位尾文件
ctrl+^ 快速在最近打开的两个文件间切换
:all 打开所有的窗口
:vertical all 打开所有的窗口, 垂直打开
:qall 对所有窗口执行:q操作
:qall! 对所有窗口执行:q!操作
:wall 对所有窗口执行:w操作
:wqall 对所有窗口执行:wq操作

多标签编辑
|command| desp|
—|—
|:tabedit file | 在新标签中打开文件file |
|:tab split file| 在新标签中打开文件file |
|:tabp | 切换到前一个标签 |
|:tabn | 切换到后一个标签 |
|:tabc | 关闭当前标签 |
|:tabo | 关闭其他标签 |
|gt | 到下一个tab |
|gT | 到上一个tab |
|ngt | 跳到第n个tab |
|gvim –remote-tab-silent + 目录(*.cpp) |打开文件夹下所有文件 |

查找替换
|command| desp|
—|—
|% | 符号匹配功能 在比编辑时输入%|
|:s/s1/s2 | (将下一个s1替换为s2) 当前行 |
|:s/regexp/replacement/g | 替换当前行 |
|:%s/regrep/replacement/g | 全文替换 |
|:%s/regrep/replacement | 全文替换 匹配每行第一个 |
|:%s/regexp/replacement/gc | 全文替换, 并在每次替换之前进行提示 |
|num1,num2 s/parttrtn1/parttrtn2/g| 将行num1到num2的字符串parttrtn1替换为parttrtn2 |
|:%s/str/\r/g | 替换并换行 |
|:g/xxx | 列出包含xxx的所有行 |

文件操作
|command| desp|
—|—
|:Exp | 浏览文件夹 |
|:Sex | 分割窗口浏览文件夹 |
|:args |查看当前打开的所有文件 |
|:ls |显示缓冲区 |
|:cd |显示当前文件夹 |


|rx | 将当前光标字符替换为x |
|R | 替换光标所到之处的字符知道按esc为止 |

buffer操作

buffer状态
|command| desp|
—|—
|- | (非活动的缓冲区) |
|a | (当前被激活缓冲区) |
|h | (隐藏的缓冲区) |
|% |(当前的缓冲区) |
|# | (交换缓冲区) |
|= | (只读缓冲区) |
|+ |(已经更改的缓冲区) |

操作

command desp
ctrl+g 查看共有几行
>> 缩进所有选择的代码
<</== 反缩进所有选择的代码

选中一段代码,< ”, 指的是在normal模式下使用shift+v 选中代码然后再“<”或者“>”
还有一种方法就是使用列模式, 在normal模式下使用ctrl+v选中要插入tab的位置, 然后使用“I”进入插入模式, 输入一个或多个tab即可.
如果是c语言的话, 一个最nb的功能就是自动排序, “=”命令, shift+v选择全文件, 然后”=”
要想单行自动对齐, 请使用”==”.
vim里自动缩进一段把光标移动到某个花括号,按 =% 缩进整段。
把整段不按格式往外缩一个tab>%缩两个>>%往里缩<%如果你想从#ifdef缩到#endif也可如此

command desp
:g/xxx 列出所有含 xxx 的行; 适合想到含 xxx 的某行, 但不知道行号,/xxx 又太慢
q: q/ q? 编辑长命令时比较舒服, 执行按回车, 按 CTRL-C 再次进入
: / ? 原来的输入状态再按一次关闭.
gv 再次选中 上次选中的内容, 用
O 在选中的区域首尾跳动, 用大写
: ↑ 重复上次的命令
. 重复执行上一个作用使用
:set nuw=10 每行的缩进距离 只能取值:1,2,3,4,5,6,7,8,9,10
:filetype indent off 关闭自动缩进
:set nu 设置行号
:set nu! 取消设置行号
:set number 设置行号
: hi LineNr guifg=Red 设置行号的颜色
:X 对文件进行加密,设置密码
:# 在命令行的位置输出: 当前光标所在的行号和行内容
:tabnew E:/avaj/com/E后按tab键 自动补全文件名Example11.java
在编写代码的时候可以使用]p粘贴, 这样可以自动进行代码缩进
Ctrl+o 重复到更远的返回
Ctrl+t 重复到更远的返回
CTRL-A, CTRL-X 数字加减, lunix中

如何在vim中编译程序

在vim中可以完成make,而且可以将编译的结果也显示在vim里,先执行 :copen 命令,将结果输出的窗口打开,然后执行 :make
编译后的结果就显示在了copen打开的小窗口里了,而且用鼠标双击错误信息,就会跳转到发生错误的行。

执行shell命令

在命令模式下输入”:sh”,可以运行相当于在字符模式下,到输入结束想回到VIM编辑器中用exit,ctrl+D返回VIM编辑器
可以”!command”,运行结束后自动回到VIM编辑器中
用“Ctrl+Z“回到shell,用fg返回编辑
:!make -> 直接在当前目录下运行make指令

挂起操作

command desp
ctrl + z 或者 :suspend 挂起Vim
jobs 查看任务 在shell中输入
fg [job number](将后台程序放到前台)或者 bg [job number](将前台程序放到后台) 恢复任务
:!command 执行shell命令
:shell,退出该shell exit 开启shell命令
:mksession name.vim 保存vim状态
:source name.vim 恢复vim状态
vim -S name.vim 启动vim时恢复状态

宏操作

command desp
q[a-z] 开始记录宏操作,按q结束,保存操作到寄存器[a-z]中
@[a-z] 执行寄存器[a-z]中的操作
@@ 执行最近一次记录的宏操作
:qa! 录制以a为宏名的宏

不常用

command desp
:colorscheme torte 设置背景颜色
:set guifont=Courier_New 不造
:h10:cANSI 设置字体属性
:colo torte 隐藏菜单栏和工具栏 再设置背景颜色
:sy on 语法加亮
:sy clear 取消语法加亮
:syntax enable 加亮显示
:syntax clear 清除加亮显示
:help iccf 查看说明
:help Enter键 查看在线帮助
:help F1键 查看在线帮助
:help version7 查看版本信息

仅供参考
目录