文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>vi技巧收集(转)

vi技巧收集(转)

时间:2007-04-07  来源:naonaolazy

复制当前光标下单词到命令行 ctrl-r ctrl-w

还有一个有用的命令就是g
g是global的意思
意思是执行全局操作

语法如下
:范围g/条件/[动作]

:%g/hello/d
表示删除所有包含hello的行 是不是很方便

当然动作可以没有 没有时只打印查找到的结果

正则表达式

在vim的查找和代替及全局操作命令中都可以使用正则表达式
有了正则表达式的帮助 写出强大的命令更方便

下面就说说在vim中使用的正则表达式吧

CODE

^  匹配行首
$  匹配行尾
\< 匹配单词的开始
\> 匹配单词的末尾
.  匹配除换行符外的任意一个字符
\_.匹配任意一个字符 包括换行符
\w 匹配一个单词字符 也就是a-zA-Z0-9 可以h \w得到详细信息
\s 匹配空格字符包括空格和tab字符
\n 匹配换行符
特殊字符 使用CTRL-V CTRL-要输入的特殊字符, 注意在win下使用ctrl-q代替ctrl-v
如ctrl-v ctrl-M 是^M
[] 匹配这里面的任意一个字符 如[a-z]匹配任意一个a-z的字符

\(串\) 把这个串保存起来 后面可以使用\1 \2来引用符合条件的串

*  匹配0次或多次
\+ 匹配1次或多次
\= 匹配0次到1次
\{最少次数,最多次数}匹配指定的次数 ,如果最少次数为- 表示匹配最小的的次数 看帮助

如 想去掉行尾无用的空格
如下
%s/\s\+$//g
想查找单词foo
/\<foo\>
相当于在foo下输入*或是#

想把所有的fool开始的单词 代替成 is fool这个单词
:%s/\(\<fool\w*\)/is \1/g

查找所有的以hello开始的段 并把它删除 段的结束符号是\n\n
:%s/^hello\_.\{-1,1000000}\n\n//g
-1表示最少匹配1 次 并且使用最少匹配

自动缩进使用gg=G

偶下面再讲一下查找代替功能吧 vim带有正则表达式功能 所以功能比其它vimdows下的都要强大

查找与替换

按键名称

/ 向后查找
? 向前查找
:s 替换

查找时按键
n 正向一个
N 反向下一个

快速查找(在命令模式下)
* 向后查找光标下的单词 全字匹配
# 向前查找光标下的单词 全字匹配

范围
%全文代替
替换时模式
g 全部代替 如果没有这个表示只代替一个
c 需要确认

高级命令:
g

下面开始讲上面的命令
查找命令
在命令模式下输入
/要查找的内容<回车>
然后就开始跳到找到的内容了
按n表示下一个
按N表示上一个

按?是向上查找 这时n表示上一个 N表示下一个 动手试一试

在命令模式下 把光标停在某个单词下面 然后按*
这时就会向下查找这个单词
按#是向上查找 这时一样可以使用n N跳转

替换功能:
替换命令是在命令模式下输入
:范围s/要查找的内容/代替后的词/参数
如果没有指定参数,那只代替一次 如果想代替多次可以加上/g 如果需要确认那可以加上c


:%s/helo/hello/gc
在全文范围内查找helo 并把它代替成hello 代替时需要确认

范围的表示
%表示全文
开始行号,结束行号 表示在这个范围内代替
结束行号可以使用绝对行号 如1090
也可以使用相对行号 如+5表示向下5行
还可以使用查找条件

:1,/helo/s/wwww/web/gc
表示从第一行查找到包含helo的行 在这个范围内替换

.表示当前行 或是可以不写
这样上面的命令就可以变成
:.,/helo/s/wwww/web/gc

:,/helo/s/wwww/web/gc

打开多个文件以后,简单的切换方法是:b1,:b2这样切换,具体的可以用:ls看打开的文件列表

如果当前目录是在makefile的地方或者automake的build下面,可以:make编译,后面的许多事情自然可以水到渠成了

/str1/,/str2/d 删除从字符串 str1 到 str2 的所有行

恢复文件
vi 在编辑某个文件时,会另外生成一个临时文件,这个文件的名称通常以 . 开头,并以 .swp 结尾。vi 在
正常退出时,该文件被删除,若意外退出,而没有保存文件的最新修改内容,则可以使用恢复命令:
:recover 恢复文件
也可以在启动 vi 时利用 -r 选项。

1.5 选项设置

为控制不同的编辑功能,vi 提供了很多内部选项。利用 :set 命令可以设置选项。基本语法为:
:set option 设置选项 option
常见的功能选项包括:
autoindent 设置该选项,则正文自动缩进
ignorecase 设置该选项,则忽略规则表达式中大小写字母的区别
number 设置该选项,则显示正文行号
ruler 设置该选项,则在屏幕底部显示光标所在行、列的位置
tabstop 设置按 Tab 键跳过的空格数。例如 :set tabstop=n,n 默认值为 8
mk 将选项保存在当前目录的 .exrc 文件中

ctrl +o  退回原处
ctrl+T   回到上一个访问的函数处

gd  转到当前光标所指的局部变量的定义处。

* 转到当前光标所指的单词的下一次出现的地方
#转到当前光标所指的单词的上一次出现的地方

多窗口操作:
Ctrl+w     +    [s/w/t/b/c/q/r/i/]
q:退出窗口
r 循环窗口

t  顶部窗口
b  底部窗口
w   下一个窗口,用于在窗口之间进行切换
c  关闭窗口
s   再分屏

vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次进行编辑

  下我们常常要进行字符串的查找替换,有在vim编辑器里面进行的,也有在shell下进行的,这样的事情常遇到,但是每次都会感到有些概念模糊,尤其对类 似awk、sed、grep、find等命令的具体参数使用问题上老是糊涂,下面收集几个常用的方法,实在不能理解就死记算了!

1、在vi中使用的查找替换方法
利用 :s 命令可以实现字符串的替换。具体的用法包括:
:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g 功能同上从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

2、在shell中使用find结合grep进行文件的替换
# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
上面命令可以在当前目录下(包括子目录)查找包含str1的文件,自动替换成str2,并且生成源文件的bak文件

更多方法正在不断收集更新中。。。

命令模式进入可视模式 按v或是ctrl-v键 注意v和ctrl-v是不同的 一个是普通的行选择 一个是块选择

更进一步的编辑 剪切复制和粘贴还有redo undo(取消和重做)

在windows下 你可以像其它编辑器那样使用ctrl-c ctrl-v ctrl-x,并且一样可以使用鼠标选择

在linux下 如果运行了gpm 那一样可以使用鼠标选中一块文字
然后在vim下把输入的光标停在要插入的地方(注意在普通模式下 才能插入 )
点右键 (如果是在x下 那是点中键 )进行粘贴
同时这可以从其它地方选择 而不一定是在vim内

如果要选择的文字很长 或是滚轮不好 总选不中
那你可以用可视模式

可视模式就是按v键进入

进入了后 移动光标 或者按    j h k  l 方向键,选完要复制或是要剪切的内容 然后
如果是想复制 那按y
如果是想剪切 那按x

当按下这些键后 自动回到命令模式
这时移动光标到你想粘贴的位置 按p

注意 如果你按了x 但是没有粘贴 然后复制了一行 那前一行就会自动清掉
也就是 删除的话也是按x

redo和undo
undo(取消操作) 在命令模式下按u
redo(取消刚才的取消 ) 在命令模式下按ctrl-R

命令总结

在命令或是可视模式下:
x 剪切/删除
y 复制

命令模式下:
p 粘贴
u 取消(可以无穷次 当然关闭了编辑器再打开时就不能了)
ctrl-r 重做(也可以无穷次)
:w 保存文件 可以指定文件名 如:w test.txt表示另存为test.txt 如果文件只读 那使用
:w! 强制覆盖
相关阅读 更多 +
排行榜 更多 +
脑洞我最大

脑洞我最大

休闲益智 下载
脑洞那么大

脑洞那么大

休闲益智 下载
最牛脑洞

最牛脑洞

休闲益智 下载