Chinaunix首页 | 论坛 | 博客
  • 博客访问: 570386
  • 博文数量: 826
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5015
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-22 18:09
文章分类

全部博文(826)

文章存档

2011年(1)

2008年(825)

我的朋友

分类: LINUX

2008-08-22 18:13:30

 
在每个用户的主目录下,都有一个vi的配置文件".vimrc"或".exrc",用户可以编辑它,使这些设置在每次启动vi时,都有效。
??例如,加入如下设置行:
setnu显示行号
setnonu不显示行号
setic查找时不考虑大小写
setnoic查找时考虑大小写


说明:

在文本中[]表示选项或者简写掉的文字,但除了模式匹配里面的[],可参见模式匹配。

源码:

vivim使用
vim编辑器

首先简单的说一下vi编辑器──unix的通用编辑器,
读作vee-eye(visualeditor的简写)。
(这里的vim,是改进的vi,ViImproved简写,Vim由BramMoolenaar编写)
vi的工作模式
分为命令模式和插入模式以及:ex模式;
按esc键就可以让vi进入命令模式;
插入模式就是你输入文本的模式了。

vi的一些简单操作:
普通操作:
插入文本
命令i、a、I、A、o、O
i进入命令模式输入i,这时候就是和普通的文本编辑器一般了;
a或者输入a,不同的是,a是在字符的后面插入追加文本,而i在字符的前面插入;
I行首插入;
A行尾插入。
o光标下新建空行
O光标上新建空行
修改删除文本
命令c、x、d、D
cw删除当前位置到该位置单词的末尾,外加插入文本;cw删除的是英文单词,中文不行的。
c$orC删除当前位置到行末,外加插入文本。
x只删除当前字符如果要删一个中文字的话请用2x(当然也可以用4x8x)因为一个汉字占两个字符。
cc删除一行,外加可以插入文本。
r删除当前字符,外加可以插入文本。
dw只删除当前位置到这个单词末。
[n]dd删除[n]一行。当然可以用2dd3dd删除两行,三行。
D删除到行尾。

粘贴,复制,合并
命令p、y、J、"(引号)
p当你执行上面的删除操作后,你所删除的文本会留在缓存中,当你输入p后会把这些删除的文本粘贴到当前光标后面。
y组合有(yw,4yy,y$等)//复制单词,复制四行,复制到行末复制后可用p进行粘贴
J把下一行合并到当前行,注意J大写
"[x]yy命名你的缓冲区在复制命令前加上冒号和名称(a到z)例如"ryy"d2dd"zd)复制一行到r缓冲区,删除2行到d缓冲区,删除光标到句尾到z缓冲区。
"[x]p粘贴x缓冲区到当前位置后。
默认有1~9缓冲区为前9次删除操作。
可视操作
命令v、V、Ctrl v

当用gvim可以用鼠标选择你需要复制,删除的文本,然后按d(删除)、p(粘贴)、y(复制)操作你的文本,
当然也可以和其他程序通过粘贴板进行共享数据。
v对于xterm中的vim则输入命令v进入可视状态,这时候你可以用右键进行复制粘贴操作

重复操作与撤消
命令.(点号)、u、U
.重复上一次的操作,当并不是那种重作,他只是重复你上次输入的命令。
Ctrl R重做
u撤消上次操作
U撤消当前行进行的任意修改。
查找文本
命令/、?、n、N
/向后查找文本进入命令模式输入/[你要查找的文本];例如找edit输入/edit;
?而向前查找文本就是输入?[你要查找的文本];
n当有许多搜索结果时,命令模式下输入n就可以找下一个搜索结果,而输入N
N则是反向下一个搜索结果。

打开,保存与退出
先进入ex模式,就是在命令模式下输入:再输入命令。
命令ZZ、q、w、e、r
:ZZ进入命令模式输入ZZ(大写)就是保存 退出;
:w保存文本进入命令模式输入w就是保存;
:q!强行退出是输入q!;
:e!撤消当前所有编辑,返回原始状态的话,请输入e!;
:w[filename]另存为就是w[filename]。
:e[filename]打开另外一个文件(打开新文件前,请先保存文件。
:r[filename]读入filename内容到当前文件的当前位置后
移动光标
命令hjkl、(、)、{、}、e、w、b、gg、G

hjkl一般可直接用键盘上的方向键进行光标的移动。而pageup/down键就是前后翻页了;
或者,命令模式下按
h(左)j(下)k(上)l(右)
或者在这个基础加上数字,进行几行几行的移动,例如4j就表示向下移动四行。
nG例如200G就是移动200行了。而Ctrl G就是显示当前行信息(多少行,在文本的位置);
G到文件尾
gg到文件头

e另外输入e可以一单词的移动光标,
(当前句首
)下一句开始例如2)向前移动两个句子
{段开始
}下一段头
b、w后前以单词为单位移动。

标记命令m、‘(单引号)、`(反引号也就是~那里那个键)
m[x]标记x(a~z)位置例如mb标记当前光标位置为标志b
’x移动光标到x标记行的行首
`x移动光标到x标记的原始光标位置
''''移动到上一标记行首
``移动到上一标记原光标位;
zlzhzsze窗口左滚右滚左开始右结束//可设置:setsidescroll=32设置滚动长度(我好象用不了这个命令)
其他
Ctrl L刷屏
return到下一行行首
-、 移动光标上下一行,上下一行的行首(好象 号要用小键盘的 号才行);
Ctrl G显示当前行信息
H屏幕起点
M屏幕中间
L屏幕尾

组合使用例子命令模式下
例子:现有文本

aaabbb
cccdddeeefff(光标在第一行)

输入/aab回车d/ccc回车那就会删除掉当前位置aab(包括aab),到ccc前所有数据并复制数据到缓冲(和剪切差不多)。当然d也可用改成y做复制用途,再用p粘贴。

vim的ex状态当在:ex模式下可以用tab进行自动补齐命令(用:setnu显示行数)并可以利用|可以将多个命令组合在同一提示符下

文本搜索,替换,移动,删除,复制
命令:g/、:s/、:m、:d、:co(或者:t)
:g:g/[文本]全局搜索文本,光标移动到最后一个搜索文本,并显示所有数据加所在行。
:g!/[文本]没有[文本]的行
:s:[第n行],[到第m行]s/[要替换的]/[替换的]n-m行之间进行替换,如果没有n,m那么就进行当前行的替换
:%/s/[要替换的]/[替换的]/g进行全局替换。%表示每一行,另外有.表示当前行,$表示最后一行,另外可用 -号表示该行的上下n行,例如.-2表示当前行上面第二行
:m:[要移动的数据]m[移动的地方]例子:20,30m10020-30行移动到100行前(最后一行是100行)
例子::g/^$/d删除所有空行d加上删除动作


搜索模式
.(点号)任一个单字符,汉字用两个点..
*匹配前面字符零个或者多个任意(并不表示任意字符)例如/abcdl*就会查找abcdl或者以abcd开始的,而查找所有是/.*
^表示从行首开始
$$在表达式末表示以正则表达式要在行末。
转义.表示找.*表示找*\表示找
[][0~9]表示匹配0~9之间任意一个数字同理有[A~Z]和[a~z],而[AB3a]表示找有A,B,3,a其中任意一个字符。
<,>单词开始或者末尾以空格或者标点符号开始或者结束。例如inux>匹配linux.
回车
制表符
执行sh命令
:![shellcommand]例如:!ls

添加数据到文件末>>
例子:1,10w>>newfile

需要注意的是vim可以把一些命令组合起来应用
:1,3d|s/they/she/一到三行删除,并把当前行they替换为she
:.,/while/d删除当前行到匹配while行所有数据(包括当前行和含有while所在行)
:/aaa/,/bbbb/daaa到bbbb之间行删除(包括这两行)
:/aaa/,/bbb/m.aaa到bbb行move到当前行




分屏
:[N]sp[lit][filename]另开窗口,高度是N行,并打开filename文件。
Ctrl w[x]准备进行窗口操作,其中x是按Ctrl w后,需要选择的功能键(可参见下一行)例如Ctrl w再按t就会到顶端窗口
Ctrl w[s/w/t/b/c/q/r/i/=]s再分屏,w下一个窗口,t顶窗口,b底端窗口,c关闭窗口q退出窗口r循环窗口i打开并进入新窗口=所有窗口同高
:hide隐藏当前窗口,当不关闭该文件缓冲(也就是说再次用:e[filename]打开后依然是先前的文件)
:q关闭窗口,并释放缓冲。
:qa[!]关闭所有窗口并强行退出vim;
:on[ly]只显示当前窗口
:new[filename]新建文件并打开新窗口。
:res[ize][n]:res[ize][ -n]改变窗口大小,或者增加减少行数

用vim编程
:make[arguments]运行make然后移动到第一个错误,
:cf[ile][!][errorfile]读取错误文件,并移动到第一个错误处,!强迫vim移动到另外的缓冲区,
:cl[ist][!]列出含有文件名的错误,有!就列出所有错误,
:cc[!][n]如果有n就显示错误n,否则重新显示当前错误,
:cn[ext]移动到下一个错误。
:cp移动到上一个错误。

另外一个有用的编程功能是使用ctags(unix命令,给C语言中的函数打标记。这个命令与vi的tags结合使用)
先用ctags命令:!ctagsfile.c创建该c程序tags文件,再在vi中使用:tag[函数名],那么vi就直接调出该c原文件并跳到函数定义处。
例如::!ctags*.c
:tagaaa其中bbb.c中有aaa函数,那么就跳到aaa的定义处
:tn跳到下一个匹配标志
:tp上一个标志


设置vim
:setall显示所有选项。
:setnu[mber]显示行数。
:setbinary可读二进制文件
:syntaxon语法高亮
:settaglength=4设置tag长度
记不住可使用tab键补齐命令(也可以显示可以选择的命令)

vim的配置文件.vimrc
在vim的安装目录下有一个vimrc_example.vim文件,你可以copy到你的工作目录上作为你的原始vim配置文件(文件改名为.vimrc)

vi引证
最后,这里有关vi的认证:vi是完美的
论证:VI在罗马数字中是六,小于六的自然数可以整除6的是1,2,3,6=1X2X3;而6有可以表示为6=1 2 3,可见VI是个完美的数字,从而VI也是完美的。

对于vim
罗马数字中VIM可能表示为(1000-(5 1))=994,而刚好等于2×496 2,而496刚好可以被1,2,4,8,16,31,62,124,248等整除,而且1 2 4 8 16 31 62 124 248=496
因此496是个更完美的数字,可见vim比vi更加完美了。

阅读(392) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~