zoukankan      html  css  js  c++  java
  • Vim使用小记(一)常用操作

    By francis_hao    Sep 22,2016

    vim的功能自然不止如此,这里只是把日常使用频率较高的记录下来,若想了解vim的全部功能可查阅其帮助手册:help,或者查询指定命令的用法:help xx

     

    选项

    选项

    说明

    +[num]

    对第一个文件,在打开后,光标将会定位在第num行,如果num没有指定,光标将会定位在最后一行

    +/<pat>

    对第一个文件,光标将会定位在第一次出现pat的地方,查看":help search-pattern" 了解可用的搜索模式

    -o[N]

    以横向方式同时打开N个窗口,如果没有指定N,就为每个文件打开一个窗口

    -O[N]

    以纵向方式同时打开N个窗口,如果没有指定N,就为每个文件打开一个窗口

     

    基本用法

    进入插入模式命令

    i

    在光标前开始插入文本

    a

    在光标后开始插入文本

    o

    在当前行之下新开一行

    O

    在当前行之上新开一行

    光标移动命令

    gg, :0 

    光标转到首行行首

    G, :$

    光标转到末行行首

    0

    光标移到本行行首

    $

    光标移到本行行尾

    n+

    光标下移n行

    n-

    光标上移n行

    nG, :n

    光标移至n行行首

    Ctrl+u 

    上翻半屏(up)

    Ctrl+d

    下翻半屏(down)

    Ctrl+b

    上翻一屏(backwards)

    Ctrl+f

    下翻一屏(forward)

    ()

    句子移动

    {}

    段落移动

    光标定位到屏幕顶部

    M

    光标定位到屏幕中间

    L

    光标定位到屏幕底部

    w

    光标向前移动一个单词(word)

    b

    光标向后移动一个单词(back)

    e

    光标移动到当前单词的结尾(end)

    zt 

    将当前行变为屏幕第一行(top)

    zz

    将当前行变为屏幕中间行

    zb

    将当前行变为屏幕尾行

    Ctrl+e

    屏幕上移一行但光标位置不变

    Ctrl+y

    屏幕下移一行但光标不变

    删除复制和替换

    dd 

    删除整行

    d0 

    从当前位置删至行首

    d$, D

    从当前位置删至行尾

    ndd

    删除n行

    dl

    删除光标位置一个字符

    dw

    删除当前位置至单词结尾

    cc 

    删除当前行并进入插入模式,cl,cw类似d

    yy

    复制当前行,yl,yw类似d

    p

    粘贴

    r

    修改光标所在位置字符

    s

    删除光标所在位置字符并进入插入模式

    u

    撤销上一次的操作

    Ctrl+r

    恢复上一次的操作

    查找和替换

    /pattern

    从光标处开始向文件尾搜索pattern,在pattern后加c可以不区分大小写

    ?patern

    从光标处开始向文件首搜索pattern

    n

    在同一方向重复上一次搜索命令

    N

    在反方向重复上一次搜索命令

    : nohlsearch (noh)

    取消搜索结果的高亮显示

    :s/p1/p2/g 

    将当前行中所有p1用p2替代

    :n1,n2s/p1/p2/g 

    将第n1至n2行中所有p1均用p2替代 :1,$从第一行到末行=%

    *

    向文件尾搜索匹配光标所在字

    #

    向文件首匹配光标所在字

    寄存器说明

    vim里有许多寄存器,暂时只记录平时有用过的。

    "" 

    默认寄存器,文本来源命令d/c/s/x/y

    "0 

    复制缓存,来源为yy命令

    "1-"9 

    删除缓存,来源为dd命令

    "a-"z

    自定义的寄存器,不会被系统自动冲刷,总是存储最后一次使用的值。

    "A-"Z : 向"a-"z寄存器中追加新内容而不是覆盖,虽然"A-"Z本身不是寄存器,但是却可以引用。

    "ayy 

    复制当前行并将其存放在"a寄存器中

    "_ 

    黑洞寄存器,只进不出

    :reg 

    查看寄存器里的值(全名为:registers)

    eg:

    下图左侧是vi中的文字,1yy表示第一次执行yy命令,以下以此类推,右侧为执行后的寄存器中的值

     

    扩展部分

    杂项

    v

    可视行

    Ctrl+v

    可视列

    Ctrl+g

    查看当前文件信息(文件名和行数)

    :!command 

    暂时退出vi,执行command命令并输出结果

    !!command

    执行command命令并将执行结果输出到当前行(覆盖方式)

    !}command

    执行command命令并将执行结果输出到当前行和之后的行中(覆盖方式)

    :r hello

    将hello文件读入当前文件中

    :n1,n2 w>>fox

    将n1至n2追加到fox文件中

    :Ex

    (:Explore)开启目录浏览,可以浏览当前目录下的所有文件,可以选择

    :Sex

    (:Sexplore)水平分割当前窗口,并在一个窗口中开启目录浏览器

    :shell

    不关闭vi切换到shell命令行,退回到vi使用:exit

    .

    重复上一个操作

    多文件编辑

    $vi f1 f2 f3

    同时打开f1 f2 f3

    :n

    切换到下一个文件(:next)

    :bn

    切换到下一个文件(:bnext)

    :prev

    切换到上一个文件(:previous)

    :bp

    切换到上一个文件(:bprevious)

    :n#

     

    切换最近两个文件

    :e#

    Ctrl+6

    :buffers

    显示缓冲区的文件列表

    :ls

    :b buffnum

    切换到buffnum的文件,buffnum是缓冲文件列表的值

    :bd buffnum

    关闭buffnum的文件(:bdelete )

    :rewind

    切换到第一个文件

    :e f4

    在缓冲区添加新的文件,和之前打开的文件属于并列关系

    :e!

    重新载入当前文件,用在撤销当前所有做过的修改

    :mksession! [name.vim]

    保存多文件会话状态

    $vim –S name.vim

    vim重载之前的多文件会话状态

    :source name.vim

    手动重载之前会话

    多标签

    $vim –p f1 f2 f3

    以多标签的方式打开多个文件

    gt

    向右切换标签

    gT

    向左切换标签

    :tabnew filename

    添加一个新标签

    :tabc

    关闭当前的tab

    :tabo

    关闭其他的tab只留当前一个

    :tabs

    查看所有打开的tab

    :tabp

    前一个

    :tabn

    后一个

     

    set

    vimrc

    系统 vimrc 文件: "/etc/vimrc"(优先级低)

    用户 vimrc 文件: "$HOME/.vimrc"

    第二用户 vimrc 文件: "~/.vim/vimrc"

    用户 exrc 文件: "$HOME/.exrc"

     

    vim的配置文件,一些配置信息可写入此文件中,但也可以在打开的文件中使用:set以实现一次性的功能

    :version

    查看vim版本信息

    .vimrc文件中的注释行

    :set paste

    设置为粘贴模式,所见即所得,不会因为注释乱了格式

    :set 

    显示常用的设置值

    :set list 

    显示不可见字符

    vi编码

    set encoding=utf-8

    set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936

    set termencoding=utf-8

    程序员专用

    杂项

    K

    跳转到光标所在函数或命令的man手册

    J

    将当前行的下一行合并到当前行

    %

    跳转到匹配"{"对应的"}"的位置

    gd

    跳到局部的变量定义处,不能跨文件

    gf

    打开光标所在位置的文件名,一般是头文件

    ctrl+w f分屏打开文件

    >

    缩进,<:反缩进

    Ctrl+o

    跳转到上一视图,可用于搜索后、使用gg|G跳转或tag跳转的返回

    ''(两个单引号)

    在上一视图和本视图之间切换

    ma

    设置标签a,之后可以通过`a跳转到设置的标签a处,类似的标签:a-z

    ~

    可转换光标所在位置的字母大小写

    gg=G

    整个文件重置缩进

    2G=15G

    第二行至第15行重置缩进

    :set ft=c

    设置文件类型是c (filetype)

    :filetype

    显示当前文件类型相关的设置

    文件比较

    $vimdiff f1 f2

    直观的比较f1和f2的不同(vimdiff是shell下一个链接命令,指向vim)

    :vertical diffsplit xxx

    垂直方式比较当前文件和xxx文件

    zo 

    打开光标下面的一个折叠(open)

    zO

    打开光标下面的所有折叠

    zc 

    关闭光标下面的一个折叠(close)

    zC

    关闭光标下面的所有折叠

    :set noscrollbind

    取消文件比较中的同步滚屏功能

    ]c

    跳到下一个修改点

    [c

    跳到上一个修改点

    :diffupdate

    在比较过程中,修改过一个文件后更新比较状态

    dp

    把光标所在窗口的差异改到另一个窗口(:diffput)

    do

    把光标所在窗口的差异改为另一个窗口的(:diffget) o=obtain

    :diffoff!

    强制关闭比较模式

    窗口分割

    :split xxx

    打开xxx并与当前文件水平排列

    :vsplit xxx

    打开xxx并与当前文件垂直排列,

    :15split xxx

    以占据15行的窗口打开文件xxx

    :new [xxx]

    新建(打开)一个与当前文件水平排列的文件

    :vnew [xxx]

    新建(打开)一个与当前文件垂直排列的文件

    ctrl+w w

    在打开的文件中跳转

    Ctrl+w [hjkl]

    跳转到[左下上右]的窗口

    Ctrl+w [tb]

    跳转到最上/最下的窗口

    Ctrl+w [HJKL]

    把当前窗口移动到最[左下上右]边

    Ctrl+w +

    扩大窗口(默认一行),5ctrl+w +(扩大5行)

    Ctrl+w =

    平分窗口

    Ctrl+w _

    扩大窗口到最大,带参数{height}ctrl+w _

    :res(ize) num

    窗口大小调整为num行

    :res(ize) +num

    窗口大小增加num行

    :vertical res(ize) num

    窗口大小调整为num列

    :close

    关闭当前的(不能是最后一个)的窗口

    Ctrl+w c

    :only

    关闭除当前窗口外的所有窗口

    :qall

    关闭所有打开的窗口

    :wall

    保存所有的打开的窗口文件

    :wqall

    保存并退出

    $vim –o f1 f2 f3

    以水平排列方式打开三个文件

    $vim –O f1 f2 f3

    以垂直排列方式打开三个文件

    :all 

    将已经打开的多个文件分配水平的窗口

    :vertical all

    将已经打开的多个文件分配垂直的窗口

    Ctrl+w o

    只显示当前窗口,

    ctags

    $ctags --list-languages

    显示ctags支持的语言

    $ctags --list-maps

    默认支持的文件扩展名

    $ctags -R

    给当前文件夹下的所有文件建立tags

    ~set tags=/tags

    在.vimrc文件中设置tags的路径,如果有多个tags可以用","分割,或者set tags+=/tags进行添加。

    :tag main

    可以从打开的文件中跳到main函数处,即使打开的文件中没有main函数(在别的文件中也可以跳过去)

    Ctrl+]

    以光标所在位置的单词为tag跳转

    Ctrl+t

    跳回到之前的位置,可以在前面加上跳转的深度,3ctrl+t:跳回之前三层之上的位置

    :tags

    列出已经跳转到过哪些tag了

    :tag /^block<tab>

    查找以block开头的可能的tag

    Ctrl+w+]

    分割当前窗口并跳转到光标所在位置的tag处

    :stag xxx

    $vim –t tag 

    找到tag(函数,结构体等)所在文件并打开

    :tn

    多个匹配tags时跳转下一个(:tnext)

    :tp

    多个匹配tags时跳转上一个(:tprevious)

     

     


    本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
    转载自:http://www.cnblogs.com/yinghao1991/p/6517071.html

     

     

    参考

     

    【1】VIM使用系列:寄存器与复制粘贴缓冲区:https://my.oschina.net/shelllife/blog/144357

    【2】VIM字符编码设置:http://www.cnblogs.com/freewater/archive/2011/08/26/2154602.html

    【3】linux下vim中文乱码的解决方法:http://www.cnblogs.com/joeyupdo/archive/2013/03/03/2941737.html

    【4】VIM技巧之分隔窗口:http://blog.chinaunix.net/uid-24673811-id-1994607.html

    【5】vim中多标签和多窗口的使用https://my.oschina.net/kutengshe/blog/464602

    【6】开启文件类型检测:http://easwy.com/blog/archives/advanced-vim-skills-filetype-on/

    【7】man vim

  • 相关阅读:
    Go语言从入门到放弃(结构体常见的tag)
    Go语言从入门到放弃(设置 go get 为国内源)
    AndroidStuidio安装
    ADB常用命令
    win10安装Nodejs
    VsCode配置Go语言插件
    Visual Studio Code使用指南
    Go语言从入门到放弃(四)
    CentOs7.5安装Redis
    InnoDB INFORMATION_SCHEMA FULLTEXT Index Tables
  • 原文地址:https://www.cnblogs.com/yinghao-liu/p/6517071.html
Copyright © 2011-2022 走看看