ctrl+q 可以联合复制,粘贴,替换用 行操作
ctrl+w+j ctrl+w+k (:bn :bp :bd)
'. 它移动光标到上一次的修改行
`. 它移动光标到上一次的修改点
. 重复上次命令
<C-O> : 依次沿着你的跳转记录向回跳 (从最近的一次开始)
<C-I> : 依次沿着你的跳转记录向前跳
ju(mps) : 列出你跳转的足迹
:history : 列出历史命令记录
:his c : 命令行命令历史
:his s : 搜索命令历史
q/ : 搜索命令历史的窗口
q: : 命令行命令历史的窗口
g ctrl+g 计算文件字符
{,} 前进至上一段落前进至后一段落
gg,G(2G) 文件首
gd dw gf ga(进制转化)
gg=G 全篇自动缩进 , =G 单行缩进
* ci[ 删除一对 [] 中的所有字符并进入插入模式
* ci( 删除一对 () 中的所有字符并进入插入模式
* ci< 删除一对 <> 中的所有字符并进入插入模式
* ci{ 删除一对 {} 中的所有字符并进入插入模式
* cit 删除一对 HTML/XML 的标签内部的所有字符并进入插入模式
* ci” ci’ ci` 删除一对引号字符 (” 或 ‘ 或 `) 中所有字符并进入插入模式
* vi[ 选择一对 [] 中的所有字符
* vi( 选择一对 () 中的所有字符
* vi< 选择一对 <> 中的所有字符
* vi{ 选择一对 {} 中的所有字符
* vit 选择一对 HTML/XML 的标签内部的所有字符
* vi” vi’ vi` 选择一对引号字符 (” 或 ‘ 或 `) 中所有字符
crl+] 函数原型处 crl+t 回 ( ctags )
ctl+p 自动补全( 编辑状态 )
:X 加密保存( 要输入密码 )
? / (N n)
f(F,t) 查找字符
w(e) 移动光标到下一个单词.
5fx 表示查找光标后第 5 个 x 字符.
5w(e) 移动光标到下五个单词.
b 移动光标到上一个单词.
0 移动光标到本行最开头.
^ 移动光标到本行最开头的字符处.
$ 移动光标到本行结尾处.
H 移动光标到屏幕的首行.
M 移动光标到屏幕的中间一行.
L 移动光标到屏幕的尾行.
c-f (即 ctrl 键与 f 键一同按下)
c-b (即 ctrl 键与 b 键一同按下) 翻页
c-d (下半页) c-u(上半页) c-e (一行滚动)
zz 让光标所在的行居屏幕中央
zt 让光标所在的行居屏幕最上一行
zb 让光标所在的行居屏幕最下一行
在 vi 中 y 表示拷贝, d 表示删除, p 表示粘贴. 其中拷贝与删除是与光标移动命令
yw 表示拷贝从当前光标到光标所在单词结尾的内容.
dw 表示删除从当前光标到光标所在单词结尾的内容.
y0 表示拷贝从当前光标到光标所在行首的内容.
d0 表示删除从当前光标到光标所在行首的内容.
y$(Y) 表示拷贝从当前光标到光标所在行尾的内容.
d$(D) 表示删除从当前光标到光标所在行尾的内容.
yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
dfa 表示删除从当前光标到光标后面的第一个a字符之间的内容.
s(S),a(A),x(X),D
yy 表示拷贝光标所在行.
dd 表示删除光标所在行.
5yy 表示拷贝光标以下 5 行.
5dd 表示删除光标以下 5 行.
y2fa 表示拷贝从当前光标到光标后面的第二个a字符之间的内容.
:12,24y 表示拷贝第12行到第24行之间的内容.
:12,y 表示拷贝第12行到光标所在行之间的内容.
:,24y 表示拷贝光标所在行到第24行之间的内容. 删除类似.
TAB 就是制表符, 单独拿出来做一节是因为这个东西确实很有用.
<< 输入此命令则光标所在行向左移动一个 tab.
>> 输入此命令则光标所在行向右移动一个 tab.
5>> 输入此命令则光标后 5 行向右移动一个 tab.
:5>>(>>>) :>>(>>>)5
:12,24> 此命令将12行到14行的数据都向右移动一个 tab.
:12,24>> 此命令将12行到14行的数据都向右移动两个 tab.
:set shiftwidth=4 设置自动缩进 4 个空格, 当然要设自动缩进先.
:set sts=4 即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
:set tabstop=4 实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
:set expandtab 在输入 tab 后, vim 用恰当的空格来填充这个 tab.
:g/^/exec 's/^/'.strpart(line('.').' ', 0, 4) 在行首插入行号
set ai 设置自动缩进
5ia<esc> 重复插入5个a字符
替换文字 2009-02-34 ----> 2009-02-34 00:00:00 :%s/\(\d\{4\}-\d\{2\}-\d\{2\}\)/\1 00:00:00/g
:%s/^/heaser/ 在每一行头部添加header
:%s/$/ender/ 在每一行尾部添加ender
:s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
:s/\/bb/g 将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词
:%s/aa/bb/g 将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/^/#/ 将从12行到23行的行首加入 # 字符
:%s/fred/joe/igc 一个常见的替换命令,修饰符igc和perl中一样意思
s/dick/joe/igc则 对于这些满足条件的行进行替换
:g/^\s*$/d 空行(空格也不包含)删除.
:%s/\r//g 删除DOS方式的回车^M
:%s/ *$// 删除行尾空白(%s/\s*$//g)
:g!/^dd/d 删除不含字符串'dd'开头的行
:v/^dd/d 同上,译释:v == g!,就是不匹配!
:v/./.,/./-1join 压缩空行(多行空行合并为一行)
:g/^$/,/./-j 压缩空行(多行空行合并为一行)
:g/^/pu _ 把文中空行扩增一倍 (pu = put),原来两行间有一个空行,现在变成2个
:g/^/m0 按行翻转文章 (m = move)
:g/fred/,/joe/d not line based (very powerfull)
:g/<input\|<form/p 或者 要用\|
:g/fred/t$ 拷贝行,从fred到文件末尾(EOF)
:%norm jdd 隔行删除,
:'a,'bg/fred/s/dick/joe/igc ('a,'b指定一个范围:mark a ~ mark b)
g//用一个正则表达式指出了进行操作的行必须可以被fred匹配,g//是一个全局显示命令
/joe/e 光标停留在匹配单词最后一个字母处
/joe/e+1 光标停留在匹配单词最后一个字母的下一个字母处
/joe/s 光标停留在匹配单词第一个字母处
/^joe.*fred.*bill/ 标准正则表达式
/^[A-J]\+/ 找一个以A~J中一个字母重复两次或以上开头的行
/forum\(\_.\)*pent 多行匹配
/fred\_s*joe/i 中间可以有任何空白,包括换行符\n
/fred\|joe 匹配FRED或JOE
/\<fred\>/i 匹配fred,fred必须是一个独立的单词,而不是子串
/\<\d\d\d\d\> 匹配4个数字 \<\d\{4}\> 列,
替换所有在第三列中的str1 :%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
交换第一列和最后一列 (共4列) :%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
全局(global)显示命令,就是用 :g+正则表达式