您的位置:首页 > 其它

VIM 使用技巧

2008-07-17 14:32 351 查看
1. 让vim显示文本颜色
在用户目录下新建.vimrc文件,然后输入”syntax on”,打开语法高亮显示
2. 命令行模式(command mode)功能键
vim picture
按「a」进入插入模式后 是从目前光标所在位置的下一个位置开始输入文字
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
从插入模式切换为命令行模式按「ESC」键。
按数字「0」:移到行的开头。
按「G」:移动到文章的最后。
按「$」:移动到光标所在行的“行尾”。
按「^」:移动到光标所在行的“行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾

按「ge」:与e相反

按「b」:光标回到上个字的开头
按「H」:光标回到文章开头
按「M」:光标移到文章中间
按「L」:光标回到文章结尾
按[gg] 到文件首
按[gd] 到变量声明
按「#l」:光标移到该行的第#个位置
如:5l,56l 移动到该行第5,56个位置

%:移动到与制匹配的括号上去(),{},[],<>等。
shift + < 左移一行
shift + > 右移一行

屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

CTRL+G 得到当前光标在文件中的位置

「x」: 每按一次,删除光标所在位置的“后面”一个字符。
「nx」: 例如,「6x」表示删除光标所在位置的“后面”6个字符。
「X」: 大写的X,每按一次,删除光标所在位置的“前面”一个字符。
「nX」: 例如,「20X」表示删除光标所在位置的“前面”20个字符。
「dd」: 删除光标所在行。
「ndd」: 从光标所在行开始删除n行
「dw」: 删除光标后的一个单词.
「db」: 删除光标前的一个单词
「d0]:删至行首
「d$]:删至行尾
「yw」: 将光标所在之处到字尾的字符复制到缓冲区中。
「nyw」: 复制n个字到缓冲区
「yy」: 复制光标所在行到缓冲区。
「nyy」: 例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」: 将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
「r」: 替换光标所在处的字符。
「R」: 替换光标所到之处的字符,直到按下「ESC」键为止。
「u」: 如果您误执行一个命令,可以按下「u」回到上一个操作。按多次“u”可以执行多次回复。
「cw」: 更改光标所在处的字到字尾处
「cnw」: 例如,「c3w」表示更改3个字
「ctrl」+「g」 列出光标所在行的行号。
「nG」:例如,「15G」,表示移动光标至文章的第15行行首。

s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之

'. 此命令相当强大, 它移动光标到上一次的修改点.

c-p(c-n) 在编辑模式中, 输入几个字符后再输入此命令则 vi 开始向上(下)搜
索开头与其匹配的单词并补齐, 不断输入此命令则循环查找. 此命令
会在所有在这个 vim 程序中打开的文件中进行匹配.

3. Last line mode下命令简介
在使用「last line mode」之前,请记住先按「ESC」键确定您已经处于「command mode」下后,再按「:」冒号即可进入「last line mode」

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

光标移到起始行,输入ma
光标移到结束行,输入mb
光标移到粘贴行,输入mc

然后 :'a,'b co 'c

ZZ:保存当前文档并退出VIM

m[a-z]:在文中做标记,标记号可为a-z的26个字母,用`a可以移动到标记a处

:read file.c 将文件file.c的内容插入到当前光标所在的下面
:0read file.c 将文件file.c的内容插入到当前文件的开始处(第0行)
:nread file.c 将文件file.c的内容插入到当前文件的第n行后面
:read !cmd :将外部命令cmd的输出插如到当前光标所在的下面

把 co 改成 m 就成剪切了

:w filename (将文章以指定的文件名filename保存)
: wq (输入「wq」,存盘并退出vi)
: q! (输入q!, 不存盘强制退出vi)
:n 如输入数字15,再回车,就会跳到文章的第15行。
:/关键字 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
: ?关键字 先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

4. 行号与文件
命令模式下,可以规定命令操作的行号范围。数值用来指定绝对行号;字符“.”表示光标所在行的行号;字符“$”表示正文最后一行的行号;简单的表达式,例如“.+5”表示当前行往下的第 5 行。例如:

:345 将光标移到第 345 行
:345w file 将第 345 行写入 file 文件
:3,5w file 将第 3 行至第 5 行写入 file 文件
:1,.w file 将第 1 行至当前行写入 file 文件
:.,$w file 将当前行至最后一行写入 file 文件
: .,.+5w file 从当前行开始将 6 行内容写入 file 文件
:1,$w file 将所有内容写入 file 文件,相当于 :w file 命令

在命令模式下,允许从文件中读取正文,或将正文写入文件。
例如:

:w 将编辑的内容写入原始文件,用来保存编辑的中间结果
:wq 将编辑的内容写入原始文件并退出编辑程序(相当于 ZZ 命令)
:w file 将编辑的内容写入 file 文件,保持原有文件的内容不变
:a,bw file 将第 a 行至第 b 行的内容写入 file 文件
:r file 读取 file 文件的内容,插入当前光标所在行的后面
:e file 编辑新文件 file 代替原有内容
:f file 将当前文件重命名为 file
:f 打印当前文件名称和状态,如文件的行数、光标所在的行号等
恢复文件,该文件被删除,若意外退出,而没有保存文件的最新修改内容,则可以使用恢复命令:
:recover 恢复文件也可以在启动 vi 时利用 -r 选项。
:e 文件名 编辑另一文件
:e ! 重新编辑文件,放弃任何改变
:sh 执行sh,结束后回到编辑
:! 命令 执行命令后回到编辑
:n 编辑下一文件
:n 文件表 重新定义待编辑文件表
set 设置 vi 的选项,例如
: set nu 表示每行前显示行号,在选项前加no则表示清除该选项,例如
:set nonu 表示每行前不显示行号,下面是一些常用的选项:
:set ai 自动缩进
:set aw 编辑下一文件前自动存盘
:set ic 查找字符串时不区分大小写
:set nu 每行前显示行号
:set sm 输入)及}时显示与之配对的( 或 {
:set slow 插入时延迟屏幕刷新
:set ws 使查找能绕过文件尾从头进行
:set wa 写文件之前不作对文件的检查

5. 常见问题及应用技巧
1.在一个新文件中读/etc/passwd中的内容,取出用户名部分。

vi file :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd
:%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。
您也可以在指定的行号后读入文件内容,例如使用命令“:3r/etc/passwd”从新文件的第3行开始读入/etc/passwd的所有内容。
我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。
#cat squid.conf.default | grep -v ‘^$’ | grep -v ‘^#’

2.在打开一个文件编辑后才知道登录的用户对该文件没有写的权限,不能存盘,需要将所做修改存入临时文件。

vi file :w/tmp/1保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件,例如仅仅把第20~59行之间的内容存盘成文件/tmp/1,我们可以键入如下命令。
vi file
:20,59w /tmp/1

3.用VI编辑一个文件,但需要删除大段的内容。
首先利用编辑命令“vi file”打开文件,然后将光标移到需要删除的行处按Ctrl+G显示行号,再到结尾处再按Ctrl+G,显示文件结尾的行号。

:23,1045d假定2次得到的行号为23和1045,则把这期间的内容全删除,也可以在要删除的开始行和结束行中用ma、mb命令标记,然后利用“:’a,’bd”命令删除。

4.在整个文件的各行或某几行的行首或行尾加一些字符串。

vi file :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”。
:%s/$/some string/g 在整个文件每一行的行尾添加“some string”。
:%s/string1/string2/g 在整个文件中替换“string1”成“string2”。
:3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。
注意: 其中s为substitute,%表示所有行,g表示global。

5.同时编辑2个文件,拷贝一个文件中的文本并粘贴到另一个文件中。

vi file1 file2 yy 在文件1的光标处拷贝所在行
:n 切换到文件2 (n-next)
p 在文件2的光标所在处粘贴所拷贝的行
:n 切换回文件1

6.替换文件中的路径。
使用命令“:%s#/usr/bin#/bin#g”可以把文件中所有路径/usr/bin换成/bin。也可以使用命令“:%s//usr/bin//bin/g”实现,其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。

举一个复杂的例子,把文中的所有字符串“abc……xyz”替换为“xyz……abc”可以有下列写法:
:%s/abc/(.*/)xyz/xyz/1abc/g
:%s//(abc/)/(.*/)/(xyz/)//3/2/1/g
* diff 模式

专门用于比较编辑两个或多个内容相近的文件的模式。一般来说,比如你要比较编辑 A 跟 B
两个文件,你可以命令行启动 vim - d A B 或者这样:先打开文件 A,然后 :vsplit 打开文件 B,对文件 A 和 B
都输入命令 :diffthis。这时 VIM 将非常清晰的对比显示出两个文件的不同之处,编辑起来十分方便。

9. TAB
TAB 就是制表符, 单独拿出来做一节是因为这个东西确实很有用.

<< 输入此命令则光标所在行向左移动一个 tab.
>> 输入此命令则光标所在行向右移动一个 tab.
5>> 输入此命令则光标后 5 行向右移动一个 tab.
:12,24> 此命令将12行到14行的数据都向右移动一个 tab.
:12,24>> 此命令将12行到14行的数据都向右移动两个 tab.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: