zoukankan      html  css  js  c++  java
  • 鸟哥的linux私房菜——第九章学习(vim编辑器)

    第九章vim编辑器

    1.0)、vivim

    Linux下文本界面的文书编辑器通常会有常常听到的就有: emacs, pico, nano, joe, vim 等等。

    vi的优势:

    • 所有的 Unix Like 系统都会内置 vi 文书编辑器,其他的文书编辑器则不一定会存在;
    • 很多个别软件的编辑接口都会主动调用 vi (例如未来会谈到的 crontab, visudo, edquota 等指令);
    • vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计;
    • 因为程序简单,编辑速度相当快速。

    而vim 是 vi 的进阶版本,vim 会依据文件的扩展名或者是文件内的开头信息,判断该文件的内容而自动的调用该程序的语法判断式,再以颜色来显示程序码与一般信息。而且一般情况下我们习惯称vim是“程序编辑器”而不是文本编辑器。

    1.1)、vi的三种模式

    • Command mode:一般指令模式:可以进行复制,粘贴,删除整行,左右移动光标等操作;
    • Insert mode:编辑模式:在一般指令模式下当按下“iIoOaArR”中任意字符时,可以进入编辑模式,此时会出现INSERT或REPLACE字样;返回一般指令模式需要按“ESC”按键;
    • Command-line mode:指令行模式:输入“:/?”任意字符可以进入指令列模式,可以进行搜寻数据,读取,存盘,离开vi等动作。【注:鸟哥称之为指令列模式,我将其称之为指令行模式】

    注意:一般指令模式和编辑模式可以互相切换,而编辑模式和指令行模式不可切换。

    创建一个文件,输入内容并保存离开:

    1. 使用“ vi filename ”进入一般指令模式;
    2. 按下 i 进入编辑模式,开始编辑文字;
    3. 按下 [ESC] 按钮回到一般指令模式
    4. 进入指令列模式,文件储存并离开 vi 环境:存盘 write 并离开 quit 的指令很简单,输入“:wq”即可存盘离开!

    如果你的文件权限不对,例如为 -r--r--r-- 时,那么可能会无法写入,此时可以使用“强制写入”的方式吗?可以!使用“ :wq! ”多加一个惊叹号即可。

    【命令大总结(超级有用)】

    第一部份:一般指令模式可用的按钮说明,光标移动、复制贴上、搜寻取代等:

     

    快捷键

    含义

     

     

     

     

    移动

    ↑或k

    向上

    ↓或j

    向下

    ←或h

    向左

    →或l

    向右

    Home或0

    移动到本行最前面

    End或 $

    移动到本行最后面

    H

    移动到最前面一行

    G

    移动到最后面一行

    gg

    移动到最前面一行

     

     

     

     

    查找与取代

     

    /word

    向光标之寻找一个名称为word的字符串,例如要搜寻gjm字符串,就输入/gjm

     

    ?word

    向光标之寻找一个名称为word的字符串

    n

    重复刚才的动作

     

     

    :n1,n2s/word1/word2/g

    n1,n2为数字,在第n1行与n2行之间寻找word1字串,并将该字串取代为word2,如:取代第100-200之间所有的gjm为GJM:“:100,200s/gjm/GJM/g”

    :1,$s/word1/word2/g

    在第1行与最后一行之间寻找word1字串,并将该字串取代为word2

    :1,$s/word1/word2/gc

    同上,加询问(confirm)

     

     

     

    复制,粘贴,删除

    dd

    删除光标所在行

    ndd

    删除光标所在的向下n行

    yy

    复制光标所在行

    nyy

    复制光标所在的向下n行

    P或p

    粘贴

    .

    小数点,重复删除/粘贴

    第二部份:一般指令模式切换到编辑模式可用的快捷键说明

     

    快捷键

    含义

    进入插入模式

    i或Insert

    从光标所在处插入

    进入取代模式

    r

    取代光标所在的字符一次

    R

    一直取代光标所在的字符,

    直至Esc

    退回一般指令模式

    Esc

    退出编辑模式

    第三部份:一般指令模式切换到指令行模式可用的快捷键说明

     

    快捷键

    含义

    存储

    :w

    将编辑的文本内容写入硬盘中

    :w!

    强制写入保存

    离开

    :q

    离开vi,不保存

    :q!

    强制离开vi,不保存

    强制性操作

    :wq

    保存后离开vi

    :wq!

    保存后强制离开vi

    另存

    :n1,n2 w [filename]

    将n1-n2行内容存储至filename文件

    行号

    :set nu

    设置行号

    :set nonu

    取消行号

    特别注意, vi 中,“数字”是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。

    实例分析

    来来来!赶紧测试一下你是否已经熟悉 vi 这个指令呢?请依照下面的需求进行指令动作。 (下面的操作为使用 CentOS 7.1 中的man_db.conf 来做练习的,该文件你可以在这里下载: http://linux.vbird.org/linux_basic/0310vi/man_db.conf。) 看看你的显示结果与我的结果是否相同啊?

    1. 请在 /tmp 这个目录下创建一个名为 vitest 的目录;

    2. 进入 vitest 这个目录当中;

    3. /etc/man_db.conf 复制到本目录下面(或由上述的链接下载 man_db.conf 文件);

    4. 使用 vi 打开本目录下的 man_db.conf 这个文件;

    5. vi 中设置一下行号;

    6. 移动到第 43 列,向右移动 59 个字符,请问你看到的小括号内是哪个文字?

    7. 移动到第一列,并且向下搜寻一下“ gzip ”这个字串,请问他在第几列?

    8. 接着下来,我要将 29 41 列之间的“小写 man 字串”改为“大写 MAN 字串”,并且一个一个挑选是否需要修改,如何下达指令?如果在挑

    选过程中一直按“y” 结果会在最后一列出现改变了几个 man 呢?

    9. 修改完之后,突然反悔了,要全部复原,有哪些方法?

    10. 我要复制 66 71 6 列的内容(含有MANDB_MAP),并且贴到最后一列之后;

    11. 113 128 列之间的开头为 # 符号的注解数据我不要了,要如何删除?

    12. 将这个文件另存成一个 man.test.config 的文件名;

    13. 去到第 25 列,并且删除 15 个字符,结果出现的第一个单字是什么?

    14. 在第一列新增一列,该列内容输入“I am a student...”;

    15. 储存后离开吧!

    答案见折叠区:

    整个步骤可以如下显示:【注意其中的行数可能都要减少两行才能和实际对应起来】
    
    1. “mkdir /tmp/vitest”
    
    2. “cd /tmp/vitest”
    
    3. “cp /etc/man_db.conf .”
    
    4. “/bin/vi man_db.conf”
    
    5. “:set nu”然后你会在画面中看到左侧出现数字即为行号。
    
    6. 先按下“43G”再按下“59→”会看到“ as ”这个单字在小括号内;
    
    7. 先执行“1G”或“gg”后,直接输入“/gzip”,则会去到第 93 列才对!
    
    8. 直接下达“ :29,41s/man/MAN/gc ”即可!若一直按“y”最终会出现“在 13 列内置换 13 个字串”的说明。
    
    9. (1)简单的方法可以一直按“ u ”回复到原始状态,(2)使用不储存离开“ :q! ”之后,再重新读取一次该文件;
    
    10. “66G” 然后再“ 6yy ”之后最后一列会出现“复制6列”之类的说明字样。 按下“ G ”到最后一列,再给他“ p ”贴上6列!
    
    11. 因为 113~12816 列,因此“ 113G ”→“ 16dd ”就能删除 16 列,此时你会发现光标所在 113 列的地方变成 “ # Flags. ” 开头啰
    
    12. “ :w man.test.config ”,你会发现最后一列出现 "man.test.config" [New].. 的字样。
    
    13. “25G” 之后,再给他“ 15x ”即可删除 15 个字符,出现“ tree ”的字样;
    
    14. 先“ 1G ”去到第一列,然后按下大写的“ O ”便新增一列且在插入模式;开始输入“I am a student...”后, 按下[Esc]回到一般指令模式等待后
    
    续工作;
    
    15. “:wq”
    
    如果你的结果都可以查的到,那么 vi 的使用上面应该没有太大的问题啦!剩下的问题会是在…打字练习…。
    
     
    View Code

    此外,还有一些其他好用的功能:

    •  区块选择(visual block)

    区块选择的意义

    v

    字符选择,会将光标经过的地方反白选择!

    V

    行选择,会将光标经过的行反白选择!

    [Ctrl]+v

    区块选择,可以用长方形的方式选择数据

    y

    将反白的地方复制起来

    d

    将反白的地方删除掉

    p

    将刚刚复制的区块,在光标所在处贴上!

    vim 常用指令示意图

    • DOSLinux的断行字符

    DOS下断行字符是 ^M$ ,我们称之为CRLF两个符号;

    Linux下断行符是 $ ,仅仅是LF

    在不同系统之间复制纯文本时,千万要记得使用unix2dosdos2unix来转换一下断行格式。

     重点回顾

    l Linux 下面的配置文件多为文本文件,故使用 vim 即可进行设置编辑;

    l vim 可视为程序编辑器,可用以编辑 shell script, 配置文件等,避免打错字;

    l vi 为所有 unix like 的操作系统都会存在的编辑器,且执行速度快速;

    l vi 有三种模式,一般指令模式可变换到编辑与指令列模式,但编辑模式与指令列模式不能互换;

    l 常用的按键有i, [Esc], :wq 等;

    l vi 的画面大略可分为两部份,(1)上半部的本文与(2)最后一行的状态+指令列模式;

    数字是有意义的,用来说明重复进行几次动作的意思,如 5yy 为复制 5 列之意;

    光标的移动中,大写的 G 经常使用,尤其是 1G, G 移动到文章的头/尾功能!

    l vi 的取代功能也很棒! :n1,n2s/old/new/g 要特别注意学习起来;

    l 小数点“ . ”为重复进行前一次动作,也是经常使用的按键功能!

    进入编辑模式几乎只要记住: i, o, R 三个按钮即可!尤其是新增一列的 o 与取代的 R

    l vim 会主动的创建 swap 暂存盘,所以不要随意断线!

    如果在文章内有对齐的区块,可以使用 [ctrl]-v 进行复制/贴上/删除的行为

    使用 :sp 功能可以分区窗口

    若使用 vim 来撰写网页,若需要 CSS 元素数据,可通过 [crtl]+x, [crtl]+o 这两个连续组合按键来取得关键字

    l vim 的环境设置可以写入在 ~/.vimrc 文件中;

    可以使用 iconv 进行文件语系编码的转换

    使用 dos2unix unix2dos 可以变更文件每一列的行尾断行字符。

    over...

  • 相关阅读:
    利用DTrace实时检测MySQl
    改进MySQL Order By Rand()的低效率
    RDS for MySQL查询缓存 (Query Cache) 的设置和使用
    RDS For MySQL 字符集相关说明
    RDS for MySQL 通过 mysqlbinlog 查看 binlog 乱码
    RDS for MySQL Mysqldump 常见问题和处理
    RDS for MySQL Online DDL 使用
    RDS MySQL 表上 Metadata lock 的产生和处理
    RDS for MySQL 如何使用 Percona Toolkit
    北京已成为投融资诈骗重灾区:存好骗子公司黑名单,谨防上当!
  • 原文地址:https://www.cnblogs.com/gjmhome/p/14236795.html
Copyright © 2011-2022 走看看