标记文本
mchar用字母char标记当前光标的位置
`char 移至char所标记处
'char移至char标记所在行的开头处
"移至当前行上一次所在位置(在光标移动之后)――一个双引号''移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号
编辑数个文件(利用vi filename(s))进入vi后)
:args 显示编辑名
单中的各个文件名
:n?
3;读入编辑名单中的下一个文件
:rew读入
编辑名单中的第一个文件
:e#读入
编辑名单内的前一个文件
:e file 读入另一个文件进
vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则
应先以: w 存档。
:e! file强迫读入另一个文
件进入vi,原文件不作存档动作。
>>
<<
移动整行的命令。在调整大段代码时很方便。设置在.exrc中sw=4
快速块复制
用m char标识某行(如 mb)
移动到复制的起始行,y'b,就可以复制整块
将整块复制到制定的‘寄存器’ "qy'b
将寄存器中的数据插入到某位置 "qp
在寄存器中保存的块在整个vi过程中有效(包括用e 重新编辑其他文件)
shift +G 跳到文件尾
?char  从后往前查字符串
/ char  从前往后查字符串
% - 移至匹配的括号
xp  - 交换两个字符
y[cursor movement] - 光标移多少复制多少,如yw, y2w, y2l
#vi +10 program.c
直接转到文件第十行
交换两个字符位置
xp
上下两行调换
ddp
把文件内容反转
:g/^/m0/
:X
然后系统会提示输入密码
输入密码后存盘退出
下次编辑时请使用
vi -x filename
系统会提示你输入密码
:set nu 在每行行首加上行号
:set nonu 和上面的相反
:!command暂时退出vi并执行shell指
令,执行完毕后再回到vi。
:sh暂时
退出vi到系统下,结束时按Ctrl + d则回到vi。
vi filename进入vi并读入指定名称的文件(
新、旧文件均可)。
vi +n filename进入vi并且由文件的第几行开始。
vi +filename 进入vi并且由文件的最后一行开始。
vi + /word filename 进入vi并且由文件的word这个字开始。
vi filename(s) 进入vi并且将各指定文件列入名单内,第一个文件先读入。
vi -r filename 恢复被毁坏的文件
vim里自动缩进一段
把光标移动到某个花括号,
按 =% 缩进整段。
把整段不按格式往里缩一个tab
>%
缩两个
>>%
往外缩
<%
vi是unix操作系统提供的一个全屏幕文本编辑器,是程序员编辑源代码的一个重要工具。熟练掌握vi命令及其使用技巧往往能起到事半功倍的作用,大大提高编程工作的效率。在应掌握如i,a,o,0,m,x,u,dd,yy,dw,cw,s,.,/,Ctrl-F,Ctrl-B,Ctrl-G,w,q等基本命令外,下面笔者介绍一些实际工作中所常用的命令技巧。
1.将多个文件调入缓冲使用命令:vi flname1 flname2… flnameN编辑下一文件用:n;回到首文件:rew;查看当前编辑缓冲文件状态:args。
2.修改包含某一字符串的文件可与grep命令结合使用,如欲编辑当前目录下含有abc 字串的所有C源程序:vi`grep -1 abc *.c`
3.编辑在缓存中的两个文件快速切换命令::e#或 Ctrl-^ 使用Ctrl-^ 命令更便捷,但如终端类型不正确该功能将无效。
4.将一个文件的部分内容读入另一文件中,有以下两种操作方式:
(1)将欲读入的内容用w命令写入一临时文件,再用r命令读入。该方法笨拙,临时文件需清理。
(2)将欲读入的内容写入一临时缓存器后再切换到目标文件,将光标移至需读入内容处,从缓存器中提出。
写入缓存器a命令:起始行mk结束行″ay'k
从缓存器a中提出:″ap
该方法操作方便快捷,不会产生垃圾文件
5.放弃一修改过的文件,重新编辑
(1)使用命令:q!强行退出后再vi flname重新进入。
(2)使用命令:e!强行重编辑更便捷。
6.定位文件尾用G比:更快捷,段落定位用(和)键,括号匹配定位用%,定位行首0,定位行尾,两行连接J。
7.行左移〈〈,行右移〉〉,该命令用于调整源码缩进格式简便快速。
8.大小写字母自动切换命令:shilft+~,屏幕刷新Ctrl-1。
9.当编辑的移动键失效时可用:map命令,但如终端类型不正确该命令将无效。
10.替换命令的特殊处理:文件行首用^标识,行尾用$标识。
如:1,s/^/abc/g 表示文件行首加入abc字串
1,.s//abc/g 表示文件首行至光标所在行行尾加入abc字串
11.在vi命令状态直接读入一外部命令执行结果:
!!+外部命令
如:
!!date
直接读入一系统日期
12.在vi中也可输入非ASCII码,如欲输入打印机的换页控制码^L(码值为12),其输入方法是先输Ctrl-v再输Ctrl-1即可,其中Ctrl-v是静默值。
13.显示vi文本中的隐含字符:set list取消显示:set nolist。
14.临时退出至shell状态命令:sh,退出shell后将回到原编辑状态,在同一缓存中编辑另一文件:e flname。
vi编辑器命令很丰富,但没必要各个都需掌握,只要掌握以上提及的基本命令与技巧,
即可自如效的编辑文件了。
.0 - 怎样查和替换?
有很多方. 最简单的是:
:s/old/new/g, 但是,这仅对当前行起作用..., 所以,我们用
:%s/old/new/g, 更一般的,我们还可以用
:[范围]s/old/new/[cg],这里,[范围]是任意的行范围,包括行号,$(文件末尾),.(当前行),
%(当前文件),或者两个行号之间加个破折号(或者可以这样: .,+5,这表示下面5行). [cgi]是c,g,i中间的一个或者什么也没有.c告诉vi每次替换的时候要给提示,g是说对
所有一行中出现的地方都做替换.i则是指在查时不区分大小写.如果最后一个斜杠(/)
后面没有东西的话,那么vi只替换在行中第一次匹配的地方. 我比较喜欢这样做:
:g/foobar/s/bar/baz/g, 这个命令首先搜寻foobar,然后把它变成foobaz. 它没有改变jailbars, 而其他的一些命令可能会改变jailbars. 这是我的方法,但是可能比较难记.
当然,你还可以在查的的时候使用正规式,以及在替换文本的时候使用其他一些命令.如果你在正规式里用\(和\)来剥离一个序列的话,你会发现你可以做很多好玩的事情. 例如:
:g/\(foo\)\(bar\)/s/\2/\1baz/g 将foobar替换成foobaz
还有一些特殊的序列:
& 所有查时匹配到的东西
\[1-9] 1到9号用\(和\)括起来的东西
\u 下一个字符将被变成大写.
\U 以后的字符都变成大写,直到遇到\e或\E
\l 下一个字符将被变成小.
\L 以后的字符都变成大写,直到遇到\e或\E
\[Ee] 更改大小写的选择区域的终点
3.3 - 有没有使vi对程序员更友好的窍门?
:set ai可以让vi自动对齐.
:set sw=#,#是移动的宽度(shiftwidth),或者说TAB键的宽度(tabwidth);你可以
用<<;或者>>命令来左移或右移某一行. 还有, 你可以使用 <%或>%来将{,(或[等符号
括起来的文本都左移或右移;这时候,你必须把光标放在这些符号({,(或[)上面.
:set sm会在你敲},]或)显示出对应匹配的{,[或(来.
:
set lisp会对lisp编程有些帮助. ()被移到s表达式(s-expressions)外面,如果
原子(atoms)没有停止则{}将被移走.
6.0 - 依字母顺序的vi快速参考
... 是指有些东西需要在命令之前或之后指明.这通常是说光标的移动键
(h,j,k,l,w,b等等)或者是指行号.
# (这里#代表一个数字) 执行n次后面的命令...
: 进入ex模式
) 下一句
( 上一句
} 下一段
{ 上一段
]
] 下一节
[[ 上一节
0 行的开头
$ 行的末尾
^ 行的第一个非空白字符
+ 下一行的开头
- 上一行的开
(空格) 下一个字符
(回车) 下一行
/ 向前搜索
? 向后搜索
% 查当前小(中,大)括号的匹配字符
, 逆向重复上一个f,F,t或T操作
; 重复上一个f,F,t或T操作
. 重复上一个操作
` 转到标记处
' 转到标记所在行的开头
`` 查前回到上一个做标记的地方
'' 查前回到上一个做标记所在行的开头
~ 切换字符的大小写
" 保存到寄存器中
!! 重复上一次SHELL命令
!
把后面的文本送给命令, 取代输出(例如, !}fmt把当前的段落
送给命令fmt处理,然后用fmt返回的东西替换输出.)
>> 右移当前段落一个移动宽度(shiftwidth)
<< 左移当前段落一个移动宽(shiftwidth)
>% 从当前到匹配小(中,大)括号之间的文本右移
<% 从当前到匹配小(中,大)括号之间的文本左移
(似乎漏了一个符号|, 移动到某一列----译注)退出grep命令
a 在当前位置之后添加
A 在当前行的末尾添加
^a 没有使用
b 上一个单词的开头
B 上一个单词的开头,忽略标点符号
^b 上移一屏
c 覆盖...
C 覆盖到行末尾
^c 终止插入模式,在命令模式没有用
d 删除...
D 删除到行末尾
^d 下移半屏,如果在插入模式下则移到上一个移动宽度(ShiftTab)处e 单词的末尾
E 单词的末尾,忽略标点符号

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。