初时,先有ed,ed为ex之父,ex为vi之父,而vi为vim之父
c 修改
d 删除
y 复制到寄存器
g~ 反转大小写
gu 反转为小写
gU 反转为大写
> 增加缩进
< 减小缩进
= 自动缩进
gg=G 自动缩进整个文件
vim -u NONE -N -u NONE 标志让vim在启动时不加载vimrc -N 防止进入vi兼容模式
>G 增加当前行到文档末尾处的缩进层级
从进入插入模式的那一刻起,直到返回普通模式为止(输入ESC),Vim会记录每一个按键操作,做出修改后再用.命令的话,它将会重新执行所有这些操作,可以吧.看做一个很小的宏
a 在当前光标之后添加内容
A 在当前行的结尾添加内容,进入插入模式 相当于$a
C 删除光标之后的结尾的内容并进入插入模式 相当于 c$
s 删除光标所在字符并进入插入模式 相当于cl
S 删除整行并进入插入模式 相当于 ^C
I 在当前行的开头插入 相当于^i
o 在当前行的下一行插入 相当于A<CR>
O 在当前行的上一行插入 相当于ko
R 一直替换直到退出替换模式
b 把光标移动到单词的开头
* 光标跳到下一个匹配项上,并对所在单词进行查找,高亮显示
# 光标跳到上一个匹配项上,并对所在单词进行查找,高亮显示
cw 删除从光标位置到单词结尾间的字符,并进入插入模式
c3w 删除从光标位置开始到单词结尾的字符 以及后面两个单词也删除
db 删除从光标起始位置到单词开头的内容,但会留下光标所在位置的单词
dw 删除光标所在位置到单词结尾的内容
daw 删除光标所在位置的单词和一个空格,不管光标在单词的什么位置 可以记忆为delete a word
dl 删除一个字符
dap 删除一整个段落
gUaw 把当前单词转换成大写
gUap 把整个段落转换成大写
gu 转换成小写
g~ 反转大小写
Vim的语法只有一条额外规则,即当一个操作符命令被连续调用两次的时,它会作用于当前行。所以dd删除当前行>>缩进当前行
gUU作用于当前行 g~~作用于当前行
<C-a> 对数字执行加操作 10<C-a> 相当于加10 007+001=010 Vim默认把0开头的数字当成把进制处理
<C-x> 对数字执行减操作 10<C-x>相当于减10
f{char} 让Vim查找下一处指定字符出现的位置,如果找到了,就直接把光标移动到那
f+ 直接移动到下一个+号出现的位置 ";"命令会重复上次f命令所查找的字符 ","可以撤回
##可重复的操作及如何回退
做了一个修改 {edit} . u
在行内查找下一个指定的字符 f{char}/t{char} ; ,
在行内查找上一个指定的字符 F{char}/T{char} ; ,
执行替换 :s/target/replacement & u
执行一系列修改 qx{changes}q @x u
在Vim中从进入到插入模式开始,直到返回普通模式为止,在此期间输入或删除的任何内容都被当成一次修改。
:,$d 删除当前行到最后一行
:%d 删除所有行
:1,.d 删除第一行到当前行
:31,36 s/^/#/g 31~36行加上#号
标记:mark m+任意字母 单引号'+字母 返回标记行
:n +文件名 创建新文件
:9,15 copy 16 或 :9,15 co 1 将第9行至第15行的数据,复制到第16行
:w +文件名 另存为,但是当前正在编辑的文件不会切换
:sp[文件名] split 横向增加分屏
CTRL + w
w(window) 切换到下一个窗口
r(reserve) 互换窗口
c(close) 关闭窗口
o(other) 关闭其他窗口
:vsp[文件名] 纵向增加分屏
:set ignorecase设置忽略大小写
取消vim自动注释autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=
:!{命令} 方式执行shell命令
<C-[> 相当于<Esc>
<C-o> 插入-普通模式 :是普通模式的一个特例,它能让我们执行一次普通模式命令,执行完毕后,马上又回到插入模式
ZZ: 保存退出
zz: 重绘屏幕,把当前行显示在屏幕正中
K: 查看处于光标位置下的那个单词的手册页
J:把当前行和下一个行连接到一起
<C-r>= 在插入模式中使用<C-r>=使用表达式寄存器
<C-v>{code} 可以在插入模式中使用字符编码 插入字符 比如输入<C-v>65然后回车 就会出现A
ga 查看任意字符的字符编码
<C-v>{123} 以十进制字符编码插入字符
<C-v>u{1234} 以十六进制字符编码插入字符
<C-v>{nondigit} 按原意插入非数字字符
<C-g> 可以在可视模式和选择模式之间切换
<C-k>{char1}{char2} 插入以二合字母{char1}{char2}表示的字符
v 激活面向字符的可视模式
V or <shift-v> 激活面向行的可视模式
<C-v> 激活面向列快的可视模式
gv 重选上次的高亮选区
it 称为文本对象
:3p 把光标移动到第三行,然后显示该行的内容
:3d 把光标移动到第三行并且删除此行
:.,$d 删除当前行到最后一行
:%d 删除当前文件的所有行 %表示当前文件中的所有行
:6t . 将第六行copy到当前行下方 t还可以写成copy或者co
:t6 将当前行复制到第6行下方
:t. 为当前行创建一个副本 (类似于普通模式下的yyp)
:t$ 把当前行复制到文本的结尾
:'<,'> 代表高亮选区
:'<,'>t0 把高亮选中的行复制到文件的开头
:m$ 将当前行移动到文件末尾
:'<,'>m$ 将高亮选中的行移动到文件末尾 相当于 dGp
@: 调出上次在末行模式的命令
:'<,'>normal . 对高亮选区的每一行,对其执行普通模式下的.命令
:%normal A; 在每一行的末尾添加一个分号
:%normal i# 注释所有行
:colorscheme <C-d> 显示所有的补全列表
:colorscheme
blue default desert evening morning pablo ron slate zellner
darkblue delek elflord koehler murphy peachpuff shine torte
<C-r><C-w> 用于将光标下的单词插入到命令行模式下
set histroy=200 让vim记录两百条命令 (注:命令行历史记录在vim重启之后仍然存在)
q/ 打开查找历史命令的命令行窗口
q: 打开Ex命令历史的命令行窗口
<Ctrl-f> 从命令行模式切换到命令行窗口
在vim命令行模式中,给命令加一个!前缀就可以调用外部程序。
!ls
!sh % 可以直接执行此文件
!{cmd}这种语法只适合执行一次性命令,但是如果想在shell中执行几条命令的话可以执行:shell命令来启动一个交互的shell会话
:shell
[root@localhost ~]#
直接exit退出就可以退出shell并返回到vim界面
:read !{cmd} 把cmd命令的输出读入到当前缓冲区中
:write !{cmd} 把缓冲区的内容作为指定的标准输入
:write ! sh 把缓冲区的内容传给外部的sh命令作为标准输入
:write! sh 把缓冲区的内容写到一个名为sh的文件
vim提供了一种方便快捷的方式来设置:[range]![filter]命令中的范围,可以用![motion]操作符切换到命令行模式,并把{motion}
涵盖的范围预置在命令行上 ,比如在普通模式执行:
!G vim就会打开命令行并把范围:.,$! 预置在命令行上
:shell 启动一个shell(输入exit返回vim)
:!{cmd} 在shell中执行{cmd}
:read !{cmd} 在shell中执行cmd,并把标准输出插入光标下方
:[range]write !{cmd} 在shell中执行cmd,以range作为其标准输入
:[range]!{filter} 使用外部程序fileter过滤指定的range 2,$!sort -t ',' -k2
:source batch.vim 执行vim脚本
使用通配符启动vim时,匹配该通配符的所有文件会被加入vim的参数列表里。可以一个个的遍历这些文件
:agrs 显示文件列表
:args index.html 在缓冲区加入一个文件
:first 第一个
:next 下一个文件
:argdo source batch.vim 可以对参数列表中的每个文件执行batch.vim脚本文件中的vim命
:bdelete N 删除一个缓冲区N
:bnext 切换到列表中的下一个缓冲区
:blast 移动到上一个缓冲区
:bfirst 移动到列表的开头
:blast 移动到列表的结尾
:ls 列出所有被载入内存中的缓冲区列表
ls 列表开头有一个数字,他是在缓冲区创建时由vim自动分配的编号,可以用
:buffer N 命令直接凭编号跳转到一个缓冲区
:bufdo 命令允许在:ls列出的所有缓冲区上执行Ex命令
:ls
1 #h + "1.txt" line 1
2 %a "2.txt" line 1
h,表示它是一个隐藏缓冲区
a,表示它是当前活动缓冲区
:edit!重新从磁盘读取此文件
:wall 保存所有缓冲区的内容
:qall! 退出不保存所有缓冲区内容
:w[rite] 把缓冲区的内容写到磁盘
:e[dit]! 把磁盘文件内容读入到缓冲区(即回滚所有操作)
:qa[ll]! 关闭所有窗口,放弃修改无需警告
:wa[ll]! 把所有改变的缓冲区写入磁盘
<C-w>s 水平切分当前窗口,新窗口仍显示当前缓冲区
<C-w>v 垂直切分当前窗口,新窗口仍显示当前缓冲区
:sp[lit] {file} 水平切分当前窗口,并在新窗口中载入file
:vsp[lit] {file} 垂直切分当前窗口,并在新窗口中载入file
<C-w>w 在窗口间循环切换
<C-w>h 切换到左边的窗口
<C-w>j 切换到左边的窗口
<C-w>k 切换到上边的窗口
<C-w>l 切换到下边的窗口
<C-w>= 使所有窗口等宽,等高
<C-w>_ 最大化活动窗口的高度
<C-w>| 最大化活动窗口的宽度
[N]<C-w>_ 把活动窗口的高度设为N行
[N]<C-w>| 把活动窗口的宽度设为N行
也可以用鼠标操作
:clo[se] 或 <C-w>c 关闭活动窗口
:on[ly] 或<C-w>o 只保留活动窗口,关闭其他所有窗口
使用find打开文件
:find test.txt
如果当前目录有这个test.txt的文件的话会直接打开这个文件,如果有多个同名文件的话,会使用第一个匹配到的文件
vim中的find默认搜索当前目录 可以使用:set path+=/tmp/** 把目录添加到查找路径中 **表示匹配目录下的所有子目录
:edit . 或e. 打开文件管理器,并显示当前工作目录
:Explore 或:E 打开文件管理器,并显示活动缓冲区所在的目录
:Sexplore 在水平切分窗口打开文件管理器
:Vexplore 在垂直切分窗口打开文件管理器
<C-^> 当使用e.打开文件管理器之后可以使用这个命令返回刚才编辑的文件
j 向下移动一个实际行
gj 按屏幕行向下移动
k 向上移动一个屏幕行
gk 按屏幕行向上移动
0 移动到实际行的行首
g0 移动到屏幕行的行首
^ 移动到实际行的第一个非空白字符
g^ 移动到屏幕行的第一个非空白字符
$ 移动到实际行的行尾
g$ 移动到屏幕行的行尾
w 正向移动到下一单词的开头
b 方向移动到当前单词/上一单词的开头
e 正向移动到当前单词/下一单词的结尾
ge 反向移动到上一单词的结尾
1 This phrase takes time but
2 evebtually gets to the point
d/ge<CR> 删除到匹配ge的行 不包括ge
gets to the point
a)或ab 选择一对圆括号 i)或ib 选择圆括号内部
a}或aB 选择一对花括号 i}或iB 选择花括号内部
a] 选择一对方括号 i] 选择方括号内部
a> 选择一对尖括号 i> 选择尖括号内部
a" 选择一对双引号 i" 选择双引号内部
a' 选择一对单引号 i' 选择单引号内部
at 选择一对XML标签<xml>tags</xml> it XML标签内部
a` 选择一对反引号 i` 选择反引号内部
m{a-zA-Z} 设置标记(小写字母会创建局部于缓冲区的标记,大写字母会创建全局标记,可以用来跳转文件)
'{mark} 跳到标记所在行,并把标记置于该行的第一非空字符上
`{mark} 把关标移动到设置此位置标记时光标所在之处
`` 当前文件中上次跳转动作之前的位置
`. 上次修改的地方
`^ 上次插入的地方
`[ 上次修改或复制的起始位置
`] 上次修改或复制的结束位置
`< 上次高亮选区的起始位置
`> 上次高亮选区的结束位置
<C-o> 文件跳转 、向后跳转到之前编辑的文件
<C-i> 文件跳转、向前跳转到之后编辑的文件
gf 跳转到光标下的文件
suffixexadd+=.rb 指定文件扩展名
P将寄存器中的内容粘贴至光标前面
"ayiw 把光标所在单词复制到a寄存器中 使用"ap粘贴a寄存器中的单词
"bdd 把光标所在整行文本剪切至b寄存器中 使用"bp粘贴b寄存器中的整行文本
"" 无名寄存器(默认的寄存器)
当使用y{motion}命令时,要复制的文本不仅会被拷贝到无名寄存器,还会被拷贝到复制专用寄存器中,复制专用寄存器可以使用数字0引用("0)
"_d{motion} 黑洞寄存器,删除文本不保留任何副本
:set paste 当使用了autoindent自动缩进了之后需要粘贴可以使用此命令防止插入的内容一行一行往右偏
:set paste! 取消
:reg a 可以查看寄存器a中的内容
@{register} 执行指定寄存器的内容
@@ 重复调用使用过的宏
------------------------------------------
x = "("+a+","+b+","+c+","+d+","+e+")"
f+ #f{char}跳转
s + <ESC> #.范式
qq;.q #录制宏
22@q #回放宏
-------------------------------------------
:put a 将寄存器a中的命令粘贴上来
:set ignorecase 设置vim查找模式不区分大小写
c 在查找模式的结尾设置忽略大小写
C 再查找模式的结尾设置强制区分大小写
:set hlsarch 启用高亮查找
:set nohlsearch 禁用高亮查找功能
:set incsearch 在执行查找前预览匹配(即时查找:)
:%s///gcn g代表全局匹配 c代表需要确认 n代表只统计匹配数 %表示整个文件
未完待续.....