VIM 常用用法


Vim是vi文本编辑器的升级版。也是linux最常用的编辑器,其功能之强大。据说还对此专门出一本500多页的书。

Vim分三个模式:默认模式:命令模式,编辑模式

输入模式:

末行模式

模式转换:

编辑模式 --> 输入模式:

i: insert, 实现在当前光标所在处字符前面转换为输入模式;

a: append, 实现在当前光标所在处字符后面转换为输入模式;

o: 实现在当前光标所在行的下方新建一个空白行并转换为输入模式;

I: 在当前光标所在行的行首转为输入模式;

A: 在当前光标所在行的行尾转为输入模式;

O: 在当前光标所在行的上方新建一行,并转为输入模式;


输入模式 --> 编辑模式;

按下Esc键;


编辑模式 --> 末行模式;

键入:(冒号)


末行模式 --> 编辑模式;

Esc,Esc(双击Esc键)


VIM常用用法_编辑器

光标跳转:

字符间跳转:

h:

l:

j:

k:


#h: 向左侧跳#个字符;

一般用键盘上下左右键居多。

单词间跳转:

w: 后一个单词的词首

e: 跳至当前或下一个单词启尾;

b: 跳至当前或前一个单词启首;



句子间跳转:段落间跳转:

) : 下一句; } : 下一段;

( : 前一句; { : 前一段;这2个一般用得很少


行间跳转:

1G, gg:

G:

#G:


行内跳转:

^: 行首的第一个非空白字符

$: 绝对行尾

0(零): 绝对行首


关闭文件:

在末行模式下,即键入:(冒号)

:w 保存

:q 退出

:! 强制

:x 保存并退出,一般习惯用wq

这些命令都可以组合比如wq, q!, qall, wqall(全部退出,全部保存并退出。这两个后面介绍适用环境)

在编辑模式下:

ZZ:保存退出;


打开文件:

Vim [opinion] /path/to/file

打开多个文件:

Vim [opinion] /path/to/file /path/to/file

末行模式下输入:

next 下一个;

last 最后一个;

first 第一个;

prev 前一个;

-O:垂直分割窗口 Ctrl+w 松开再点方向键切换,当然也可以用上面的命令。但是没有加选项,就不能用Ctrl+w,且输入:q退出时是多个一起退出。

-o:水平分割窗口

这样就可以用qall,qwall命令

编辑命令:

x: 删除当前光标所指的字符

#x:(#填数字)删除当前光标向右#个字符


d:剪切,删除命令。

dd: 删除整行。

dw:删除单个单词,但是如果光标不在这个单词开始位置,则会删除此单词当前光标后面的内容。

db:

de:

d^:删除当前光标至首行的内容

d$:删除当前光标至末行的内容,包括当前光标内容。



在末行模式下使用d命令

末行模式地址定界:

起始地址,结束地址

$:最后一行;

.:当前光标所在行;

%:全文


1,7d

%: 全文

1,$:

1,+6 即1-7行

1,$-2

.,+3


粘贴操作:p

删除的是整行:

p: 在当前光标所在行的下方粘贴;

P:在当前光标所在行的上方粘贴


删除的不是整行:

p: 在当前光标所在处字符的后方粘贴;

P:在当前光标所在处字符的前方粘贴;


复制:y, yank

yy

#yy

y$光标到行尾复制,包括当前光标内容

y^光标到行首复制,不包括当前光标内容


复制的是整行:

p: 在当前光标所在行的下方粘贴;

P:在当前光标所在行的上方粘贴


复制的不是整行:

p: 在当前光标所在处字符的后方粘贴;

P:在当前光标所在处字符的前方粘贴;

编辑操作可撤消:

u: vim默认会最近50次的操作,u命令可逐一撤消此前的编辑操作;


撤消此前的撤消:Ctrl+r:


翻屏:

Ctrl+f: 向文件尾部翻一屏;

Ctrl+b: 向文件首部翻一屏;


Ctrl+d: 向文件尾部翻半屏;

Ctrl+u:向文件首部翻半屏;


文本搜索:

/keyword: 从当前光标所在处向文件尾部查找

?keyword:从当前光标所在处向文件首部查找

n: 下一个,跟查找命令相同的方向

N:前一个,跟查找命令相反的方向

常用/keyword


模式

/\<d[[:alpha:]]\{2\}n\>

基本表达式:

.

[]

[^]

*

\?

\{m,n\}

\{m\}

^

$

\<

\>

\(\), \1,\2


扩展的正则表达式元字符:

.

[]

[^]

*

?

+

{m,n}

{m}

^

$

\<

\>

a|b|c ac|b|c 指的是ac或b或c

()

关于正则表达式的内容见前面博客。


编辑命令

c:编辑,转换至输入模式

cc其用法就如dd后再编辑该行

#cc

c

c$: 删除光标以后行,并进行a处理该行。即d$+a.


vim可视化模式

visual模式

v: 选中光标划过的字符

V:选中光标划过的行,整行选取

Esc, Esc:回到编辑模式


同一文档窗口分割:

Ctrl+w,s:水平分割

Ctrl+w,v:垂直分割


Ctrl+w,箭头


窗口属性定义:

显示行号:

set number简写set nu

set nonumber, set nonu


自动缩进

set autoindent, set ai

set noai


不区分字符大小写

set ignorecase, set ic

set noic


获取帮助:

set


显示匹配的括号:

set showmatch, set sm

set nosm


语法着色:

syntax on

syntax off


搜索高亮显示

set hlsearch

set nohlserach


vim的配置文件:

全局:/etc/vimrc

个人:~/.vimrc


查找替换:

:地址定界s/查找模式/替换成的内容/gi

:地址定界s@查找模式@替换成的内容@gi

global

ignorecase 不区分大小写

/和@这2个只是个符号,有时遇到\这个符号一般就用@代替,方便查看。你自己也用其他的符号,但3个必须一样。


查找替换例子:

1.把/dev/null替换成/tmp/a.txt

%s/\/dev\/null/\/tmp\/a.txt/g(没有g只替换第一个,有了g不管这行有多少都替换)

%s@/dev/null@/tmp/a.txt@g


2.删除行首开头的#:

%s@^#@@


3.删除行首开头的#及后面紧跟的空白字符;

%s@^#[[:space:]]*@@


4.为空白字符开头的行的行首加上#;

%s@^[[:space:]]@#&@