转自:http://os.chinaunix.net/a2006/0706/963/000000963867.shtml

vi是linux与unix下的常用文本编辑器,其运行稳定,使用方便,本文将分两部分对其常用操作技巧和配置进行阐述,其中参考了网上的一些文章,对作者表示感谢

PART1 操作技巧

说明:

以下的例子中 xxx 表示在命令模式下输入 xxx 并回车

以下的例子中 :xxx 表示在扩展模式下输入 xxx 并回车

()中的命令表示相关命令.[]表示命令等同

在编辑模式或可视模式下输入的命令会另外注明.

移动光标

在 vi 中, 移动光标和编辑是两件事, 正因为区分开来, 所以可以很方便的进行光标定

位和编辑. 因此能更快一点移动光标是很有用的.

w 移动光标到下一个单词开头.

e 移动光标到下一个单词结尾

b 移动光标到上一个单词.

0 移动光标到本行最开头.

^ 移动光标到本行最开头的字符处.

$ 移动光标到本行结尾处.

A 移动光标至行尾并处于“追加”状态,直接编辑

H 移动光标到屏幕的首行.

M 移动光标到屏幕的中间一行.

L 移动光标到屏幕的尾行.

gg 移动光标到文档首行.

G 移动光标到文档尾行.

:n 跳至第n行

ctrl + f 向下翻页 同 page down.

ctrl + b 向上翻页 同 page up.

ctrl + d 向下翻半页 此比较有用

ctrl + u 向上翻半页 此比较有用

ctrl + e 向下翻一行

ctrl + y 向上一行

[[ 转到上一个位于第一列的“{”

]] 转到下一个位于第一列的“}”

{ 转到上一个空行

} 转到下一个空行

'' 两个单引号 此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查找到某个单词后, 再输入此命令则回到上次停留的位置.

'. 一单一点 此命令相当好使, 它移动光标到上一次的修改行.

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

查找

/xxx(?xxx) 表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示

向上查找.其中xxx可以是正规表达式,关于正规式就不多说了.

一般来说是区分大小写的, 要想不区分大小写, 那得先输入

:set ignorecase

查找到以后, 再输入 n 查找下一个匹配处, 输入 N 反方向查找.

*(#) 当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的

下(上)一个单词. 同样, 再输入 n 查找下一个匹配处, 输入 N 反方

向查找.

g*(g#) 此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而

是匹配包含该单词的所有字符串.

gd 本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的非

注释段中第一次出现这个单词的地方. 用于查找局部变量等

% 本命令查找与光标所在处相匹配的反括号, 包括 () [] { }

f(F)x 本命令表示在光标所在行进行查找, 查找光标右(左)方第一个x字符.

找到后:

输入 ; 表示继续往下找

输入 , 表示反方向查找

替换

替换是 vi 的强项,使用“:s/模式/字符串/标志”进行替换,其中的“模式”是一个正则表达式,可以用来匹配字符串.以下提供几个例子.

:s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb

:s/\/bb/g 将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词

:%s/aa/bb/g 将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb

:12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb

:12,23s/^/#/ 将从12行到23行的行首加入 # 字符

:%s= *$== 将所有行尾多余的空格删除

:%s/\s\+$// 将所有行尾多余的空格删除

:g/^\s*$/d 将所有不包含字符(空格也不包含)的空行删除

:%s/\(\s*\n\)\+/\r/ 将所有不包含字符(空格也不包含)的空行删除.

:%s!\s*//.*!! 去掉所有的“//”注释

注:Vim 在搜索和替换时会对匹配成功的文本进行加亮,在已经完成搜索和替换任务后,这种加亮有时反而会妨碍显示。Vim 专门提供一个命令取消这种加亮(直到用户再一次使用搜索或替换命令):“:nohlsearch”。建议用户创建一个键盘映射(key mapping)加入到

.vimrc中,如: nmap :nohlsearch

特殊编辑

ga 显示光标所指字符的encoding 编码,比如ASCII码

guw 光标所在单词光标后的字符小写

gUw 光标所在单词光标后的字符大写

撤消

u

拷贝, 删除与粘贴

在 vi 中 y 表示拷贝, d 表示删除, p 表示粘贴. 其中拷贝与删除是与光标移动命令

结合的, 看几个例子就能够明白了.

yw 表示拷贝从当前光标到光标所在单词结尾的内容.

dw 表示删除从当前光标到光标所在单词结尾的内容.

daw 表示删除光标所在的单词,不管光标在此单词那一位置

y0 表示拷贝从当前光标到光标所在行首的内容.

d0 表示删除从当前光标到光标所在行首的内容.

y$ 表示拷贝从当前光标到光标所在行尾的内容.

d$[D] 表示删除从当前光标到光标所在行尾的内容.

特殊地:

yy 表示拷贝光标所在行.

dd 表示删除光标所在行.

D 表示删除从当前光标到光标所在行尾的内容.

xp 表示交换光标与其后的字符的位置

ddp 表示光标所在行与下一行交换

J 表示光标所在行与下一行合并

关于拷贝, 删除和粘贴的复杂用法与寄存器有关, 可以自行查询.

VISUAL模式

Visual 模式用于选择多行文本或文本块,开头结尾自己去定,象用鼠标选一样。

v 选择多行,头尾自订

ctrl + v 选择矩形块,有点像UE中的列模式,O,o可以定位光标到四个端点

用visual选择的块可以看作一个基本单位,删除复制什么的都可以直接使用

数字与命令

在 vi 中数字与命令结合往往表示重复进行此命令, 若在扩展模式的开头出现则表示行

号定位. 如:

5yy[y5y] 表示拷贝光标以下 5 行.

5dd[d5d] 表示删除光标以下 5 行.

:12,24y 表示拷贝第12行到第24行之间的内容.

:12,y 表示拷贝第12行到光标所在行之间的内容.

:,24y 表示拷贝光标所在行到第24行之间的内容. 删除类似.

5fx 表示查找光标后第 5 个 x 字符.

5w(e) 移动光标到下五个单词的头部(尾部).

自动完成与路径设定

在 vi 中, 不要求你输入每一个字符, 可以有很多种方法快速输入一些字符.

ctrl+p(ctrl + n) 在编辑模式中, 输入几个字符后再输入此命令则 vi 开始向上(下)搜

索开头与其匹配的单词并补齐, 不断输入此命令则循环查找. 此命令

会在所有在这个 vim 程序中打开的所有文件中进行匹配.

ctrl + x + l 在编辑模式中, 整行补齐, 但是仅在本窗口中出现的文档中进行匹配.

ctrl + x + f 在编辑模式中, 这个命令表示补齐文件名. 如输入:

/usr/local/tom 后再输入此命令则它会自动匹配出:

/usr/local/tomcat/

abbr 即缩写. 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个

字符串. 比如编写java文件的常常输入 System.out.println, 这很

是麻烦, 所以应该用缩写来减少敲字. 可以这么做:

:abbr sprt System.out.println

以后在输入sprt后再输入其他非字母符号, 它就会自动扩展为System.

out.println

在作关键字匹配完成时,如果当前文件和其它打开的文件中没有想要的结果,Vim

会自动到“#include”的文件中进行进一步的搜索(为什么是“#include”呢?请查阅

“:help 'include'”),搜寻的目录则由选项 path 决定,其缺省值在 Unix(含

Linux)下为“.,/usr/include,,”,代表搜索的目录依次是文件所在目录、/usr/include

和当前目录。根据实际情况,你可能需要在 .vimrc文件中设置该选项,加入项目相关的包含目录,注意一般要保留最后的“,,”,除非你不需要在当前目录下搜索。

设置了合适的path后,另外带来的一个便利就是可以使用“gf”命令方便地跳转到光标下的文件名所代表的文件中。在上面的例子中,把光标移到“stdio.h”的任一字符上,键入

“gf”,则 Vim会自动打开 /usr/include/stdio.h文件。使用“Ctrl-O”(参见“:helpCTRL-O”)可返回到原先的文件中。

多文件编辑

在一个 vim 程序中打开很多文件进行编辑是挺方便的.

vi file1 file2 file3 ...

在完成一个文件的编辑并存盘后(:w),键入命令

:n就可以进入下一个文件的编辑,

:N就进入上一个文件进行编辑

如果要指定编辑一个文件则用

:e 文件名 指定文件编辑

或者用:ls[:files] 由vi列出文件名,比如 在屏幕的最下方

会显示出如下数据:

1 %a "usevim.html" 行 162

2 # "xxxxxx.html" 行 0

其中:

1 表示打开的文件序号, 这个序号很有用处.

%a 表示文件代号, % 表示当前编辑的文件,

# 表示上次编辑的文件

"usevim.html" 表示文件名.

行 162 表示光标位置.

然后 :b序号,打开:ls命令中指定序号的文件,

这样便可以在多个文件中进行复制粘贴了

其他操作

:sp(:vsp) 文件名 vim 将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.

从 vim6.0 开始, 文件名可以是一个目录的名称, 这样, vim 会

把该目录打开并显示文件列表, 在文件名上按回车则在本窗口打

开该文件, 若输入 O 则在新窗口中打开该文件, 输入 ? 可以看

到帮助信息.

ctrl +w +w vim 分割了好几个窗口怎么办? 输入此命令可以将光标循环定位

到各个窗口之中.

:set diff 此命令用于比较两个文件, 可以用

:vsp filename

命令打开另一个文件, 然后在每个文件窗口中输入此命令,就能看

到效果了.

TAB

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

输入此命令则光标所在行向左移动一个 tab.

>> 输入此命令则光标所在行向右移动一个 tab.

5>> 输入此命令则光标后 5 行向右移动一个 tab.

:12,24> 此命令将12行到14行的数据都向右移动一个 tab.

:12,24>> 此命令将12行到14行的数据都向右移动两个 tab.

那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个.

有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 没关系, vim 能

帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.

:set shiftwidth=4 设置自动缩进 4 个空格, 当然要设自动缩进先.

:set sts=4 即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.

:set tabstop=4 实际的 tab 即为 4 个空格, 而不是缺省的 8 个.

:set expandtab 在输入 tab 后, vim 用恰当的空格来填充这个 tab.

文件跳转与tags

文件跳转要使用tags文件,生成方式为 ctags -R *, ctags为外部命令。

使用方法:

(1)把光标移到变量名或函数上,按

ctrl+ ] 跳转到变量或函数定义的地方,按

ctrl+ t 返回到原文件

可以多次跳转和多次返回

(2)在vi中:ta[:tag]可以直接跳转到变量或函数定义的地方

(3)vi -t 变量或函数名,直接打开变量或函数定义的文件

其他选项:

:tselect [关键字] 显示与“关键字”匹配的标记列表,输入数字跳转到指定的标记

:tjump [关键字]

类似于“:tselect”,但当匹配项只有一个时直接跳转至标记处而不再显示列表

:tn 跳转到下一个匹配的标记处

:tp 跳转到上一个匹配的标记处

Make 和 grep

Make [17] 和grep [18] 应当算是 Unix 世界里无人不晓的基本工具了吧。很自然的,Vim

对它们有着特殊的支持。该支持主要通过访问一个特殊的快速修订窗口(quickfix

window)来实现。直接在 Vim 的命令模式里输入相应的 make 或 grep 命令(如“:grep

foo

*.c”)即可将命令的执行结果放入该窗口,同时根据返回的结果跳转到第一个错误(make

的情况;在使用 grep 时是匹配成功之处)。以下是常用的“快速修订”命令:

:cn(显示下一个错误)

:cp(显示上一个错误)

:cl(列出所有的错误及其编号)

:cc(跳转到指定编号的错误)

:copen(打开快速修订窗口,在其中显示所有错误,可在错误上双击鼠标或按回车键跳转至

该错误;示例参见图 4)

执行外部命令

在“:make”这样的命令中,Vim会自动调用外部的程序。用户当然也可以自己执行外部的程序:估计很多的人都已经知道了用“:!命令”可以在 Vim中执行一个外部命令。不过,估计大部分人都不知道,还有其它一些命令可以执行外部命令,并且,即使“:!”命令里面也有一些技巧可以使用。最正规的执行外部命令的方法,如前所述,就是“:!”。比如,我们想要显示当前目录下的所有文件,就可以直接执行:“:!ls”。Vim会在一个终端窗口中进行文件列表,然后提示我们按键返回 Vim中。

事实上,这种方式对于“cp”、“rm”这样基本不需要输出的命令比较实用,而对于“ls”这样关注于输出的命令并不太适用。如果想把外部命令执行的结果插入到当前编辑的缓冲区中,可以考虑使用“:r!”。比如,我们使用“:r!ls”,就可以把“ls”命令的执行结果插入到缓冲区中光标所在行下面。在使用宏时,这可能会特别有用。

Vim的“:!”命令还有一个特别强大的技巧可以使用。拿一个实际例子,我们需要对在一个文件的每一行之前插入一个编号,该怎么做呢?——用 Vim的宏或者脚本可以完成这一工作,但这不是最高效、最灵活的工作方式。Linux下一般带有的 GNU 的nl,可以用非常灵活的方式来完成这一任务——要对所有的非空行进行编号,只需要“:%!nl”;要对包含空行的所有行进行编号?OK,“:%!nl -ba”。

稍作一点解释。当使用可视模式选中文本行后然后键入“:!”(命令行上将出现“:'!

”,表示命令的范围是选定的文本),或者使用“:%!”(表示命令的范围是整个缓冲区中

的文本),Vim在执行后面的命令时,将把命令范围里的文本行作为后面执行的命令标准输入,并用命令执行后的标准输出替换当前缓冲区中的这些文本行。这就是上面的命令行的工作原理。

##############################高级########################################### 宏替换

vi 不仅可以用 abbr 来替换文字, 也可以进行命令的宏定义. 有些命令输起来很费劲,

因此我把它们定义到 - 上, 这样就很方便了.这些配置可以预先写到 ~/.vimrc

(windows 下为 $VIM/_vimrc) 中, 写进去的时候不用写前面的冒号.

:nmap :nohls 取消被搜索字串的高亮

:nmap w 命令模式下转移光标到不同窗口

:imap 输入模式下运行

:nmap :%s= *$== 删除所有行尾多余的空格.

:imap 同上

autocmd

这个命令十分的强大, 可以用这个命令实现对不同的文件格式应用不同的配置; 可以

在新建文件时自动添加上版权声明等等. 这些命令一般定义在 ~/.vimrc 这样的配置文件

里面. 由于他很强大, 所以我不能给出很具体的说明, 只能举几个例子, 详细的请看帮助.

:autocmd! 删除所有之前的自动命令.

autocmd FileType java source ~/.vim/files/java.vim

autocmd FileType java source ~/.vim/files/jcommenter.vim

以上两条命令让我在打开 java 文件时才应用后面提到的两个配置文件.

autocmd BufNewFile *.java 0r ~/.vim/files/skeletons/java.skel

以上这条命令让我在新建 java 文件时自动加入 java.skel 文件的内容.

autocmd BufNewFile *.java normal gnp

以上这条命令让我在新建 java 文件时自动运行 gnp 命令, 这个命令进行一些特殊化

处理, 比如将新 java 文件中的 __date__ 替换成今天的日期什么的.

PARTII 配置文件

在启动的时候vim会读取 /etc/vimrc 和 ~/.vimrc (也就是说, 全局设置的vimrc 和用户设置)。一般情况下用户设置自己home目录的.vimrc就已足够

“双引号开始的行为注释行,下同

“去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限

set nocompatible

“显示行号

set nummber

“检测文件的类型

filetype on

“记录历史的行数

"set history=1000

“背景使用黑色

set background=dark

"语法高亮度显示

syntax on

“下面两行在进行编写代码时,在格式对起上很有用;

“第一行,vim使用自动对起,也就是把当前行的对起格式应用到下一行;

“第二行,依据上面的对起格式,智能的选择对起方式,对于类似C语言编写上很有用

set autoindent

set smartindent

"C语言对齐方式,最好用它

set cindent

“第一行设置tab键为4个空格,第二行设置当行之间交错时使用4个空格

set tabstop=4

set shiftwidth=4

"以空格代替tab,注意make文件有时候必须用tab,而不能用空格代替

"set expandtab

“设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号

set showmatch

“在编辑过程中,在右下角显示光标位置的状态行

set ruler

“默认情况下,寻找匹配是高亮度显示的,该设置关闭高亮显示,最好定义快捷键

"set nohls

"打开高亮

set hlsearch

“查询时非常方便,如要查找book单词,当输入到/b时,会自动找到第一

“个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依

“次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词

“时,别忘记回车

set incsearch

"设置退格键

set backspace=2

"set backspace =indent,eol,start

"不进行文件备份

set nobackup

"不要交换文件

set noswapfile

“去除vim的GUI版本中的toolbar

"set guioptions-=T

“当vim进行编辑时,如果命令错误,会发出一个响声,该设置去掉响声

"set vb t_vb=

"设定文件编码类型,彻底解决中文编码问题

let &termencoding=&encoding

set fileencodings=utf-8,gbk,ucs-bom,cp936

set fenc=utf-8 " default fileencoding

set fencs=utf-8,gb18030,gbk,gb2312,cp936,ucs-bom,euc-jp

参考资料

1、vim的中文手册在下面连接处可以找到

http://vimcdoc.sourceforge.net/

可以下栽其中的一个PDF版本,里面介绍的很详细,强烈推荐:)

2、CU的贴子

http://bbs.chinaunix.net/viewthread.php?tid=472608&extra=page%3D1

转载于:https://blog.51cto.com/noworry/1104464

vim常用操作技巧与配置相关推荐

  1. Linux之Vim常用操作

    Linux之Vim常用操作 Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立.编辑和显示文本文件.Vim没有菜单,只有命令. 一.插入命令 命令 作用 ...

  2. WPS表格的常用操作技巧大全

    WPS表格的常用操作技巧大全 今天读书屋OFFICE网陈飞老师主要分享WPS表格的常用操作技巧,这些技巧相对于EXCEL表格来说,主要讲解:合并相同单元格,合并内容,数字转文本,快速输入当前日期.插入 ...

  3. arcgis弧段怎么加很多点_ArcGIS常用操作技巧大汇总

    原标题:ArcGIS常用操作技巧大汇总 1.影像格式的转换 例如把jpg格式转换为tiff格式.可以在arctoolbox中的conversiontools-->to Raster-->R ...

  4. 效率(1)Excel常用操作技巧

    Excel常用操作技巧 本文是对微信文章<北大硕士给大脑植入Excel病毒,工作效率提升了好几倍>的整理,方便以后查阅. 1.快捷键操作 技巧1:按住[CTRL]键,拖动实现表格复制 技巧 ...

  5. 学习ArcGIS?37个Arcmap常用操作技巧可能帮到您

    概述 ARCgis软件作为地信人日常工作绕不开的软件之一,产品功能相对来说比较复杂,对于新手来说从入门到完全上手需要很长时间学习,这里就为大家整理了37个个软件常用操作技巧,希望能够帮到需要的同行(文 ...

  6. VIM 常用操作(转载)

    vi(vim)可以说是linux中用得最多的工具了,不管你配置服务也好,写脚本也好,总会用到它.但是,vim作为一个"纯字符"模式下的工具,它的操作和WINDOWS中的文本编辑工具 ...

  7. Linux下vim常用操作

    vim有三种模式,分别是命令模式.编辑模式和最后行模式 当我们在命令行模式中时是不可以进行文本编辑的,我们可以通过按一下几个字母中的其中一个进入编辑模式 i 插入,也就是在你光标位置的前面进行插入编辑 ...

  8. linux撤销编辑内容,linux编辑利器vim常用操作

    vim文本编辑器: 简介: Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和Emacs并列成为类Unix系统用户最喜欢的编辑器. ...

  9. 【零散积累】 vim常用操作

    类型 操作 含义 删除 dd 删除游标所在的一整行(常用) ndd n为数字.删除光标所在的向下n行,例如20dd则是删除光标所在的向下20行 d1G 删除光标所在到第一行的所有数据 dG 删除光标所 ...

最新文章

  1. 反转比特位(文章最后有干货)【转】
  2. 台湾国立大学郭彦甫Matlab教程笔记(9) basic plotting
  3. ubuntu下安装Thinkpad指纹识别系统
  4. 10.2.1 CSS介绍与引入
  5. 【Android】ContentProvider和Uri详解
  6. XE7 Unit scope names
  7. Linux安装ParaView
  8. php解密encrypteddata,PHP解密支付宝小程序的加密数据、手机号的示例代码
  9. 平安人寿打造新一代年金保险产品:御享财富和御享金瑞
  10. 线性模型(Linear Model)
  11. excel自定义格式分钟计时_拒绝加班做表格!只用Excel自定义格式1分钟做一份完整的表格...
  12. 如何看待自己正在遭受的挫折?
  13. 黑马程序员-江远云 我的java语言基础之路4-语句篇
  14. Web Worker 简介
  15. 蓝牙耳机打电话外放?目前通话效果最好的蓝牙耳机
  16. qu32调音台说明书_ALLEN-HEATH QU 系列数字调音台Qu16、Qu24、Qu32功能介绍
  17. Navicat Premium教程|Navicat Premium怎么用?
  18. opencv python 人脸识别 相似度_OpenCV+Tensorflow实现实时人脸识别演示
  19. 【BZOJ】初级水题列表——献给那些想要进军BZOJ的OIers
  20. 【调度】遗传算法的基本理论

热门文章

  1. 尚硅谷Linux视频学习建议贴及linux全套视频,运维版本180G高质量视频教程免费下,linux教程
  2. gradle的配置文件build.gradle、gradle.properties、settings.gradle示例
  3. Selenium WebDriver API
  4. java解决斐波那契数列(Fibonacci sequence)
  5. android 有序广播例子,有序广播的实例解析--android案例《拦截有序广播》
  6. ggplot2 | 如何对连续型变量使用离散型调色板进行配色
  7. oracle设置no null,Oracle 在not in中使用null的问题
  8. 月薪2万的90后程序员!哪些岗位和公司才是他们的首选?
  9. 学会这6个强大的CSS选择器,将真正帮你写出干净的CSS代码!
  10. php支付回调怎么写_php 微信支付回调校验的两种做法