vi 使用

 

1)命令

gf  ,可以从光标指定的文件位置打开对应文件

:bd回来

2)http://www.cnblogs.com/wangkangluo1/archive/2012/04/12/2444952.html

键盘移动 (Move)

一切都从键盘的移动
k -> 上 up
j -> 下 down
h -> 左 left
l -> 右 right
z -> 重画屏幕,当前光标变成屏幕的第一行 (redraw current line at top of window)
CTRL-f -> 跳到下一页 (page down)
CTRL-b -> 跳到上一页 (page up)

3)http://blog.chinaunix.net/uid-23381466-id-93905.html

1、多文件查找
1.1、grep
       直接在vim中输入:grep abc * 这是直接调用unix下的grep命令
1.2、vimgrep
       基本用法就是
       :vimgrep /匹配模式/[g][j] 要搜索的文件/范围
       :vim[grep][!] /{pattern}/[g][j] {file} ...
       g 和 j 是两个可选的标志位,g表示是否把每一行的多个匹配结果都加入。j表示是否搜索完后定位到第一个匹配位置。
       要搜索的文件 可以是具体的文件路径,也可以是带通配符的路径比如 *.as **/*.as ,**表示递归所有子目录。 要搜索的文件和或搜索范围都可 以写多个,用空格分开。

例子:
:vimgrep /\/ **/*.as 搜索当前目录以及所有子目录内as文件中的 "flash"
:vimgrep /an error/ *.c 就是在所有的.c文件中搜索an error。
:vimgrep/an error/* 意思是查找当前目录下的文件中的an error,不包括子目录

1.3、定位
       输入上述的命令后,可以像输入:make命令,那样定位匹配到的文件位置
       :cnext (:cn)           下一个匹配位置
       :cprevious (:cp)     上一个匹配位置
       :cwindow (:cw)     quickfix窗口,可以选择匹配的文件位置
       :cl(:clist)                查看所有匹配的位置

2、多文件替换(arg)
a、加入要处理的文件  :args *.txt
b、输入对上述文件的动作  :argdo %s/hate/love/gc | update  (这里将hate替换成love,update表示要写入到文件中,否则只作替换而不写入)

4)http://www.vimer.cn/archives/218.html/comment-page-1

这个网站似乎不错

---其他网站---

Vim中也可以像普通ide那样的在多个文件中查找的功能,用的是:vimgrep这条命令,格式如::vimgrep /AAA/ **/*.* 。执行这条命令后,可以通过:cw命令打开匹配的窗口进行查询结果的查看。
另外,vim还可以通过args命令对多个文件进行批量操作。可以参考下面这篇文章:

Vim(gvim)中怎么实现多文件的查找和替换呢?当时确实一直没有考虑过这个问题,因为一直在linux下都有grep,sed这样强力的工具,并不需要vim来实现这样的操作,但是也有很多朋友在windows下也使用gvim来进行编辑,那么就很有必要研究一番了。

第一,多文件查找

vimgrep是vim自带的一个工具,类似于grep的用法就可以实现。比如要在当前目录查找word,使用如下:

:vimgrep word *
1
:vimgrep word *

如果想要递归查找所有下级目录里面,那么就用

:vimgrep word **
1
:vimgrep word **

另外,如果想要在使用是快捷查找当前光标下的字母,则只需要在vimrc中添加如下代码:

"对搜索的设置
map ft :call Search_Word()<CR>:copen<CR>
function Search_Word()
let w = expand("<cword>") " 在当前光标位置抓词
execute "vimgrep " . w . " *"
endfunction
1
2
3
4
5
6
"对搜索的设置
map ft :call Search_Word()<CR>:copen<CR>
function Search_Word()
let w = expand("<cword>") " 在当前光标位置抓词
execute "vimgrep " . w . " *"
endfunction

通过vimgrep查找到的结果会生成到quickfix中,如下图:

vi 使用

第二,多文件替换

实际上只要如下两个命令即可(假设要将当前目录下所有扩展名为.txt/.cpp的文件中的hate替换成love):

:args *.txt *.cpp
:argdo %s/hate/love/gc | update
1
2
:args *.txt *.cpp
:argdo %s/hate/love/gc | update

就可以完成啦。解释如下,

:args *.txt *.cpp
1
:args *.txt *.cpp

这样写会扫描当前目录下的.txt 和 .cpp文件,并加入到参数列表。但是这样写只会稻苗当前目录,如果想要递归扫描所有下级目录的话,用

:args **/*.txt
1
:args **/*.txt

如果只想扫描下一级目录(即不扫描当前目录)的话,用

:args */*.txt
1
:args */*.txt

:argdo %s/hate/love/gc | update
1
:argdo %s/hate/love/gc | update

是将参数列表中的所有文件的hate提换成love,并写入硬盘(如果没有|update,就不会写入,但相应的替换也会被中断)。

最后强调一点,使用替换命令的时候,一定记得备份,因为替换是直接写入硬盘滴哦……

好啦,希望这篇文章对大家有用~

2) ttp://www.cnblogs.com/end/archive/2012/06/12/2546757.html

下面写的还没用过~看了大家的分享觉得这几个还不错

:n1,n2 co n3: 将n1行到n2行之间的内容拷贝到第n3行下
    :n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
    :n1,n2 d: 将 n1行到n2行之间的内容删除

:n1,n2 w!command: 将文件中n1行至n2行的内容作为command的输入并执行之,
    若不指定n1,n2,则表示将整个文件内容作为command的输入

方式2的优点在可以直接使用nyy和pp命令在各个窗口的文件之间进行拷贝和粘贴,操作比较方便。

上一篇:Linux时间子系统之(十七):ARM generic timer驱动代码分析


下一篇:SQL server学习