您的位置:首页 > 其它

ubuntu 中vim的安装与使用

2014-04-27 20:05 148 查看
来自:http://m.blog.csdn.net/blog/diyoosjtu/7459008

一、安装 vim

控制台版本的vim随ubuntu一起发行,因此没必要安装. 然而,如果您更喜欢GUI界面下的vim的话,请安装vim-gtk软件包,有以下两种方法:

1、在Ubuntu Software Center中搜索vim-gtk,并安装 Vi IMproved - enhanced vi editor - with GTK2 GUI

2、在终端中输入 sudo apt-get install vim-gtk

二、快速指南

Vim 需要学习很多东西。然而,如果您熟悉了vim的话,您可以利用vim的高级特征非常熟练的操作文本。

您可以在终端中输入vim来启动控制台模式下的vim,或输入gvim 来启动图形模式下的vim. 输入之后会出现带vim信息的一个空白屏幕。然而,在该状态下输入任何文本都会失败!因此下面将介绍很多初学者都会混淆的特征 - 模式:

1、模式

Vim最令人混淆的特征之一是她拥有3种模式.

插入模式

输入文本

编辑模式

执行命令,也称为正常模式。

命令模式,执行 冒号 命令

插入模式并不是缺省的模式,您必须按下 i 来进入插入模式,在屏幕上输入一些文字。按下<Esc>按钮将从插入模式转到编辑模式。该模式用于移动和操纵文本,有时以非常有趣的方式进行。
命令模式用于执行冒号命令,比如保存,查找/替换以及配置vim等。欲保存文本,您只需要在正常模式下输入:进入命令模式并输入:w filename<Enter>.退出vim请执行冒号命令:q.总结如下:

vim (启动vim)

i (进入插入模式)

<输入文本>

<Esc> (回到编辑模式)

:w filename (保存文件为'filename')

:q (退出vim)

vim filename (打开您刚才在vim中保存的文件)

请记住,最好的学习vim的方式是使用她.您可以通过内置的vim教程来学习vim的基本使用,只需要在终端中输入vimtutor (有的系统中可能是vim-tutor).

2、用vim编辑docbook文档

为了将文章提交到Ubuntu文档组织,您需要使用docbook格式。您可能会对VIM 文件类型插件xmledit感兴趣。

添加如下内容至 ~/.vimrc

map! ,e <emphasis>

map! ,p <para>

map <F3> v/>^Mx

如果光标位于打开的XML标记的顶部,您可以按下F3将标记的内容剪切到缓冲区。移动光标至本节的底部并按下 'p' (=粘贴)刚复制的内容就会出现在当前字符后面。

这样对于给已经些好的文档添加标记是非常有用的。其典型用途是在需要时给从网页上复制/粘贴的文档添加格式。

3、在线资源

您可以在如下页面中找到关于vim的有用的信息

Vim主页可用于查找相关脚本的插件。The tips section has a RSS feed which gives many useful tips about vim。

Vim有用的技巧提供了有效使用vim的相关技巧。

Vim的作者, Bram Moolenaar 写了一篇文章Seven habits of effective text editing

Vim文档是关于vim的文档的集中地。您可以在那里下载Vim使用手册以及Vim Book。

4、vi命令

进入vi的命令

vi filename :打开或新建文件,并将光标置于第一行首

vi +n filename :打开文件,并将光标置于第n行首

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

vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处

vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename

vi filename....filename :打开多个文件,依次进行编辑

移动光标类命令

h :光标左移一个字符

l :光标右移一个字符

space:光标右移一个字符

Backspace:光标左移一个字符

k或Ctrl+p:光标上移一行

j或Ctrl+n :光标下移一行

Enter :光标下移一行

w或W :光标右移一个字至字首

b或B :光标左移一个字至字首

e或E :光标右移一个字至字尾

) :光标移至句尾

( :光标移至句首

}:光标移至段落开头

{:光标移至段落结尾

nG:光标移至第n行首

n+:光标下移n行

n-:光标上移n行

n$:光标移至第n行尾

H :光标移至屏幕顶行

M :光标移至屏幕中间行

L :光标移至屏幕最后行

0:(注意是数字零)光标移至当前行首

$:光标移至当前行尾

屏幕翻滚类命令

Ctrl+u:向文件首翻半屏

Ctrl+d:向文件尾翻半屏

Ctrl+f:向文件尾翻一屏

Ctrl+b;向文件首翻一屏

nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

插入文本类命令

i :在光标前

I :在当前行首

a:光标后

A:在当前行尾

o:在当前行之下新开一行

O:在当前行之上新开一行

r:替换当前字符

R:替换当前字符及其后的字符,直至按ESC键

s:从当前光标位置处开始,以输入的文本替代指定数目的字符

S:删除指定数目的行,并以所输入文本代替之

ncw或nCW:修改指定数目的字

nCC:修改指定数目的行

删除命令

ndw或ndW:删除光标处开始及其后的n-1个字

do:删至行首

d$:删至行尾

ndd:删除当前行及其后n-1行

x或X:删除一个字符,x删除光标后的,而X删除光标前的

Ctrl+u:删除输入方式下所输入的文本

搜索及替换命令

/pattern:从光标开始处向文件尾搜索pattern

?pattern:从光标开始处向文件首搜索pattern

n:在同一方向重复上一次搜索命令

N:在反方向上重复上一次搜索命令

:s/p1/p2/g:将当前行中所有p1均用p2替代

:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代

:g/p1/s//p2/g:将文件中所有p1均用p2替换

选项设置

all:列出所有选项设置情况

term:设置终端类型

ignorance:在搜索中忽略大小写

list:显示制表位(Ctrl+I)和行尾标志($)

number:显示行号

report:显示由面向行的命令修改过的数目

terse:显示简短的警告信息

warn:在转到别的文件时若没保存当前文件则显示NO write信息

nomagic:允许在搜索模式中,使用前面不带“/”的特殊字符

nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始

mesg:允许vi显示其他用户用write写到自己终端上的信息

最后行方式命令

:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下

:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下

:n1,n2 d :将n1行到n2行之间的内容删除

:w :保存当前文件

:e filename:打开文件filename进行编辑

:x:保存当前文件并退出

:q:退出vi

:q!:不保存文件并退出vi

:!command:执行shell命令command

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

:r!command:将命令command的输出结果放到当前行

寄存器操作

"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字

"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字

"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字

"?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字

ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。

5、vim技巧

Abstract: vim使用—移动到文件开始和结束位置和当前位置(gg,G)、快速定位到当前光标所在变量或函数的定义处(gd)、自动对齐C和C++程序(先gg再=再G)、自动补全变量名,函数名和字符串ctrl+n或ctrl+p、复制(yy,nyy,ctrl+v配合y)、粘贴(p,P)、删除(dd,ndd,ctrl+v配合d,x)、撤销(u,ctrl+r)、查找(/string配合n或N)、查看匹配的另外一半符号(%)。

1、将光标移动到文件的开始位置或结束位置:

gg 将光标移动到文件的开始位置。

G 将光标移动到文件的最后一行。

对当前行做标记,例如ma,即标记当前行为a行,mb,即标记当前行为b行,mc,即...等等。

要回到a行使用'a。要回到b行使用'b。

1.1 vim中快速定位到当前光标所在变量或函数处:

gd

1.2 vim中进行C和C++源码对齐操作:

gg+=+G

//先gg跳转到文件开始位置,再输入=,再输入G,vim将自动进行C和C++源码的对齐操作。

1.3 vim中删除字符,并进入插入模式,修改为想要的字符串:

/要删除的字符 cw 使用/要删除的字符,找到字符,然后cw,就删除了,然后修改为想要的字符串。

然后n,进入下一个字符,然后"."就可以重复上面的操作。

cnw 是删除n个字符,并进入插入模式。

例如:

将所有的four替换为five,方法为:

/four 找到four

cw 删除four,并进入插入模式。

five 输入five

n 找到下一个four (首先用ESC进入命令行模式)

. 重复上面的操作

这样就可以完成将所有的four替换为five。

1.4 vim中进行变量名,函数名和字符串补全操作:

在linux下编写c语言程序,命名规范要求变量名,函数名是用“_”将单词分隔开的。

比如:

int value_name = 5;

采用这种方法的好处在于vim进行匹配时,比较方便。

在vim中使用ctrl+n 或 ctrl+p进行匹配。

当输入value_使用ctrl+n或者ctrl+p能够将后面的部分自动匹配。

可以实验一下,那种方式更适合我们。

2、vim中“上下左右”移动光标:

h 将光标向左移动。

j 将光标向下移动。

k 将光标向上移动。

l 将光标向右移动。

3、vim复制:

复制字符串:

ctrl+v配合“上下左右”键,选中字符串,使用y进行复制。

复制n个单词:

y+number+w

复制一行:

yy

复制n行:

nyy

复制一块:

ctrl+v 配合“上下左右”键,选中指定块,使用y进行复制。

4、vim粘贴:

在vim中使用p 或 P进行粘贴。

5、vim删除:

字符及字符串的删除:

删除一个字符,使用x。

删除多个字符,使用ctrl+v进入可视模式,然后移动键盘上的“上下左右”键,将要删除的字符串选中,然后使用d就删除了。

行及多行,块的删除:

删除一行,使用dd;

删除n行,使用ndd;

删除不知道多少行,首先使用ctrl+v进入可视模式,然后移动键盘上的“上下左右”键,将要删除的行选中,然后使用d就删除了。

6、vim撤销:

vim中的撤销有两种,一种是向左撤销,一种是向右撤销。(即相当于word中的一个向左的箭头和一个向右的箭头)



比如我们刚删除了一行,想将其回复,使用u就可以,恢复后又想删除,使用ctrl+r就可以。

7、vim查找:

a、查找第几行,在命令行中输入:number+enter就可以将光标移动到指定的行。

b、查找某个字符串,在命令行中输入:/string,光标就移动到第一个出现string的行,当输入n,光标将移动到下一处出现string的行,再输入n,将继续向下找,当找到最后一个string所出现的行,再输出n时,就回到第一次出现string的行。

(/string查找指定字符串,n从开始向结束,即向下。N从结束向开始,即向上)

当在命令行输入:/string时,光标将移动到最后一个出现string的行,当输入N,光标将移动到最后一次出现string的行,继续输入N,将继续向上一次出现string的行移动。



8、vim进入头文件,从头文件中返回:

进入头文件:

将光标移动到指定的头文件中,在命令行中键入gf就进入指定的头文件中。

返回原文件:

当对头文件编辑结束后,键入ctrl+^就返回到原文件中。

9、查看与当前符号匹配的另外一半符号 // "" 或者''或者()或者[ ]或者{}等匹配出现的符号。

在vim中使用%可以匹配另外一半符号出现的位置。

void fun(int argc,char *argv)

{

//代码

}

当我们将光标放在第一个大括号哪里,想找到另外一个与之匹配的大括号时,使用%。就可以了。

6、vim复制,粘贴,删除,撤销,替换,光标移动等用法

我接触linux的时候,用的是nano这个文本编辑器,个人觉得他的最大优点就是方便,快速。打开文件,修改文件,到退出都十分的快速,简单。这一点上比vi,vim要强,但是nano不能显示彩色字,不能进行整行删除,编辑各种配置文件的时候,总感觉不是很方便。针对于nano的这些缺点,vim可以很好的解决,并且vim打开文件,里面的字是有颜色的,这一点根editplus,eclipse是一样的,对于做程序的来说,就比较爽了。下面的操作,都是命令状态下进行的,不要进入插入状态了,如果进入了插入状态,[Esc]退出输入状态

一,光标移动

大家不要觉得光标移动不重要,其实它是基础,更好的光标移动,复制,粘贴,删除等才能更加的得心应手,进入了编辑器里面后,鼠标就不能用了。

光标移动
h 或 向左箭头键(←)

20h或者20(←)
光标向左移动一个字符

光标向左移动20个字符,
j 或 向下箭头键(↓)

20j或者20(↓)
光标向下移动一行

光标向下移动20行,
k 或 向上箭头键(↑)

20k或者20(↑)
光标向上移动一行

光标向上移动20行,
l 或 向右箭头键(→)

20l或者20(→)
光标向右移动一个字符

光标向右移动20字符,
在这里要注意一点的是,不要用小键盘输入数字,不然就会直接输入模式了.个人觉得掌握上面的这些,基本上能满足我们对光标移动的要求了,看下图





vim

我们可以根据编辑器右下角的数字来判断,我们要跳转到哪一行,如果想更精确的话,:set
nu 设置一下环境变量,让它显示行号是最好的

Ctrl + f屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
Ctrl + b屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
Ctrl + d屏幕『向下』移动半页
Ctrl + u屏幕『向上』移动半页
Ctrl + e屏幕『向下』移动一行
Ctrl + y屏幕『向上』移动一行
+光标移动到非空格符的下一列
-光标移动到非空格符的上一列
n<space>那个 n 表示『数字』,按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。
n<Enter>n 为数字。光标向下移动 n 行(常用)
0 或功能键[Home]这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End]移动到这一行的最后面字符处(常用),这里的$在正则里面表示是结尾的意思,这样理解一下就能记住
H光标移动到这个屏幕的最上方那一行的第一个字符,H你就把它记成是header的缩写,这样就好记了
M光标移动到这个屏幕的中夬那一行的第一个字符,M你就把它记成middle的缩写
L光标移动到这个屏幕的最下方那一行的第一个字符,L你就把它记成last的缩写
G移动到这个档案的最后一行(常用)
nGn 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行
gg移动到这个档案的第一行,相当于 1G 啊! (常用)
二,删除,复制,粘贴,撤销

删除,复制,粘贴,撤销
x, X在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx

nX
n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除光标后 10 个字符, 『10x』。

n 为数字,连续删除光标前面的 n 个字符。举例来说,我要连续删除光标前的 10 个字符, 『10X』。
dd

yy
删除光标所在的那一整行(常用),

复制光标所在的那一行(常用)
ndd

nyy
n 为数字。删除光标所在行向下 n 行,例如 20dd 则是删除 20 行(常用)

n 为数字。复制光标所在行向下 n 行,例如 20yy 则是复制 20 行(常用)
d1G

y1G
删除光标所在行到第一行的所有数据

复制光标所在行到第一行的所有数据
dG

yG
删除光标所在行到最后一行的所有数据

复制光标所在行到最后一行的所有数据
d$

y$
删除光标所在处,到该行的最后一个字符

复制光标所在的那个字符到该行行尾的所有数据
d0

y0
那个是数字的 0 ,删除光标所在处,到该行的最前面一个字符

复制光标所在的那个字符到该行行首的所有数据
p, Pp将复制的数据,粘贴在光标的下一行,P将复制的数据,粘贴到光标的上一行
J将光标所在行不下一行的数据结合成同一行
c重复删除多个数据,可以通过上下键来决定删除光标上面的,还是下面的
u撤销。(常用)
Ctrl + r撤销的撤销。(常用)
三,区块选择,查找,替换

区块选择,查找,替换
v字符选择,会将光标经过的地方反白选择!
V行选择,会将光标经过的行反白选择!
Ctrl + v区块选择,可以用长方形的方式选择资料
y将反白的地方复制起来
d将反白的地方删除掉




v或者V





ctrl+v

从上面可以看出,v和V主要的是进行,行选择,而Ctrl+v是进行的列选择,从灵活性上来说,ctrl+v更加的灵活一点。
/string

?string
向光标之下寻找一个名称为string字符串

向光标之上寻找一个名称为string字符串
n

N
正向查找,搜索出的string,可以理解成next

反向查找,搜索出的string,可以理解成Not next




find

为了说明,n和N的区别,作了个例子,看左图,左图是搜索ddd所产生的结果,黄底黑字就是搜索的结果,这个时候,我们可以按n或者N,在这4个搜索区块内,进行切换.

n的顺序是12341234

N的顺序是43214321

总之一句话,n是从上到下,N是从下到上
:n1,n2s/string1/string2/g这里的n1是查找的开始行数,n2是查找结束的行数。【:2,7s/ddd/fff/g】在第2行,第7行之间,将ddd替换成fff
:1,$s/string1/string2/g从第一行到最后一行寻找 string1 字符串,并将该字符串替换为 string2 !(常用)
:1,$s/string1/string2/gc从第一行到最后一行寻找 string1 字符串,并将该字符串替换为 string2 !且在替换前显示提示字符给用户确认 (confirm) 是否需要替换!(常用)
四,保存,退出,环境变量

保存,退出,环境变量
:w

:w!
将编辑的数据写入硬盘档案中(常用)

若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q

:q!
离开 vi (常用)

若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
:wq

:wq!
储存后离开

强制储存后离开
ZZ这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
:w [filename]另存为
:r [filename]在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到光标所在行后面
:! command暂时离开 vi 到指令列模式下执行 command 的显示结果!例如 『:! cat ./test』即可在 vi 当中察看当前文件夹中的test文件中的内容
i,I,a,A,o,O,r,R进入插入模式,虽然有不同之处,感觉差别不大,就放在一起了
Esc退出插入模式,进入命令模式
:set nu显示行号,设定之后,会在每一行的前缀显示该行的行号,这一点,非常有用,当我们修改配置文件的时候,能知道多少行,就方便多了。
:set nonu与 set nu 相反,取消行号
五,小结

个人觉得,上面的操作能满足,80%--90%的人的需要,如果对多文件进行操作,我想各种开发工具,要比vim更加的方便.

7、vim分屏

水平切割:

:split

:split xxx(要打开的文件名)

:new(在新窗口创建文件)

<CTRL+W> k:跳转到上面的窗口 (若为大写K,则是把当前窗口调至上方)

<CTRL+W> j:跳转到下面的窗口 (类似于上)

垂直切割:

:vsplit

:vsplit xxx(要打开的文件名)

:vnew(在新窗口创建文件)

:only 取消分屏

<CTRL+W> h:跳转到左边的窗口 (若为大写H,则是把当前窗口调至左方)

<CTRL+W> l:跳转到右边的窗口 (类似于上)

<CTRL+W> w:在窗口之间跳转

<CTRL+W> +:扩大窗口 (或在当前窗口位置,输入命令:res +9)

<CTRL+W> -:缩小窗口

在一个窗口下,打开3个文件。

先 打开一个,vim 文件名 (记住一定是vim啊!)

然后在vi的命令输入状态下输入

:sp 另外一个文件的路径及文件名

如此就可以在一个窗口打开3个文件了。

可以使用 ctrl + 两次按 w

在3个文件中切换

在文件之间切换:

1.文件间切换

Ctrl+6—下一个文件

:bn—下一个文件

:bp—上一个文件

8、vi/vim 详解

[语法]:vi [-wn] [-R] 文件...

[说明]: vi 是一个基于行编辑器 ex 上的全屏幕编辑器,可以在vi 中使用 ex,ed的全部命令,vi选项中 -wn 指将编辑窗口大小置为n行,-R 为将编辑的文件置为只读模式, vi 工作模式分为命令模式和输入模式,一般情况下在命令模式下,可敲入vi命令,进入输入模式下时可以编辑要编辑的文本,命令 a A i I o O c C s S R 可进入输入模式,在输入模式下按 ESC 键可推出输入模式,回到命令模式,在命令模式中敲入: 命令,则可进入ex方式,在屏幕底部出现提示符 : ,此时可使用任意ex命令,屏幕底行也用来作/
? ! 命令的提示行,大多数命令可以在其前面加数字,表示命令执行的重复次数,下面简单介绍一下vi 的命令集,^ 表示(CTRL)键

^B 退回前一页,前面加数字表示重复次数,每次换页时

保留上一页的两行

^D 在命令模式下,表示下滚屏幕的一半,在输入模式下,表示回退至

左边的自动缩进处

^E 显示屏幕底线之下的一行

^F 前进一页,前面加数字表示重复次数,每次换页时

保留上一页的两行

^G 显示当前文件名,当前行号和文件总行数,并用百分号当前行在

整个文件中的位置

^H(退格) 在命令模式下,光标左移一格;在输入模式下,删去前面的字符

^I(TAB) 在输入模式下,产生一串空格

^J(LF) 光标下移一行

^L 刷新屏幕,即将屏幕重新显示

^M(回车) 在命令模式下,光标移动至下行开头

在输入模式下,开辟一新行

^N 光标下移一行

^P 光标上移一行

^Q 在输入模式下,将其后的非打印字符作为正文插入

^R 刷新屏幕

^U 屏幕上滚一半,前面加数字时表示上滚的行数,此数字对

以后的^D ^U 命令有效

^V 在输入模式下,将其后的非打印字符作为正文插入

^W 在输入模式下,使光标回退一个字

^Y 显示屏幕底线之上的一行

^Z 暂停编辑,退回上层Shell

^[(ESC) 退出输入模式,回到命令模式

! 暂时退出编辑,执行Shell命令

(双引号) 用于标志有名缓冲区,编号缓冲区1-9用于保存被删去的正文,字

母名缓冲区a-z供用户存放自定义的正文

$ 将光标移动到当前行尾,前加数字则表示前移行数,如2$表示移动

到下一行行尾

% 将光标移动到配对的小括号()或大括号{}上去

( 退回句子开头

) 前移到句子开头

- 退到上一行第一个非空格字符

. 重复上一次改变缓冲区内容的命令

/ 模式 向前搜索模式,将光标移动到模式出现处,模式是一个正规

表达式,(参看 grep)

: 在屏幕底部提示:,其后可使用ex命令

? 功能同 / ,但方向是向前查找

[[ 光标回退至前一节分界处

转意符

]] 光标前移至节分界处

^(不是CTRL) 光标移至当前行第一个非空字符上

' 连续两个''表示将光标移至其移动前的位置,'后跟字母表示光标字

母标记的行首(参看 m 命令)

A 在行尾插入正文,进入输入模式

B 光标回退一个字

C 替换光标后的内容

D 删除光标后的内容

E 光标前移到字尾

F 字符 在当前行向左查找指定字符

G 光标移动到其前面数字指定的行,若未指定则移动到最后一行

H 光标移动到屏幕顶行,若前面有数字,则移动到屏幕上该数字

指定的行

I 在行开头插入正文

J 连接两行,若前面有数字则连接数字指定的行

L 光标移动到屏幕底行,若前面有数字,则移动到屏幕底线往上数该

数字指定的行

M 光标移动到屏幕中线

N 使用模式查找/或?时,重复找下一个匹配的模式,但方向与上次相

反,其功能同 n ,但方向相反

O 在当前行上开辟一新行

P 将上次被删除的正文插入光标前面,可在其前面加缓冲区编号,编

号1-9用于保存被删去的正文,字母名缓冲区a-z供用户存放自定

义的正文

Q 从vi 推出进入ex命令状态

R 替换字符串

S 替换整行

T 字符 向左查找字符

U 将当前行恢复至第一次修改前的状态

W 光标移至下一个字首

X 删除光标前的字符

Y 将当前行存入无名缓冲区,前面加数字表示存入的行数,也可用有

名缓冲区来保存,以后可用命令p或P将其取出

ZZ 存盘退出vi

a 光标后插入正文

b 光标回退至上一个字首

cw 替换当前字

c) 替换当前句子

dw 删除一个字

dd 删除一行

e 光标移到下一个字末

f 字符 在当前行向前查找字符

h 光标左移一格

i 在光标前插入正文

j 光标下移一行

k 光标上移一行

l 光标右移一格

m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,

(参看'命令)

n 重复上次 / 或 ? 命令

o 在当前行下开辟一新行

p 将用户缓冲区内容放到光标位置(参看P命令)

r 替换当前字符

s 用一串字符替换当前字符

t 字符 光标移动至字符前

u 取消上次操作

w 光标移至下一字首

x 删除当前字符

yw 将当前字存入无名缓冲区,前面可加x,表示存入名字为x的有名

缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命

令取出

yy 将当前行存入无名缓冲区,用法参看yw

{ 光标移动至前一段开头

| 光标移至行首,若前面加数字,则移到数字指定行的行首

} 光标移至下一段开头

在:提示符下,常用命令如下:

:w 当前文件存盘

:w! 强制存盘

:w 文件 将内容写入指定文件

:w! 文件 强制写入指定文件

:x,y w 文件 将 x至 y 行写入指定文件中

:r 文件 将文件读到光标位置

:r ! 命令 将系统命令的输出读到光标位置

:q 退出编辑

:q! 强制退出

:x 与命令ZZ相同

:e 文件名 编辑另一文件

:e ! 重新编辑文件,放弃任何改变

:sh 执行sh,结束后回到编辑

:! 命令 执行命令后回到编辑

:n 编辑下一文件

:n 文件表 重新定义待编辑文件表

:set 设置 vi 的选项,例如 set nu 表示每行前显示行号,在选项前

加no则表示清除该选项,例如 set nonu 表示每行前不显示行

号,下面是一些常用的选项:

ai 自动缩进

aw 编辑下一文件前自动存盘

ic 查找字符串时不区分大小写

nu 每行前显示行号

sm 输入)及}时显示与之配对的( 或 {

slow 插入时延迟屏幕刷新

ws 使查找能绕过文件尾从头进行

wa 写文件之前不作对文件的检查

=================================================================

vi(Visual)是以视觉为导向的全屏幕编辑器、共分为三种方式(mode):

command方式:

任何输入都会作为编辑命令,而不会出现在屏幕上,若输入错误则有“岬”的声音;任何输入

都引起立即反映

insert方式:

任何输入的数据都置于编辑寄存器。在command方式下输入(I,a,A等),可进入insert方式,  insert方式下按ESC,可跳回command方式。

escape方式:

以“:”或者“/”为前导的指令,出现在屏幕的最下一行,任何输入都被当成特别指令。

进入vi(在系统提示符下面输入以下指令):

vi           进入vi而不读入任何文件

vi filename      进入vi并读入指定名称的文件(新、旧文件均可)。

vi +n filename    进入vi并且由文件的第几行开始。

vi +filename      进入vi并且由文件的最后一行开始。

vi + /word filename  进入vi并且由文件的word这个字开始。

vi filename(s)     进入vi并且将各指定文件列入名单内,第一个文件先读入。

vedit         进入vi并且在输入方式时会在状态行显示“INSERT MODE"。

编辑数个文件(利用vi filename(s))进入vi后)

:args         显示编辑名单中的各个文件名

:n          读入编辑名单中的下一个文件

:rew         读入编辑名单中的第一个文件

:e#          读入编辑名单内的前一个文件

:e file        读入另一个文件进vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则           应先以: w 存档。

:e! file       强迫读入另一个文件进入vi,原文件不作存档动作。

存储及退出vi

:w filename      存入指定文件,但未退出vi(若未指定文件名则为当前工作的文件名)。

:wq 或者 :x或者zz   存文件,并且退出vi.

:q          不作任何修改并退出vi。

:q!          放弃任何修改并退出vi。

:!command       暂时退出vi并执行shell指令,执行完毕后再回到vi。

:sh          暂时退出vi到系统下,结束时按Ctrl + d则回到vi。

加数据指令

i           在关标位置开始插入字符,结束时候按ESC键。

I           在光标所在行的最前面开始加字,结束时按ESC键。

a           在光标位置后开始加字,结束时按ESC键。

A           在光标所在行的最后面开始加字,结束时按ESC键。

o           在光标下加一空白行并开始加字,结束时按ESC键。

O           在光标上加一空白行并开始加字,结束时按ESC键。

!command       执行shell指令,并把结果加在光标所在行的下一行。

删除指令

nx          删除由光标位置起始的n个字符(含光标位置,按一个x表示删除光标所在的字符)

nX           删除由光标位置起始的n个字符(不含光标位置)。

ndw          删除光标位置其实的n个字符组(word)。

d0           将行的开始到光标位置的字符全部删除。

d$ 或D         将光标位置起始到行尾的字符全部删除。

ndd          将光标位置起始的n行(整行)删除(dd表示删除光标所在行)。

:start,endd      删除文件的第start到end行。

关标移动

0           移到一行的开始

$           移到一行的最后

[           移到文件开始位置

]           移到文件结束位置

nh          往左移n位

nl或者spacebar     往右移n位

nk          向上移n行

n+          向上移n行,光标在该行的起始

ni           向下移n行

n-          向下移n行,光标在该行的起始

H           移到屏幕的左上角

M           移到屏幕的中间行开头

L           移到屏幕的最后一行

G           移到文件的最后一行

nG或者:n       移到文件的第n行

nw          右移n个字组,标点符号属于字组

nW          右移n个字组,标点符号不属于字组

nb          左移n个字组,标点符号属于字组

nB          左移n个字组,标点符号不属于字组

Ctrl + u       屏幕上卷半个菜单

Ctrl + d        屏幕下卷半个菜单

Ctrl + b        屏幕上卷一个菜单

Ctrl + F        屏幕下卷一个菜单

修改指令

r           修改光标文件的字符

R           从光标位置开始修改,结束时按ESC键

new          更改n组字符,结束时按ESC键

ncc          从光标所在位置开始更改n行,结束时按ESC键

重排各行长度

i           并按Enter将该行由光标所在处断开,并进入insert方式

J           把下一行的数据连接到本行之后

寻找指令

/text         从光标位置往下找字串text

?text         从光标位置往上找字串text

n           继续找下一个字串(在输入上面的寻找指令之后使用)

寻找并且取代指令

:getxt1/s/ /text2/options   将各行的text1替换为text2

option=g表示文件中所有的text1均被取代,若未输入任何option,则只有               各行中的第一个出现的text1被取代

option=go 在屏幕显示各取代的行

option=gc 在每个字串取代之前要求确认 

Start,endgtext1/s/ / text2/options  同上,只寻找并取代第start~end行。

或:Start,ends/text1/text2/options

复制及移动文件

:first,last co dest      将first 到last行的数据复制到目标行(dest)下面

:Start,end m dest      将start 到 end行的数据移动到目标行(dest)下。   

:r filename          将指定文件的内容读入光标所在行下。

nY               将光标所在位置开始的n行数据暂存

p               复制暂存数据在光标的下一行

P               复制暂存数据在光标的上一行

其他命令

.               重复前一指令

u               取消前一指令

Ctrl + l           刷新屏幕显示

:set number          显示文件的行号,但不会存文件

:set nonumber         解除行号显示

:set ai            设置每行起始位置(以光标当前位置为起始)

:set noai           取消行起始位置设定

:f 或<Ctrl> + g        告诉用户有关现行编辑文件的数据。=================================================================

Last line mode:

/exp Go forward to exp

?exp Go backward to exp

:w Write buffer to disk

:w newfile Write buffer to newfile

:w! file Write Absolutely

:q Quit editor

:q! Quit,discarding buffer

:wq Write buffer and quit

:x Write if needed & quit

:f Edit & file status

:r Read file into buffer

:r file Read named file in

:e (Re)edit file

:e! (Re)edit,discard file in

:e file Edit nameed file

:3,8d Delete lines 3-8

:4,9m 12 Move lines 4-9 to 12

:2,5t 13 Copy lines 2-5 to 13

:5,9w file Write lines 5-9 to file

:s/old/new/ Current line,sub first "old" w/ "new"

:s/old/new/g Current line,sub each "old" w/ "new"

:3,9s/old/new Lines 3-9,sub first "old" w/ "new"

:%s/old/new All lines,sub first "old" w/ "new"

:%s/old/new/g All lines,sub each "old" w/ "new"

:s/pat./new A . matches any charcter

:s/pat*/new A * matches 0 or more "t"s

:s/pa[0-9aeioA-Z]/new selection set or range

:s/pa[^aeiou]/new match any non-vowel

:s/^pat/new anchor "par" to beginning of line

:s/pats/new anchor "par" to end of line

:s/old/& and new/ restoe matched pattern on sub

:%s/./ &/ indenta whoie file

:set nu Display line numbers

:set nonu Turn off option

:set all Show all settings

:set list Try to display invisible chars

:set wm=5 Wrap lines 5 sp from R margin

Command mode:

<- | ->

hljk Cursor movement

G Goto last file line

3G Goto line 3

0 Goto line start

$ Goto line end

% Goto matching brace/paren

H Goto screen top

M Goto screen middle

L Goto screen bottom

w Go forward 1 word

3w Go forward 3 word

b Go back 1 word

3b Go back 3 word

n Repeat previous search

N Reverse previous search

x Delete one character

dw Delete one word

dd Delete one line

D Delete to end of line

d0 Delete to beginning of line

dG Delete to end of file

4dd Delete 4 lines

u Undo last change

. Do last chang

Y Yank a copy of a line

5Y Yank a copy of 5 lines

P Put below cursor

p Put above cursor

J Join next line to current

4J Join 4 lines to current

>> Shift a line right

3>> Shift 3 lines right

^d 1/2 scroll forward

^u 1/2 scroll backwards

^f Scroll forward

^b Scroll backwards

n Repeat previous search

N Reverse previous search

ZZ Write if needed & quit vi

Insert mode:

a Append after cursor

A Append at line end

cw Change a word

3cw Change 3 words

C Change line

i Insert before cursor

5i Insert at 5 times

I Insert at beginning of line

o Open a linebelow cursor

O Open a line above cursor

r Replace one character

R Replace/type-cver a line

s Substitute a character

S Substitue a line

ubuntu中vim 的配置

修改vim配置文件尽量修改自己用户主目录下的.vimrc

执行: cp /etc/vim/vimrc ~/vimrc

mv ~/vimrc ~/.vimrc

之后,修改~/.vimrc 文件即可。

1、设置Windows风格的C/C++自动缩进(添加以下set语句到~/.vimrc中)

1)设置(软)制表符宽度为4:

set tabstop=4

set softtabstop=4

2)设置缩进的空格数为4

set shiftwidth=4

3)设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置:set autoindent

4)设置使用 C/C++ 语言的自动缩进方式:

set cindent

5)设置C/C++语言的具体缩进方式:

set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s

6)如果想在左侧显示文本的行号,可以用以下语句:

set nu

7)最后,如果没有下列语句,就加上吧:

if &term=="xterm"

set t_Co=8

set t_Sb=^[[4%dm

set t_Sf=^[[3%dm

endif

更多内容如下:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 一般设定 网址:http://salogs.com/category/linux%25e7%25b3%25bb%25e7%25bb%259f%25e7%25ae%25a1%25e7%2590%2586/vim/

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

1、设置光标行

set cursorline

这条命令会在vim的光标所在行上标记为一条横线

还可以修饰一下条横线:

highlight CursorLine guibg=lightblue ctermbg=lightgray

2、设置光标列

set cursorcolumn

" 设定默认解码

set fenc=utf-8

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

" 不要使用vi的键盘模式,而是vim自己的

set nocompatible

" history文件中需要记录的行数

set history=100

" 在处理未保存或只读文件的时候,弹出确认

set confirm

" 与windows共享剪贴板

set clipboard+=unnamed

" 侦测文件类型

filetype on

" 载入文件类型插件

filetype plugin on

" 为特定文件类型载入相关缩进文件

filetype indent on

" 保存全局变量

set viminfo+=!

" 带有如下符号的单词不要被换行分割

set iskeyword+=_,$,@,%,#,-

" 语法高亮

syntax on

" 高亮字符,让其不受100列限制

:highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white

:match OverLength '\%101v.*'

" 状态行颜色

highlight StatusLine guifg=SlateBlue guibg=Yellow

highlight StatusLineNC guifg=Gray guibg=White

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 文件设置

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 不要备份文件(根据自己需要取舍)

set nobackup

" 不要生成swap文件,当buffer被丢弃的时候隐藏它

setlocal noswapfile

set bufhidden=hide

" 字符间插入的像素行数目

set linespace=0

" 增强模式中的命令行自动完成操作

set wildmenu

" 在状态行上显示光标所在位置的行号和列号

set ruler

set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l\ %c\ %p%%%)

" 命令行(在状态行下)的高度,默认为1,这里是2

set cmdheight=2

" 使回格键(backspace)正常处理indent, eol, start等

set backspace=2

" 允许backspace和光标键跨越行边界

set whichwrap+=<,>,h,l

" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)

set mouse=a

set selection=exclusive

set selectmode=mouse,key

" 通过使用: commands命令,告诉我们文件的哪一行被改变过

set report=0

" 在被分割的窗口间显示空白,便于阅读

set fillchars=vert:\ ,stl:\ ,stlnc:\

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 搜索和匹配

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 高亮显示匹配的括号

set showmatch

" 匹配括号高亮的时间(单位是十分之一秒)

set matchtime=5

" 在搜索的时候忽略大小写

set ignorecase

" 不要高亮被搜索的句子(phrases)

set nohlsearch

" 在搜索时,输入的词句的逐字符高亮(类似firefox的搜索)

set incsearch

" 输入:set list命令是应该显示些啥?

set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol

" 光标移动到buffer的顶部和底部时保持3行距离

set scrolloff=3

" 不要闪烁

set novisualbell

" 我的状态行显示的内容(包括文件类型和解码)

set statusline=%F%m%r%h%w\[POS=%l,%v][%p%%]\%{strftime(\"%d/%m/%y\ -\ %H:%M\")}

" 总是显示状态行

set laststatus=2

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 文本格式和排版

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 自动格式化

set formatoptions=tcrqn

" 继承前一行的缩进方式,特别适用于多行注释

set autoindent

" 为C程序提供自动缩进

set smartindent

" 使用C样式的缩进

"set cindent

" 制表符为4统一缩进为4

set tabstop=4

set softtabstop=4

set shiftwidth=4

" 用空格代替制表符

set expandtab

" 不要换行

set nowrap

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" CTags的设定

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 按照名称排序

let Tlist_Sort_Type = "name"

" 在右侧显示窗口

let Tlist_Use_Right_Window = 1

" 压缩方式

let Tlist_Compart_Format = 1

" 如果只有一个buffer,kill窗口也kill掉buffer

let Tlist_Exist_OnlyWindow = 1

" 不要关闭其他文件的tags

let Tlist_File_Fold_Auto_Close = 0

" 不要显示折叠树

let Tlist_Enable_Fold_Column = 0

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" Autocommands

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 只在下列文件类型被侦测到的时候显示行号,普通文本文件不显示

if has("autocmd")

autocmd FileType xml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,ruby set number

autocmd FileType xml,html vmap <C-o> <ESC>'<i<!--<ESC>o<ESC>'>o-->

autocmd FileType java,c,cpp,cs vmap <C-o> <ESC>'<o

autocmd FileType html,text,php,vim,c,java,xml,bash,shell,perl,python setlocal textwidth=100

autocmd Filetype html,xml,xsl source $VIMRUNTIME/plugin/closetag.vim

autocmd BufReadPost *

\ if line("'\"") > 0 && line("'\"") <= line("$") |

\ exe " normal g`\"" |

\ endif

endif "has("autocmd")

" F5编译和运行C程序,F6编译和运行C++程序

" 请注意,下述代码在windows下使用会报错

" 需要去掉./这两个字符

" C的编译和运行

map <F5> :call CompileRunGcc()<CR>

func! CompileRunGcc()

exec "w"

exec "!gcc % -o %<"

exec "! ./%<"

endfunc

" C++的编译和运行

map <F6> :call CompileRunGpp()<CR>

func! CompileRunGpp()

exec "w"

exec "!g++ % -o %<"

exec "! ./%<"

endfunc

" 能够漂亮地显示.NFO文件

set encoding=utf-8

function! SetFileEncodings(encodings)

let b:myfileencodingsbak=&fileencodings

let &fileencodings=a:encodings

endfunction

function! RestoreFileEncodings()

let &fileencodings=b:myfileencodingsbak

unlet b:myfileencodingsbak

endfunction

au BufReadPre *.nfo call SetFileEncodings('cp437')|set ambiwidth=single au BufReadPost *.nfo call RestoreFileEncodings()

" 高亮显示普通txt文件(需要txt.vim脚本)

au BufRead,BufNewFile * setfiletype txt

" 用空格键来开关折叠

set foldenable

set foldmethod=manual

nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc':'zo')<CR>

" minibufexpl插件的一般设置

let g:miniBufExplMapWindowNavVim = 1

let g:miniBufExplMapWindowNavArrows = 1

let g:miniBufExplMapCTabSwitchBufs = 1

let g:miniBufExplModSelTarget = 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: