.
重复上次更改
*
正向查找字符串 #
反向查找
;
向后查找一行内相同的字符,,
向前查找
%
跳转到于当前光标相匹配的括号上去 适用() [] {}
退出 ZZ
移动
命令 | 功能说明 | 说明 | 对立命令 |
---|---|---|---|
h |
左 移动 |
l | |
j |
右 移动 |
k | |
w |
右 移动word |
光标word第一个字符 | e |
b |
左 移动word |
光标word第一个字符 | ge |
f | 向右查找符合的字符 | F | |
t | 在当前行上向右查找字符,把光标停留在字符的上一个位置 | T |
插入
命令 | 功能说明 | 说明 | 对立命令 |
---|---|---|---|
i | 当前光标之前 插入 |
a | |
I | 当前行第一 个字符插入 |
A | |
o | 当前行后 新启一行插入 |
O |
删除
命令 | 功能说明 | 说明 | 对立命令 |
---|---|---|---|
c | 删除并进入插入模式 | 后面跟范围 c$ cw | |
d | 只是删除,不进入插入模式 | ||
x | 删除一个字符 | ||
J |
替换模式
命令 | 功能说明 | 说明 | 对立命令 |
---|---|---|---|
R | 进入替换模式 | ||
gR | 进入虚拟替换模式 | 按照屏幕实际现实宽度来替换 | |
r | 替换一个字符然后又回到普通模式 | ||
gr | 替换一个字符虚拟替换模式又回到普通模式 |
可视模式
是指vim分别用于操作字符文本,行文本或块文本,可视模式有三个子模式,支持相互切换
命令 | 功能说明 | 说明 | 对立命令 |
---|---|---|---|
v | 激活面向字符的可视模式 | ||
V | 激动面向行的可视模式 | ||
ctrl+v | 激动面向列的可视化模式 | ||
gv | 重选上次的高亮选区 | ||
o | 切换其活动端点 | ||
U | 在可视化模式下转换为大写 | ||
u | 可视模式下转换为小写 |
格式化
命令 | 功能说明 | 说明 | 对立命令 |
---|---|---|---|
< | 左移动 | > | |
= | 自动格式化 |
CTRL 命令
命令 | 用途 |
---|---|
ctrl + h | 删除前一个字符 |
ctrl + w | 删除前一个单词 |
ctrl + u | 删除至行首 |
ctrl + [ | 切换到普通模式 |
ctrl + o | 切换到插入-普通模式 |
ctrl + g | 在可视模式和插入模式来回切换 |
ctrl +w | 分别为删除至上一个单词的开头和行首 |
ctrl + d | 会让vim现实补全列表,用tab会遍历提示,shift+tab会反向遍历提示 |
命令模式
: 切换到命令模式
命令 | 简写 | 功能说明 | 说明 | 对立命令 |
---|---|---|---|---|
:write | 写文件 | |||
:edit | 新编辑文件 | |||
:split | 窗口分割 | |||
:prev | :next | |||
:bprev | :bnext | |||
:copy | :t | :[range]copy {address} | 把指定范围拷贝到{address}所指定的行之下 | |
:move | :m | :[range]move {address} | 把指定范围移动到{address}所指定的行之下 | |
:normal | 执行普通模式命令 | |||
:delete | :d | :[range]delete [x] | 删除指定范围到寄存器X中 | |
:yank | :y | :[range]yank [x] | 复制指定范围的行 | |
:put | :[line]put [x] | 在指定的行后粘贴寄存器x中的值 | ||
:s | :[range]s/{pattern}/{string}/[flags] | :substitute | ||
:g | :[range]g/{pattern}/{cmd} |
:[number] 会被识别为行号
:{start},{end} 会被识别为一个范围
可视化模式选择行,切换命令行输入
地址偏移:{address}+n
address
行号、位置标记、查找模式
.
当前行
范围选择语法
符号 | 地址 |
---|---|
1 | 文件第一行 |
$ | 文件最后一行 |
0 | 虚拟行,位于文件第一行上方 |
. | 光标所在行 |
'm | 包含位置标记m的行 |
'< | 高亮选择的起始行 |
'> | 高亮选择的结束行 |
% | 整个文件 |
重复命令
命令 | 说明 |
---|---|
@: | 重复上次ex命令, :寄存器缓存的最后一条命令,再次支持需要@@ |
@@ | |
ctrl+r | 复制光标下的单词 |
ctrl+w | 映射项目会复制光标下的单词到命令行 |
移动
G 会把光标定位到由命令计数指定的行上 33G 移动到33行上 没有计数G 会把光标移动到最后一行
gg 移动到第一行
50% 把光标移动到文件的50%的样子
H 当前显示页的最首行
M 当前显示页的中间行
L 当前显示页的最尾行
Ctrl+G 显示当前行位置
:set number 显示行号
:set ruler 显示当前光标和位置
CTRL+U 使文本向下滚动半屏
CTRL+D 将窗口向下移动半屏幕
CTRL+E/Y 向上/向下滚动
CTRL+F/B 向前滚动一整屏
zz/t/b 把当前行移动到屏幕中央/顶端/底部
set hlsearch
`` 回跳到起跳点
CRTL+O 跳转到你更早停留光标的位置
CRTL+I 跳转到后来停留光标的更新位置
:jumps 命令记录跳转位置
m a 将当前光标下的位置记录为a a-z 一共有26个自定义
要跳转命令 `{mask} {mask}就是我们设置标记名字
:marks 列出所有标记
第四章小幅改动
d命令 后面跟移位命令 将删除从当前光标到移位符号终点的文本
c命令 与d命令类似,不过删除后,光标置于insert模式
dd 可以删除一整行
cc 命令可以改变整行,任然保持原来的缩进
x = dl X = dh D = d s = cl S = cc
r 不是一个操作命令符,它等待你键入下一个字符用以替换当前光标下的那个字符。
5rx 直接替换 光标开始的5个字符
r<enter> 删除当前字符,插入一个换行符
重复改动 . 命令 会重复你做出的所有修改,
v 使编辑模式进入visual line模式, 按 esc 推出visual模式
ctrl + v 进入 visual block模式
o 命令让visual 模式下 光标去另一头 在矩形文本内容选择时, 有4个角, 0可以让你到对角线上去
p/P 在光标之后/之前插入数据
xp 删除这个字符 然后插入字符后面
y 操作符命令会把文本复制到一个寄存器中,然后用p命令把它取回来
y2w 复制两个单词
yy 复制一整行
Y 也是复制一整行
y$ 复制当前到行后
在y和p命令前加一个 *号 是把当前内容放到剪切板里面 和从剪切板里面取出来
daw aw是一个文本对象
aw is as 文本对象,可以用操作符号加文本对象
R 让vim 进取repalce模式, 再此模式下,每个键入的字符都会替换掉当前光标下的字符,直到你潜入esc结束模式
~ 改变光标下的字符的大小写
制定你的VIM
:$MYVIMRC 打开已经有的自定义配置文件
语法亮色
终端上颜色代码0表示暗色,1表示亮色, 而2位数字的颜色代码中
十位数字4表示背景色,3表示前景色, 个位数字0表示黑色,1为红,2为
绿,3黄4蓝5紫6 青,7为白。以;分隔不同的项,m结束一个定义,如
echo -e "\e[1;32mthis is green \e[0;37m"
会显示亮绿色。然后恢复为暗白色
:syntax enable 打开彩色
:syntax reset
:syntax clear
:syntax off
:set filetype 设置文件类型
:set background=dark
:set background=light
:colorscheme evening 颜色主题
多文件编辑
:edit 文件名 重新打开文件
:write 保存文件
:hide edit 文件名 隐藏当前文件,不关闭 打开新文件
vim 文件1 文件2 文件3
:next 切换文件
:wnext 先保存 再切换
:args 查看当前编辑的文件
:previous 移动到前一个文件
:wprevious 保存移动到前一个文件
:last 移动到最后一个文件
:first 移动到第一个文件
:set autowrite 自动存盘
ctrl+^ 切换文件
ctrl+o 跳转到文件较早位置
ctrl+i 跳转到文件较后位置
:marks M 文件标记
:set backup 设置文件备份
:set backupext = .bak 设置文件备份的后缀
:set patchmode=.orig 保存原始文件
:write >> logfile 将文件集中写道文件中
:saveas move.c 文件另存为重新命名
:file move.c文件重新命名
窗口分割
:split [filename] 分割窗口, 支持:3split filename 按照三等分
crtl+W 切换选中
:close/:quit/ZZ 关闭当前选中窗口
:only 会关闭除了现在选择的窗口的其他窗口
:new 打开一个新窗口,编辑
:vnew
:vsplit 垂直分割
:qall 关闭所有
:wall 保存所有
vim -o filename1 filename2 filename3 多窗口打开
vimdiff 比较两个文件的差异
:vertical diffsplit filename 垂直打击比较两个文件的差异
:vertical diffpatch filename 对文件执行patch,补丁会打到文件的副本上,文件本身不得修改
]c 直接向前跳转到下一个不同之处
[c 直接向后跳转到下一个不同之处
dp 当对比两文件不一直时候 把另外一个文件的内容放到这个文件来
do
大幅改动
命令注册(宏)
- q{register} 注册后续动作记录到进名为{register}的寄存器中,给出的寄存器名字必须是a到z
- 执行你的操作
3 按下q结束对命令的记录 - @{register} 来调用对刚刚命令的运行功能
注意: 按下了 @a 第二次重复执行 只需要按下@@
修改寄存器的东西
命令 | 内容 |
---|---|
G | 移动到文件最后 |
o<ESC> | 生成新的一行 |
"np | 将寄存器n的内容置于改行,你会该命令像你键入普通文本一样 |
{edits} | 修改错误部分逻辑 |
O | 到行首 |
”ny$ | 将正确的结果回存到寄存器n中 |
dd | 删除这行草稿 |
现在可以用 @n来回放正确的命令宏
追加命令
qC 寄存器名字变成大写,就是向已经存在的寄存器中追加命令
替换
:[range]substitute/from/to/[flags] 该命令将由[range]指定的行中的字符,“from”替换成“to”
substitute 命令的缩写是 s
[range]
不指定.默认替换当前行 % = 1,/ 以begin 开始的,以end结束
使用模式 /^begin/+2 以begin开始的位置 下移动2行 -1 上移动一行
使用标签 't,'b 在标签t和b之间
visual模式下,输入: 就会自动补全 选择范围'<,'>
'< 表示上次visual模式的开始区域的 '> 是结束区域 '>,$ 上次visual结束地方到文件末尾
.,.+4 当前行到当前行+4
[flags] p 列出最后一行被改变的行 c 确认标识符
全局命令
:[range]global/{pattern}/{command} g 是global的缩写的命令
g+//+s/foobar/barfoo/g 命令是替换所有以//开始的行里面的 foobar 替换成barfoo
VISUAL BLOCK
ctrl+v 进入block模式
然后移动光标来调整选择区域,按下I 插入文本,推出insert模式,奇迹般的插入了多行
A 追加文本
c 改变文本
~ 交换大小写
U 小写转换大写
u 大写转换为小写
rx 以x字符填充字符
</> 左/右移动 :set shiftwidth=4 移动的宽度
J 链接句子
读写部分文件
:read filename 当前文件追加到该行之后
:write tempo 把当前行到结束写入tempo文件中
如果tempo文件存在,可以给:.,$write! tempo 来执行
:write >> collertion 追加文件
格式文本
:set textwidth=72 设置一行最多72个字符
gq ap 格式化当前文件
gg gq G 格式化从第一行到最后一行
gu gU 改变大小写 guw 改变后面一个word的大小写
过滤器
! 启动一个过滤器
!5G 移动1到5行 !5Gsort 执行排序 sort 是liunx的排序程序
!! 过滤当前行
读取命令输出
:read !ls 读取当前目录的
:write !wc 写入wc的结果
ctrl+L 重新绘制屏幕
奇技
qq 开始录制,后续的操作记录在名为q的宏中
${操作}
:wnext
q 停止宏记录
@q 执行名为q的宏
999@q对其余文件执行同样的操作
:%/([^,]),(.)/\2 \1/ 单词换位置
网友评论