vi操作.docx
《vi操作.docx》由会员分享,可在线阅读,更多相关《vi操作.docx(21页珍藏版)》请在冰豆网上搜索。
vi操作
件操作
viFileName打开文件FileName,并将光标置于第一行首。
vi+nFileName打开文件FileName,并将光标置于第n行首。
vi+FileName打开文件FileName,并将光标置于最后一行。
vi+/patternFile打开文件File,并将光标置于其中第一个于pattern匹配的字符串处。
vi–rFileName在上次正用vi编辑FileName发生系统崩溃后,恢复FileName。
viFile1…Filen打开多个文件,依次对之进行编辑。
:
%!
xxd按十六进制查看当前文件
:
%!
xxd-r从十六进制返回正常模式
:
n1,n2con3将n1行到n2行之间的内容拷贝到第n3行下。
:
n1,n2mm3将n1行到n2行之间的内容移至第n3行下。
:
n1,n2d将n1行到n2行之间的内容删除。
:
n1,n2wfilename将n1行到n2行之间的内容保存到文件filename中
:
n1,n2w!
Command将文件中n1行到n2行的内容作为Command的输入并执行之,
若不指定n1、n2,则将整个文件内容作为Command的输入。
:
r!
Command将命令Command的输出结果放到当前行。
:
nr<文件>把<文件>插入到第n行
:
so<文件>读取<文件>,再执行文件里面的命令(文件中的命令应该都是一些ex命令)
:
l1,l2w<文件>把第l1和第l2行之间的文本写到<文件>中去
:
w>><文件>添加到<文件>末尾.也可以使用行号
:
e!
重新编辑当前文件,忽略所有的修改
·(、[、{、}、]、)对应显示
%显示当前(、[、{、}、]、)的对应项
)显示对应的(
)显示对应的[
]显示对应的{
·(、[、{、}、]、)内数据选择
daB删除{}及其内的内容(在非v可视模式下)
diB删除{}中的内容
ab选择()中的内容
ib选择()中的内容(不含())
aB选择{}中的内容
iB选择{}中的内容(不含{})
·语法提示与自动补齐
★插入模式下的单词自动完成
★行自动完成(超级有用)
·设置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)查找替换
/把狭义单词写到搜索命令行
/把广义单词写到搜索命令行
:
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/a/g替换fred成registera中的内容,呵呵
:
g/
#替换一个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,怎么又是这个评价)
`.不仅跳到最后修改的那一行,还要定位到修改点
依次沿着你的跳转记录向回跳(从最近的一次开始)
依次沿着你的跳转记录向前跳
:
ju(mps)列出你跳转的足迹
17)命令历史
:
history列出历史命令记录
:
hisc命令行命令历史
:
hiss搜索命令历史
q/搜索命令历史的窗口
q命令行命令历史的窗口
:
历史命令记录的窗口
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+){2})str1:
1str2:
处理列,替换所有在第三列中的str1
:
%sw+)(.*s+)(w+)$:
321:
交换第一列和最后一列(共4列)
·.vimrc
"UseVimsettings,ratherthenVisettings(muchbetter!
).
setnocompatible
"c风格的缩进
:
setexpandtab"不使用tab只使用空格
:
setcindentshiftwidth=4
"自动缩进
:
setai
"语法
":
setfiletype=j***a
:
setsyntax=j***a
"键入)、]、},显示(、[、{
:
setshowmatch
"手工定义折叠
:
setfoldmethod=manual
"标签文件位置
settags=/usr/share/vim/vim63/funcs.tags
"在插入模式下通过按[Ctrl]N自动地将任何类、方法或者字段名补齐
setcomplete+=k
"不要用声音烦我!
setvisualbell
"历史
:
sethistory=50
"显示行列位置
:
setruler
"设置字符编码
setfileencodings=gb2312
"setencoding=euc-cn
"设置ruler
setruler
"显示当前命令
setshowcmd
"incsearch
setincsearch
"allowbackspacingovereverythingininsertmode
setbackspace=indent,eol,start
"自动检测文件类型
:
filetypeon
"""""""""""快捷键定义"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
ifversion>=600
"查找
"map/
"查找函数原型
mapyiw/^\(\s\)*\(sub\)\\|\(function\)\(\s\)*"
"继续查找
mapn
"使用显示类、属性、方法列表
map:
Tlist
"用compiler定义的编译程序来编译当前程序
"map:
make"%"
"使用来进行php语法检测
map:
!
php-l"%"
map;w:
callFormatText()
"查找当前光标下的字
map/
endif
""""""""""":
:
快捷键定义"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""格式化文件"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
functionFormatText()
:
%s/\t//g"把\t换成4个空格
:
%s/*$//g"去掉行尾空格
endfunction
"""""""""""格式化文件"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""显示行尾的tab和多余空格"""""""""""""""""""""""""""""""""""""""""""""""