路漫漫其修远兮
吾将上下而求索

linux编辑器vim

vim编辑器简介

文本编辑器:文本,纯文本信息,ASCII test,不能有颜色等修饰符;Unicode全球通用

文本编辑种类:

    行编辑器:sed

    全屏编辑器:nano,vi(visual interface)vim(vi improved)

    vim:模式化的编辑器

基本常用模式:

    命令模式(Command mode),插入模式(Insert mode)和末行模式(Last line mode)

    命令模式:此模式光标可以移动,按某个键后会转入输入模式

    插入模式:可以输入字符改变内容

    末行模式:此模式可以在最后一行输入命令来执行操作

打开文件乱码

编辑~/.vimrc文件,加上如下几行:
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
即可搞定。

打开文件:

  如果路径没有此文件,则会创建该文件
    # vim [option] [file..]
        +#:打开文件后,直接让光标处于#行的行首
        +/pattern:打开文件后,直接让光标处于第一个被pattern匹配到的行首
        # vim + 打开到最后一行

关闭文件:

    末行模式
        q:退出
        q!:强制退出,不保存此前的编辑
        wq:保存修改并退出
        x:保存并退出
        w /path:保存当前文件到某个目录文件
    命令模式
        ZZ:保存并退出
        ZQ:不保存退出

模式转换:

    命令模式->插入模式:
        i: insert 在光标所在处前面输入
        a: append 在光标处后方输入
        I: 在光标所在的行首插入
        A: 在光标所在的行尾输入
        o: 在光标所在处下方打开的一个新行
        O: 在光标所在处的上方打开一个新行
    插入模式->命令模式:esc
    命令模式->末行模式::
    末行模式->命令模式:esc

命令模式,光标跳转:

字符间跳转:
    h:左
    l:右
    k:上
    j:下
单词间跳转:
    w:下一个单词的词首
    b:当前或者前一个单词的词首
    e:当前或者后一个单词的词尾
        #COMMAND:跳转由#指定的个数的单词
    a. 5e:当前光标跳转到第5个单词的词尾
行首行尾跳转:
    ^:跳转至该行行首的第一个非空白字符
    0:跳转至该行行首
    $:跳转至该行行尾
行间跳转:
    #G:跳转至#行
    1G,gg:第一行
    G:最后一行
句间跳转:
    (:上一句
    ):下一句
段间跳转:
    {:上一段
    }:下一段
翻屏,命令模式:
    ctrl+f:文件尾部翻一屏
    ctrl+b:文件首部翻一屏
    ctrl+d:文件尾部翻半屏
    ctrl+u:文件首部翻半屏

编辑,命令模式:

字母编辑:
    x:删除光标所在处的字符
    #x:删除光标所在处起始的#个字符
    xp:交换光标所在处的字符与其后面的字符的位置
替换命令(replace)
    r:替换光标所在处的字符为CHAR字符
        rCHAR
删除命令:
    d:删除命令,可结合光标跳转字符,实现范围删除,并将删除的内容放到剪切板中
    d$:当前光标所在处到行尾删除
    d^:行首的第一个非空白字符到当前光标处删除
    dw:当前光标处到下一个单词的词首删除
    de:光标在单词中间,光标处到当前单词词尾删除
    db:光标在单词中间,当前单词词首到光标处删除
    dd:删除光标所在处的行
    #dd:删除光标所处的行(算此行)起始的共#行,也可以当做剪切,命令之后可以粘贴到其他地方
复制命令(yank,y)
    y:复制,工作行为相似于d命令
    y$:当前光标所在处到行尾复制
    y^:行首的第一个非空白字符到当前光标处复制
    y0:行首的第一个字符到当前光标处复制
    ye:光标在单词中间,光标处到当前单词词尾复制
    yw:当前光标处到下一个单词的词首复制
    yb:光标在单词中间,当前单词词首到光标处复制
    yy:复制一整行
    #yy:删除光标所处的行(算此行)起始的共#行
粘贴命令(p,put,paster)
    p:小p,缓冲区中的内容如果是整行,则粘贴在当前光标所在行的下方,否则,粘贴至当前光标所在处的后方
    P:大p,缓冲区中的内容如果是整行,则粘贴在当前光标所在行的上方,否则,粘贴至当前光标所在处的前方
可视化模式
    1. v:按字符选定
    2. V:按行选定
    3. 结合编辑命令使用:d,c,y
撤销命令(undo)
    1. u:撤销此前的操作
    2. #u:撤销此前的n个操作
撤销此前的撤销
    1. ctrl+r 
《vim自带的练习教程》

vim的末行模式:

地址定界:start_pos[,end_pos]
    #:特定的第#行,例如5即第5行
    .:当前行
    $:最后一行
    #,#:指定行范围,左起为起始行,右侧为结束行
    #,+#:指定行范围,左侧为起始行的绝对编号,右侧为相对左侧行号的偏移量,例如:3,+7
    %:全文
    /pattern/:从光标所在处起始,向文件尾部,第一次被模式所匹配到的行,
    :/first/,$d  从第一次被first匹配到的行到最后一行,所有行删除
    /pattern1/,/pattern2/:
可同编辑命令一同使用,实现编辑命令:
    1. d,y,c
    2. w/PATH/TO/SOMEFILE:将范围内的行保存到,,,
    3. r/PATH/FROM/SOMEFILE:将指定文件中的文本读取并插入到指定位置
    a. 5r/root/eh   插入到第5行后面
查找
    /PATTERN:从当前光标所在处向文件尾部查找
    ?PATTERN:从当前光标所在处向文件首部查找
    n:下一个,与命令同方向
    N:上一个,与命令反方向

查找替换

s:末行模式的命令,使用格式:s/要查找的内容/替换为的内容/修饰符
    要查找的内容:可使用正则表达式
    替换为内容:不能使用正则表达式,但是可以引用,
        :%s@\<t\([[:alpha:]]\+\)\>@T\1@g  将所有单词首字母为t的单词首字母替换成T,
    如果“要查找的内容”部分在模式中使用分组符号,在“替换的内容”可以引用,\1,\2...
    直接引用查找模式匹配到的全部文字,可以用&符号
        :%s@\<T[[:alpha:]]\+\>@&er@g    将以T开头的单词后面都添加er
    修饰符:
        i:查找时忽略大小写,都可以匹配到
        g:全局替换,意味着一行如果匹配到多次,均替换
    可把分隔符替换为其他非常用的字符
        常用###或者@@@
        :%s@/etc/passwd@/var/log@g  这种也可以,分隔符可以换成其他字符代替
示例:
:%s/this/This   在全文中全局搜索this替换成This ,每行只会替换第一次出现的,第二次出现this不会替换 
:%s/this/This/g   在全文中全局搜索this替换成This ,所有的this都会执行
:%s/\/etc\/passwd/\/var\/log/g   全文替换将/etc/passwd替换为/var/log,这里的/要转译,这样才能匹配到
:%s@\<t\([[:alpha:]]\+\)\>@T\1@g  将所有单词首字母为t的单词首字母替换成T,
:%s/^#//g    将行首有#的,将#删除

复制/etc/grub2.cfg文件复制到/tmp/目录下面,用查找替换命令删除/tmp/grub1.cfg文件中以空白字符开头的行的行首的空白字符
:%s@^\([[:space:]]\+\)@@g
复制/etc/rc.d/init.d/functions文件至/tmp目录下,用查找替换命令/tmp/functions文件的每个以空白字符开头的行的行首加上#
:%s@^[[:space:]]@#&@g
为/tmp/grub2.cfg文件的前三行的行首添加#号
:1,3s@^@#&@g    地址定界,将前面的全局定界%替换为具体的范围,
将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enable=1,所有gpgcheck=0替换为gpgcheck=1
:%s@\(enabled\|gpgcheck\)=0@\1=1@g

将文本中的有空格的地方换行,都单独放一行
:%s@[[:space:]]@\r@g

多文件分屏显示

分屏启动Vim
    使用大写的O参数来垂直分屏
    vim -On file1 file2 ..
    使用小写的o参数来水平分屏
    vim -on file1 file2 ...
    注释: n是数字,表示分成几个屏
关闭分屏
    关闭当前窗口
    Ctrl+W c,按ctrl+w,然后按c键
    关闭当前窗口,如果只剩最后一个了,则退出Vim
    Ctrl+W q,按ctrl+w,然后按q键
分屏
    上下分割当前打开的文件。
    Ctrl+W s
    上下分割,并打开一个新的文件。
    :sp filename
    左右分割当前打开的文件。
    Ctrl+W v
    左右分割,并打开一个新的文件。
    :vsp filename
Vi中的光标键是h, j, k, l,要在各个屏间切换,只需要先按一下Ctrl+W
    把光标移到右边的屏。
    Ctrl+W l
    把光标移到左边的屏中。
    Ctrl+W h
    把光标移到上边的屏中。
    Ctrl+W k
    把光标移到下边的屏中。
    Ctrl+W j
    把光标移到下一个的屏中。.
    Ctrl+W w

定制vim工作特性

永久有效 
    全局:/etc/vimrc
    用户:~/.vimrc
行号
    显示:set number, 简写为set nu  ,并不会保存到文件中
    取消显示:set nonumber, 简写为set nonu
括号匹配高亮
    显示:set showmatch, 简写为set sm  ,并不会保存到文件中
    取消显示:set noshowmatch, 简写为set nosm
    光标到括号时,对应的括号就自动高亮(好像已经默认有,无法改变)
自动缩进
    启用:set ai, 简写为set ai  ,并不会保存到文件中
    取消:set noai, 简写为set noai
高亮搜索结果
    搜索完后显示高亮,再次打开文件,搜索结果还是高亮
    启用:set hlsearch, 简写为  ,并不会保存到文件中
    取消:set nohlsearch, 简写为
语法高亮
    启用:syntax on  
    取消:syntax off
忽略字符大小写
    启用:set ic
    取消:set noic
显示所有的内容,包括没有显示的回车符,空格等
    启动:set list
    取消:set nolist
获取帮助,在末行模式:
    :help
    :help option-list
    :set 
    :set all
当编辑的文件以非正常方式退出时,(比如网络中断,或者终端断开),下次再打开该文件,会提示
    i. [O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort: 同时,该目录下面会生成 
     .file.swp 同名文件,保存的是之后退出时的文件,E:表示放弃更改,打开编辑前的文件,但是下次打开还会提示。
     R:覆盖原文件,继续,编辑,删除临时文件就不会
函数操作
    注释3-9行: 3,9s@^@#@
    取消3-9行: 3,9s@^#@@

vim中调用shell命令

:!command:不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容
:r !command:将shell命令command的结果插入到当前行的下一行
:r !date:读取系统时间并插入到当前行的下一行。

块操作,注释

注释某连续几行代码
^ → 到行头
<C-v> → 开始块操作
<C-d> → 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
I-- [ESC] → I是插入,插入“##”,按ESC键来为每一行生效。

删除两个引号之间的内容,将光标放到引号中间,任意位置,然后敲:di",即可删除

实用例子

整体缩进
v  进入选择模式
j  一直选择到想要的地方
<  将这个块左移
>  将这个块右移

整体缩进
或者在命令行
:10,100>
第10行至第100行缩进
:20,80<
第20行至第80行反缩进

整体缩进
crt+v 进入块编辑
j  选择块
I  插入模式
space 向右移
esc  整个块会向右移,但是左移无效

块注释
crt+v 进入块编辑
j  选择块
I  插入模式
#  注释
esc  整个块会注释

块取消注释
块注释
crt+v 进入块编辑
j  选择块
d  删除注释

文档:vim简明教程

未经允许不得转载:江哥架构师笔记 » linux编辑器vim

分享到:更多 ()

评论 抢沙发

评论前必须登录!