vim操作指南

. 重复上次更改
* 正向查找字符串 # 反向查找
; 向后查找一行内相同的字符,, 向前查找
% 跳转到于当前光标相匹配的括号上去 适用() [] {}

退出 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 删除当前字符,插入一个换行符

重复改动 . 命令 会重复你做出的所有修改,
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

大幅改动

命令注册(宏)

  1. q{register} 注册后续动作记录到进名为{register}的寄存器中,给出的寄存器名字必须是a到z
  2. 执行你的操作
    3 按下q结束对命令的记录
  3. @{register} 来调用对刚刚命令的运行功能
    注意: 按下了 @a 第二次重复执行 只需要按下@@
    修改寄存器的东西
命令 内容
G 移动到文件最后
o 生成新的一行
"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/ 单词换位置

你可能感兴趣的:(vim操作指南)