Vi命令使用

1:首先知道vi三种模式:
命令模式、文本输入模式、末行模式

(1):命令模式,该模式下只接受vi命令,若输入的字符是合法的 vi 命令,则 vi 在接受用户命令之后完成相应的动作。若输入的字符不是 vi 的合法命令,vi 会响铃报警。
(2):文本输入模式:在命令模式下输入插入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被 vi 当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按下Esc键即可。
(3):末行模式:也称 ex 转义模式,在命令模式下,用户按:键即可进入末行模式下,此时 vi 会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个:作为末行模式的说明符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,vi 自动回到命令模式。

三者之间如何切换?
Snipaste_2019-08-12_18-01-10.png
2:命令
(1):打开

vi (可加路径打开某文件,不存在时创建)
如果只输入 vi,而不带文件名,也可以进入 vi。这时编辑的文件是没有文件名的,所以在退出 vi 时,需要在退出命令后输入文件名,这样才能保证该文件被保存在磁盘中。

vi +行号  文件名       打开某文件,且光标处于指定行号的一行行首
vi  行号   文件名       光标处于文件最末行
vi +/模式字符串  文件名   打开后光标就处于文件中第一个与指定模式串相匹配的那行行首
:set nohlsearch   取消高亮显示
vi 需要打开文件的通配符     vi 可以同时编辑多个文件,写入要操作的文件,还可以使用通配符
(2):编辑

(2.1) 插入文本命令

    i(insert缩写),切换进入输入模式
    I(Insert before line),在当前行的最顶端输入

(2.2) 追加文本命令

    a(append缩写),在当前光标所在位置追加内容
    A(Append after line),在当前行的最末尾追加内容

(2.3) 空行插入命令

    o(open a new line below),在当前行的下一行输入,即换行
    O(Open a line above),在当前行的上面插入一行
(3):删除

(3.1) 删除单个

x 命令:删除光标处的字符。若 x 之前加上一个数字 n,则删除从光标所在位置开始向右的n个字符。

X 命令:删除光标前面的字符。若 X 之前加上数字 n,则删除从光标前面那个字符开始向左的n个字符。

(3.2) 删除多个

dd 命令:删除光标所在的整行。在 dd 前可加上一个数字 n,表示删除当前行及其后 n-1 行的内容。

D 命令或 d$ 命令:两个命令功能一样,都是删除从光标所在处开始到行尾的内容。

d0 命令:该命令删除从光标前一个字符开始到行首的内容。

dw 命令:删除一个单词。若光标在词中间,从光标开始删至词尾. dw前加数字n,表示删除n个指定单词。

d( 命令:该命令删除到上一句开始的所有字符。

d) 命令:该命令删除到下一句开始的所有字符。

d} 命令:该命令删除到上一段开始的所有字符。

d{ 命令:该命令删除到下一段开始的所有字符。

d<CR> 命令:该命令(<CR>表示回车)删除包括当前行在内的两行字符。
(4) 复制粘贴
yy 命令:复制光标所在的整行。在 yy 前可加一个数字 n,表示复制当前行及其后 n-1 行的内容。

Y 或 y$ 命令:两命令功能一样,都是复制从光标所在处开始到行尾的内容。

yw 命令:复制一个单词.若光标在词中间,从光标开始复制至词尾.yw前加数字n,表示复制n个指定的单词

y) 命令:复制到下一句幵始的所有字符。

y} 命令:复制到下一段开始的所有字符。

y<CR> 命令(<CR> 表示回车):复制包括当前行在内的两行内容。

粘贴命令
p 命令:粘贴命令,粘贴当前缓冲区中的内容。

文本选择命令
v 命令:在命令模式下进行文本选择。在需要选择的文本的起始处按下 v 键进入块选择模式,然后移动光
标到块尾处。这之间的部分被高亮显示,表示被选中。

V 命令:在命令模式下按行进行文本选择。在需要选择的文本的第一行按下 V 键,然后移动光标到块的最
后一行。这之间的所有行被高亮显示,表示被选中。

vi 编辑器支持最近编辑内容的恢复,但是由于 vi 编辑器使用寄存器存放最近内容,所以恢复能力有限。vi 编辑器使用 9 个寄存器,可以存放已经删除的 9 个最近内容,这些内容可以被恢复(最近一次删除的会在寄存器1中)

(5) 撤销
u 命令:该命令撤销上一次所做的操作。多次使用 u 命令会一步一步依次撤销之前做过的操作(在一次切
换到文本输入模式中输入的所有文本算一次操作)。

U 命令:该命令会一次性撤销自上次移动到当前行以来做过的所有操作,再使用一次 U 命令则撤销之前的
 U 命令所做的操作,恢复被撤销的内容。
(6) 重复
重复命令只能在命令模式下工作,在该模式下按下.键即可
(7) 退出
:q命令     如果退出时当前编辑文件尚未保存,则 vi 并不退出,而是继续等待用户的命令,会提示
No write since last change (use! to overrides)

:q!命令    不论文件是否改变都会强行退出 vi 编辑器,对于此命令用户应当慎用。

:w  新文件名  保存当前编辑文件,但并不退出,而是继续等待用户输入命令。在使用 w 命令时,可以再
给当前编辑文件起一个新的文件名。这个功能相当于将该文件另存为为一个新的文件

:w!  新文件名  该命令与:w命令相同,所不同的是,即使指定的新文件存在,vi 编辑器也会用当前编辑
文件对其进行替换,而不再询问用户。因此,此命令同样要慎用。

:wq  将先保存文件,然后退出 vi 返回到 shell。如果当前文件尚未取名,则需要现指定一个文件名。

:x   若当前编辑文件曾被修改过,则 vi 会保存该文件。否则 vi 直接退出,不保存该文件。
(8) 替换
r命令      该命令将当前光标所指的字符替换为提供的字符。可以在该命令之前加上数字 n,表示将从当
前字符开始的 n 个字符替换为提供的字符。

R命令    该命令会让 vi 进入 replace 模式。在此模式下,每个输入的字符都会替换当前光标下的字符
,直到输入 <Esc> 结束该模式。
(9) 光标移动

(9.1) 基本移动命令

h命令    光标左移一个字符
j命令     光标下移一行
k命令    光标上移一行
l命令     光标右移一个字符

(9.2) 按行移动

H命令   将光标移至当前屏幕的第1行,而不是整个文件的第1行,前加 上数字n,则将光标移至第n行的行首

M命令  将光标移至屏幕显示文件的中间行的行首。即如果当前屏幕已经充满,则移动到整个屏幕的中间行
,否则,移动到显示文本的那些行的中间行。

L命令  将光标移至屏幕显示文件的最底行的行首

G命令  在全文的范围内移动光标,此时的光标移动范围不再受屏幕的限制

(9.3) 按字移动-------三组命令

9.3.1 W和w命令

  w 和 W 命令将光标右移至下一个字的字首。

  这两个命令的区别在于:
  w 命令所指的字是指英文单词、标点符号和非字母字符;
  W 命令所指的字是指两个空格之间的任何内容。

9.3.2 E和e命令

    如果光标起始位置处于字内,则 e 和 E 命令将把光标移到本字字尾;如果光标起始位置处于字尾,
则 e 和 E 命令将把光标移动到下一个字的字尾。

e 和 E 命令的区别在于:
e 命令所指的字是指英文单词、标点符号和非字母字符;
E 命令所指的字是指两个空格之间的任何内容。

9.3.3 B和b命令

    如果光标处于所在字内,则 b 和 B 命令将把光标移至本字字首;如果光标处于所在字字首,则 b和
B 命令将把光标移到上一个字的字首。

两个命令的区别在于:
b 命令所指的字是指英文单词、标点符号和非字母字符;
B 命令所指的字是指两个空格之间的任何内容。

(9.4) 按段落移动光标

在vi 编辑器中,一个段落被定义为是以一个空白行开始和结束的片段.按段落移动光标的命令有以下两种。
{命令:    该命令将光标向前移至上一个段落的开头。
}命令:    该命令将光标向后移至下一个段落的开头。
(10)文本移动
1:> 命令 
    将指定的正文行向右移动,通常是右移 8 个空格。后面跟所要移动的行数,0为移动本行
2:< 命令
    将指定的正文行向左移动。其使用方式与命令相同,但是方向相反。
3:>> 命令
    将光标所在行右移 8 个空格。如果在>>命令之前给出一个数字 n,
    例如 4,则表示光标当前行及其下面的 3 行(共4行)都右移 8 个空格。
4:<< 命令
    将光标所在行左移 8 个空格。其使用与>>命令相同,但是移动方向相反。
(11)文本跨行移动
imj  将 i 行的内容移动到 j 行后面
(12)文本跨行移动
ctrl + u      将屏幕向前(文件头方向)翻滚半屏
ctrl + d      将屏幕向后(文件尾方向)翻滚半屏
ctrl + f       将屏幕向文件尾方向翻滚一整屏
ctrl + b      将屏幕向文件首方向翻滚一整屏

可以在滚屏和分页命令之前加上一个数字 n,表示屏幕向前或向后翻滚 n 行,或者屏幕向前或向后移动 n 页。这些设置会被 vi 编辑器记住,下次用户在使用滚屏和分页命令时,还会滚动和上次设置相同的行数或者页数。

(13)字符串检索命令
1:  /  命令         
    从光标处开始向后寻找字符串 error。使用示例:/error
2:  ? 命令
    从光标处开始向前寻找字符串 error。使用示例:?error
3:  n 命令
    重复检索上一条检索指令
4:g/ 命令
    使光标停止在第一个检索到的 string 串的行首
(14)字符串替换命令
格式:[range]s/s1/s2/ [option]
range 代表替换范围,省略时表示当前行。下面是一些检索范围的例子。
     1,10表示从第 1 行到 10 行。
      %表示整个文件,同1, $。
       . ,$从当前行到文件尾。
s 为替换命令。
s1 要被替换的串,s2 为替换的串。
option 表示选项:
    /g表示在全局文件中进行替换。
    /c表示在每次替换之前需要用户进行确认。
    省略时仅对每行第一个匹配串进行替换。

s1可进行模式匹配命令如下:

    \<word,表示以word开头的字符串
(15)窗口切分命令
格式:   : split文件名
      :表示进入末行模式。split 也可简写为 sp。这时窗口切分为上下两部分,
      下半部分对应原来的文件,上半部分对应新打开的文件。
切换窗口:
        Ctrl+w,然后 j      移动光标到下面的一个窗口
        Ctrl+w,然后 k     移动光标到上面的一个窗口
        Ctrl+w,然后 q     关闭当前窗口
        Ctrl+w,然后 w    移动光标到另一个窗口
(16)属性设置
1:   :set nu  显示行号           :nonu  不显示行号
2:   :set hlsearch (nohlsearch)    该命令设定搜寻字符串反白显示(或者不反白显示)。
3:    :set autoindent   语法缩进命令,显示程序语法自动缩进。
4:    :set backup(nobackup)  文件存储命令,自动储存备份文件(或者不自动备份文件)。
5:    :set all       显示选项命令,显示所有的选项。
6:    :syntax on (off)   语法高亮命令,实现程序语法高亮显示(或者不高亮显示)。
7:     :set ignorecase(noignorecase)  大小写区分命令,忽略大小写(或者区分大小写)。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容