
1. %
%用来匹配块,
如果你的光标在类似([{}])
或者#ifdef #else #endif上
%将把光标跳转到相应的匹配符号上去,
%还可以用来指定命令范围,
如果你想把一个
{
..
...
}的块全部删除。
可以先把光标移到{ 再敲d%
类似的,
如果你想把一个块全部往里缩进一个tab
可以把光标移到 { 敲>%
2. =
=是用来缩进的假设你已经在.vimrc里
设置了你的缩进格式,
你就可以用=来缩进你的代码了
=%就是缩进一个块。
3.正则表达式
正则表达式大家都清楚,
我主要讲个一般人不太用,
但很有用的表达,
例如你想把所有的"..."形式的串替换成'...'的形式
但引号里的内容不变
你就可以用
%s/"\(.*\)"/'\1'/来做
上面这个正则表达式"\(.*\)"里 \用来表示()是元字符
第一个在括号里的被匹配的串就可以被\1来代表, 以后依次是\2 \3。
顺便说一句,我到现在还不
知道怎么限制vim里正则表达匹配的贪婪算法。
------------------------------------
里面说的非贪婪匹配是 \{-},
也就是 %s/"\(.\{-}\)"/'\1'/g
\ 太多了可以用 \v,
%s/\v"(.{-})"/'\1'/g
详细
:h /\{-
:h \v
另外 和 perl 正则表达式的区别在 :h perl-patterns
1.
fx
x 表示任何一个字符。
这是最快的在一行种移动的方法了。然后用
; (分号)
继续移动。
反向移动好像是 t ,但是我记性不好,
总是记不住,于是
0fx
用 0 先回到行首,在 f
2.
任何一个操作命令在加一个移动命令。实现对某个范围的操作。
例如
dfx
表示删除到下一个出现 x 的地方, x 可以使任意字符。
操作命令有 d (cut), y(copy) , p(paste), v (select)
移动命令有 hjkl, f, /, gg, G
3.
任何命令组合都可以先按一些 数字健 表示重复操作。
如:
d123j
删除下面123行。
4. 宏纪录的功能
例如,把文件中所有奇数行和偶数行合并。按如下序列
gg
qq
J
q
100000000@q
5. C-p
在 insert mode 下
写程序的时候,任何超长的变量名字都不成问题。
如果有一个this_is_very_long_variable_name
可以
this<C-P>
90%的可能性自动就把名字补全了。
于是,我写程序的时候,变量的名字其的越来越长,输入越来越快。:)
6. C-x C-p
在写程序 abc.h 的时候
写道 #include "abc.h" 的时候
其实可以
#include "a<C-x><C-p>"
90% 的情况,可以自动补全文件名称。
6.从外部命令输入
:r !ls
可以读取当前目录的文件列表。
如果你对 bash 很熟悉的话,这个功能非常好用
例如
输入
case 1
case 2
....
case 1000:
的方法是
:r !for ((i=0;i<100;i++));do echo "case $i" ; done
7. 利用外部命令处理文字。
我在 ~/.vimrc 中写了一行。
map = ggVG:!indent -nut -st -kr 2>/dev/null<CR>G
我按一个 = ,就可以利用外部命令 indent 美化 我的 c 程序。
我认为,
还可以用外部命令排序
例如
用 v 选定要排序的区域
然后按一个叹号。
:'<,'>!sort
8
我在 ~/.vimrc 中写了
map <Left> :bp<CR>
map <Right> :bn<CR>
map <F4> :bd<CR>
就可以用 左右方向健来切换 buffer
F4 关闭 buffer 了。
9
我在 ~/.vimrc 中写了
runtime ftplugin/man.vim
就可以在把光标停在一个函数上,然后用
\k
查看在线帮助了。
用
:Man getuid
查看 getuid 函数的手册了。
10.
:make
可以用外部命令 make 编译工程。
:cw
查看出错信息,
:cn
:cp
在出错信息之间跳转。
11.
]] , [[ , [] , ][ 命令可以在函数之间移动。
我先说几个
标记文本
mchar 用字母char标记当前光标的位置
`char 移至char所标记处
'char 移至char标记所在行的开头处
" 移至当前行上一次所在位置(在光标移动之后)――一个双引号
'' 移至当前行上第一次所在位置的行的开头处(在光标移动之后)―
―两个单引号
清理掉DOS文本中的^M
可以在:1,$s/^M//g,其中^是用CTRL+v上去的M是回车形成的
----------------
编辑数个文件(利用vi filename(s))进入vi后)
:args 显示编辑名
单中的各个文件名
:n ?
3;读入编辑名单中的下一个文件
:rew 读入
编辑名单中的第一个文件
:e# 读入
编辑名单内的前一个文件
:e file 读入另一个文件进
vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则
应先以: w 存档。
:e! file 强迫读入另一个文
件进入vi,原文件不作存档动作。
----------------
>>
<<
移动整行的命令。类似于delphi的ctrl+shift+I/ctrl+shift+U
在调整大段代码时很方便。
设置在.exrc中
sw=4
----------------
在vim中ctrl-v开始列编辑。
:help 可以看vim的使用手册。很丰富的。
----------------
快速块复制
用m char标识某行(如 mb)
移动到复制的起始行,y'b,就可以复制整块
将整块复制到制定的‘寄存器’ "qy'b
将寄存器中的数据插入到某位置 "qp
在寄存器中保存的块在整个vi过程中有效(包括用e 重新编辑其他文件)
----------------
shift +G 跳到文件尾
?char 从后往前查找字符串
/ char 从前往后查找字符串
----------------
% - 移至匹配的括号
xp - 交换两个字符
y[cursor movement] - 光标移多少复制多少,如yw, y2w, y2l
. - repeat last command
q<reg> - 开始录制宏,存入<register>Register中。
@<reg> - 回放<reg>中的宏
----------------
偶来说几个(vim):
"*p, 把文本拷贝到系统剪贴板, 可以在别的程序窗口中粘贴
计算器^^:
(例):在插入模式下输入 35*45=CTRL_R=35*45回车,结果为35*45=1575
(输入CTRL_R=后光标会跳到底行,应继续输完,你也可以在此输入
任意四则运算)
快速复制上一行(或下一行):
(插入模式下)输完一行后回车,在下面一行按住CTRL_Y不放,直到复制完上一行^^
CTRL_E为复制下一行;
快速插入已输入过的单词:
(例):如果已经在文本中输入过hello, 再次输hello的时候,在输到he的时候
按CTRL_P就可补全hello, CTRL_N为向后搜索。
格式化程序段:
假如你拿到别人的c代码,里面没有代码缩进怎么办?
首先确保你的vim cindent选项打开了(:set cindent) ,
然后在命令模式下按 gg=G 就全部缩进好了。
----------------
保存退出 :x
#vi +10 program.c
直接转到文件第十行
----------------
交换两个字符位置
xp
上下两行调换
ddp
把文件内容反转
:g/^/m0/
----------------
:X
然后系统会提示输入密码
输入密码后存盘退出
下次编辑时请使用
vi -x filename
系统会提示你输入密码
----------------
:set nu 在每行行首加上行号
:set nonu 和上面的相反
----------------
:!command 暂时退出vi并执行shell指
令,执行完毕后再回到vi。
:sh 暂时
退出vi到系统下,结束时按Ctrl + d则回到vi。
vi filename 进入vi并读入指定名称的文件(
新、旧文件均可)。
vi +n filename 进入vi并且由文件的第几行开始。
vi +filename 进入vi并且由文件的最后一行开始。
vi + /word filename 进入vi并且由文件的word这个字开始。
vi filename(s) 进入vi并且将各指定文件列入名单内,第一个
文件先读入。
----------------
vi -r filename 恢复被毁坏的文件
----------------
在查找、替换命令 使用以下正则表达式元字符,功能强大。
也可用在:g/命令中
& 代表最近匹配串
~ 代表最近替换串
. 任一字符
^ 行首 或 表示 非
$ 行末
\< 词首
\> 词尾
* 0次或多次
\( \) 分节指定与其中正则式匹配的部分,在替换时候可以用 \1 \2 \3 ... 引用匹配部
分
[] 表示选择
- 表示范围 ,例如 [0-9]代表数字,[a-z]代表小写字母 [^0-9a-zA-Z] 代表非数字和大小
写字母
\{m,n\} 前面部分的从 m 次 至 n 次出现,m n 为数值
\{m\} 精确m次出现
\{m,\} 大于等于m次出现
以下举几例子,欢迎大家提出问题来共同探讨。
1.在20列后插入串
:%s/^.\{20\}/&insert something here/g
2.把C++语言里 //注释 修改为 /* */ 格式
:%s/\/\/\(.*\)$/\/\*\1\*\//g
3.在建存储过程的sql文本里,在每个create procedure procname()
前加上drop procedure procname ; [ ]里输入的是一个空格和TAB键。
:%s/^[ ]*[cC][rR][eE][Aa][tT][eE][ ]*[pP][Rr][oO][cC][eE][dD][uU][rR][eE][ ]*
\([^(]*\)/drop procedure \1;Ctrl_VCtrl_Mcreate procedure \1/g
----------------
数字加减, CTRL-A, CTRL-X
----------------
vim里自动缩进一段
把光标移动到某个花括号,
按 =% 缩进整段。
把整段不按格式往外缩一个tab
>%
缩两个
>>%
往里缩
<%
注意%匹配很多东西,
如果你想从
#ifdef
缩到
#endif
也可如此
1. * (super star)
向下查找光标下(或附近)的<word>。向上找用#。g*查找则不限制whole word。
2. C-R (magic insert)
在insert模式下,C-R (register) 插入register里的内容,一个有趣的reg是"=".
假设你想输入123K的具体字节数,不用打开计算器,试试这个“<C-R>=1024*123<CR>”,
“125952”就出来了!
另外在命令行里C-R C-W和C-R C-A是必用的技巧,它们将光标下的<word>和<WORD>
考到命令行里,省了你无数的typing。
3. C-X (auto complete)
在insert模式下,C-X C-P/N/L/F等自动完成前面的词、行、文件名等,是编程时必用的
命令。其中C-P和C-N可以不用C-X。
4. [p & ]p (smart paste)
paste同时自动根据目标行的缩进调整来源行的缩进。在copy代码段的时候非常有用。
5. C-O (fast out, fast in)
在insert模式下,用C-O后可以执行一个normal命令,然后立即返回insert模式,省去了
用ESC的麻烦。
6. [I (fast grep )
[I显示文件中包含光标下<word>的所有行。我常用来浏览某个id在程序中的引用情况。
还有很多相关的命令::h include-search
%用来匹配块,
如果你的光标在类似([{}])
或者#ifdef #else #endif上
%将把光标跳转到相应的匹配符号上去,
%还可以用来指定命令范围,
如果你想把一个
{
..
...
}的块全部删除。
可以先把光标移到{ 再敲d%
类似的,
如果你想把一个块全部往里缩进一个tab
可以把光标移到 { 敲>%
2. =
=是用来缩进的假设你已经在.vimrc里
设置了你的缩进格式,
你就可以用=来缩进你的代码了
=%就是缩进一个块。
3.正则表达式
正则表达式大家都清楚,
我主要讲个一般人不太用,
但很有用的表达,
例如你想把所有的"..."形式的串替换成'...'的形式
但引号里的内容不变
你就可以用
%s/"\(.*\)"/'\1'/来做
上面这个正则表达式"\(.*\)"里 \用来表示()是元字符
第一个在括号里的被匹配的串就可以被\1来代表, 以后依次是\2 \3。
顺便说一句,我到现在还不
知道怎么限制vim里正则表达匹配的贪婪算法。
------------------------------------
里面说的非贪婪匹配是 \{-},
也就是 %s/"\(.\{-}\)"/'\1'/g
\ 太多了可以用 \v,
%s/\v"(.{-})"/'\1'/g
详细
:h /\{-
:h \v
另外 和 perl 正则表达式的区别在 :h perl-patterns
1.
fx
x 表示任何一个字符。
这是最快的在一行种移动的方法了。然后用
; (分号)
继续移动。
反向移动好像是 t ,但是我记性不好,
总是记不住,于是
0fx
用 0 先回到行首,在 f
2.
任何一个操作命令在加一个移动命令。实现对某个范围的操作。
例如
dfx
表示删除到下一个出现 x 的地方, x 可以使任意字符。
操作命令有 d (cut), y(copy) , p(paste), v (select)
移动命令有 hjkl, f, /, gg, G
3.
任何命令组合都可以先按一些 数字健 表示重复操作。
如:
d123j
删除下面123行。
4. 宏纪录的功能
例如,把文件中所有奇数行和偶数行合并。按如下序列
gg
J
q
100000000@q
5. C-p
在 insert mode 下
写程序的时候,任何超长的变量名字都不成问题。
如果有一个this_is_very_long_variable_name
可以
this<C-P>
90%的可能性自动就把名字补全了。
于是,我写程序的时候,变量的名字其的越来越长,输入越来越快。:)
6. C-x C-p
在写程序 abc.h 的时候
写道 #include "abc.h" 的时候
其实可以
#include "a<C-x><C-p>"
90% 的情况,可以自动补全文件名称。
6.从外部命令输入
:r !ls
可以读取当前目录的文件列表。
如果你对 bash 很熟悉的话,这个功能非常好用
例如
输入
case 1
case 2
....
case 1000:
的方法是
:r !for ((i=0;i<100;i++));do echo "case $i" ; done
7. 利用外部命令处理文字。
我在 ~/.vimrc 中写了一行。
map = ggVG:!indent -nut -st -kr 2>/dev/null<CR>G
我按一个 = ,就可以利用外部命令 indent 美化 我的 c 程序。
我认为,
还可以用外部命令排序
例如
用 v 选定要排序的区域
然后按一个叹号。
:'<,'>!sort
8
我在 ~/.vimrc 中写了
map <Left> :bp<CR>
map <Right> :bn<CR>
map <F4> :bd<CR>
就可以用 左右方向健来切换 buffer
F4 关闭 buffer 了。
9
我在 ~/.vimrc 中写了
runtime ftplugin/man.vim
就可以在把光标停在一个函数上,然后用
\k
查看在线帮助了。
用
:Man getuid
查看 getuid 函数的手册了。
10.
:make
可以用外部命令 make 编译工程。
:cw
查看出错信息,
:cn
:cp
在出错信息之间跳转。
11.
]] , [[ , [] , ][ 命令可以在函数之间移动。
我先说几个
标记文本
mchar 用字母char标记当前光标的位置
`char 移至char所标记处
'char 移至char标记所在行的开头处
" 移至当前行上一次所在位置(在光标移动之后)――一个双引号
'' 移至当前行上第一次所在位置的行的开头处(在光标移动之后)―
―两个单引号
清理掉DOS文本中的^M
可以在:1,$s/^M//g,其中^是用CTRL+v上去的M是回车形成的
----------------
编辑数个文件(利用vi filename(s))进入vi后)
:args 显示编辑名
单中的各个文件名
:n ?
3;读入编辑名单中的下一个文件
:rew 读入
编辑名单中的第一个文件
:e# 读入
编辑名单内的前一个文件
:e file 读入另一个文件进
vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则
应先以: w 存档。
:e! file 强迫读入另一个文
件进入vi,原文件不作存档动作。
----------------
>>
<<
移动整行的命令。类似于delphi的ctrl+shift+I/ctrl+shift+U
在调整大段代码时很方便。
设置在.exrc中
sw=4
----------------
在vim中ctrl-v开始列编辑。
:help 可以看vim的使用手册。很丰富的。
----------------
快速块复制
用m char标识某行(如 mb)
移动到复制的起始行,y'b,就可以复制整块
将整块复制到制定的‘寄存器’ "qy'b
将寄存器中的数据插入到某位置 "qp
在寄存器中保存的块在整个vi过程中有效(包括用e 重新编辑其他文件)
----------------
shift +G 跳到文件尾
?char 从后往前查找字符串
/ char 从前往后查找字符串
----------------
% - 移至匹配的括号
xp - 交换两个字符
y[cursor movement] - 光标移多少复制多少,如yw, y2w, y2l
. - repeat last command
q<reg> - 开始录制宏,存入<register>Register中。
@<reg> - 回放<reg>中的宏
----------------
偶来说几个(vim):
"*p, 把文本拷贝到系统剪贴板, 可以在别的程序窗口中粘贴
计算器^^:
(例):在插入模式下输入 35*45=CTRL_R=35*45回车,结果为35*45=1575
(输入CTRL_R=后光标会跳到底行,应继续输完,你也可以在此输入
任意四则运算)
快速复制上一行(或下一行):
(插入模式下)输完一行后回车,在下面一行按住CTRL_Y不放,直到复制完上一行^^
CTRL_E为复制下一行;
快速插入已输入过的单词:
(例):如果已经在文本中输入过hello, 再次输hello的时候,在输到he的时候
按CTRL_P就可补全hello, CTRL_N为向后搜索。
格式化程序段:
假如你拿到别人的c代码,里面没有代码缩进怎么办?
首先确保你的vim cindent选项打开了(:set cindent) ,
然后在命令模式下按 gg=G 就全部缩进好了。
----------------
保存退出 :x
#vi +10 program.c
直接转到文件第十行
----------------
交换两个字符位置
xp
上下两行调换
ddp
把文件内容反转
:g/^/m0/
----------------
:X
然后系统会提示输入密码
输入密码后存盘退出
下次编辑时请使用
vi -x filename
系统会提示你输入密码
----------------
:set nu 在每行行首加上行号
:set nonu 和上面的相反
----------------
:!command 暂时退出vi并执行shell指
令,执行完毕后再回到vi。
:sh 暂时
退出vi到系统下,结束时按Ctrl + d则回到vi。
vi filename 进入vi并读入指定名称的文件(
新、旧文件均可)。
vi +n filename 进入vi并且由文件的第几行开始。
vi +filename 进入vi并且由文件的最后一行开始。
vi + /word filename 进入vi并且由文件的word这个字开始。
vi filename(s) 进入vi并且将各指定文件列入名单内,第一个
文件先读入。
----------------
vi -r filename 恢复被毁坏的文件
----------------
在查找、替换命令 使用以下正则表达式元字符,功能强大。
也可用在:g/命令中
& 代表最近匹配串
~ 代表最近替换串
. 任一字符
^ 行首 或 表示 非
$ 行末
\< 词首
\> 词尾
* 0次或多次
\( \) 分节指定与其中正则式匹配的部分,在替换时候可以用 \1 \2 \3 ... 引用匹配部
分
[] 表示选择
- 表示范围 ,例如 [0-9]代表数字,[a-z]代表小写字母 [^0-9a-zA-Z] 代表非数字和大小
写字母
\{m,n\} 前面部分的从 m 次 至 n 次出现,m n 为数值
\{m\} 精确m次出现
\{m,\} 大于等于m次出现
以下举几例子,欢迎大家提出问题来共同探讨。
1.在20列后插入串
:%s/^.\{20\}/&insert something here/g
2.把C++语言里 //注释 修改为 /* */ 格式
:%s/\/\/\(.*\)$/\/\*\1\*\//g
3.在建存储过程的sql文本里,在每个create procedure procname()
前加上drop procedure procname ; [ ]里输入的是一个空格和TAB键。
:%s/^[ ]*[cC][rR][eE][Aa][tT][eE][ ]*[pP][Rr][oO][cC][eE][dD][uU][rR][eE][ ]*
\([^(]*\)/drop procedure \1;Ctrl_VCtrl_Mcreate procedure \1/g
----------------
数字加减, CTRL-A, CTRL-X
----------------
vim里自动缩进一段
把光标移动到某个花括号,
按 =% 缩进整段。
把整段不按格式往外缩一个tab
>%
缩两个
>>%
往里缩
<%
注意%匹配很多东西,
如果你想从
#ifdef
缩到
#endif
也可如此
1. * (super star)
向下查找光标下(或附近)的<word>。向上找用#。g*查找则不限制whole word。
2. C-R (magic insert)
在insert模式下,C-R (register) 插入register里的内容,一个有趣的reg是"=".
假设你想输入123K的具体字节数,不用打开计算器,试试这个“<C-R>=1024*123<CR>”,
“125952”就出来了!
另外在命令行里C-R C-W和C-R C-A是必用的技巧,它们将光标下的<word>和<WORD>
考到命令行里,省了你无数的typing。
3. C-X (auto complete)
在insert模式下,C-X C-P/N/L/F等自动完成前面的词、行、文件名等,是编程时必用的
命令。其中C-P和C-N可以不用C-X。
4. [p & ]p (smart paste)
paste同时自动根据目标行的缩进调整来源行的缩进。在copy代码段的时候非常有用。
5. C-O (fast out, fast in)
在insert模式下,用C-O后可以执行一个normal命令,然后立即返回insert模式,省去了
用ESC的麻烦。
6. [I (fast grep )
[I显示文件中包含光标下<word>的所有行。我常用来浏览某个id在程序中的引用情况。
还有很多相关的命令::h include-search
标签: Vimer-Garden
本文章引用通告地址(TrackBack Ping URL)为: 

本文章尚未被引用。
下一篇: vim小技----雕文
上一篇: vimrc编辑
