美文网首页工作生活
第九章 vim编辑器

第九章 vim编辑器

作者: 过来摸摸头丶 | 来源:发表于2019-07-04 17:29 被阅读0次

    1.vi的使用

    vim指令介绍

    一般指令模式(command mode)

    以vi打开一个文件就直接进入一般指令模式了。

    编辑模式(insert mode)

    在一般模式可以删除、复制等,但是不能编辑文本内容的。需要按下"i、I、o、O、a、A、r、R"任一个字母后才能进入编辑模式。

    指令列命令模式(command-line mode)

    在一般模式中输入": / ?"的其中一个就可以将光标移动到最底下那一行。在这个模式中,你可以读取、存盘、批量取代字符、离开vi、显示行号等动作。

    1.常用的vi命令

    [Ctrl] + [f]  :屏幕向下移动一页,相当于[Page Down];
    [Ctrl] + [b]  :屏幕向上移动一页,相当于[Page Up];
    0或[Home]键 :移动到这一行最前面到字符处;
    $或[End]键 :移动到这一行最后面的字符处;
    G  :光标移动到这个文件到最后一行;
    gg  :光标移动到这个文件到第一行;
    [n] + [Enter]/[G]  :n为数字,光标向下移动n行;
    [/] + [字符]  :向光标下方寻找为"字符"的字符串;
    [?] + [字符]  :向光标上方寻找为"字符"的字符串;
    n  :表示重复上一个搜索的动作;
    N  :与n相反,为反向进行前一个动作。例如:/stu,按下N后表示向上搜寻;
    : n1,n2s/word1/word2/g  :n1、n2都是数字,表示在n1与n2行之间寻找word1这个字符串并替换为word2。如果不写n1、n2表示对当前行操作,如果是:%s/word1/word2/g表示对全文进行替换;
    : n1,n2s/word1/word2/gc :同上,只不过在替换对时候需要用户确认;
    x、X :在当前光标,x表示向后删除1个字符,X表示向前删除1个字符;
    nx/X :n为数字,表示连续向后/向前删除n个字符;
    dd  :删除光标所在对那一行;
    ndd  :n为数字,删除光标所在的向下n行;
    yy :复制光标所在的那一行;
    nyy :n为数字,复制光标所在的向下n行;
    p :p为将已复制的数据在光标的下一行粘贴;
    u  :撤销,复原前一个动作;
    [Ctrl] + [r] :恢复"u"撤销掉的内容;
    . :重复前一个动作;
    :r filename :读取一个文件filename的内容到当前文件;
    :e!   :在做了很多到编辑后,可以还原到原本的文件内容;
    :! [command] :不离开vim下,执行命令。例如 :! ls /home。
    

    2.一般指令模式切换到编辑模式到可用按钮

    i、I  :进入插入模式。i表示"在光标前插入",I表示在"当前所在行的第一个非空格处开始插入";
    a、A :进入插入模式。a表示"在当前光标的下一个字符处开始插入",A表示"从光标所在行的最后一个字符处开始插入";
    o、O :进入插入模式。o表示"在当前光标的下一行开始插入",O表示"在当前光标所在处的上一行开始插入";
    r、R :进入替换模式。r表示"替换光标所在的那一个字符",R表示"一直替换光标所在的字符",按下r、R后直接输入要替换的字符即可;
    

    3.一般指令模式切换到指令模式

    :w :将编辑后的数据保存;
    :w! :若文件为只读时,强制写入该文件。写入是否成功,和你的权限有关;
    :q  :退出;
    :q! :退出不保存;
    :wq :保存并退出;
    :w + [filename] :将编辑的数据另存新档;
    :set nu :显示行号;
    :set nonu :取消显示行号;
    

    2.vim的暂存档、救援恢复与开启时的警告信息

    当我们正在编辑文件的时候,系统宕机该怎么处理呢?

    当我们使用vim编辑时,vim会在当前目录产生一个.filename.swp的文件。你对文件的编辑会被记录到这个暂存档中。

    如果我们在vim一个文件的时候,出现"found a swap file by the name xxx.swp"的字样,说明可能有以下几个问题:

    问题1:可能有其他人或程序同时在编辑这个文件。由于Linux是多人多任务的环境,所以很可能有很多人同时在编辑一个文件。因此vim会出现这样的警告。

    解决1:让别人将他的vim结束,继续你的处理;
    解决2:选择开启成为只读文件,也就是在出现警告页面输入"O"即可;

    问题2:在前一vim中,因为某些特殊原因导致vim中断

    解决:在警告页面你可以按下"R",此时vim会载入xxx.swp的内容。不过要注意的是xxx.swp不会自动删除,需要手动删除,否则每次打开都会出现警告。

    这个警告页面有6个按钮信息:

    • [O]pen Read-Only :打开次文件为只读档。

    • [E]dit anyway :正常的方式打开你要编辑的文件,并不会载入存盘的内容,不建议使用,很容易出现多个编辑者同时修改文件的情况。

    • [R]ecover :加载暂存盘的内容。需要手动删除.swp文件。

    • [D]elete it :你确定暂存档是无用的,可以使用它把暂存档删除。

    • [Q]uit :按下q离开vim。

    • [A]bort :忽略这个编辑行为。

    3.vim的其他功能

    vim具有颜色显示的功能,并且支持许多程序语法。

    3.1 区块选择(Visual Block)

    我们怎么样搞定一个区块的范围?举个例子,有以下格式的文件:

    如果我想把host1,host2等等复制以下,并加到每一行的后面怎么做?也就是每一行的结果是"192.168.1.2 host2.class.net host"。

    我们可以使用区块选择,当我们在一般命令模式下按下v或者V或者[Ctrl] + v时,我们会进入区块选择模式。

    区块选择的含义:
    
    v :字符选择,会将光标经过的地方反白选择;
    V : 行选择,会将光标经过的行反白选择;
    [Ctrl] + v :区块选择,可以用长方形的方式选择;
    y :将反白的地方复制起来;
    d :将反白的地方删除掉;
    p :将刚复制的区块,在光标所在处贴上;
    

    现在来实操以下:

    1.使用vim xxx.txt打开文件;
    2.使用光标移动到第一行到host的h处,然后按下[ctrl] + v,进入Visual Block模式;
    3.将光标移动到最底部,此时光标移动过到区域会反白;
    4.此时按下y进行复制,反白的地方会消失;
    5.将光标移动到第一行的最右边,用编辑模式向后按两个空格键,回到一般命令模式后,按下p进行粘贴;
    

    3.2 多文件编辑

    相关的按键有:

    :n :编辑下一个文件
    :N :编辑上一个文件
    :files :列出当前这个vim开启的所有文件
    

    如果想要将刚刚的xxx.txt文件的IP复制到你到/etc/hosts文件中,该怎么操作呢?

    1.通过"vim xxx.txt /etc/hosts"指令打开两个文件;
    2.在vim中使用":files"查看编辑的文件有哪些,然后按下任意键回到一般命令模式中;
    3.在第一行输入"4yy"复制4行;
    4.在vim环境下输入":n"会来到第二个编辑的文件;
    5.在/etc/hosts文件中按下"G"到最后一行,再按下"p"粘贴;
    6.按下多次的"u"来还原原本的文件数据;
    7.按下":q"退出;
    

    3.3 多窗口功能

    相关功能键:

    :sp [filename] :开启一个新窗口。如果想要在新窗口打开另一文件,就加入filename。否则只输入":sp"时,出现的时同一个文件在两个窗口。
    [Ctrl] + w + ↓ :注意,按键的按法是:先按下[Ctrl]不放,再按下w后放开所有的按键,然后再按下向下箭头,则可移动到下方到窗口。
    [Ctrl] + w + ↑ :同上,光标移动到上面到窗口。
    [Ctrl] + w + q :结束当前的窗口。
    

    3.4 vim的挑字补全功能

    相关的功能键:

    注意:以下的用法都在在插入模式下,输入开头字母在使用以下操作。
    [Ctrl] + x -> [Ctrl] + n :通过目前正在编辑的这个"文件的内容文字"作为关键词,补充补齐。
    [Ctrl] + x -> [Ctrl] + f :以当前目录内的"文件名"作为关键词,补充补齐。
    [Ctrl] + x -> [Ctrl] + o :以扩展名作为语法补充,以vim内建的关键词,补充补齐。
    

    3.5 vim环境设定与记录 ~/.vimrc ~/.viminfo

    当我们重复编辑同一个文件,第二次进入文件时,光标就在上次离开的那一行上。为什么会这样?

    因为vim会主动将你曾经做过的行为记录下来,记录动作的文件就是:~/.viminfo。

    而对vim文件环境的设定,就是编辑~/.vimrc了。以下时vim常见的环境设定参数:

    :set nu/nonu :设定与取消行号;
    :set hlsearch/nohlsearch :设定是否将搜索的字符串反白;
    :set autoindent/noautoindent :设定是否自动锁进;
    :set backup :设定是否自动储存备份档。一般是nobackup。
    :set ruler :设定是否显示右下角的一些状态栏;
    :set showmode :是否要显示"INSERT"之类的左下角的状态栏;
    :set backspace=(012) :如果backspace为0或1时,在进入编辑模式后仅能删除刚刚输入的字符,设为2时,可以删除任意值;
    :set all :显示目前所有的环境参数设定值;
    :set :显示与系统默认值不同的设定参数;
    :syntax on/off :是否依据程序相关语法显示不同的颜色;
    :set bg=dark/light :设定主题颜色;
    

    以上可以在文件的一般命令模式下设定,如果在~/.vimrc文件中设定的话,去掉":"即可。

    .vimrc文件配置

    4.vim的使用注意事项

    4.1 中文编码问题

    关于乱码,你需要考虑以下:

    • 你的Linux系统默认支持的语言数据:这与/etc/locale.conf有关;

    • 你的终端的语言:这与LANG、LC_ALL属性有关;

    • 你的文件原本的编码;

    • 开启终端机的软件;

    4.2 DOS与Linux下编码的不同

    我们在DOS下的文件使用在Linux下面,就执行不了了。怎么做?

    可以下载dos2unix包。

    4.3 语言编码转换:iconv

    指令介绍:

    [~] iconv --list 
    [~] iconv -f 原本编码 -t 新编码 filename [-o newfile]
    
    选项与参数:
    --list :查看所有支持的编码;
    -f :from,原本编码;
    -t :to,新编码;
    -o file :如果想保留原文件,使用-o + 新档名,可以建立新编码文件;
    
    

    相关文章

      网友评论

        本文标题:第九章 vim编辑器

        本文链接:https://www.haomeiwen.com/subject/pmichctx.html