来自菜鸡的学习笔记

关于Linux的vi/vim的操作

vi介绍

vi是由加州大学伯克利分校 Bill Joy 开发的文本编辑器,vi只能是编辑字符,不能编辑字体或对段落进行排版。vi的设计目的是为了不使用鼠标,方便快速的编辑文本。

vi的三种状态

  • 命令模式(command mode)

    输入命令,控制屏幕光标的移动;字符、字或行的删除

  • 插入模式(insert mode)

    文字输入、各种编辑

  • 末行模式(last line mode)

    文件保存或退出,设置编辑环境,如寻找字符串、列出行号……

三种状态的切换

(1)在操作系统提示符下键入vi ,默认进入命令模式
(2)由命令模式进入输入方式,键入编辑命令,如:插入命令 i
(3)由命令模式进入末行模式,只需键入冒号(:),每次只执 行一条,执行完毕立即回到命令模式
(4)其他模式按 ESC 键,可回到命令模式。
(5)编辑模式和末行模式之间不能直接切换,须通过命令模 式。

vi/vim使用实例

在文本模式下直接输入 #vi mydoc

vi/vim的详细使用

1、显示行号

末行模式下键入 :set number 或 :set nu

2、移动光标

h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符

3、行移动

0或 Home : 光标移动到本行行首
$或 End : 光标移动到本行行尾

4、跳到指定的行

[行号]G : 转到行号位置
G : 转到文件最后一行
gg : 转到文件第一行

5、屏幕滚动

ctrl+u 将屏幕向文件头方向翻滚半屏
ctrl+d 将屏幕向文件尾方向翻滚半屏
ctrl + f 将屏幕向文件 尾 方向翻滚一整屏
ctrl + b 将屏幕向文件 头 方向翻滚一整屏

1、文本插入

进入文本编辑方式:
i 插入当前字符前
I 插入当前行头 a 插入当前字符后
A 插入当前行尾
o 插入当前行下一行
O 插入当前行上一行

2、文本删除

dd: 删除当前行
ndd: 删除从当前行起的n行
x: 删除光标处的字符
nx: 删除光标位置起的右n个字符
X : 删除光标前的字符
nX: 删除光标位置前的左n个字符
D或 d$: 删除光标起到行尾的内容
d0: 删除光标前一个字符到行首的内容
dw: 删除一个单词  ndw: 删除n个单词

3、恢复

u: 取消上一次的编辑动作(可多次)
U: 取消在本行所有的编辑动作
重复命令(.): 再一次执行刚执行过的命令

4、修改文本

c object: 改变光标位置起到object位置的内容.
C 或c$: 改变光标位置起到行尾的内容.
nC : 改变光标位置起的n行内容
cc: 改变当前行的内容.
ncc : 改变当前行起n行的内容

5、文本的搜索与替换

搜索: /word 查找word
(1)命令模式下键入 / 键,在窗口底部显示符号 / ,在光标处键入待搜索字符 串,按回车从光标当前位置向下搜索字符串
(2)命令模式下键入 ? 键,从光标当前位置向上搜索字符串

查找命令:
n: 继续向前查找 ( / 和 ? 方向不同)
N: 与n反向查找
替换:
s: 用跟随在其后的字符串替换光标位置的字符
ns: 用跟随在其后的字符串替换光标位置起的n个字符
S: 用跟随在其后的字符串替换当前行
nS: 用跟随在其后的字符串替换当前行起的n 行 /g 全局操作

举例:
:s/vivian /sky /g 替换当前行所有 vivian 为 sky ;
:n,$s/vivian /sky /g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sk;

6、行移动

命令模式(实质是先把要移动的n行先删除,然后粘贴到目的行)步骤如下:

(1) 将光标移到要移动的n行行首
(2) ndd命令
(3) 将光标移到目的行处
(4) 键入p,将被删除的n行粘贴到当前行.

使用末行模式:

:n1,n2 m k
将从n1行到n2行的文本移动到k行处,其中m是移动命令

7、拷贝文本

命令模式:
第一步:拷贝

拷贝一行(从当前行):yy nyy : 表示拷贝从光标所在的该行“往下数”n行文字
第二步:粘贴 将光标移到目标位置,按命令 p

末行模式:

用co命令一步即可,例:
:1,5 co 20 #将1到5行拷贝到20行下。
:’a, ’b co #将ab标识行拷贝到当前行下。

8、文本块快速处理
VISUAL BLOCK(文本块处理功能-批量注释、删除)

命令模式下输入: ctrl+v 底部显示为 – VISUAL BLOCK – ,然后移动光标(按e快速移动下个单词,按$快速移动到行尾)

插入 I
复制 y
剪切(删除) d
粘贴 p