Vim参考

作者: 一直小鱼 | 来源:发表于2017-04-21 10:02 被阅读83次

    [TOC]

    1. vim-vi简介

    在UNIX系统中,创建和修改配置文件、shell脚本、初始化文件、编写程序都离不开VI。

    1. vi属于两个主要的UNIX规范:POSIX和单一UNIX规范。
    2. vi编辑器由Bill Joy于1976年创建。
    3. vi是一种面向屏幕的编辑器。
    4. vi来源于另一个编辑器ex。
    5. vim是vi的增强版。
    6. 1988年,荷兰的Bram Moolenaar创建了vim。

    下来看下vim的启动屏幕:

    Paste_Image.png

    2. 帮助

    学习vi,学会使用联机手册或帮助命令是非常重要的。Unix有两个最重要的文档资料系统:Unix手册和Info(GNU项目的官方文档资料系统)。
    常用常见命令:

    man vi   
    
    vi --help
    
    info vi
    

    对于较长的说明页,可使用分页程序分页显示。常用的分页程序有:less、more、pg。例如:

    man cp | less
    

    查找说明书页的其它方法(基于web):

    1. 使用google搜索:(一定要确保包含双引号)
      **“man vi ”**
    **“man pages” vi**
    
    1. 另外一种基于web的说明书页的方法是xman,xman是一个基于GUI的程序,它充当说明书页浏览器。在命令行启动xman:xman&
    2. vi-vim帮助
      如果还没接触vim,可在shell中输入vimtutor,查看教程。
      vi-vim的帮助命令:
      :help
    
    1. 一些其他  
      英文不好的同学,可在http://sourceforge.net/projects/vimcdoc/files/vimcdoc/1.5.0/vimcdoc-1.5.0.tar.gz/download?use_mirror=jaist,下载vim中文帮助。
      使用中文帮助文档
      set helplang=cn
    

    使用英文帮助文档:

      set helplang=en
    

    3. 模式和命令

    3.1 输入模式和命令模式

    命令模式[[2]]:所键入的键都被解释成命令。
    输入模式(input mode):键入的任何内容都直接插入到编辑缓冲区中。
    当离开输入模式时,使用Esc键切换到命令模式。
    了解所处模式的方法:

    :set showmode
    
    3.2 vi和ex命令

    vi和ex是同一个程序的两种不同的表现形式。也就是说可以同时使用vi和ex命令。
    vi:
    ①大多数vi命令都是单字母双字母的表现形式。
    ②vi键入时命令不回显。
    ex:
    ①ex命令比vi命令长。
    ②所有的ex命令都以一个:(冒号)开头。键入:后,vi就将光标移动到命令行上(屏幕最底部)。
    ③ex命令的每个字符都将回显。
    ④ex命令结束,必须按下<Return>键盘。

    3.3 命令补全

    命令补全:Tab
    关键字补全:^N ^P

    4. 启动与编辑vi-vim

    4.1 编辑一个文件

    语法:

    vi 【-rR】 【file……】
    

    常用命令:

    vi file                  启动vi,编辑指定的文件
    
    vi -R file               以只读模式启动vi
    
    view file                以只读模式启动vi (vi -R file等同于view file)
    
    vim file                   启动vim,编辑指定的文件
    
    vim -C      file          以兼容模式启动vi
    
    4.2 编辑技巧

    编辑技巧:

     vi +[num] file           打开文件,并将光标置于第n行首
    
     vi + file                打开文件,并将光标置于最后一行首
    
    vi +/pattern file         打开文件,并将光标置于第一个与pattern匹配的字符串
    
    vi +?pattern file         编辑工作从匹配pattern的最后一行开始
    
    vi -r file               (-r 即recover,恢复)
    
    4.3 文本插入

    操作键说明

    i     在当前光标位置前插入数据
    
    a     在当前光标位置后插入数据
    
    I     在当前行开头处插入数据
    
    A     在当前行末尾处插入数据
    
    o     在当前行下面出入一行
    
    O     在当前行上面插入一行
    
    4.4 写入文件

    常用命令:

    :w                           将数据写入到原始文件
    
    :w file                       将数据写入到指定文件
    
    :w >> file                    将数据追加到指定文件
    
    :r [filename]                 在编辑的数据中,读取另一个档案的数据,亦将档案内容加到游标所在行的后面
    
    :n1,n2 w [filename]           将n1到n2的内容存储成另一个档案。
    
    4.5 退出文件、停止vi

    常用命令:

    :q             退出文件
    
    :q!            不保存数据,强制退出
    
    :wq           保存退出文件
    
    shift+ZZ      停止vi
    
    ZQ            无条件退出
    
    4.6 多档编辑

    通常用法:语法:vi a.txt b.txt c.txt,切换文件: :next

    :n      编辑下一个档案
    
    :2n     编辑下两个档案
    
    :N      编辑前一个档案
    
    :e      在不离开当前vim窗口的情形下,在编辑其它档案
    
    :e#     编辑前一个档案
    
    :e!     放弃目前正在编辑的档案
    
    :r      在游标所在处插入一个档案内容
    
    :9r     将档案插入到9行之后
    
    :f           显示当前正在编辑的档名,相当于^g
    
    :f filename  改变编辑中的档名。
    
    :files     列出目前buffer中的所有档案,相当于:ls 或 :buffers
    
    :bn       移至下一个buffer
    
    :bl       移至前一个buffer
    
    :b 档名     移至该档名
    
    4.7 vi与vim命令行常用选项
    -b                  以二进制模式编辑文件
    
    -c command          启动后立即运行给定的ex命令
    
    -d                  以diff模式运行
    
    -o[num]             启动vim时打开num个窗口
    
    -O[num]             启动vim时打开num个水平排列
    
    -r                  恢复模式
    
    -R                  于只读模式中编辑文件
    
    -t tag              编辑包含tag的文件,并将光标置于tag位置
    
    -T type             设置可选终端类型
    

    5. 视窗操作

    5.1.常见用法:
    $ vi -o file1.txt file2.txt     #水平分割
    
    $ vi -O fiel.txt file2.txt   #垂直分割
    
    5.2.vim视窗用法

    视窗分割:

    ^w n       将视窗一分为二
    
    ^w p       等同:split,把当前窗口水平分割
    
    :vsplit     把当前窗口垂直分割
    
    ^w s       打开一新视窗,且原档分属两个视窗
    

    视窗关闭:

    ^w q         结束分割出来的视窗
    
    :close       关闭当前窗口
    

    视窗打开:

    ^w o          等同于:only,只显示当前的窗口,隐藏其它视窗
    
    :all         打开所有窗口
    
    :vertical all   垂直打开所有的窗口
    
    :buffers      列出所有的当前窗口
    
    :buffer 2      编辑第二个窗口  
    

    视窗移动:

    ^w j      移至下视窗
    
    ^w k      移至上视窗
    

    6. 光标移动、缓冲区移动、搜索移动、行号跳转]

    移动和跳转

    不论任何时候,光标必然位于屏幕的某一行上,这一行就称之为当前行
    在当前行中,光标位于某个字符之上或者之下,这个字符就称之为当前字符
    为了增强光标移动命令的功能,可以通过在命令前面键入一个数字来重复执行光标移动命令,这个数字称为重复次数

    6.1 获取光标当前位置

    获取方式:^G

    6.2 缓冲区移动
    ^F      向下移动一屏
    
    ^B      向上移动一屏
    
    n^F     向下移动n屏
    
    n^B     向上移动n屏
    
    ^D      向下移动半屏
    
    ^U      向上移动半屏
    
    n^D     向下移动n行
    
    n^U     向上移动n行
    
    ^E      向屏幕顶端多滚动一行
    
    ^L      向屏幕底端多滚动一行
    
    z**ENTER**      将光标所在的行移动到屏幕顶端
    
    z.        将光标所在的行移动到屏幕中间
    
    
    z-         将光标所在的行移动到屏幕底端
    
    6.3 光标移动、单词句段移动

    操作键说明:

    h    <Left>        将光标向左移动一个位置
    
    j     <Down>       将光标向下移动一个位置
    
    k     <Up>         将光标向上移动一个位置
    
    l    <Right>       将光标向右移动一个位置
    
    -                  将光标移动到上一行的开头
    
    +     <Return>     将光标移动到下一行的开头
    
    ^                  将光标移动到当前行的第一个非空格/制表符的字符上
    
    数字0               将光标移动到当前行的开始
    
    $                  将光标移动到当前行的末尾
    

    单词、句段移动

    w W    将光标移动到下一个单词的词首(大写字母,略过空格)
    
    e E    将光标移动到下一个单词的词尾(大写字母,略过空格)
    
    b B    将光标移动到上一个单词的词首(大写字母,略过空格
    )
    )      向前移动到下一个句子
    
    (      向后移动到上一个句子
    
    {       向前移动到下一个段落
    
    }       向后移动到上一个段落
    
    H       将光标移动到屏幕顶部
    
    M       将光标移动到屏幕中间
    
    L       将光标移动到屏幕的最后一行
    
    %       已匹配一个括号为目的的移动
    

    说明
    命令计数:在移动命令前加数字,如3j,可实现向下移动三行。
    语法:

    **n**command   (n为数字,command为移动命令)
    

    规律:一个命令的大写字母形式会做同样的事情,但是方向相反。

    6.4 搜索移动
    fcharacter     单字符搜索移动(f为搜索命令,character为要搜索的字符)
    Fcharacter   单字符左方向搜索移动
    
    6.5 行号跳转
    显示行号:     :set number
    关闭行号:     :set nonumber
    

    命令说明:

    nG 、   :n 跳转到第n行
    1G 、 gg  、 :1跳转到编辑缓冲区的第一行
    G   、  :$ 跳转到编辑缓冲区最后一行
    

    附加:
    另一个移动到某行的办法是:在命令 **% **前加一个命令计数,如 50% 会把光标定位在文件中间。

    6.6 跳转到前一位置

    返回前一位置:

    **``**  (两个反引号)
    ‘’       (两个单引号)
    
    6.7 使用名称标示任意行,进行跳转

    用不可见的名称标识任意行,当需要时使用此名称跳转到这一行。

    可以键入m标示这一行,后跟一个字母,这个字母就是这一行的名称。
    例如:用”b“标示这一行,可以键入b。为了跳转到这一行,可以键入一个反引号或单引号,后面跟这一行的名称。如````b’b```

    7. 搜索

    7.1搜索常用命令

    向前搜索: /
    向后搜索:

    /            向前重复搜索
    ?             向后重复搜索
     /regex        向前搜索指定的正则表达式
    ?regex        向后搜索指定的正则表达式
    n              重复上一条/或?命令,搜索方向相同
    N              重复上一条/或?命令,搜索方向相反
    

    附:

      命令历史记录:用上下箭头来查找用过的搜索
    
    7.2查找字符串便捷方式

    命令 : 将光标定位于字符串,按下键,vi将会取当前光标所在的字符串并将它作用目标字符串进行搜索。

    命令: 与*相反。

    %    搜索与当前花括号、圆括号、方括号成对的符号。
    
    7.3 查找整个字符串

    方法: 使用\< \>进行匹配。

    例子:```/<word>``

    8. 文本改动(替换)

    8.1替换之vi命令
    r:      精确替换一个字符(不进入输入模式)。
    R:      替换多个字符(以覆盖方式替换)。(先将光标移动到希望开始替换的位置,然后输入R。切换到输入模式,随后键入的每个字符都将替换当前行上的一个字符。)
    s:      允许使用多个字符替换一个单个的字符(以插入方式替换)。
    C:      允许替换从当前光标位置到本行末尾的所有字符。
    S 或 cc:    以插入方式替换当前整行。
    cmove:      以插入方式从当前光标处替换到move所给出的位置处。
    
    8.2 替换之ex命令_常用方法

    ex命令:

    语法::s/pattern/replace/ 其中,pattern是替换的模式,replace是替换的文本。

    使用方法总结:

    :s/pattern/replace/            替换当前行
    
    s/pattern/replace/g                替换当前行所有
    
    :lines/pattern/raplace/            替换指定行
    
    :line,lines/pattern/replace/     替换指定范围内的行
    
     :%s/pattern/replace/              替换所有行
    
     :.,$s/pattern/replace/g           从当前行末尾至编辑缓冲区的末尾进行相同的替换
    
    :line,.s/pattern/replace/g       从编辑缓冲区的指定位置到当前行进行相同的替换
    

    说明 :

    1. 所有的ex命令都以开头。
    2. :s只替换当前行上该模式的第一个匹配项。
    3. 为了替换所有匹配项,需在该命令的末尾键入字母g。例如::s/UNIX/linux/g
    4. 替换前进行确认,可在命令末尾添加c。例如::s/UNIX/linux/cg
    5. .点号代表当前行。$代表缓冲区最后一行。%代表编辑缓冲区内所有的行。
    8.3 交换字符

    交换两个字符的位置: xp
    交换两行的位置:ddp
    调换两个单词(光标开始处于第一个单词的左边):deep

    9. 大小写转换

    大小写帮助::h~
    一些常用命令:

    ~          将光标下的字母改变大小写
    
    3~         将光标位置开始的3个字母改变其大小写
    
    g~~        改变当前行字母的大小写
    
    U          将可视模式下选择的字母全改成大写字母
    
    u          将可视模式下选择的字母全改成小写
    
    gUU        将当前行的字母改成大写
    
    3gUU       将从光标开始到下面3行字母改成大写
    
    guu       将当前行的字母全改成小写
    
    gUw       将光标下的单词改成大写。
    
    guw       将光标下的单词改成小写。
    

    10. 删除、撤销、恢复删除、复制删除

    10.1 删除命令
    x      删除当前光标处的字符
    
    X      删除光标左边的字符
    
    D      删除从当前光标到本行末尾的字符
    
    J      删除两行之间的换行符 (亦可用于合并两行)
    
    dmove  删除从当前光标到move所给位置的字符
    
    dd     删除当前行
    

    ex命令

    :lined            删除指定行
    
    :line,lined      删除指定范围内的行
    
    10. 2 常用的删除组合命令

    说明:操作符命令+位移命令

    1      nx                          删除多个字符(n为删除的字符个数)       
    
    2      dw                           删除1个单词
    
    3      d10w                       删除10个单词
    
    4      d10W                      删除10个单词,忽略标点符号。
    
    5      db                           向后删除一个单词
    
    6      d2)                        删除两个句子
    
    7      d5}                           删除5个段落
    
    8      dG 或 :.,$d                删除当前行到编辑缓冲区末尾的所有行
    
    9      dgg 或 d1G 或:1,.d           删除当前行到编辑缓冲区开头的所有行
    
    10    :1,$d 或 :%f                     删除整个编辑缓冲区
    
    11    d/word                             删除从光标所在位置到单词word的所有文本  
    
    12    .,/word/d                   删除从光标所在位置到单词word的所有文本
    
    13    df x                          删除至当前行中x所在的位置
    
    14    d^                            删除至该行的开始处
    
    15  :g/^$/d                删除文件中所有空行
    
    10.3插入模式中删除操作
    ^U                         删除当前行
    
    ^H                         删除前一个字符
    
    ^W                        删除前一个词
    
    10.4 撤销或重复改变

    vi命令:

    1      u                        撤销上一命令对编辑缓冲区的修改
    
    2      U                        恢复当前行(即一次撤销对当前行的全部操作)
    
    3      .点号                    重复上一命令对编辑缓冲区的修改
    
    10.5 恢复删除

    语法:"1p(P)

    说明:

    1. 1为缓冲区的编号。

    2. p在当前行的下面插入,P在当前行的上面插入。

    10.6 复制上一次删除

    命令

    说明

    p    复制上一次删除的内容,插入到光标的后面/下面
    
    P    复制上一次删除的内容,插入到光标的前面/上面
    
    10.7其它有用的一些删除
    删除行尾多个空格 :   :%s/\s\+$//g
    
    删除行首多个空格 :   :%s/^\s*//g
    
    删除重复行:           :%s/^(.*)n1/1$/
    
    删除所有中文:    :%s/\v[^\x00-\xff]+//g
    
    删除所有数字:    :%s/\d//g
    

    11.接出复制

    当在不删除文本的情况下将文本复制到无名缓冲区时,称为接出(yank)。(因此将命令命名为y、yy、Y)。

    小提示: 可使用大写V选择一行文本。

    11.1 接出(复制单词、句子、段落)

    步骤

    1. 使用y、yy、Y将文本由编辑缓冲区复制到无名缓冲区中,但不删除原始文本。
    2. 将光标移动到希望插入文本的位置。
    3. 使用P或p命令执行插入。

    常用命令

    
    yw      接出一个单词
    
    y10w      接出10个单词
    
    y10W      接出10个单词,忽略标点符号
    
    yb      向后接出一个单词
    
    y2)    接出两个句子
    
    y2}      接出5个段落
    
    yy      接出一行
    
    10yy      接出10行
    
    y$      接出从当前字符到本行末尾的的文本
    
    y0      接出从当前字符到这一行开头之间的文本
    
    11.2 复制与移动行

    语法:

       :x,ycoz
    
       :x,ymz
    

    说明:

    1 x,y,z都是行号。x,y是源行,z是目标行号。

    2 源行x,y被复制或移动,插入到z行的下面。

    3 :m删除原始行,:co不删除原始行。

    例子:

    :2co4            复制第2行,插入到第4行下面
    
    :2,4co8            复制第2行到第4行,插入到第8行下面
    
    :2m4              移动第2行,插入到第4行下面
    
    :2,4m8             移动第2行到第4行,插入到第8行下面。
    

    12. 文本重排

    12.1.查看目前的设定值
      :set shiftwidth
    
    12.2.简单的重排
      gqq        本行重排
    
      :ce(nter)     本行文字居中
    
      :ri(ght)      本行文字靠右
    
      :le(ft)      本行文字靠左
    
      shift + >      整行向右移动一个
    
      shift + <      整行向左移动一个
    
    12.3.重排段落
      命令:  gqip
    
    12.4.全文重排
      命令:  gqQ
    
    12.5.设置行间距
      命令:  set linespace
    

    13. 正则表达式

    中介字元:

    \s  表示空白字元,即<space>或<Tab>
    \S  表示非空白字元
    \d  表示数字字元,即[0-9]
    \D  便是非数字字元,即[^0-9]
    \w  表示一般字元,即[0-9a-zA-Z]
    \W  表示非一般字元,即[^0-9a-zA-Z]
    \a  表示英文字母,即[a-zA-Z]
    \A  表示非英文字母,即[^a-zA-Z]
    \l  表示小写字母,即[a-z]
    \L  表示非小写字母,即[^a-z]
    \u  表示大写字母,即[A-Z]
    \U  表示非大写字母,即[^A-Z]
    

    vim正则表达式:
    http://www.softpanorama.org/Editors/Vimorama/vim_regular_expressions.shtm

    14. 加密

    文件加密  X(大写)

    15. 缩写

    要为经常使用的单词或表达式创建缩写,可使用:ab命令。

    1. 创建缩写,语法::ab [ short long ]  short是缩写,long是缩写的原文。
    2. 删除缩写,语法: :una short

    16. vim-shell命令

    16.1 执行shell命令
    :!command      暂停vi,执行制定的shell命令
    
    :!! pause vi      执行上一条shell命令
    
    :sh              暂停vi,启动一个新的shell
    
    :!csh           暂停vi,启动一个新的c-shell
    
    16.2 使用shell命令处理数据
    n!! command          对n行数据执行command
    
    !move command    对当前光标至move所指定的位置的数据执行command
    
    !move fmt              格式化当前光标到move所指定的行
    

    17. 显示与设置选项

    17.1 显示选项
    语法:  set [option]
    
    显示所有选项的值: :set all
    
    显示一个选项的值: :set option?
    
    17.2 设置选项

    语法::set [no]option..... :set option[=value]...

    17.3常用设置命令
    设置行号显示与否:             简写 :set nu  / :set no nu
    设置自动缩进:                    简写 :set ai / :set no ai
    设置缩进宽度:                    简写 :set sw=4
    设置大小写忽略与否:          简写 :set ic / :set no ic
    
    17.4 tab和空格替换

    设置tab=4个空格

    set ts=4
    set expandtab
    set autoindent
    

    修改文件中的tab=4:

    set ts=4
    set expandtab
    :%retab!
    

    18. 初始化文件与配置文件

    18.1 初始化文件

    vi的初始化文件:.exrc
    vim的初始化文件:vimrc

    18.2 配置文件

    linux配置文件: /usr/share/vim/vimrc
    查找Windows配置文件: scriptnames

    19. 参考资料

    1. vim configuration file资料:http://vim.wikia.com/wiki/Open_vimrc_file
    2. vim配置文件:http://amix.dk/vim/vimrc.html
    3. 史上最强vim配置文件:http://blog.csdn.net/redguardtoo/article/details/1172136

    相关文章

      网友评论

          本文标题:Vim参考

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