linux vim.md
启动
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 | 删除选定的块然后进入插入模式 |
|可视模式下 I
光标移至括号内,按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 | 查看版本信息 |
仅供参考