Vim参考

[TOC]

1. vim-vi简介

在UNIX系统中,创建和修改配置文件、shell脚本、初始化文件、编写程序都离不开VI。

  1. vi属于两个主要的UNIX规范:POSIX和单一UNIX规范。
  2. vi编辑器由Bill Joy于1976年创建。
  3. vi是一种面向屏幕的编辑器。
  4. vi来源于另一个编辑器ex。
  5. vim是vi的增强版。
  6. 1988年,荷兰的Bram Moolenaar创建了vim。

下来看下vim的启动屏幕:

Vim参考_第1张图片
Paste_Image.png

2. 帮助

学习vi,学会使用联机手册或帮助命令是非常重要的。Unix有两个最重要的文档资料系统:Unix手册和Info(GNU项目的官方文档资料系统)。
常用常见命令:

man vi   

vi --help

info vi

对于较长的说明页,可使用分页程序分页显示。常用的分页程序有:less、more、pg。例如:

man cp | less

查找说明书页的其它方法(基于web):

  1. 使用google搜索:(一定要确保包含双引号)
  **“man vi ”**
**“man pages” vi**
  1. 另外一种基于web的说明书页的方法是xman,xman是一个基于GUI的程序,它充当说明书页浏览器。在命令行启动xman:xman&
  2. vi-vim帮助
    如果还没接触vim,可在shell中输入vimtutor,查看教程。
    vi-vim的帮助命令:
  :help
  1. 一些其他  
    英文不好的同学,可在http://sourceforge.net/projects/vimcdoc/files/vimcdoc/1.5.0/vimcdoc-1.5.0.tar.gz/download?use_mirror=jaist,下载vim中文帮助。
    使用中文帮助文档
  set helplang=cn

使用英文帮助文档:

  set helplang=en

3. 模式和命令

3.1 输入模式和命令模式

命令模式[[2]]:所键入的键都被解释成命令。
输入模式(input mode):键入的任何内容都直接插入到编辑缓冲区中。
当离开输入模式时,使用Esc键切换到命令模式。
了解所处模式的方法:

:set showmode
3.2 vi和ex命令

vi和ex是同一个程序的两种不同的表现形式。也就是说可以同时使用vi和ex命令。
vi:
①大多数vi命令都是单字母双字母的表现形式。
②vi键入时命令不回显。
ex:
①ex命令比vi命令长。
②所有的ex命令都以一个:(冒号)开头。键入:后,vi就将光标移动到命令行上(屏幕最底部)。
③ex命令的每个字符都将回显。
④ex命令结束,必须按下键盘。

3.3 命令补全

命令补全:Tab
关键字补全:^N ^P

4. 启动与编辑vi-vim

4.1 编辑一个文件

语法:

vi 【-rR】 【file……】

常用命令:

vi file                  启动vi,编辑指定的文件

vi -R file               以只读模式启动vi

view file                以只读模式启动vi (vi -R file等同于view file)

vim file                   启动vim,编辑指定的文件

vim -C      file          以兼容模式启动vi
4.2 编辑技巧

编辑技巧:

 vi +[num] file           打开文件,并将光标置于第n行首

 vi + file                打开文件,并将光标置于最后一行首

vi +/pattern file         打开文件,并将光标置于第一个与pattern匹配的字符串

vi +?pattern file         编辑工作从匹配pattern的最后一行开始

vi -r file               (-r 即recover,恢复)
4.3 文本插入

操作键说明

i     在当前光标位置前插入数据

a     在当前光标位置后插入数据

I     在当前行开头处插入数据

A     在当前行末尾处插入数据

o     在当前行下面出入一行

O     在当前行上面插入一行
4.4 写入文件

常用命令:

:w                           将数据写入到原始文件

:w file                       将数据写入到指定文件

:w >> file                    将数据追加到指定文件

:r [filename]                 在编辑的数据中,读取另一个档案的数据,亦将档案内容加到游标所在行的后面

:n1,n2 w [filename]           将n1到n2的内容存储成另一个档案。
4.5 退出文件、停止vi

常用命令:

:q             退出文件

:q!            不保存数据,强制退出

:wq           保存退出文件

shift+ZZ      停止vi

ZQ            无条件退出
4.6 多档编辑

通常用法:语法:vi a.txt b.txt c.txt,切换文件: :next

:n      编辑下一个档案

:2n     编辑下两个档案

:N      编辑前一个档案

:e      在不离开当前vim窗口的情形下,在编辑其它档案

:e#     编辑前一个档案

:e!     放弃目前正在编辑的档案

:r      在游标所在处插入一个档案内容

:9r     将档案插入到9行之后

:f           显示当前正在编辑的档名,相当于^g

:f filename  改变编辑中的档名。

:files     列出目前buffer中的所有档案,相当于:ls 或 :buffers

:bn       移至下一个buffer

:bl       移至前一个buffer

:b 档名     移至该档名
4.7 vi与vim命令行常用选项
-b                  以二进制模式编辑文件

-c command          启动后立即运行给定的ex命令

-d                  以diff模式运行

-o[num]             启动vim时打开num个窗口

-O[num]             启动vim时打开num个水平排列

-r                  恢复模式

-R                  于只读模式中编辑文件

-t tag              编辑包含tag的文件,并将光标置于tag位置

-T type             设置可选终端类型

5. 视窗操作

5.1.常见用法:
$ vi -o file1.txt file2.txt     #水平分割

$ vi -O fiel.txt file2.txt   #垂直分割
5.2.vim视窗用法

视窗分割:

^w n       将视窗一分为二

^w p       等同:split,把当前窗口水平分割

:vsplit     把当前窗口垂直分割

^w s       打开一新视窗,且原档分属两个视窗

视窗关闭:

^w q         结束分割出来的视窗

:close       关闭当前窗口

视窗打开:

^w o          等同于:only,只显示当前的窗口,隐藏其它视窗

:all         打开所有窗口

:vertical all   垂直打开所有的窗口

:buffers      列出所有的当前窗口

:buffer 2      编辑第二个窗口  

视窗移动:

^w j      移至下视窗

^w k      移至上视窗

6. 光标移动、缓冲区移动、搜索移动、行号跳转]

移动和跳转

不论任何时候,光标必然位于屏幕的某一行上,这一行就称之为当前行
在当前行中,光标位于某个字符之上或者之下,这个字符就称之为当前字符
为了增强光标移动命令的功能,可以通过在命令前面键入一个数字来重复执行光标移动命令,这个数字称为重复次数

6.1 获取光标当前位置

获取方式:^G

6.2 缓冲区移动
^F      向下移动一屏

^B      向上移动一屏

n^F     向下移动n屏

n^B     向上移动n屏

^D      向下移动半屏

^U      向上移动半屏

n^D     向下移动n行

n^U     向上移动n行

^E      向屏幕顶端多滚动一行

^L      向屏幕底端多滚动一行

z**ENTER**      将光标所在的行移动到屏幕顶端

z.        将光标所在的行移动到屏幕中间


z-         将光标所在的行移动到屏幕底端
6.3 光标移动、单词句段移动

操作键说明:

h            将光标向左移动一个位置

j            将光标向下移动一个位置

k              将光标向上移动一个位置

l           将光标向右移动一个位置

-                  将光标移动到上一行的开头

+          将光标移动到下一行的开头

^                  将光标移动到当前行的第一个非空格/制表符的字符上

数字0               将光标移动到当前行的开始

$                  将光标移动到当前行的末尾

单词、句段移动

w W    将光标移动到下一个单词的词首(大写字母,略过空格)

e E    将光标移动到下一个单词的词尾(大写字母,略过空格)

b B    将光标移动到上一个单词的词首(大写字母,略过空格
)
)      向前移动到下一个句子

(      向后移动到上一个句子

{       向前移动到下一个段落

}       向后移动到上一个段落

H       将光标移动到屏幕顶部

M       将光标移动到屏幕中间

L       将光标移动到屏幕的最后一行

%       已匹配一个括号为目的的移动

说明
命令计数:在移动命令前加数字,如3j,可实现向下移动三行。
语法:

**n**command   (n为数字,command为移动命令)

规律:一个命令的大写字母形式会做同样的事情,但是方向相反。

6.4 搜索移动
fcharacter     单字符搜索移动(f为搜索命令,character为要搜索的字符)
Fcharacter   单字符左方向搜索移动
6.5 行号跳转
显示行号:     :set number
关闭行号:     :set nonumber

命令说明:

nG 、   :n 跳转到第n行
1G 、 gg  、 :1跳转到编辑缓冲区的第一行
G   、  :$ 跳转到编辑缓冲区最后一行

附加:
另一个移动到某行的办法是:在命令 **% **前加一个命令计数,如 50% 会把光标定位在文件中间。

6.6 跳转到前一位置

返回前一位置:

**``**  (两个反引号)
‘’       (两个单引号)
6.7 使用名称标示任意行,进行跳转

用不可见的名称标识任意行,当需要时使用此名称跳转到这一行。

可以键入m标示这一行,后跟一个字母,这个字母就是这一行的名称。
例如:用”b“标示这一行,可以键入b。为了跳转到这一行,可以键入一个反引号或单引号,后面跟这一行的名称。如````b’b```

7. 搜索

7.1搜索常用命令

向前搜索: /
向后搜索:

/            向前重复搜索
?             向后重复搜索
 /regex        向前搜索指定的正则表达式
?regex        向后搜索指定的正则表达式
n              重复上一条/或?命令,搜索方向相同
N              重复上一条/或?命令,搜索方向相反

附:

  命令历史记录:用上下箭头来查找用过的搜索
7.2查找字符串便捷方式

命令 : 将光标定位于字符串,按下键,vi将会取当前光标所在的字符串并将它作用目标字符串进行搜索。

命令: 与*相反。

%    搜索与当前花括号、圆括号、方括号成对的符号。
7.3 查找整个字符串

方法: 使用\< \>进行匹配。

例子:```/``

8. 文本改动(替换)

8.1替换之vi命令
r:      精确替换一个字符(不进入输入模式)。
R:      替换多个字符(以覆盖方式替换)。(先将光标移动到希望开始替换的位置,然后输入R。切换到输入模式,随后键入的每个字符都将替换当前行上的一个字符。)
s:      允许使用多个字符替换一个单个的字符(以插入方式替换)。
C:      允许替换从当前光标位置到本行末尾的所有字符。
S 或 cc:    以插入方式替换当前整行。
cmove:      以插入方式从当前光标处替换到move所给出的位置处。
8.2 替换之ex命令_常用方法

ex命令:

语法::s/pattern/replace/ 其中,pattern是替换的模式,replace是替换的文本。

使用方法总结:

:s/pattern/replace/            替换当前行

s/pattern/replace/g                替换当前行所有

:lines/pattern/raplace/            替换指定行

:line,lines/pattern/replace/     替换指定范围内的行

 :%s/pattern/replace/              替换所有行

 :.,$s/pattern/replace/g           从当前行末尾至编辑缓冲区的末尾进行相同的替换

:line,.s/pattern/replace/g       从编辑缓冲区的指定位置到当前行进行相同的替换

说明 :

  1. 所有的ex命令都以开头。
  2. :s只替换当前行上该模式的第一个匹配项。
  3. 为了替换所有匹配项,需在该命令的末尾键入字母g。例如::s/UNIX/linux/g
  4. 替换前进行确认,可在命令末尾添加c。例如::s/UNIX/linux/cg
  5. .点号代表当前行。$代表缓冲区最后一行。%代表编辑缓冲区内所有的行。
8.3 交换字符

交换两个字符的位置: xp
交换两行的位置:ddp
调换两个单词(光标开始处于第一个单词的左边):deep

9. 大小写转换

大小写帮助::h~
一些常用命令:

~          将光标下的字母改变大小写

3~         将光标位置开始的3个字母改变其大小写

g~~        改变当前行字母的大小写

U          将可视模式下选择的字母全改成大写字母

u          将可视模式下选择的字母全改成小写

gUU        将当前行的字母改成大写

3gUU       将从光标开始到下面3行字母改成大写

guu       将当前行的字母全改成小写

gUw       将光标下的单词改成大写。

guw       将光标下的单词改成小写。

10. 删除、撤销、恢复删除、复制删除

10.1 删除命令
x      删除当前光标处的字符

X      删除光标左边的字符

D      删除从当前光标到本行末尾的字符

J      删除两行之间的换行符 (亦可用于合并两行)

dmove  删除从当前光标到move所给位置的字符

dd     删除当前行

ex命令

:lined            删除指定行

:line,lined      删除指定范围内的行
10. 2 常用的删除组合命令

说明:操作符命令+位移命令

1      nx                          删除多个字符(n为删除的字符个数)       

2      dw                           删除1个单词

3      d10w                       删除10个单词

4      d10W                      删除10个单词,忽略标点符号。

5      db                           向后删除一个单词

6      d2)                        删除两个句子

7      d5}                           删除5个段落

8      dG 或 :.,$d                删除当前行到编辑缓冲区末尾的所有行

9      dgg 或 d1G 或:1,.d           删除当前行到编辑缓冲区开头的所有行

10    :1,$d 或 :%f                     删除整个编辑缓冲区

11    d/word                             删除从光标所在位置到单词word的所有文本  

12    .,/word/d                   删除从光标所在位置到单词word的所有文本

13    df x                          删除至当前行中x所在的位置

14    d^                            删除至该行的开始处

15  :g/^$/d                删除文件中所有空行
10.3插入模式中删除操作
^U                         删除当前行

^H                         删除前一个字符

^W                        删除前一个词
10.4 撤销或重复改变

vi命令:

1      u                        撤销上一命令对编辑缓冲区的修改

2      U                        恢复当前行(即一次撤销对当前行的全部操作)

3      .点号                    重复上一命令对编辑缓冲区的修改
10.5 恢复删除

语法:"1p(P)

说明:

  1. 1为缓冲区的编号。

  2. p在当前行的下面插入,P在当前行的上面插入。

10.6 复制上一次删除

命令

说明

p    复制上一次删除的内容,插入到光标的后面/下面

P    复制上一次删除的内容,插入到光标的前面/上面
10.7其它有用的一些删除
删除行尾多个空格 :   :%s/\s\+$//g

删除行首多个空格 :   :%s/^\s*//g

删除重复行:           :%s/^(.*)n1/1$/

删除所有中文:    :%s/\v[^\x00-\xff]+//g

删除所有数字:    :%s/\d//g

11.接出复制

当在不删除文本的情况下将文本复制到无名缓冲区时,称为接出(yank)。(因此将命令命名为y、yy、Y)。

小提示: 可使用大写V选择一行文本。

11.1 接出(复制单词、句子、段落)

步骤

  1. 使用y、yy、Y将文本由编辑缓冲区复制到无名缓冲区中,但不删除原始文本。
  2. 将光标移动到希望插入文本的位置。
  3. 使用P或p命令执行插入。

常用命令


yw      接出一个单词

y10w      接出10个单词

y10W      接出10个单词,忽略标点符号

yb      向后接出一个单词

y2)    接出两个句子

y2}      接出5个段落

yy      接出一行

10yy      接出10行

y$      接出从当前字符到本行末尾的的文本

y0      接出从当前字符到这一行开头之间的文本
11.2 复制与移动行

语法:

   :x,ycoz

   :x,ymz

说明:

1 x,y,z都是行号。x,y是源行,z是目标行号。

2 源行x,y被复制或移动,插入到z行的下面。

3 :m删除原始行,:co不删除原始行。

例子:

:2co4            复制第2行,插入到第4行下面

:2,4co8            复制第2行到第4行,插入到第8行下面

:2m4              移动第2行,插入到第4行下面

:2,4m8             移动第2行到第4行,插入到第8行下面。

12. 文本重排

12.1.查看目前的设定值
  :set shiftwidth
12.2.简单的重排
  gqq        本行重排

  :ce(nter)     本行文字居中

  :ri(ght)      本行文字靠右

  :le(ft)      本行文字靠左

  shift + >      整行向右移动一个

  shift + <      整行向左移动一个
12.3.重排段落
  命令:  gqip
12.4.全文重排
  命令:  gqQ
12.5.设置行间距
  命令:  set linespace

13. 正则表达式

中介字元:

\s  表示空白字元,即
\S  表示非空白字元
\d  表示数字字元,即[0-9]
\D  便是非数字字元,即[^0-9]
\w  表示一般字元,即[0-9a-zA-Z]
\W  表示非一般字元,即[^0-9a-zA-Z]
\a  表示英文字母,即[a-zA-Z]
\A  表示非英文字母,即[^a-zA-Z]
\l  表示小写字母,即[a-z]
\L  表示非小写字母,即[^a-z]
\u  表示大写字母,即[A-Z]
\U  表示非大写字母,即[^A-Z]

vim正则表达式:
http://www.softpanorama.org/Editors/Vimorama/vim_regular_expressions.shtm

14. 加密

文件加密  X(大写)

15. 缩写

要为经常使用的单词或表达式创建缩写,可使用:ab命令。

  1. 创建缩写,语法::ab [ short long ]  short是缩写,long是缩写的原文。
  2. 删除缩写,语法: :una short

16. vim-shell命令

16.1 执行shell命令
:!command      暂停vi,执行制定的shell命令

:!! pause vi      执行上一条shell命令

:sh              暂停vi,启动一个新的shell

:!csh           暂停vi,启动一个新的c-shell
16.2 使用shell命令处理数据
n!! command          对n行数据执行command

!move command    对当前光标至move所指定的位置的数据执行command

!move fmt              格式化当前光标到move所指定的行

17. 显示与设置选项

17.1 显示选项
语法:  set [option]

显示所有选项的值: :set all

显示一个选项的值: :set option?
17.2 设置选项

语法::set [no]option..... :set option[=value]...

17.3常用设置命令
设置行号显示与否:             简写 :set nu  / :set no nu
设置自动缩进:                    简写 :set ai / :set no ai
设置缩进宽度:                    简写 :set sw=4
设置大小写忽略与否:          简写 :set ic / :set no ic
17.4 tab和空格替换

设置tab=4个空格

set ts=4
set expandtab
set autoindent

修改文件中的tab=4:

set ts=4
set expandtab
:%retab!

18. 初始化文件与配置文件

18.1 初始化文件

vi的初始化文件:.exrc
vim的初始化文件:vimrc

18.2 配置文件

linux配置文件: /usr/share/vim/vimrc
查找Windows配置文件: scriptnames

19. 参考资料

  1. vim configuration file资料:http://vim.wikia.com/wiki/Open_vimrc_file
  2. vim配置文件:http://amix.dk/vim/vimrc.html
  3. 史上最强vim配置文件:http://blog.csdn.net/redguardtoo/article/details/1172136

你可能感兴趣的:(Vim参考)