VI常用命令总结——N年前的老贴

yhb7805 2005-10-19 11:42:39
输入模式命令
输入

命令作用
<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

...全文
1488 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
walkany 2005-10-26
  • 打赏
  • 举报
回复
谢谢了
jack_wq 2005-10-26
  • 打赏
  • 举报
回复
谢谢,收下了
goldpony 2005-10-26
  • 打赏
  • 举报
回复
ding
「已注销」 2005-10-24
  • 打赏
  • 举报
回复
ding
yxg80 2005-10-21
  • 打赏
  • 举报
回复
好帖,顶一个!
xiaotiandog 2005-10-21
  • 打赏
  • 举报
回复
好帖,顶一个!
YanDong_8212 2005-10-20
  • 打赏
  • 举报
回复
强烈建议用VIM
make1me1laugh 2005-10-20
  • 打赏
  • 举报
回复
没什么价值
哪儿都是
vi本身的man也很好
steel007 2005-10-20
  • 打赏
  • 举报
回复
顶~~收入faq吧~
x86 2005-10-19
  • 打赏
  • 举报
回复
感觉csdn的论坛还是有很多欠缺,用起来不是很方便。举个小例子,几页之前
的帖子估计就不会有多少人光顾了,更不用说N年前的帖子(估计都找不到了)

还有那个FAQ不知道有没有人看,整理FAQ经常会出错,也不知道是不是因为
浏览器(firefox)兼容问题。

其实这样的帖子放在FAQ里面挺合适的。
yhb7805 2005-10-19
  • 打赏
  • 举报
回复
很久以前在CSDN论坛总结的一个贴子,不过总结这个帖子的人大概都不在了吧?
大家继续努力吧。
hundlom 2005-10-19
  • 打赏
  • 举报
回复
鼓励楼主!!!!
谢谢
  • 打赏
  • 举报
回复
这个东西google一下,很多的
gongdath 2005-10-19
  • 打赏
  • 举报
回复
支持
yhb7805 2005-10-19
  • 打赏
  • 举报
回复
有一些命令的说明不详细,而且肯定也不全,应该继续写下去。
NNBWOLF 2005-10-19
  • 打赏
  • 举报
回复
xuexi
yjf7888 2005-10-19
  • 打赏
  • 举报
回复
唔,支持了

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧