vi 命令学习

vi 的使用
    『一般模式』、 『编辑模式』与『指令列命令模式』
一般模式: 移动光标的方法
    h 或 向左方向键( ←) 光标向左移动一个字符
    j 或 向下方向键( ↓ ) 光标向下移动一个字符
    k 或 向上方向键( ↑ ) 光标向上移动一个字符
    l 或 向右方向键( →) 光标向右移动一个字符
    如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓ " 的组合按键, 亦即
加上想要进行的次数( 数字)后,按下动作即可!、
    [Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down] 按键 ( 常用)
    [Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 ( 常用)
    [Ctrl] + [d] 屏幕『向下』移动半页
    [Ctrl] + [u] 屏幕『向上』移动半页
    + 光标移动到非空格符的下一列
    - 光标移动到非空格符的上一列
    n<space>
    那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标
    会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面
    移动 20 个字符距离。
    0 这是数字『  0 』:移动到这一行的最前面字符处 ( 常用)
    $ 移动到这一行的最后面字符处( 常用)
    H 光标移动到这个屏幕的最上方那一行
    M 光标移动到这个屏幕的中央那一行
    L 光标移动到这个屏幕的最下方那一行
    G 移动到这个档案的最后一行( 常用)
    nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个
    档案的第 20 行( 可配合 :set nu)
    gg 移动到这个档案的第一行,相当于 1G 啊!  ( 常用)
    n<Enter> 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/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为
    word2 ! ( 常用)
    :1,$s/word1/word2/gc
    从第一行到最后一行寻找 word1 字符串,并将该字符串取代为
    word2 !且在取代前显示提示字符给使用者确认 (conform) 是否
    需要取代! ( 常用)
一般模式: 删除、复制与贴上
    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 重做上一个动作。 ( 常用)
    
进入编辑模式
    a, A :a 为『从目前光标所在的下一个字符处开始插入』,  A 为『从光
            标所在行的最后一个字符处开始插入』
    o, O :这是英文字母 o 的大小写。 o 为『在目前光标所在的下一行处插
            入新的一行』;  O 为在目前光标所在处的上一行插入新的一行! ( 常
            用)
    r, R:取代: r 会取代光标所在的那一个字符; R 会一直取代光标所在的
         文字,直到按下 ESC 为止; ( 常用)
指令列命令模式     
:w  :将编辑的数据写入硬盘档案中( 常用)
:w! : 若档案属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟您对该档案的档案权限有关啊!

一个案例练习
来来来!测试一下您是否已经熟悉 vi 这个指令呢?请依照底下的需求进行您的指令动作。 (底下的操作
为使用 FC4 的预设档案来进行练习的。您可以在这里下载:
http://linux.vbird.org/linux_basic/0310vi/man.config。) 看看您的显示结果与鸟哥的结果是否相同
啊?!
1. 请在 /tmp 这个目录下建立一个名为 vitest 的目录;
2. 进入 vitest 这个目录当中;
3. 将 /etc/man.config 拷贝到本目录底下(或由上述的连结下载 man.config 档案);
4. 使用 vi 开启本目录下的 man.config 这个档案;
5. 在 vi 中设定一下行号;
6. 移动到第 58 行,向右移动 40 个字符,请问您看到的双引号内是什么目录?
7. 移动到第一行,并且向下搜寻一下『 bzip2 』这个字符串,请问他在第几行?
8. 接着下来,我要将 50 到 100 行之间的 man 改为 MAN,并且一个一个挑选是否需要修改,如何
下达指令?
9. 修改完之后,突然反悔了,要全部复原,有哪些方法?
10. 我要复制 51 到 60 行这十行的内容,并且贴到最后一行之后;
11. 删除 11 到 30 行之间的 20 行;
12. 将这个档案另存成一个 man.test.config 的檔名;
13. 去到第 29 行,并且删除 15 个字符;
14. 储存后离开吧!
整个步骤可以如下显示:
1. 『 mkdir /tmp/vitest』
2. 『 cd /tmp/vitest』
3. 『 cp /etc/man.config . 』
4. 『 vi man.config』
5. 『 :set nu』
6. 先按下『 58G』再按下『 40→』会看到『 /dir/bin/foo』这个字样在双引号内;
7. 先执行『 1G』或『 gg』后,直接输入『 /bzip2』,则会去到第 116 行才对!
8. 直接下达『  :50,100s/man/MAN/gc 』即可!
9. (1)简单的方法可以一直按『  u 』回复到原始状态, (2)使用不储存离开『  :q! 』之后,再重新
读取一次该档案;
10. 『 51G』 然后再『  10yy 』之后按下『  G 』到最后一行,再给他『  p 』贴上十行!
11. 『 11G』 之后,再给他『  20dd 』即可删除 20 行了;
12. :w man.test.config
13. 『 29G』 之后,再给他『  15x 』即可删除 15 个字符;
14. 『 :wq! 』



【区块选择:】
v         字符选择,会将光标经过的地方反白选择!
V         行选择,会将光标经过的行反白选择!
[Ctrl]+v  区块选择,可以用长方形的方式选择资料
y         将反白的地方复制起来
d         将反白的地方删除掉

 IP 对应主机名称为范例,如果想要复制的是 IP 的话,而且仅想要前面四行, 那么我可以:
1. 将光标移动到第一行的第一个字符 ( 1G );
2. 然后按下 [Ctrl]+v (按着 [ctrl] 不放,再按下 v );
3. 然后移动方向键,向下向右移动数格,让整个反白区域涵盖 191.168.1.1 到 192.168.1.4 ;
4. 按下 y 复制 (此时反白会自动的不见) ;
5. 移动到任何想要插入的区域,按下 p 就可以插入刚刚复制的区块内容!举例来说,移动到第 1 行
的第 13 个字符处按下小写的 p ,看看会怎样?
【多档案编辑】
:n 编辑下一个档案
:N 编辑上一个档案
:files 列出目前这个 vim 的开启的所有档案
【多窗口功能】
多窗口情况下的按键功能
:sp          
            [filename] 开启一个新窗口,如果有加 filename, 表示在新窗口开启一个新档案,
            否则表示两个窗口为同一个档案内容(同步显示)。
[ctrl]+wj
            按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,
            然后再按下 j ,则光标可移动到下方的窗口。
[ctrl]+wk   同上,不过光标移动到上面的窗口。
[ctrl]+wq
           其实就是 :q 结束离开啦! 举例来说,如果我想要结束下方的窗口,那
           么利用 [ctrl]+wj 移动到下方窗口后,按下 :q 即可离开, 也可以按
           下 [ctrl]+wq 啊!
【vim 环境设定】

本章习题练习:
(要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看)
• 我要在某个档案的第 34 行向右移动 15 个字符,应该在一般模式下达什么指令?
• 先按下 34G 到第 24 行;
• 再按下 [ 15 + 向右键 ],或 [ 15l ] 亦可!
• 在 vi 里面, PageDown 按钮可以使用什么组合键来取代?
[Ctrl] + f 可以向后翻一页
• 如何去到 vi 该档案里面的页首或页尾?
去页首按下 1G ;去页尾按下 G 即可
• 如何在一行中,移动到行头及行尾?
移动到行头,按 0 ,移动到行尾按 $ 即可!
• vi 里面, r 有什么功能?
取代光标所在的那个字符
• 如何将目前的页面另存新档?
:w filename
• 在 linux 底下最常使用的文书编辑器为 vi ,请问如何进入编辑模式?
在一般模式底下输入: i, I, a, A 为在本行当中输入新字符;(出现 –Insert- )
在一般模式当中输入: o, O 为在一个新的一行输入新字符;
在一般模式当中输入: r, R 为取代字符!(左下角出现 –Replace-)
• 如何由编辑模式跳回一般模式?
可以按下[Esc]
• 若上下左右键无法使用时,请问如何在一般模式移动光标?
[h, j, k, l]分别代表[左、下、上、右]
• 若 [pagedown] [ pageup] 在一般模式无法使用时,如何往前或往后翻一页?
向下翻 [Ctrl] + [f]
向前翻 [Ctrl] + [b]
• 如何到本档案的最后一行、第一行;本行的第一个字符、最后一个字符?
分别为:G, 1G, 0, $
• 如何删除一行、n 行;如何删除一个字符?
分别为 dd, ndd, x 或 X (dG 及 d1G 分别表示删除到页首及页尾)
• 如何复制一行、n 行并加以贴上?
分别为 yy, nyy, p 或 P
• 如何搜寻 string 这个字符串?
?string (往前搜寻)
/string (往后搜寻)
• 如何取代 word1 成为 word2,而若需要使用者确认机制,又该如何?
:1,$s/word1/word2/g 或
:1,$s/word1/word2/gc (需要使用者确认)
• 如何读取一个档案 filename 进来目前这个档案?
:r filename
• 如何另存新档成为 newfilename?
:w newfilename
• 如何存档、离开、存档后离开、强制存档后离开?
:w; :q: :wq; :wq!
• 在 vi 底下作了很多的编辑动作之后,却想还原成原来的档案内容,应该怎么进行?
直接按下 :e! 即可恢复成档案的原始状态!
• 我在 vi 这个程序当中,不想离开 vi ,但是想执行 ls /home 这个指令,vi 有什么额外的功能可以
达到这个目的:
事实上,可以使用[ :! ls /home ]不过,如果你学过后面的章节之后,你会发现,执行[ ctrl + z ]亦可
暂时退出 vi 让你在指令列模式当中执行指令喔!
• 如何设定与取消行号?
:set nu
:set nonu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值