vi 技巧大全

原文:http://bbs.apue.net/cgi-bin/bbscon?board=TecMisc&file=M.1054791064.A&num=1662

我先说几个
标记文本
  mchar  用字母char标记当前光标的位置
  `char  移至char所标记处
  'char  移至char标记所在行的开头处
  "    移至当前行上一次所在位置(在光标移动之后)――一个双引号
  ''    移至当前行上第一次所在位置的行的开头处(在光标移动之后)―
―两个单引号
清理掉DOS文本中的^M
可以在:1,$s/^M//g,其中^是用CTRL+v上去的M是回车形成的

----------------

编辑数个文件(利用vifilename(s))进入vi后)
:args        显示编辑名
单中的各个文件名
:n         ?
3;读入编辑名单中的下一个文件
:rew         读入
编辑名单中的第一个文件
:e#         读入
编辑名单内的前一个文件
:efile       读入另一个文件进
vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则   
        应先以:w存档。

:e!file       强迫读入另一个文
件进入vi,原文件不作存档动作。

----------------

>>
<<

移动整行的命令。类似于delphi的ctrl+shift+I/ctrl+shift+U
在调整大段代码时很方便。
设置在.exrc中
sw=4

----------------

在vim中ctrl-v开始列编辑。
:help可以看vim的使用手册。很丰富的。

----------------

快速块复制

用mchar标识某行(如mb)
移动到复制的起始行,y'b,就可以复制整块
将整块复制到制定的‘寄存器’"qy'b
将寄存器中的数据插入到某位置"qp

在寄存器中保存的块在整个vi过程中有效(包括用e重新编辑其他文件)

----------------

shift+G跳到文件尾
?char从后往前查找字符串
/char从前往后查找字符串

----------------

%-移至匹配的括号
xp-交换两个字符
y[cursormovement]-光标移多少复制多少,如yw,y2w,y2l
.-repeatlastcommand
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代码,里面没有代码缩进怎么办?
首先确保你的vimcindent选项打开了(:setcindent),
然后在命令模式下按gg=G就全部缩进好了。

----------------

保存退出:x

#vi+10program.c
直接转到文件第十行

----------------

交换两个字符位置
xp
上下两行调换
ddp
把文件内容反转
:g/^/m0/

----------------

:X
然后系统会提示输入密码
输入密码后存盘退出
下次编辑时请使用
vi-xfilename
系统会提示你输入密码

----------------

:setnu在每行行首加上行号
:setnonu和上面的相反

----------------

:!command      暂时退出vi并执行shell指
令,执行完毕后再回到vi。
:sh         暂时
退出vi到系统下,结束时按Ctrl+d则回到vi。

vifilename     进入vi并读入指定名称的文件(
新、旧文件均可)。
vi+nfilename    进入vi并且由文件的第几行开始。
vi+filename    进入vi并且由文件的最后一行开始。
vi+/wordfilename 进入vi并且由文件的word这个字开始。
vifilename(s)   进入vi并且将各指定文件列入名单内,第一个
文件先读入。

----------------

vi-rfilename恢复被毁坏的文件

----------------

在查找、替换命令使用以下正则表达式元字符,功能强大。
也可用在:g/命令中

&代表最近匹配串
~代表最近替换串
.任一字符
^行首或表示非
$行末
\<词首
\>词尾
*0次或多次
\(\)分节指定与其中正则式匹配的部分,在替换时候可以用\1\2\3...引用匹配部

[]表示选择
-表示范围,例如[0-9]代表数字,[a-z]代表小写字母[^0-9a-zA-Z]代表非数字和大小
写字母
\{m,n\}前面部分的从m次至n次出现,mn为数值
\{m\}精确m次出现
\{m,\}大于等于m次出现

以下举几例子,欢迎大家提出问题来共同探讨。
1.在20列后插入串
:%s/^.\{20\}/&insertsomethinghere/g

2.把C++语言里//注释修改为/**/格式
:%s/\/\/\(.*\)$/\/\*\1\*\//g

3.在建存储过程的sql文本里,在每个createprocedureprocname()
前加上dropprocedureprocname;[]里输入的是一个空格和TAB键。
:%s/^[]*[cC][rR][eE][Aa][tT][eE][]*[pP][Rr][oO][cC][eE][dD][uU][rR][eE][]*
\([^(]*\)/dropprocedure\1;Ctrl_VCtrl_Mcreateprocedure\1/g


----------------

数字加减,CTRL-A,CTRL-X

----------------

vim里自动缩进一段
把光标移动到某个花括号,
按=%缩进整段。
把整段不按格式往外缩一个tab
>%
缩两个
>>%
往里缩
<%

注意%匹配很多东西,
如果你想从
#ifdef
缩到
#endif
也可如此


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值