vi常用命令
输入模式命令
输入
命令作用
<a> 在光标后输入文本
<A> 在当前行末尾输入文本
<i> 在光标前输入文本
<I> 在当前行开始输入文本
<o> 在当前行后输入新一行
<O> 在当前行前输入新一行
光标移动命令
光标移动
命令作用
0移动到光标所在列的最前面[Home]
$移动到光标所在列的最後面[End]
[CTRL][d]向下半页[PageDown]
[CTRL][f]向下一页
[CTRL][u]向上半页
[CTRL][b]向上一页[PageUp]
H移动到视窗的第一列
M移动到视窗的中间列
L移动到视窗的最後列
b移动到下个字的第一个字母
w移动到上个字的第一个字母
e移动到下个字的最後一个字母
^移动到光标所在列的第一个非空白字元
n-减号移动到上一列的第一个非空白字元前面加上数字可以指定移动到以上 n 列
n+加号移动到下一列的第一个非空白字元前面加上数字可以指定移动到以下 n 列
nG直接用数字 n 加上大写 G 移动到第 n 列
)光标所在位置到下个句子的第一个字母
(光标所在位置到该句子的第一个字母
}光标所在位置到该段落的最後一个字母
{光标所在位置到该段落的第一个字母
<h> 向前移动一个字符
<j> 向上移动一行
<k> 向下移动一行
<l> 向后移动一个字符
fx
往右移动到 x 字符上
Fx
往左移动到 x 字符上
tx
往右移动到 x 字符前
Tx
往左移动到 x 字符后
(注意:以上四个命令中,其中x是键入的字符)
;
分号,配合 f 和 t 使用,重复一次
,
逗号,配合 f 和 t 使用,反方向重复一次
% - 移至匹配的括号
shift +G 跳到文件尾
交换两个字符位置
xp
上下两行调换
ddp
把文件内容反转
:g/^/m0/
删除操作命令
删除操作
命令作用
<x> 删除光标所在的字符
<dw> 删除光标所在的单词
<d$> 删除光标至行尾的所有字符
<D> 同<d$>
<dd> 删除当前行
可在删除命令前加上数字,如<5x>表示删除5行。
改变与替换操作命令
改变与替换操作
命令作用
<r> 替换光标所在的字符
<R> 替换字符序列
<cw> 替换一个单词
<ce> 同<cw>
<cb> 替换光标所在的前一字符
<c$> 替换自光标位置至行尾的所有字符
<C> 同<c$>
<cc> 替换当前行
全文替换:“g/被替换字符串/s//替换字符串/g”
>>
<<
查询命令
查询
命令作用
</abc> 向前查询abc
<?abc> 向后查询abc
<n> 向前继续查询
<N> 向后继续查询
拷贝与粘贴命令
命令作用
/yw 将光标所在单词拷入剪贴板
y$ 将光标至行尾的字符拷入剪贴板
Y 同<y$>
yy 将当前行拷入剪贴板
p 将剪贴板中的内容粘贴在光标后
P 将剪贴板中的内容粘贴在光标前
文件编辑、保存及退出vi命令
命令作用
:q 不包存退出
:q! 不保存强制性退出
:w 保存编辑
:wfilename 存入文件filename中
:w!filename 强制性存入文件filename中
:wq / :x / ZZ 保存退出
编辑数个文件(利用vi filename(s))进入vi后)
:args 显示编辑名单中的各个文件名
:n读入编辑名单中的下一个文件
:rew读入编辑名单中的第一个文件
:e#读入编辑名单内的前一个文件
:e file 读入另一个文件进vi(此文件可不在编辑名单内),
若原文件经修改还没有存档,则应先以: w 存档。
:e! file强迫读入另一个文件进入vi,原文件不作存档动作。
:!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并且将各指定文件列入名单内,第一个文件先读入。
清理掉DOS文本中的^M,可以在:1,$s/^M//g,其中^是用CTRL+v上去的M是回车形成的
正则表达式
在查找、替换命令 使用以下正则表达式元字符,功能强大。
也可用在:g/命令中
& 代表最近匹配串
~ 代表最近替换串
. 任一字符
^ 行首 或 表示 非
$ 行末
/< 词首
/> 词尾
* 0次或多次
/( /) 分节指定与其中正则式匹配的部分,在替换时候可以用 /1 /2 /3 ... 引用匹配部分
[] 表示选择
- 表示范围 ,例如 [0-9]代表数字,[a-z]代表小写字母 [^0-9a-zA-Z] 代表非数字和大小写字母
/{m,n/} 前面部分的从 m 次 至 n 次出现,m n 为数值
/{m/} 精确m次出现
/{m,/} 大于等于m次出现
以下举几例子,欢迎大家提出问题来共同探讨。
1.在20列后插入串
:%s/^./{20/}/&insert something here/g
2.把C++语言里 //注释 修改为 /* */ 格式
:%s//(.*/)$*/1/*///g
3.在建存储过程的sql文本里,在每个create procedure procname()
前加上drop procedure procname ; [ ]里输入的是一个空格和TAB键。
:%s/^[ ]*[cC][rR][eE][Aa][tT][eE][ ]*[pP][Rr][oO][cC][eE][dD][uU][rR][eE][
]*/([^()*/]/drop procedure /1;Ctrl_VCtrl_Mcreate procedure /1/g
宏命令
首先,宏的实质是将命令存储在寄存器中,如下是错误的
qa
"ayw
q
寄存器a冲突,宏挺有用的
vi的配置文件
另一方面,用户可以在主目录中创建.exrc环境文件,用set打入
选项,每次调用vi时,就会读入.exrc中的指令与设置。下面是
.exrc环境文件的实例:
set wrapmarging=8
set showmode
set autoindent
set number
vim配置文件:
set nobackup
set directory=$VIM/swp "There stores all vim swap files
set ignorecase smartcase "/C to force vim to search case sensibly.
set linebreak "let vim don't split a word when linewrap, note: line doesn't be split really
if has('multi_byte_ime')
highlight Cursor guibg=Green guifg=NONE
highlight CursorIM guibg=Purple guifg=NONE
endif
set autoindent
set smartindent
set tabstop=4 "treat <TAB> as four spaces, stores <TAB> instead of spaces
set shiftwidth=4 "be used only when "<<" command is pressed
"Turn off IME when insert mode and search mode
set iminsert=0
set imsearch=-1