VI程序编辑器

六眼飞鱼酱① 提交于 2019-12-31 14:32:07

目的因:为什么学习vi?

  1. 所有Unix LIke系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在;
  2. 很多个别软件的编辑接口都会主动调用vi;
  3. 程序简单,编辑速度相当快速;
    一、VI的使用
    基本上vi共分为三种模式,分别为“一般指令模式”、“编辑模式”、“命令行命令模式”
    **一般指令模式:**以vi打开一个文件就直接进入一般指令模式了,在一般模式中,你可以使用各种方式找到你要编辑的内容,也就是你可以使用“上下左右”按键来移动光标,也可以使用“删除字符”或“删除整行”来处理内容,也可以使用“复制”、“粘贴”来处理你的文件数据。
    **编辑模式:**在一般指令模式中可以进行删除、复制、粘贴等动作,但是却无法真正编辑文本的内容,要想真正编辑文本内容,需要按下“i,I,o,O,a,A,r,R”等任何一个字母之后才会进入编辑模式。
    **命令行命令模式:**在一般指令模式中,输入“:/?”三个中任何一个都可以将光标移动到最下面那一行,在这个模式中,可以提供你“搜索数据”的动作,而读取、存盘、大量取代字符、离开vi、显示行号等等的动作则是在此模式中达成的。

按键说明:
第一部分:一般指令模式可用的按钮说明,光标移动、复制粘贴、搜索取代等。
光标移动的方法:以光标自己为参照物。
在一行中,光标根据字符移动:
h或向左方向键←------光标向左移动一个字符
l或向右方向键→------光标向右移动一个字符
j或向下方向键 ↓------光标向下移动一个字符
k或向上方向键↑------光标向上移动一个字符
n------那个 n 表示“数字”, 例如 20 。 按下数字后再按空白键, 光标会向右移动这一行的 n 个字符。 例如 20则光标会向后面移动 20个字符距离。
0 或功能键[Home] 这是数字“ 0 ”------ 移动到这一行的最前面字符处( 常用)
$ 或功能键[End] ------移动到这一行的最后面字符处( 常用)
关于屏幕的移动:
[Ctrl] + [f] ------屏幕“向下”移动一页,相当于 [Page Down]按键 ( 常用)
[Ctrl] + [b] ------屏幕“向上”移动一页, 相当于 [Page Up] 按键( 常用)
[Ctrl] + [d] ------屏幕“向下”移动半页
[Ctrl] + [u] ------屏幕“向上”移动半页
H------ 光标移动到这个屏幕的最上方那一行的第一个字符
M------ 光标移动到这个屏幕的中央那一行的第一个字符
L ------光标移动到这个屏幕的最下方那一行的第一个字符

  • ------光标移动到非空白字符的下一行
  • ------光标移动到非空白字符的上一行
    关于行的移动:
    G ------移动到这个文件的最后一行( 常用)
    nG------n 为数字。 移动到这个文件的第 n 行。 例如20G 则会移动到这个文件的第 20 行( 可配合:set nu)
    gg------移动到这个文件的第一行, 相当于 1G 啊!( 常用)
    n ------n 为数字。 光标向下移动 n 行( 常用)
    搜寻与取代:
    /word------向光标之下寻找一个名称为 word 的字串。 例如要在文件内搜寻 vbird 这个字串, 就输入/vbird 即可! ( 常用)
    ?word------ 向光标之上寻找一个字串名称为 word 的字串。
    n------这个 n 是英文按键。 代表“重复前一个搜寻的动作”。 举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字串, 则按下n 后, 会向下继续搜寻下一个名称为 vbird 的字串。 如果是执行 ?vbird 的话, 那么按下 n则会向上继续搜寻名称为 vbird 的字串!
    N------这个 N 是英文按键。 与 n 刚好相反, 为“反向”进行前一个搜寻动作。 例如 /vbird 后, 按下 N 则表示“向上”搜寻 vbird 。
    :n1,n2s/word1/word2/g------n1 与 n2 为数字。 在第 n1 与 n2 行之间寻找word1 这个字串, 并将该字串取代为 word2! 举例来说, 在 100 到 200 行之间搜寻 vbird并取代为 VBIRD则: “:100,200s/vbird/VBIRD/g”。 ( 常用)
    :1,s/word1/word2/gword1word2:1,s/word1/word2/g ------从第一行到最后一行寻找 word1 字串, 并将该字串取代为 word2 ! ( 常用) :1,s/word1/word2/gc------从第一行到最后一行寻找 word1 字串, 并将该字串取代为 word2 ! 且在取代前显示提示字符给使者确认 ( confirm) 是否需要取代! ( 常用)
    删除、 复制与粘贴:
    x, X------在一行字当中, x 为向后删除一个字符 ( 相当于 [del] 按键) , X 为向前删除一个字符( 相当于 [backspace] 亦即是倒退键) ( 常用)
    nx------n 为数字, 连续向后删除 n 个字符。 举例来说, 我要连续删除 10 个字符, “10x”。
    dd ------删除光标所在的那一整行( 常用)
    ndd ------n 为数字。 删除光标所在的向下 n行, 例如20dd 则是删除 20 行 ( 常用)
    d1G------ 删除光标所在到第一行的所有数据
    dG ------删除光标所在到最后一行的所有数据
    d$ ------删除光标所在处, 到该行的最后一个字符
    d0 ------那个是数字的 0 , 删除光标所在处, 到该行的最前面一个字符
    yy ------复制光标所在的那一行( 常用)
    nyy------n 为数字。 复制光标所在的向下 n 行, 例如20yy 则是复制 20 行( 常用)
    y1G------ 复制光标所在行到第一行的所有数据
    yG ------复制光标所在行到最后一行的所有数据
    y0------ 复制光标所在的那个字符到该行行首的所有数据
    y$ ------复制光标所在的那个字符到该行行尾的所有数据
    p, P------p 为将已复制的数据在光标下一行贴上, P 则为贴在光标上一行! 举例来说, 我目前光标在第 20行, 且已经复制了 10 行数据。 则按下 p 后, 那 10 行数据会贴在原本的 20行之后, 亦即由 21 行开始贴。 但如果是按下 P呢? 那么原本的第 20 行会被推到变成 30行。 ( 常用)
    J ------将光标所在行与下一行的数据结合成同一行
    c------重复删除多个数据, 例如向下删除 10 行, [10cj ]
    u ------复原前一个动作。 ( 常用)
    [Ctrl]+r ------重做上一个动作。 ( 常用)
    第二部份: 一般指令模式切换到编辑模式的可用的按钮说明:
    进入插入或取代的编辑模式:
    i, I 进入插入模式( Insert mode) ------ i为“从目前光标所在处插入”, I为“在目前所在行的第一个非空白字符处开始插入”。( 常用)
    a, A进入插入模式( Insert mode) ------ a为“从目前光标所在的下一个字符处开始插入”, A 为“从光标所在行的最后一个字符处开始插入”。( 常用)
    o, O进入插入模式( Insert mode) ------这是英文字母 o 的大小写。 o为“在目前光标所在的下一行处插入新的一行”; O 为在目前光标所在处的上一行插入新的一行! ( 常用)
    r, R进入取代模式( Replacemode) ------ r 只会取代光标所在的那一个字符一次; R会一直取代光标所在的文字, 直到按下 ESC 为止; ( 常用)
    第三部份: 一般指令模式切换到命令行界面的可用按钮说明:
    命令行界面的储存、 离开等指令
    :w ------ 将编辑的数据写入硬盘文件中( 常用)
    :w! ------ 若文件属性为“只读”时, 强制写入该文件。 不过, 到底能不能写入, 还是跟你对该文件的文件权限有关啊!
    :q ------ 离开 vi ( 常用)
    :q! ------ 若曾修改过文件, 又不想储存, 使用 ! 为强制离开不储存盘案。
    :wq ------ 储存后离开, 若为 :wq! 则为强制储存后离开 ( 常用)
    ZZ ------ 这是大写的 Z 喔! 若文件没有更动, 则不储存离开, 若文件已经被更动过, 则储存后离开!
    :w [filename] ------ 将编辑的数据储存成另一个文件( 类似另存新文件)
    :r [filename] ------ 在编辑的数据中, 读入另一个文件的数据。 亦即将“filename” 这个文件内容加到光标所在行后面
    :n1,n2 w [filename] ------ 将 n1 到 n2 的内容储存成 filename 这个文件。
    :! command ------ 暂时离开 vi 到命令行界面下执行 command 的显示结果! 例如 “:! ls /home”即可在 vi 当中察看 /home 下面以ls 输出的文件信息!
    vim 环境的变更:
    :set nu ------ 显示行号, 设置之后, 会在每一行的字首显示该行的行号
    :set nonu ------ 与 set nu 相反, 为取消行号!

vim的额外功能:

区块选择( Visual Block):
当按下 v 或者 V 或者 [Ctrl]+v 时,这个时候光标移动过的地方就会开始反白, 这三个按键的意义分别是:
v ------ 字符选择, 会将光标经过的地方反白选择!
V ------ 列选择, 会将光标经过的行反白选择!
[Ctrl]+v ------ 区块选择, 可以用长方形的方式选择数据。
y ------ 将反白的地方复制起来。
d ------ 将反白的地方删除掉。
p ------ 将刚刚复制的区块, 在光标所在处贴上!

多文件编辑:

多文件编辑的按键:
:n------ 编辑下一个文件
:N ------编辑上一个文件
:files ------列出目前这个 vim 的打开的所有文件

多窗口功能:

多窗口功能应用的场景:

  • 当我有一个文件非常的大, 我查阅到后面的数据时, 想要“对照”前面的数据, 是否需要使用 [ctrl]+f 与 [ctrl]+b ( 或 pageup, pagedown 功能键) 来跑前跑后查阅?
  • 我有两个需要对照着看的文件, 不想使用前一小节提到的多文件编辑功能;
    多窗口情况下的按键功能
    :sp[filename]------ 打开一个新窗口, 如果有加 filename, 表示在新窗口打开一个新文件, 否则表示两个窗口为同一个文件内容( 同步显示) 。
    [ctrl]+w+ j或[ctrl]+w+↓------按键的按法是: 先按下 [ctrl] 不放, 再按下 w 后放开所有的按键, 然后再按下 j ( 或向下方向键) , 则光标可移动到下方的窗口。
    [ctrl]+w+ k或[ctrl]+w+↑ ------同上, 不过光标移动到上面的窗口。
    [ctrl]+w+q------其实就是 :q 结束离开啦! 举例来说, 如果我想要结束下方的窗口, 那么利用 [ctrl]+w+↓ 移动到下方窗口后, 按下 :q 即可离开, 也可以按下[ctrl]+w+q 啊!

vim 的挑字补全功能

|组合按钮 |补齐的内容 |
|-[ctrl]+x -> [ctrl]+n-|-通过目前正在编辑的这个“文件的内容文字”作为关键字, 予以补齐-|
|[ctrl]+x -> [ctrl]+f | 以当前目录内的“文件名”作为关键字, 予以补齐|
|[ctrl]+x -> [ctrl]+o |以扩展名作为语法补充, 以 vim 内置的关键字, 予以补齐 |

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!