资讯专栏INFORMATION COLUMN

vim

kk_miles / 3528人阅读

摘要:光标移动基本词向前移动,光标停在第一个字符向后移动,光标停在第一个字符向后移动,光标停在最后一个字符行首或行尾移动到行尾移动到行首,非空白字符移动到行首,第一个字符指定字符单行搜索下一个单个字符单行搜索上一个单个字符单行搜索下一个单个字符,

VIM 光标移动

基本

h j k l

b   向前移动,光标停在第一个字符 (backward)
w   向后移动,光标停在第一个字符 (word)
e   向后移动,光标停在最后一个字符 (end of word)

行首或行尾

$   移动到行尾
^   移动到行首,非空白字符
0   移动到行首,第一个字符

指定字符

f   单行搜索下一个单个字符 (find)
F   单行搜索上一个单个字符
t   单行搜索下一个单个字符,光标停在前一个字符 (to)
T   单行搜索上一个单个字符,光标停在前一个字符

匹配括号

%   移动到匹配的括号或移动到括号

移动到指定行

G    移动到最后一行
33G  移动到第 33行
gg   移动到第一行
40%  移动到40%
H    移动到屏幕内第一行 (home)
M    移动到屏幕内中间 (middle)
L    移动到屏幕内最后一行 (last)

滚屏

  向上滚动半屏 (up)
  向下滚动半屏 (down)
  向下滚动一屏 (forward)
  向上滚动一屏 (backward)

简单查找

/string      向下查找包含 string的词
?string      向上查找包含 string的词
/  向下查找 string
?  向上查找 string
n            重复前一次查找
N            重复前一次相反的查找
/        之前的查找
*            向下查找光标所在处的词,全词匹配
#            向上查找光标所在处的词,全词匹配
g*           向下查找包含光标所在处的词
g#           向上查找包含光标所在处的词

标记:

m{mark}  讲此处标记为 mark,mark 为一个字母
`{mark}  跳到标记 mark处,` 是1左边那个键
"{mark}  跳到标记 mark处所在行行首,"是单引号
 特殊的mark
    "  此次跳转之前的起跳点
    "  上次编辑该文件时光标最后停留的位置
    [  最后一次修改的起始位置
    ]  最后一次修改的结束位置

其他命令

:set number    显示行号,左边 (se nu)
:set nonumber  不显示行号(se nonu)
:set ruler     显示光标位置,右下角 (se ru)
:set noruler   不显示光标位置 (se noru)

:set ignorecase    查找忽略大小写
:set noignorecase  查找不忽略大小写
:set hlsearch      查找高亮 (se hls)
:set nohlserch     关闭查找 (se nohls)
:set incsearch     键入目标字符串时就开始查找
:set nowrapscan    搜索过程在文件结束时就停止

简单修改

插入

i  在当前光标处插入
I  在当前行第一个非空白字符前插入
a  在当前光标之后插入
A  在当前行尾插入
o  在当前行之下插入
O  在当前行之上插入

删除

d   删除操作符 (delete)
c   修改操作符,删除之后自动进入插入 (change)
dd  删除一行
cc  修改一行
x   dl ,删除光标处字符
X   dh ,删除光标左边的字符
D   d$ ,删除到行尾
C   c$ ,修改到行尾
s   cl ,修改光标字符
S   cc ,修改一整行
r   替换(删除之后插入并回到 Normal)
.   执行上一次所执行的更改命令

复制

y    复制操作符 (yanking)
yy   复制一行
yw   复制word,包含之后空白字符
ye   复制word,不包含之后空白字符
yaw  复制word,包含之后空白字符
yiw  复制word,不包含之后空白字符
yab  复制一个小括号里面的内容,包括括号本身
yib  复制一个小括号里面的内容,不包括括号本身
ya{  复制一个大括号里面的内容,包括括号本身
yi{  复制一个大括号里面的内容,不包括括号本身
p    粘贴(put)

对齐

=    对齐操作符
==   对齐一行
n==  对齐n行
=a{  对齐一个大括号里面的内容

大小写替换

~     大小写替换
g~    大小写替换操作
g~iw  改变光标处单词大小写
guiw  光标处单词变成小写
gUiw  光标处单词变成大写

命令计数器 n+命令

一个命令重复执行
如:4x删除 4个字符

操作命令符 +位移命令符

操作如:删除 d,复制y ;位移如:词语 w,$ 行尾
d$    删除到句尾
4yy   复制4行
3dw   3次删除一个单词
d3w   一次删除 3个单词
3d2w  3次删除 2个单词

常用删除命令

x(dl), X(dh), D(d$), dw, db, diw, daw, dG, dgg

visual 模式(主要功能就是选择)

v 进入visual模式,移动光标选择操作文本范围
V 进入visual行模式,选择以行为单位
 进入visual块模式,选择块

查找替换

查找命令

/, ?, n, N, #, *, g#, g*, gd, gD

替换命令

:[n,m]s/[src]/[dst]/[g][c]
[n,m]  表示一个范围,从 n~m行中查找替换,[n,$]表示从第 n行之后
%      表示整个文件
[src]  要查找的词, [dst]要替换的词
[g]    替换所有的匹配,若没有,只匹配第一个
[c]    替换前询问
/      为分隔符,也可以用 +或# 来分隔

:s/src/dst/         替换当前行第一个 src为dst
:s/src/dst/g        替换当前行所有 src为dst
:n,ms/src/dst/      替换n~m行第一个 src为dst
:n,$s/src/dst/g     替换第n行到最后一行中所有 src为dst
:%s/src/dst/g       替换整个文件中所有 src为dst
:%s/src/dst/gc      替换整个文件中所有 src为dst 并询问是否替换
:%s//dst/gc  与:%s/src/dst/gc一样(全词匹配)

正则匹配

*   匹配0以上之前的字符
+  匹配1个以上之前字符
=  匹配0个或 1个之前字符
?  匹配0个或 1个之前字符
.   匹配任何单个字符
<  匹配一个单词的开始
>  匹配一个单词的结束
s  匹配空白字符 
S  匹配非空白字符
d  数字[0-9]
D  非数字[^0-9]
x  十六进制数字 [0-9A-Fa-f]
X  费十六进制数字 [^0-9A-Fa-f]
l  小写字符 [a-z]
L  非小写字符 [^a-z]
u  大写字符 [A-Z]
U  非大写字符 [^A-Z]
a  字符[A-Za-z]
A  非字符[^A-Za-z]
[]  任何[]中的字符

更多

:help pattern

折叠

折叠方式

manual  手工定义折叠
indent  更多的缩进表示更高级的折叠
expr    用表达式来定义折叠
syntax  用语法高亮来定义折叠
diff    对没有更改的文本进行折叠
marker  对文中的标志折叠
set foldmethod=****   设置折叠方式
marker方式,需要用标记来标识代码的折叠,系统默认是 {{{和}}}

折叠命令

zc      折叠
zC      对所在范围内所有嵌套的折叠点进行折叠
zo      展开
zO      对所在范围内所有嵌套的折叠点展开
zr, zR  折叠所有
zm, zM  展开所有
za, zA  折叠/打开当前折叠
zi      折叠/展开所有
[z      到当前打开的折叠开始处
]z      到当前打开的折叠末尾处
zj      向下移动到下一个折叠开始处
zk      向上移动到前一折叠的结束处
zf      创建折叠
zf56G   创建从当前行起到 56行的代码折叠
10zf    创建从当前行起后 10行的代码折叠
10zf-   创建从当前行起到之前 10行的代码折叠
zf%     创建从当前行起到对应匹配的括号
zd      删除光标下的折叠,仅当 manual或marker 方式有效
zD      嵌套地删除光标下的折叠,仅当 manual或marker 方式有效
zE      除去窗口里的所有折叠,仅当 manual或marker 方式有效

foldlevel

"foldlevel" 是个数值选项:数字越大则打开的折叠更多
当 "foldlevel" 为 0 时,所有的折叠关闭
当 "foldlevel" 为正数时,一些折叠关闭
当 "foldlevel" 很大时,所有的折叠打开
"foldlevel" 的改变后立即生效。之后,折叠可以被手动地打开和关闭

文件

文件操作

:w    保存
:w!   强制保存
:w filename        将当前缓冲区的内容保存成文件 filename
:n1, n2, filename  将n1到 n2的内容保存为文件filename
:q    退出当前窗口,若改动,提示失败
:q!   强制退出,放弃改动
:wq   保存后退出
:wa   保存所有
:qa   退出所有
:wqa  保存所有后退出
ZZ    相当于:wq

编辑另一个文件

:edit file

多文件编辑

vim filename1 filename2 ...
:bn  跳转至下一缓冲区 (文件)( 最后一个 ->第一个)
:bN  跳转到上一缓冲区 (文件)( 第一个->最后一个 )
:bd  关闭当前缓冲区 (文件)
:n   跳转至下一文件 ,如当前文件为最后一个,提示错误
:N   跳转至上一文件 ,如当前文件为第一个,提示错误
:next, :previous    跳转至下 /上一文件
:wnext, :wprevious  保存当前文件并跳转至下 /上一文件
:last, :first       跳转至最后一个 /第一个文件
:files   列出当前已打开文件
:args    给出进入 vim时命令行参数;当前正在编辑文件名用 "[]"列出

窗口分隔

s  水平分割窗口
v  垂直分割窗口
w  切换至另一窗口
h  切换至左侧窗口
j  切换至下方窗口
k  切换至上方窗口
l  切换至右侧窗口
H  移动当前窗口到左边
J  移动当前窗口到下面
K  移动当前窗口到上面
L  移动当前窗口到右边
:split filename    水平分隔窗口打开 filename
:vsplit filename   垂直分割窗口打开 filename

标签式编辑

:tabnew filename  在新标签中打开
gt, :tabnext      切换至下一个标签
gT, :tabprevious  切换至上一个标签
:tabc             关闭当前标签
:tabl             切换至最后一个标签
:tabmove n        切换到第 n个标签,默认标签编号从 0开始

目录

netrw 插件

netrw 插件是vim的标准插件,在 .vimrc中只要设置了
set nocp " 不与vi兼容
filetype plugin on " 允许插件
就可以使用 netrw插件了 

打开目录

Ex[plore]   打开当前目录或指定目录
Se[xplore]  水平分割并打开当前目录或指定目录
Ve[xplore]  垂直分割并打开当前目录或指定目录
Te[xplore]  新建标签并打开当前目录或指定目录

目录操作

   进入目录
  试图删除文件 /目录
-      上一级目录
a      在正常显示,隐藏和显示三种方式间切换
c      使浏览中的目录成为当前目录
d      建立目录
D      试图删除目录
i      在瘦、长、宽、和树形的各种列表中切换
  刷新目录列表
o      打开新浏览窗口,进入光标所在目录,使用水平分割
p      预览文件
P      在前一次使用的窗口里预览
r      反转排序顺序
R      给指定文件 /目录换名
s      选择排序方式:按名字、时间、文件大小排序
S      指定按名字排序的后缀优先级
t      在新标签页里打开光标所在文件 /目录
v      打开新浏览窗口,进入光标所在目录,使用垂直分割

创建宏

q +  + [一系列命令] + q
 指用户自定义的 a-z中的一个寄存器
如:qa...q

运行宏

@ +     运行寄存器中的宏
@@                重复运行上一次宏
10@a              重复运行寄存器 a中的宏10 次

MAP

映射模式

普通模式
可视模式
操作符等待模式
插入模式
命令行模式

映射模式代号

  普通、可视和选择、操作符等待
n        普通
v        可视和选择
s        选择
x        可视
o        操作符等待
!        插入和命令行
i        插入
l        插入、命令行和 Lang-Arg模式的":lmap" 映射
c        命令行

命令

map {lhs} {rhs} 把普通、可视和选择、操作符等待模式下的 lhs命令映射成rhs,如:map tn :tabnew
noremap      noremap对rhs不会重新扫描映射
unmap {lhs}  取消对lhs的映射
mapclear     取消所有 map映射
nmap         只作用于普通模式下的映射
imap         只作用于插入模式下的映射
nnoremap     只作用于普通模式下的 noremap
nunmap       只作用于普通模式下的 unmap
nmapclear    只作用于普通模式下的 mapclear

特殊参数

, , ,                 
阅读需要支付1元查看
<