• vim编辑


    建议大家参考网上的文章:正则表达式30分钟入门教程 其中W3Cschool版本是经作者授权后整理并转载;因为vim也支持正则表达式!

    vim编辑器:文本编辑器

    何为文本?一般指纯文本,没有任何额外元素,如ASCII text;Unicode;不像world文档一样含有颜色字体大小字体格式等等
    

    文本编辑器又可以分俩类:

    • 行编辑器:比如sed
    • 全屏编辑器: 比如nano vi

    vim模式化编辑器,有以下几种模式

    • 编辑模式:即命令模式,增删修改
    • 输入模式:即插入模式
    • 末行模式:内置命令行接口

    那么如何使用vim打开文件?我们照例先man vim看看使用法则

    vim - Vi IMproved, a programmers text editor 即Vi增强版,程序员文本编辑器;这就是强者的世界吗.jpg

    vim [options] [file ..] 也可以直接vim后面跟文件

    +# 打开文件后,光标处于第#行的行首
    +/PATERN 打开文件后,直接让光标处于第一个被PATERN匹配到的行的行首
    + 打开后处于末行的行首
    

    上面我们说过vim有三种模式,那么这三种模式相互间是否可以相互转换?如何转换?

    模式转换:

    1. 编辑模式:默认模式

    编辑模式-->输入模式

    i insert在光标所在处输入
    a append在光标所在处后方输入
    o 在光标所在处的下方打开新行
    O 在光标所在处的上方输入
    I 在光标所在行的行首输入
    A 在光标所在行的行尾输入

    2. 输入模式-->编辑模式

    • Esc

    编辑模式-->末行模式

    • : 冒号

    3. 末行模式-->编辑模式

    • Esc 或两次Esc

    打开了文件就得有关闭文件的方式:

    ZZ 保存并退出

    :q 退出

    :wq 保存并退出

    :q! 不保存并强制退出

    :x 保存并退出

    :w /PATH/TO/FILE另存为

    光标跳转:须处于编辑模式

    (1)字符间跳转

    • h 向左跳转1个字符
    • l 向右跳转1个字符
    • j 向下跳转1个字符
    • k 向上跳转1个字符
    • #COMMAND 跳转由#指定的个数的字符

    (2)单词间跳转

    • w 下一个单词的词首
    • b 当前或前一个单词的词首
    • e 当前或后一个单词的词尾

    (3)行首行尾跳转

    • ^ 跳转至行首的第一个非空白字符
    • 0 跳转至行首,Tab不算
    • $ 跳转至行尾

    (4)行间跳转

    • #G 跳转至由#指定的行
    • 1Ggg 跳转至第1
    • G 跳转至最后一行

    (5)句间跳转

    • ) 下一句
    • ( 前一句

    (6)段间跳转

    • } 下一段
    • { 上一段

    翻屏操作:

    • CTRL+f 向文件尾部翻一屏
    • CTRL+b 向文件首部翻一屏
    • CTRL+d 向文件尾部翻半屏
    • CTRL+u 向文件首部翻半屏
    • enter 向文件尾部翻一行

    vim的编辑命令:须处于编辑模式

    (1)字符编辑

    • x 删除光标所在处的字符
    • #x 删除光标所在处起始往后#个字符
    • xp 交换光标所在处的字符及其后面的字符的位置

    (2)替换命令replace

    • r rCHART替换光标所在处的字符

    (3)删除命令:可结合光标跳转字符,实现范围删除;非常强大实用

    • d 删除命令;
    • dd 删除整行;同样支持组合

    (4)粘贴命令

    • p 小写p,表示缓冲区中的内容如为整行则粘贴在当前光标所在行的下方;否则粘贴至当前光标所在处的后方
    • P 大写P,表示缓冲区中的内容如为整行则粘贴在当前光标所在行的上方;否则粘贴至当前光标所在处的前方

    (5)复制命令yyank

    • y 复制,类似d命令
    • yy 复制整行

    (6)改变命令cchange

    • 编辑模式-->输入模式,并实现删除操作

      • 类似d命令,同样支持组合

    (7)其它编辑操作

    可视化模式:类似Windows用鼠标选中并拖动来选择大片区域

    • v 小写v,按字符选定
    • V 大写V,按行选定

      二者均可组合`d` `p` `y` `c`等命令实现批量范围操作
      

    撤销命令undo

    • u 撤销此前操作,默认最近50次操作
    • #u 撤销此前的#个操作

    撤销此前撤销recovery

    • CTRL+r 撤销此前撤销的操作

    重复执行前一个编辑操作

    • . 点号

    vimtutorvim自带的练习教程,朋友们有空也可以上去练练.

    我们再来讲讲vim的末行模式

    `vim`末行模式:内嵌命令行接口

    列举如下几项常用功能

    (1).地址定界

    start_post[,end_post]
    • # 特定的第#行,如5即第五行
    • . 点号,表示当前行
    • $ 最后一行
    • #,# 指定行范围,左侧为起始行,右侧为结束行,须配合d y c实现各种骚操作
    • #,+# 指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量,如3,+7,操作同上

      /PATTERN/ 从光标所在处起始向文件尾部第一次被模式所匹配到的行
      • .,$-1 当前行到最后一行
      • % 全文

    • /first/,$
    • /part1/,/part2/ 从光标所在处起始,由第一次part1匹配到的行开始至第一次由part2匹配到的行结束之间的所有行

      • 可通编辑命令一同使用,实现编辑操作

        • d y c
        • w /PATH/TO/SOMEFILE 将范围内的文本保存至指定的文件中
        • r /PATH/FROM/SOMEFILE 将指定的文件中的文本读取并插入至指定位置

    (2).查找

    /PATTERN 从当前光标所在处向文件尾部查找能够被当前模式匹配到的字符串

    ?PATTERN 从当前光标所在处向文件首部查找能够被当前模式匹配到的字符串

    • n 下一个,与命令方向相同
    • N 上一个,与命令方向相同

    (3).查找并替换,s末行模式命令;

    s/查找内容/替换为的内容/修饰符

    • 查找的内容: 可使用正则表达式
    • 替换为内容: 不可使用正则表达式,但可引用

      • 如要查找内容在模式中使用了分组符号,可在"替换为的内容"中使用后向引用
      • 直接引用查找模式匹配到的全部文本,需要使用&
    • 修饰符:

      • i 忽略大小写
      • g 全局替换;意味着一行中如果匹配多次,则全部替换

    注意:可以使用其它常用字符代替/,如@ #

    实例

    :%s@<s([[:alpha:]]+)>@S1@g 将当前文本中所有以s开头的单词全部换成S开头

    是不是感觉跟看天书一样?我们来一一解释!

    %全文查找 
    <s锚定词首为s 
    ([[:alpha:]]+)分组引用括号内的"匹配所有字符至少一次"详情请看上一章正则表达式 
    >锚定词尾 
    1引用前面括号内匹配到的字符次数1 
    大写的S是要替换的字符

    :%s@<n[[:alpha:]]+>@&er@g 将当前文本中所有以n开头的单词后面全部加上er

    参考上面的解释即可,&er表示引用的单词后面加er
    

    :%s@^#@@g 将当前文本中所有以#号开头的行的#号全部删除掉,@@之间没有字符代表为空即删除

    经过上面几条命令与解释,相信大家有所了解了吧?没有?请看以下练习题再次熟悉一下!
    

    练习题1.复制/etc/grub2.cfg文件至/tmp目录下,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的空白字符

    [sanxi@test-edu ~]$ sudo cp -v /etc/grub2.cfg /tmp/
    ‘/etc/grub2.cfg’ -> ‘/tmp/grub2.cfg’
    [sanxi@test-edu ~]$ vim /tmp/grub2.cfg
    :%s@^ +@@g 全文查找行首锚定空白字符且重复次数至少为`1`替换为空即删除空白字符,全局;本人写的空格符最好不用 ,而是`[[:space:]]`
    

    练习题2. 复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/fuctions文件的每个以空白字符开头的行的行首加上#

    [sanxi@test-edu ~]$ sudo cp -v /etc/rc.d/init.d/functions /tmp/   
    ‘/etc/rc.d/init.d/functions’ -> ‘/tmp/functions’
    [sanxi@test-edu ~]$ vim /tmp/functions
    :%s@(^ )@&#1@g  解释同上,建议使用[[:space:]]而不是 空格键打出来的空白字符
    %s@^[[:space:]]@#&@g 因此,可以这样
        

    练习题3. 为/tmp/grub2.cfg文件的前三行的行首加上#

    练习题4. 将/etc/yum.repos.d/Centos-Base.repo文件中所有的enable=0替换为enable=1,所有gpgcheck=1

    [sanxi@test-edu ~]$ sudo vim /etc/yum.repos.d/CentOS-Base.repo
    

    大家还记不记得在Windows上我们可以非常轻松方便地同时打开多个文档同时显示多个窗口?其实vim也可以做到的,怎么做到呢,请看下面

    vim的多文件功能

    vim FILE1 FILE2......

    vim在文件中切换可使用以下方式

    • :next 下一个
    • :prev 上一个
    • :first第一个
    • :last 最后一个

    退出所有文件:

    • :wqall 保存所有文件并全部退出
    • :qall 退出所有文件
    • :wall 保存所有文件

    vim的多窗口功能

    • -o 水平分割窗口
    • -O 垂直分割窗口

    在窗口间切换:

    • CTRL+w 下一个
    • CTRL+w+ 向上箭头

    单文件分割窗口

    • CTRL+w+s 水平分割
    • ctrl+w+V 垂直分割

    定制vim的工作特性

    末行模式下的设定,仅对当前vim进程有效

    如想实现永久有效,可通过配置以下文件

    • 全局 /etc/vimrc
    • 用户 ~/.vimrc 该文件一般不存在,需要自行创建添加

    1. 行号

    • set number,简写set nu 显示行号
    • set nonumber,简写set nonu 取消显示

    2. 括号匹配高亮显示

    • 匹配 set showmanship,简写set sm,默认全局开启
    • 取消 set nosm

    3. 自动缩进

    • 开启 set ai
    • 禁用 set noai

    4. 高亮搜索,默认开启

    • 开启 set hlsearch
    • 禁用 set nohlsearch

    5. 语法高亮,默认开启

    • 启动 syntax on
    • 禁用syntax off

    6. 忽略大小写

    • 启用 set ic
    • 禁用 set noic

    获取帮助:末行模式下

    • :help
    • :help subject

    课外作业:如何设置tab键缩进4个字符

    [sanxi@test-edu ~]$ vim .vimrc
    set ts=4 #ts是tabstop的缩写
    set noexpandtab #
  • 相关阅读:
    select_tag in rails about selected not change and onchange()
    debian7 请把标有“Debian GNU/Linux 7.1.0 _Wheezy_
    rails关于utf8问题-------------------utf8申明必须置顶
    ruby 删除文件
    svn conflict
    40亿个有序不同的数的文件中找一个缺失的数
    马云语录
    语音识别概率问题,一段在数学之美了看到的话
    两个有序数组的中位数
    磁盘文件排序-编程珠玑
  • 原文地址:https://www.cnblogs.com/struggle-1216/p/11874384.html
Copyright © 2020-2023  润新知