Vi使用教程二资料Word格式文档下载.docx
《Vi使用教程二资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Vi使用教程二资料Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
★<
C-N>
<
C-P>
插入模式下的单词自动完成
C-X>
C-L>
行自动完成(超级有用)
设置ctags
#ctags-f/usr/share/vim/vim63/funcs.tags-R/opt/j2sdk/src/usr/src/kernels/2.6.9-5.EL-i686
^p自动补齐上下文已有相近项
^n自动补齐~/.tags中的相近函数
^[显示~/.tags中的光标下的函数的原型,
按^t退出函数
pta函数名预览窗口快速打开相应函数所在文件,并将光标定位在对应函数的开头
K显示光标下的C函数的man说明手册
变量定位
gd转到光标下局部变量的定义处
Gd转到光标下全局变量的定义处
编译选项
cn命令会把你带到下一个出错地点,而不考虑它在什么文件里。
cc命令会向你显示当前错误的编译器输出信息;
cl会生成一个列有项目所有错误的列表,以供浏览这些错误
3]光标移动
h光标左移一个字符。
l光标右移一个字符。
w或W光标右移一个字至字首。
B或b光标左移一个字至字首。
E或e光标右移一个字至字尾。
}光标移至句尾。
(光标移至句首。
)光标移至段落开头。
{光标移至段落结尾。
k或Ctrl+p光标上移一行。
j或Ctrl+n光标下移一行。
Enter光标下移一行。
nG光标移至第n行首。
n+光标下移n行。
n-光标上移n行。
n$光标移至第n行尾。
0光标移至当前行首。
$光标移至当前行尾。
H光标移至屏幕顶行。
M光标移至屏幕中间行。
L光标移至屏幕最后行。
Ctrl+u向文件首翻半屏。
Ctrl+d向文件尾翻半屏。
Ctrl+f向文件尾翻一屏。
Ctrl+b向文件首翻一屏。
nz将第n行滚至屏幕顶部。
不指定n时将当前行滚至屏幕顶。
4}插入
#在文件中插入行号(不是显示行号,是插入!
)
★:
g/^/exec"
s/^/"
.strpart(line("
."
)."
"
0,4)
光标
i在光标前插入。
a在光标后插入。
行
I在当前行首插入。
A在当前行尾插入。
o在当前行之下一新行插入。
O在当前行之上新开一行插入。
5)替换
r替换当前字符。
R替换当前字符及其后的字符,直至按ESC键。
s从当前光标位置处开始,以输入的文本代替指定数目的字符。
S删除指定数目的行,并以所输入的文本代替。
6)修改
ncw或nCW修改指定数目的字符。
nCC修改指定数目的行。
rfilename将文件filename插入在当前行之下
7)查找替换
/<
C-R>
C-W>
把狭义单词<
cword>
写到搜索命令行
C-A>
把广义单词<
cWORD>
g/str/s/str1/str2/g
第一个g表示对每一个包括s1的行都进行替换,
第二个g表示对每一行的所有进行替换
包括str的行所有的str1都用str2替换
%s/f$/for$/g将每一行尾部的“f”(f键和空格键)替换为for
%s/^/mv/g在每一行的头部添加“mv”(mv键和空格键)
s/fred/<
c-r>
a/g替换fred成registera中的内容,呵呵
g/<
input|<
form/p显示含<
input或<
form的行
#替换一个visual区域
#选择一个区域,然后输入:
s/Emacs/Vim/等等,vim会自动进入:
模式
'
'
s/Emacs/Vim/g前面的'
是vim自动添加的
#在多个文档中搜索
bufdo/searchstr
argdo/searchstr
复制与剪切
xp交换前后两个字符的位置
ddp上下两行的位置交换
g/fred/t$拷贝行,从fred到文件末尾(EOF)
9)窗口操作
vne[filename]
sp[filename]
S[filename]
new[filename]
^w+^r交换两个窗口的位置
^w=窗口等宽
res-n窗口高度减小n
res+n窗口高度增大n
vertres-n
vertres+n
10)DOS格式文本转成Unix格式文本
1,$s/^M//g
11)书签
在阅读和编写大的程序文件时,利用标记(书签)功能定位是十分有帮助的。
将光标移到想做标记的位置。
假如做一个名为“debug1”的标记,那么用户可在命令模式下输入做标记的命令“mdebug1”,然后敲入回车键,一个名为“debug1”的标记就做好了。
接下来用户可以随意将光标移到其它的位置,当在命令模式下输入“`debug1”后,就能快速回到“debug1”的标记所在行的行首。
12)删除操作
%s/r//g删除DOS方式的回车^M
%s=*$==删除行尾空白
%s/^(.*)n1/1$/删除重复行
%s/^.pdf/new.pdf/只是删除第一个pdf
%s/<
!
--_.-->
//又是删除多行注释(咦?
为什么要说「又」呢?
g/^s*$/d删除所有空行
g!
/^dd/d删除不含字符串'
dd'
的行
v/^dd/d同上(译释:
v==g!
,就是不匹配!
g/str1/,/str2/d删除所有第一个含str1到第一个含str2之间的行
v/./.,/./-1join压缩空行
g/^$/,/./-j压缩空行
ndw或ndW删除光标处开始及其后的n-1个字符。
d0删至行首。
d$删至行尾。
ndd删除当前行及其后n-1行。
x或X删除一个字符。
Ctrl+u删除输入方式下所输入的文本。
^R恢复u的操作
J把下一行合并到当前行尾
V选择一行
^V按下^V后即可进行矩形的选择了
aw选择单词
iw内部单词(无空格)
as选择句子
is选择句子(无空格)
ap选择段落
ip选择段落(无空格)
D删除到行尾
x,y删除与复制包含高亮区
dl删除当前字符(与x命令功能相同)
d0删除到某一行的开始位置
d^删除到某一行的第一个字符位置(不包括空格或TAB字符)
dw删除到某个单词的结尾位置
d3w删除到第三个单词的结尾位置
db删除到某个单词的开始位置
dW删除到某个以空格作为分隔符的单词的结尾位置
dB删除到某个以空格作为分隔符的单词的开始位置
d7B删除到前面7个以空格作为分隔符的单词的开始位置
d)删除到某个语句的结尾位置
d4)删除到第四个语句的结尾位置
d(删除到某个语句的开始位置
d)删除到某个段落的结尾位置
d{删除到某个段落的开始位置
d7{删除到当前段落起始位置之前的第7个段落位置
dd删除当前行
d/text删除从文本中出现“text”中所指定字样的位置,
一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容
dfc删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容
dtc删除当前行直到下一个字符“c”所出现位置之间的内容
D删除到某一行的结尾
d$删除到某一行的结尾
5dd删除从当前行所开始的5行内容
dL删除直到屏幕上最后一行的内容
dH删除直到屏幕上第一行的内容
dG删除直到工作缓存区结尾的内容
d1G删除直到工作缓存区开始的内容
修改命令操作
r更改当前字符
cw修改到某个单词的结尾位置
c3w修改到第三个单词的结尾位置
cb修改到某个单词的开始位置
cW修改到某个以空格作为分隔符的单词的结尾位置
cB修改到某个以空格作为分隔符的单词的开始位置
c7B修改到前面7个以空格作为分隔符的单词的开始位置
c0修改到某行的结尾位置
c}修改到某个语句的结尾位置
c4}修改到第四个语句的结尾位置
c(修改到某个语句的开始位置
c)修改到某个段落的结尾位置
c{修改到某个段落的开始位置
c7{修改到当前段落起始位置之前的第7个段落位置
ctc修改当前行直到下一个字符c所出现位置之间的内容
C修改到某一行的结尾
cc修改当前行
5cc修改从当前行所开始的5行内容
.重复上一次修改!
13}Set选项设置
setall列出所有选项设置情况。
setterm设置终端类型。
setignorecase在搜索中忽略大小写。
setlist显示制表位(^I)和行尾标志($)。
setnumber显示行号。
setshowmode示用户处在什么模式下
setreport显示由面向行的命令修改国的行数目。
setterse显示简短的警告信息。
setwarn在转到别的文件时,若没有保存当前文件则显示Nowrite信息。
setautowrite在“:
n”和“:
”命令之前都自动保存文件
setnomagic允许在搜索模式中,使用前面不带\的特殊字符。
setnowrapscan禁止vi在搜索到达文件两端时,又从另一端开始。
setmesg允许vi显示其他用户用write写到自己终端上的信息。
autoindent(ai)noai使新行自动缩进,和上(下)行的位置对齐
autoprint(ap)ap每条命令之后都显示出修改之处
autowrite(aw)noaw在:
n,:
命令之前都自动保存文件
beautify(bf)nobf在输入的时候忽略所有的控制字符(除了制表键(tab),换行(newline),进纸(formfeed))
directory=(dir=)/tmp存放缓冲区的目录名
edcompatiblenoedcompatible在替换的时候使用类ed的用法
errorbells(eb)errorbells出错的时候响铃
exrc(ex)noexrc允许在主目录(home)外面之外放.exrc文件
hardtabs=(ht=)8设置硬制表的边界
ignorecase(ic)noic正规式里忽略大小写
lispnolisp打开lisp模式
listnolist显示所有的制表键和行的结尾
magicagic可以使用更多的正规表达式
mesgmesg允许向终端发送消息
number(nu)nonumber显示行号
openopen允许开放和可视化
optimize(opt)optimize优化吞吐量,打印时不发回车
paragraphs=(para=)IPLPPPQPPLIbp设置{&
}的分界符
promptprompt命令模式下的输入给出:
的提示符
readonly(ro)noro除非用!
号否则不准保存文件
redrawnoredraw当编辑的时候重绘屏幕
remapremap允许宏指向其他的宏
report=5如果影响的行数>
这个数的话就报告
scroll1/2window下卷屏幕时滚动屏幕的数目,同样这也是z命令输出的行数(z输出2倍滚屏的大小)
sections=SHNHHHU定义节的末尾(当使用命令[[和]]时)
shell=(sh=)/bin/sh缺省的SHELL,如果设置了环境变量SHELL的话,就使用变量
shiftwidth=(sw=)8当使用移动(shift)命令时移动的字符数
showmatch(sm)nosm显示{,},(,),[,或者]的匹配情况
showmodenoshowmode显示你处在什么模式下面
slowopen(slow)插入之后不要立刻更新显示
tabstop=(ts=)8设置制表停止位(tabstop)的长度
taglength=(tl=)0重要标记的字符个数(0表示所有的字符)
tags=tag,/usr/lib/tags定义包含标记的文件路径
term=设置终端类型
tersenoterse显示简短的错误信息
timeout(to)timeout一秒钟后键盘映射超时
ttytype=设置终端类型
warnwarn显示"
Nowritesincelastchange"
信息
window=(w=)可视模式下窗口的行数
wrapmargin=(wm=)0右边距,大于0的话最右边的单词将折行,留出n个空白位置
wrapscan(ws)ws查找到文件尾后再重头开始
writeany(wa)nowa可以保存到任意一个文件去
14}特殊字符
^匹配字符串位于行首。
$匹配字符串位于行尾。
.用在模式串中,表示任何单个字符。
在命令模式下,重复上次的命令。
*在模式串中,表示其前字符可出现任意多次。
[]用在模式串中,表示指定方位内字符,其中可用-表示一个字
符范围,用^表示不在某个范围内的字符。
ESC从插入状态转换到命令状态
^[功能同ESC
15]大小写转换
guu行小写
gUU行大写
g~~行翻转(当然指大小写啦)
guw字小写(狭义字)译注:
建议对比iw
gUw字大写(狭义字)
g~w字翻转(狭义字)
vEU字大写(广义字)
vE~字翻转(广义字)
ggguG把整个文章全部小写(ft!
bt!
16)跳转足迹'
.跳到最后修改的那一行(超级有用)(ft,怎么又是这个评价)
`.不仅跳到最后修改的那一行,还要定位到修改点
C-O>
依次沿着你的跳转记录向回跳(从最近的一次开始)
C-I>
依次沿着你的跳转记录向前跳
ju(mps)列出你跳转的足迹
17)命令历史
history列出历史命令记录
hisc命令行命令历史
hiss搜索命令历史
q/搜索命令历史的窗口
q命令行命令历史的窗口
C-F>
历史命令记录的窗口
18]寄存器
#列出寄存器(Registers)
reg显示所有当前的registers
"
1p表示引用register,1表示一个名字叫做1的register,p就是粘贴(paste)命令
译释:
也用来定义register
先输入"
表示定义register
然后输入名字,如0~9,a~z
然后执行删除或复制命令,如dd或y,
或者是visual模式下的d(删除选中的部分)或y(复制选中的部分)
则被删除或复制的部分就被存入了这个命名的register
观察:
一个特殊的register,"
,里面存储了一个匿名的删除/复制
在你执行dd或y的时候,被作用的部分被存到了"
中
19}命令行
ayy@a把当前行作为一个Vim命令来执行
ayy是定义当前行到registera,然后@a是执行registera中存储的指令
10yycopy当前行以下10行
11}排序
sort-u使用sort程序排序整个文件(用结果重写文件)
1)sort-u排序当前段落(只能在normal模式下使用!
.,+5!
sort排序当前行及以下5行
20)列操作
%s=[^]+$=&
&
=复制最后一列
%s=f+$=&
=一样的功能
%s=S+$=&
ft,还是一样
s/(.*).*)/2"
1/颠倒用:
分割的两个字段
%s(w+s+))str1:
1str2:
处理列,替换所有在第三列中的str1
%sw+)(.*s+)(w+)$:
321:
交换第一列和最后一列(共4列)
.vimrc
UseVimsettings,ratherthenVisettings(muchbetter!
).
setnocompatible
c风格的缩进
setexpandtab"
不使用tab只使用空格
setcindentshiftwidth=4
自动缩进
setai
语法
setfiletype=java
setsyntax=java
键入)、]、},显示(、[、{
setshowmatch
手工定义折叠
setfoldmethod=manual
标签文件位置
settags=/usr/share/vim/vim63/funcs.tags
在插入模式下通过按[Ctrl]N自动地将任何类、方法或者字段名补齐
setcomplete+=k
不要用声音烦我!
setvisualbell
历史
sethistory=50
显示行列位置
setruler
设置字符编码
setfileencodings=gb2312
setencoding=euc-cn
设置ruler
显示当前命令
setshowcmd
incsearch
setincsearch
allowbackspacingovereverythingininsertmode
setbackspace=indent,eol,start
自动检测文件类型
filetypeon
快捷键定义"
ifversion>
=600
查找
map<
C-H>
/
查找函数原型
yiw/^\(\s\)*\(sub\)\|\(function\)\(\s\)*<
C-r>
CR>
继续查找
F3>
n
使用<
F10>
显示类、属性、方法列表
F2>
:
Tlist<
用compiler定义的编译程序来编译当前程序
F9>
make"
%"
F11>
来进行php语法检测
php-l"
map;
w:
callFormatText()<
查找当前光标下的字
F4>
/<
endif
格式化文件"
functionFormatText()
%s/\t//g"
把\t换成4个空格
%s/*$//g"
去掉行尾空格
endfunction
显示行尾的tab和多余空格"
setlistchars=tab:
-,trail:
~
setlist
syntaxmatchTrail"
+$"
highlightdeflinkTrailTodo
functionLastMod()
ifline("
$"
)>
5
letl=5
else
letl=line("
exe"
1,"
.l."
/CnsProgCMTime/s/CnsProgCMTime.*/CnsProgCMTime"
.strftime("
%Y-%m-%d%H:
%M:
%S"
/e"
F5>
callLastMod()<
自动加注释的*星号"
使用如/*...*/的注释时,r在插入模式下回车时插入*;
o在普通模式下,使用"
o"
或"
O"
时