vim命令大全,常用和高级命令

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lisemi/article/details/80136390

整理了vim几乎所有命令

1、移动及跳转:

:n 跳转到n行,n表示行号 
nG 跳转到n行,n表示行号 
CTRL-] 跳转到当前光标所在单词对应的主题 
CTRL-O 回到前一个位置 
h 左 
j 下 
k 上 
l 右 
W 向前移动一个word 
b 向后移动一个word 

A  光标跳到行尾,并切换位insert模式

$ 命令将光标移动到当前行行尾 
^ 命令将光标移动到当前行的第一个非空白字符上 
0 命令则总是把光标移动到当前行的第一个字符上 
fx 在当前行上查找下一个字符x 
% 跳转到与之匹配的括号处 
gf 命令方便地跳转到光标下的文件名所代表的文件中 
. 跳转到最近修改过的位置 
“ 跳转到最近光标定位的位置 
m{mark} 将当前光标下的位置名之为标记{mark},从a到z一共可以使用26个自定义的标记 
{mark} 跳转到一个你定义的{mark}标记 
50%mF 到文件的半中间(”50%”)处设置一个名为F的全局标记 
G 光标定位到最后一行上 
gg 光标定位到第一行上 
50% 光标定位在文件的中间 
H 光标定位在显示屏的第一行 
M 光标定位在显示屏的中间 
L 光标定位在显示屏的最后一行 
CTRL-U 命令会使文本向下滚动半屏 
CTRL-D 命令将窗口向下移动半屏 
CTRL-F 命令将向前滚动一整屏(实际上是整屏去两行) 
CTRL-B 命令将向后滚动一整屏(实际上是整屏去两行) 
zz 命令会把当前行置为屏幕正中央(z字取其象形意义模拟一张纸的折叠及变形位置重置) 
zt 命令会把当前行置于屏幕顶端(t意为top) 
zb 命令会把当前行置于屏幕底端(b意为bottom) 
:jumps 列出关于你曾经跳转过的位置的列表,你最后一个跳转的位置被特别以一个”>”号标记 
:marks 列出自定义的标记,包含VIM内部自定义的标识

2、搜索

/ 命令可用于搜索一个字符串,在键入的过程中还可以用箭头键和删除键进行移动和修改 
? 命令与“/”的工作相同, 只是搜索方向相反 
n 继续搜索下一个字符串 
N 命令与“n”的工作相同, 只是搜索方向相反

  • 向下完整匹配光标下的单词

向上完整匹配光标下的单词

g 向下部分匹配光标下的单词 
Ctrl-P 向前搜索可匹配的单词并完成 
Ctrl-N 向后搜索可匹配的单词并完成 
:set ignorecase 设置忽略大小写 
:set hlsearch 高亮显示搜索结果 
:set incsearch 键入目标字符串的过程中Vim就同时开始了搜索工作 
:set nowrapscan 会使搜索过程在文件结束时就停止

3、编辑(新增、删除、移动、复制)

x 代表dl(删除当前光标下的字符) 
X 代表dh(删除当前光标左边的字符) 
D 代表d()Cc(删除到行尾的内容)C代表c(修改到行尾的内容) 
s 代表cl(修改一个字符) 
S 代表cc(修改一整行) 
diw 删除当前光标所在的word(不包括空白字符),意为Delete Inner Word 
daw 删除当前光标所在的word(包括空白字符),意为Delete A Word 
dG 删除当前行至文件尾的内容 
dgg 删除当前行至文件头的内容 
cis 修改一整个句子,意为change Inner Sentence 
R 让Vim进入replace模式,在此模式下,每个键入的字符都会替换掉当前光标下的字符 
p 取回被删除的内容,可以使用命令记数(在Vim中这叫put) 
P 与”p”一样取回被删除的内容, 不过它把被取回的内容置于光标之前 
yw 复制一个word,同样可以使用命令记数,c表示change而不是copy 
yy 复制一整行 
y$ 复制当前光标至行尾 
~ 改变当前光标下字符的大小写

4、在vi中替换字符串:

:s/vivian/sky/g    替换当前行所有vivian为sky,g表示global 
:n , s/vivian/sky/   替换第n行开始到光标行中每一行的第一个vivian为sky,n为数字,主要n与,和,与s之间是有空格
:n,s/vivian/sky/g 替换第n行开始到最后一行中每一行所有vivian为sky 
:.,s/vivian/sky/g  替换当前行开始到最后一行中每一行所有vivian为sky  
:%s/vivian/sky/     (等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky,%表示所有行  
:%s/vivian/sky/g   (等同于 :g/vivian/s//sky/g)替换每一行中所有 vivian 为 sky  
:s#vivian/#sky/#     替换当前行第一个vivian/为sky/,可以使用#作为分隔符,此时中间出现的/不会作为分隔符  
:3,s/vivian/sky/g     替换当前行开始到最后一行中每一行所有vivian为sky  
:%s/vivian/sky/      (等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky,%表示所有行  
:%s/vivian/sky/g    (等同于 :g/vivian/s//sky/g)替换每一行中所有 vivian 为 sky  
:s#vivian/#sky/#      替换当前行第一个vivian/为sky/,可以使用#作为分隔符,此时中间出现的/不会作为分隔符  
:3,s/^/some string/   在文件的第一行至最后一行的行首前插入some string 
:%s//somestring/g    在整个文件每一行的行尾添加somestring 
:/somestring/g         在整个文件每一行的行尾添加somestring
:%s/\s\+$                去掉所有的行尾空格,“\s”表示空白字符(空格和制表符),“+”对前面的字符匹配一次或多次(越多越好),“$”匹配行尾(使用“$”表示单纯的“”匹配行尾(使用“$”表示单纯的“”字符) 
:%s/(\s\n)+/\r/         去掉所有的空白行,“(”和“)”对表达式进行分组,使其被视作一个不可分割的整体。 
:%s!\s//.!!                去掉所有的“//”注释 
:%s!\s/*_.{-}*/\s*!!g  去掉所有的“”注释
:% s/^M//g             删除windows换行符,主要 ^M 的输入用 Ctrl+v ,再按回车;或者是 Ctrl+v, Ctrl+m 

5、文件处理

:w /tmp/1 既然没法存盘,不想放弃所做的所有修改,先临时存到/tmp/1。 
:20,59w /tmp/1 或者仅仅把第20到59行之间的内容存盘成文件/tmp/1。可以用来把文件中的指定行拷贝到另外一个文件中 
:X 文件加密,会提示输入密码。 
vim -x exam.txt 新编辑的文件加密,会提示输入密码。 
vim -R file 只读方式打开文件。 
vimdiff main.c~ main.c 显示两个文件的不同之处 
:args 显示文件列表 
:n 切换到文件2 (n=next)。 
:N 切换回文件1。 
:scriptnames 显示VIM加载的vimrc 
VIM 命令的固定模式: 操作符命令+位移命令 
:version 显示VIM版本信息,包含特性、编译方式及配置文件目录 
:map 列出当前已定义的映射 
ptions 打开一个新窗口, 在该窗口的最开头的注释下面是一个选项列表 
:help E37

6、常用快捷方式:

“.”:重复上次的修改命令 
“Ctrl-X Ctrl-L”:搜索可匹配的行并完成 
“Ctrl-X Ctrl-F”:搜索可匹配的文件名并完成 
“Ctrl-G”:显示文件名,当前光标所在行的行号,总的行数,以及当前行所在文件中的百分比和当前光标所在的列的信息 
“ZQ”:无条件退出 
“ZZ”:(存盘退出) 
“ga”:显示光标下的字符在当前使用的encoding下的内码 
“guw”:光标下的单词变为小写 
“gUw”:光标下的单词变为大写 
“xp”:左右交换光标处两字符的位置 
“ddp”:上下交换光标处两行的位置,p命令把它取回来(在Vim中这叫put) 
“J”:两行合并为一行, 也就是说两行之间的换行符被删除了 
“u”:撤消上一次命令 
“Ctrl+R”:重做上一次命令 
“o”:在当前行的下面另起一行, 并使当前模式转为Insert模式

7、执行外部命令:

“:!命令”:可以在 Vim 中执行一个外部命令 
“:r!”:命令可以在外部命令执行的结果插入到当前编辑的缓冲区中 
“:%!nl”:要对包含空行的所有行进行编号 
“:!echo $VIMRUNTIME” 显示VIM的目录(/usr/share/vim/vim63) 
“vimtutor” 显示VIM的30分钟的教程

8、set选项:

:set list 查看制表符,现在每个制表符都会以^I显示. 同时每行行尾会有一个$字符。 
:set key= 去掉文件加密。 
:syntax enable 打开彩色 
:set number? 显示number的值 
:set number& 恢复选项的默认值 
:set autoindent 让Vim在开始一个新行时对该行施以上一行的缩进方式 
:set showcmd 在Vim窗口的右下角显示一个完整的命令已经完成的部分 
:set autowrite 设置自动存盘 
:set backup 设置备份,生成的备份文件名将是原文件名后面附加一个~ 
:set backupext=.bak 设置备份文件名后辍 
标签 
:tabnew 打开新标签页. 
:tabe 在新标签页打开文件. 
+ PageUp, PageDown 切换标签页. 
:tabnext, tabprev 切换标签页,Putty 下只能用这个. 
文件 
:e 打开文件. 
:enew 新文件. 
:w 保存. 
:wa 全部保存. 
:w 另存为. 
:wq 保存并退出. 
:x 保存并退出. 
:q 退出. 
:qa 全部退出. 
:q! 强制退出. 
文本 
esc 切换命令模式 (距离太遥远了,用 Ctrl+C 代替吧). 
i 插入模式. 
I 在当前行开头插入. 
R 替换模式. 
a 在光标后插入. 
A 在当前行尾部插入. 
v Visual 模式按字符选择. 
V Visual 模式按行选择. 
光标 
h 左移光标. 
j 下移光标. 
k 上移光标. 
l 右移光标. 
gg 将光标移到文件头部. 
G 将光标移到文件尾部.

G 移动光标到指定行#. 例如: 5G

编辑 
u 撤销. 
. 重做. 
dd 删除当前行.

dd 删除几行. 例如: 3dd

d^ 删除到行首. 
d$ 删除到行尾. 
:#,&d 删除 # 到 & 行. 例如: 3,5d 
yy 拷贝当前行到剪贴板.

yy 拷贝 # 行到剪贴板.

y^ 从文件头开始拷贝. 
y$ 拷贝到文件尾部. 
:#,&y 拷贝 # 到 & 行. 例如: 4,5y 
p 在光标后粘贴. 
P 粘贴到光标前.

缩进. 
<< 减少缩进. 
== 自动缩进.

">>",或"<<"(连按两下) 缩进或缩出

"n>>","n<<"(n自然数) 多行缩进缩出
查找替换 
/# 查找 #. 例如: /printf 
?# 反向查找 #. 

n 查找下一个. 
N 反向查找下一个. 
:s/old/new/g 当前行无提示替换. 
:%s/old/new/g 无提示替换. 
:%s/old/new/gc 确认替换. 
:#,&s/old/new/g 从 # 到 & 行无提示替换. 
书签跳转 
:marks 查看所有书签, 输入 “:” 可跳转. 
m 定义书签, 如 ma 在当前行定义名为 a 的书签. 
<name> 跳转到某书签, "” 为键盘 Tab 上一行第一键. 
:jumps 查看所有跳转记录, 输入 “:” 可跳转. 
+ o 返回上一次跳转处. 
+ i 和 + o 反向转处. 
Ctags 
:! ctags -R . 生成 ctags 文件. 
+ ] 查看函数定义. 
+ T 返回. 
shift + k 查看函数 man 帮助信息. 
Code 
gg=G 源码格式化 
其他 
执行命令. 
:r 插入文件内容. 
:r ! 插入命令输出结果. 
:cd 修改默认工作目录.


visual模式:选中字符复制/剪切/粘贴

(1)在普通模式(normal)下,直接按键 v  就可以进入默认visual模式,可以使用v+j/k/h/l 进行文本选择:

(1.1)d   ------ 剪切操作

(1.2)y   -------复制操作

(1.3)p   -------粘贴操作

(1.4)^  --------选中当前行,光标位置到行首(或者使用键盘的HOME键)

(1.5)$  --------选中当前行,光标位置到行尾(或者使用键盘的END键)

(1.6)>或< ----选中行的缩进或缩出


(2)Visual Line模式  按键V可以进入

按键V之后,进入Visual Line模式,使用 j/k键可以选中一行或者多行

(3)Visual Block模式,按键Ctrl + V可以进入

按键Ctrl+V之后,进入Visual Block模式,使用 j/k/h/l键可以选中一块


注:

在块模式下,可以进行多列的同时修改,修改方法是:

首先进入块模式 Ctrl+ v

使用按键j/k/h/l进行选中多列

按键Shift + i 进行 块模式下的插入

输入字符之后,按键ESC,完成多行的插入

猜你喜欢

转载自blog.csdn.net/lisemi/article/details/80136390