• 【Linux命令】《鸟哥Linux基础》第九章 vim程序编辑器


    第九章 vim程序编辑器

    9.1 vi与vim

    所有的Linux发行版都有vi文本编辑器。

    vim是高级版的vi,对不同内容可以进行不同颜色显示,就是个性能强悍的代码编辑器。

    9.2 按键说明

    9.2.1 一般命令行可用的按键功能说明

    移动光标的方法 具体情况
    h 或 向左箭头 光标向左移动一个字符
    j 或 向下箭头 光标向下移动一个字符
    k 或 向上箭头 光标向上移动一个字符
    l 或 向右箭头 光标向右移动一个字符
    30j 或 30向左箭头 向下移动30行
    Ctrl + f 屏幕向下移动一页,相当于page down按键【常用】
    Ctrl + b 屏幕向上移动一页,相当于page up按键【常用】
    Ctrl + d 屏幕向下移动半页
    Ctrl + u 屏幕向上移动半页
    + 光标移动到非空格字符的下一行
    - 光标移动到非空格字符的上一行
    n + 空格键 那个n表示数字,按下数字后再按下空格键,光标会向右移动这一行的n个字符
    0 或 功能键home 按下数字0或home键,移动到这一行的最前面字符处【常用】
    $ 或 功能键End 移动到这一行的最后面字符处【常用】
    H 光标移动到这个屏幕的最上方那一行的第一个字符
    M 光标移动到这个屏幕的中央那一行的第一个字符
    L 光标移动到这个屏幕的最下方那一行的第一个字符
    G 移动到这个文件的最后一行【常用】
    nG n为数字,移动到这个文件的第n行,可配合:set nu
    gg 移动到这个文件的第一行,相当于1G【常用】
    n + 功能键Enter n为数字,光标向下移动n行【常用】
    查找与替换 具体情况
    /word 向光标之下寻找一个名称为word的字符串
    ?word 向光标之上查找一个名称为word的字符串
    n 这个n是英文按键,代表重复前一个查找的操作。如果是向上查找word,那么继续向上查找word;如果向下查找word,那么继续向下查找word
    N 这个N是英文按键,与n刚好相反,为反向进行前一个查找。例如/word之后,本来是向下查找word的,但是按下N,会向上查找word。【使用/word配合n和N重复查找一些关键词】
    :n1,n2s/word1/word2/g n1和n2为数字,在第n1和n2行之间寻找word1这个字符串,并将其替换为word2【常用】
    :1,$s/word1/word2/g 从第一行到最后一行,寻找word1字符串,并将其替换为word2【常用】
    :1,$s/word1/word2/gc 替换之前显示提示字符给用户,确认confirm是否需要替换【常用】
    删除、复制、粘贴 具体情况
    x与X 在一行当中,x为向后删除一个字符(del键),X为向前删除一个字符(backspace键)【常用】
    nx n为数字,连续向后删除n个字符。10x连续向后删除10个字符
    dd 剪切光标所在行【常用】
    ndd 剪切光标所在的向下n行。20dd剪切20行【常用】
    d1G 剪切光标所在到第一行的所有数据
    dG 剪切光标所在到最后一行的所有数据
    d$ 剪切光标所在处,到该行最后一个字符
    d0 是数字0,剪切光标所在处,到该行第一个字符
    yy 复制光标所在的那一行【常用】
    nyy 复制光标所在的向下n行。20yy复制20行【常用】
    y1G 复制光标所在到第一行的所有数据
    yG 复制光标所在到最后一行的所有数据
    y$ 复制光标所在处,到该行最后一个字符
    y0 是数字0,复制光标所在处,到该行第一个字符
    p和P p为将已复制的数据在光标下一行粘贴;P为将已复制的数据在光标上一行粘贴【常用】
    J 将光标所在行与下一行的数据结合成一行
    c 重复删除多个数据。10cj向下删除10行
    u 恢复前一个操作【常用】
    Ctrl + r 重做上一个操作【常用】
    . 小数点,重复前一个操作【常用】

    9.2.2 一般命令行切换到编辑模式的可用按键功能说明

    进入插入或替换的编辑模式 具体情况
    i与I 进入插入模式,i为从目前光标所在处插入,I为在目前所在行的第一个非空格符处开始插入【常用】
    a与A 进入插入模式,a为从目前光标所在的下一个字符处开始插入,A为从光标所在行的最后一个字符处开始插入【常用】
    o与O 进入插入模式,o为在目前光标所在的下一行处插入新的一行,O为在目前光标所在处的上一行插入新的一行【常用】
    r与R 进入替换模式,r只会替换光标所在那一个字符一次,R会一直替换光标所在的文字,直到按下Esc为止【常用】
    Esc 退出编辑模式,回到一般命令模式中【常用】

    9.2.3 一般命令行切换到命令行模式的可用按键功能说明

    命令行模式的保存、退出等命令 具体情况
    :w 将编辑的数据写入硬盘文件中【常用】
    :w! 若文件属性为只读时,强制写入该文件。不过到底能否成功写入,还是跟你对该文件的权限有关
    :q 退出vi【常用】
    :q! 若曾修改过文件,又不想保存,使用!为强制退出不保存
    :wq 保存后退出,若为:wq!则为强制保存后退出
    ZZ 大写的Z,若文件已经修改则保存后退出,若文件没有修改则不保存退出
    :w [filename] 将编辑的数据另存为filename文件
    :r [filename] 在编辑的数据中,读入另一个文件的数据,就是将filename这个文件内容加到光标所在行后面
    :n1,n2 w [filename] 将n1到n2的内容保存为filename文件
    :! command 暂时退出vi到命令行模式下执行command的显示结果。:! ls/home可在vi当中查看/home下以ls输出的文件信息
    :set nu 显示行号
    :set nonu 取消显示行号

    9.2.4 vim的缓存、恢复问题

    如果不幸宕机,可从缓存文件恢复。

    模拟宕机:

    vim man_db.conf
    ctrl + z 
    kill -9 %1
    此时杀掉了后台进程,但是由于是非正常退出,缓存文件并不会正常消失,它还存在
    缓存文件名为`.man_db.conf.swap`
    

    进行恢复:

    vim man_db.conf   这是就会提示各种警告信息
    点击R后,输入 :wq 保存并退出文件
    然后手动删除缓存文件 rm -f .man_db.conf.swap
    最后再 vim man_db.conf 
    即可恢复正常
    

    9.3 vim的额外功能

    9.3.1 可视区块 virtual block

    可视区块的按键 具体情况
    v 字符选择,会将光标经过的地方反白选择
    V 行选择,会将光标经过的行反白选择
    Ctrl + v 可视区块,可以用矩形的方式选择数据
    y 将反白的地方复制起来
    d 将反白的地方删掉
    p 将刚刚复制的区块,在光标所在处粘贴

    9.3.2 多文件编辑

    vi中,使用:r filename 可以读入整个filename文件;如果只想读入一部分内容,可使用多文件编辑命令。

    多文件编辑按键 具体情况
    :n 编辑下一个文件
    :N 编辑上一个文件
    :files 列出目前这个vim开启的所有文件

    使用vim file1 file2同时打开两个文件,其中file1是第一个文件,file2是最后一个文件。

    9.3.3 多窗口功能

    多窗口按键 具体情况
    :sp [filename] 打开一个新窗口,如果有加filename,表示在新窗口创建一个新文件,否则表示两个窗口为同一个文件(同步显示)
    Ctrl + w + j 或者 Ctrl + w + 向下箭头 先同时按下Ctrl + w,然后再按下j或向下箭头,光标移动到下方的窗口
    Ctrl + w + k 或者 Ctrl + w + 向上箭头 先同时按下Ctrl + w,然后再按下k或向上箭头,光标移动到上方的窗口
    Ctrl + w + q 先同时按下Ctrl + w,然后再按下q,结束当前窗口;或者输入:q 或者:close

    vim file1
    如果:sp,会在下方再开一个窗口,内容与file1相同;
    如果:sp file2,会在下方再开一个窗口,内容是file2

    9.3.4 vim的关键词补全功能

    编辑器两大要求:
    语法检验
    关键词补全

    关键词补全按键 具体情况
    ctrl+x -> ctrl+n 通过目前正在编辑的这个文件的内容文字作为关键词,予以补齐
    ctrl+x -> ctrl+f 以当前目录内的文件名作为关键词,予以补齐
    ctrl+x -> ctrl+o 以扩展名作为语法补充,以vim内置的关键词,予以补齐

    9.3.5 环境设置与记录 ~/.vimrc ~/viminfo

    vim的环境设置按键 具体情况
    :set nu 显示行号
    :set nonu 忽略行号
    :set hlsearch 高亮度查找,找到的字符串反白显示
    :set nohlsearch 非高亮度查找
    :set autoindent 自动缩进
    :set noautoindent 不自动缩进
    :set backup 自动保存备份文件,任何一次修改file时,同目录中,源文件被另存为一个文件名为file~的文件
    :set ruler 显示或不显示右下角的一些状态栏说明
    :set showmode 是否显示–INSERT–之类信息在左下角状态栏
    :set backspace=(012) 按下i进入编辑模式后,可以利用退格键(backspace)删除任意字符。2,可删任意值;0或1,仅可删除刚刚输入的字符,无法删除原本就已经存在的文字
    :set all 显示目前所有的环境参数设置值
    :set 显示与默认值不同的参数,显示你自行变动过的参数
    :syntax on 依据程序相关语法显示不同颜色
    :syntax off 纯文本颜色
    :set bg=dark 设置显示的不同色调
    :setbg=light 同上,系统默认是light
    vim ~/.vimrc   在用户家目录下,创建.vimrc 文件,设置vim编辑器的默认值
    打开文件后,输入以下内容并保存:
    
    set hlsearch
    set backspace=2
    set autoindent
    set ruler
    set showmode
    set nu
    set bg=dark
    syntax on
    

    9.4 其他vim使用注意事项

    9.4.1 中文编码问题

    如果文件是GBK编码,而环境使用的是LinuxGNOME,启动的终端界面为GNOME-terminal,采用如下方法修正打开后的乱码问题:
    首先:

    LANG=zh_CN.gb18030 
    export LC_ALL=zh_CN.gb18030
    

    在终端工具栏:终端—》设置字符编码—》中文(简体),选择好中文简体后,就可以用vim去打开GBK编码的文件了。

    9.4.2 DOS与Linux换行符

    Windows的DOS下换行符是: ^M$ = CR + LF
    Linux下换行符是:         $  = LF 
    

    需要安装dos2unix-*

    在不同系统之间复制一些纯文本文件时,务必要记得使用unix2dos 或 dos2unix来转换换行格式!

    unix2dos -k file1   将file1中的换行符换成dos下的,同时不改变mtime时间
    dos2unix -k file1   将file1中的换行符换成unix下的,同时不改变mtime时间
    dos2unix -k -n file1 file2 跟之前一样把file1中的换行符换成unix下的,保留旧文件file1,换好后保存到新文件file2
    

    9.4.3 语系编码转换

    iconv --list
    iconv -f 原编码格式 -t 新编码格式 filename [-o newfile]
    				--list 列出iconv支持的语系数据
    				-f     from,来自于哪个编码格式
    				-t     to,要变成哪个编码格式
    				-o file 如果要保留原本文件,那么使用-o新文件名,可以建立新的编码文件
    
    iconv -f big5 -t utf8 vi.big5 -o vi.utf8  将big5格式的vi.big5转换为utf8格式的vi.utf8
    
    
    iconv -f utf8 -t big5 vi.utf8 |   
    iconv -f big5 -t gb2312 |   
    iconv -f gb2312 -t utf8 -o vi.gb.utf8    将繁体中文的utf8转换成简体中文的utf8
    
  • 相关阅读:
    ios 一个正则表达式测试(只可输入中文、字母和数字)
    IOS7 8中tableview分割线缺少15像素
    Java中使用OpenSSL生成的RSA公私钥进行数据加解密
    java与IOS之间的RSA加解密
    ios下使用rsa算法与php进行加解密通讯
    C# 32位md5
    [原]命令模式在MVC框架中的应用
    [原]【推荐】程序员必读的三十本经典巨作
    [原]容器学习(二):动手模拟AOP
    [原]容器学习(一):动手模拟spring的IoC
  • 原文地址:https://www.cnblogs.com/dindin1995/p/13059059.html
Copyright © 2020-2023  润新知