Vim入门指北

作者: 黑夜之旅 | 来源:发表于2014-10-23 22:50 被阅读246次

    ========

    一些基本概念:

    • operator(操作符): 例如命令d, y, c等;
    • motion(移动): 例如移动光标的命令h j k l, w, e, b等;
    • text-objects(文本对象): 例如s(表示句子sentence), w表示单词,p表示段落(Paragraphs)等等。
      除了hjkl这些基本命令之外, 你还要知道“更高级的”组合命令:
      "operator + motion"组合的方式,例如:
    • ct. 将字符'.'前面的所有都删除.
    • y^ 复制到行首.

    "operator + text-objects"的命令组合方式, 例如:

    • ciw : 剪切光标处单词, 不包括空格
    • caw : 剪切光标处单词, 包括空格
    • dip : 删除一段

    移动光标:

    下上左右:JKHL
    移动到上一个单词首b
    移动到下一个单词首w,移动3个单词3w
    <----b w---->

    w/b是在单词首部移动,在单词尾部移动为ge/e
    <----ge e---->

    如果是大写的B,W,gE,E,则只将“空格”作为单词分隔符,例如'gloal.member'被当作一个完整的词。

    ^ 光标移动到行开头
    $ 光标移动到行结尾

    fx 光标移动到下一个x处,3fx移动到第三个x处
    Fx 光标移动到前面的x处
    txTx类似,移动到x之前

    ma 标记当前行, 标签可以是a-z任意字符。
    ~a 跳转到a标签。

    标签跳转C-]
    跳转回C-OC-T或按两下
    Ctrl + 左/右键 也可以跳转/返回
    跳转到匹配的括号%
    移动到文件首gg
    有趣的命令9999k作用也是移动到文件首
    移动到文件尾G
    跳转到第33行33G
    或者输入 :33 也可以跳转
    如移动到文档1/3处 ,直接输入33%
    zz 将当前光标所在的行移到屏幕中间 ,大写的ZZ是保存&退出文档。
    zt 当前光标所在的行移到屏幕顶,助记t=top 。
    zb 当前光标所在的行移到屏幕底,助记b=bottom 。
    H, M, L分别为移动到文档的head, middle, last的位置。
    C-F , C-B 向前向后翻页

    Linux 终端( Terminal)中常用的快捷键
    ctrl+f 向前移动一个字符
    ctrl+b 向后移动一个字符
    alt+f 向前移动一个单词
    alt+b 向后移动一个单词
    ctrl+a 移动到当前行首
    ctrl+e 移动到当前行尾

    编辑:

    使用cdx删除的字符仍然存在寄存器中,用p可以粘贴出来。

    • c = 替换(change),删除文本并进入插入模式,
    • d =删除(delete),一般组合使用,
    • y =复制(yank),
    • p = 粘贴(paste),
    • x = 删除字符;

    删除,剪切, 复制一行= ccddyy
    删除,剪切, 复制多行= 3cc4dd5yy
    删除,剪切, 复制到行尾= c$d$y$
    或者大写C, D, Y, 也是到行尾
    删除,剪切,复制到行开头= c^d^y^ 或者c0d0y0

    从光标开始, 删除,剪切,复制到单词尾=cwdwyw
    删除,剪切,复制整个单词= daw, caw, yaw
    注意区别ywyaw, 例如光标在"test" 的e位置, yaw复制整个单词, yw只复制est。

    tips: 重复操作的快捷键是".", 比如daw删除一个单词后想继续删除下一个单词,就可以按"."

    删除换行符(两行合并为一行): J
    撤销上次操作(还原): u
    反撤销(重做): C-R
    撤销对一行的所有操作(还原一行): U,第二次按U会撤销上一次U的操作。
    只用u和C-R即可回到任何一个操作状态。
    可视模式下的U/u是大小写转换。

    • 光标前插入 = i
    • 光标后插入 = a
    • 行首插入 = I
    • 行尾插入 = A
      在当前行的下面另起一行,并进入插入状态o
      在当前行的前面另起一行,并进入插入状态O
      CTRL-T is working with tags stack
      CTRL-O is working with jumplist
      Tag stack and jumplist are different list in vim, but they might have same items when you jumping through tags (eg. using CTRL-] )

    外部程序的粘贴/复制:

    GVIM的“+号寄存器”可以与外部程序复制/粘贴:

    • 复制"+y
    • 粘贴"+p
    • 剪切"+x
      注: 以上快捷键在命令可视模式/模式有效,先按双引号进入寄存器模式,再按加号,然后按y/p/x
      如果在插入模式, 先按ctrl+R进入寄存器模式(会出现"号), 再按对应的寄存器编号,系统共享寄存器编号是+号.
      在VIM正常模式下,ctrl+r 是重做。
    " 加入到_vimrc文件中:
    map <C-c> "+y "加号寄存器-复制  
    map <C-v> "+p "加号寄存器-复制  
    map <C-x> "+x "加号寄存器-复制  
    map <C-s> :w<cr> " 保存  
    

    多窗口:

    • 关闭分屏窗口: Ctrl+W cCtrl+W q
    • 上下分割窗口: Ctrl+W s
    • 左右分割窗口: Ctrl+W v
      Ctrl+w Ctrl+]新窗口打开定义

    多文件buff操作:

    :E 或者:Explore 浏览目录
    :edit filename 编辑文件;
    :ls 列出所有buffer;
    :b 2:buffer 2将切换到相关的buffer
    :b2 关闭buff=2的文件;
    :bn 删除文件缓冲(关闭文件)。
    zz 将当前编辑的行置于屏幕中间。
    ZZ 保存退出。
    :q! 不保存退出, :qa!表示退出所有buff并不保存
    :wq 保存退出

    搜索和替换:

    搜索

    /include 正向搜索,n下一个,N上一个
    ?include 反向搜索
    /\<the\> 全词匹配搜索单词"the",助记开头<,结尾>
    #号是向后搜索匹配单词,*向前搜索匹配单词, gd类似*号的功能.

    正则搜索:

    /^the 搜索the开头的行(针对行,而非单词)
    /here$ 搜索here结尾的行
    点号匹配任何单字符,如果要搜索的内容本身包含点号,则用.代替,比如:
    /the. 搜索"the"匹配的内容
    /the\. 搜索"the."匹配的内容

    替换:

    最常用的替换命令就是:%s/1/2/g了, 其中%符号表示范围整个文件, s表示搜索, 最后的g表示全局替换.
    如果要制定范围内替换, 比如在31~文件尾范围内替换: :31,$s/hello/world/gc, 最后的c参数表示替换过程中需要确认(confirm).

    可视模式:

    shift + v: 行选择模式
    大写V同上
    所选择区域转换为大写U,转换为小写u
    xd在可视模式都是删除
    ><在可视模式为右移,左移

    列模式:

    Ctrl+v (Windows上是Ctrl+Q)进入列模式,
    使用方向键或H J K L选择行, 用cd删除, shift+i插入(大写I键),
    插入完成后, 按esc后生效.

    代码折叠:

    可以zf进行折叠, 用zo打开折叠,也可以方向键向右打开折叠,zc 关闭折叠.

    Session

    Session可以保存此次编辑的状态, 比如已经打开的文件, 当前编辑位置等.

    • 保存Session: mksession session.vim
    • 载入Session: source session.vim

    [Evernote]https://www.evernote.com/shard/s120/sh/4e8424bf-6c54-4f2e-a9a5-d4641127c615/ed07f657e1eccd05e81947e2e008c8a9

    相关文章

      网友评论

        本文标题:Vim入门指北

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