美文网首页
【vim】学习笔记

【vim】学习笔记

作者: 清水芦苇 | 来源:发表于2017-07-08 18:32 被阅读70次

    按功能划分出命令

    光标移动

    w移动光标到下一个单词的词首,b移动光标到上一个单词的词首;e移动光标到下一个单词的结尾,ge移动光标到上一个单词的结尾。
    ^或者0(数字零)光标移至当前行首。(0 - 移动到行首
    ^ - 移动到行首的非空白符)
    $光标移至当前行尾
    #j#k向下或向上移动#行(set relativenumber 之后非常管用)
    gg光标移动到全文开头,在vim才有效,vi中无效
    GG光标移动到全文结尾
    G 转到最后一行行首
    ctrl uctrl d控制屏幕滚动,同时光标跟着定位走。通过:set scroll=10 可以设定一次滚动的举例。

    括号跳转:
    % 跳到匹配的括号处,如下所有括号类型:{ } [] ()
    [{ 跳到本代码块(由{}界定)的开头
    [} 跳到本代码块的结尾

    编辑(增删改)

    a: 在光标的后面开始插入字符
    A 在一行的结尾处开始插入字符
    i 在光标处插入字符
    I 在一行的开头处开始插入字符
    o 在光标所在位置的下一行打开新行插入
    O 在光标所在位置的上一行打开新行插入
    ea 从当前单词末尾开始插入(非常实用)
    dd 剪切当前行:,删除多行:3dd(表示删除从光标位置开始的连续3行)
    dw 剪切单词,可以实现清空右侧空白符。
    J(大写) 将下一行合并到当前行
    r 替换单个字母,注意如果是替换为大写字母,建议用shift加目标字母触发,而不要用 caps lock。一个是从操作角度考虑,还得多余按一下 caps lock 还原操作;另一个是很多仿 vim 编辑器不识别 caps lock 按键
    操作括号内内容:
    ci'、ci"、ci(、ci[、ci{、ci< 分别更改这些配对标点符号中的文本内容
    di'、di"、di(、di[、di{、di< 分别删除这些配对标点符号中的文本内容
    yi'、yi"、yi(、yi[、yi{、yi< 分别复制这些配对标点符号中的文本内容
    vi'、vi"、vi(、vi[、vi{、vi< 分别选中这些配对标点符号中的文本内容
    c本身的意思是改变,即删除并进入插入模式。
    cc 清空当前行, 然后进入插入模式
    cw 修改单词。修改光标位置到单词结尾处的单词。
    caw 修改单词。修改光标所在的整个单词,即所在的整个单词全部删除后进入插入模式。
    ct{某个字母} 修改单词。修改光标位置到某个字母之间的单词,只要碰到首字母就返回。

    多窗口、多文件编辑

    多窗口

    (^表示ctrl)
    ^wv垂直分割窗口(复制一个本窗口,其实是公用一个 buffer)
    ^wn水平分割出新的未命名窗口
    ^wr向右或向下方交换窗口,而^wR则和它方向相反
    ^ww切换窗口,forcus 和 blur 的切换
    ^wo只保留当前窗口(window only)
    :close 关闭当前窗口

    多缓冲区文件

    :ls 列出所有打开的缓冲区文件(等价于 :buffers
    :b {number, expression} 跳转到指定缓冲区
    :bd 关闭当前的单个缓冲区文件(注意关闭窗口不会关闭缓冲区文件)
    ctrl+6 切换到下一个文件(必须事先打开过其他文件才可以切换)

    多页签

    :tabc 关闭当前页签
    gt 切换页签(vim 命令模式)

    按不同模式划分出的命令

    命令行模式(Command-line mode)

    主要是对文件整体进行的操作,包括设置,查找
    :tab 文件路径 同时编辑多个文件 gt 进行切换不同Tab键
    命令行模式下取到从第几行到第几行.表示当前行 ,1,.表示从第一行到当前行 ,比如:1,.d就同样表示删除所有
    echo $VIM(注意大小写)显示全局.vimrc的位置
    :help {命令}必要时刻去求助 help
    :map 查看当前键盘映射有哪些

    插入模式(Insert mode)

    移动光标:原生的是上下左右键,可以映射配置成ctrl键控制

    inoremap <C-h> <Left>
    inoremap <C-j> <Down>
    inoremap <C-k> <Up>
    inoremap <C-l> <Right>
    

    命令模式(也称普通模式)(Normal mode)

    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段
    yy复制当前行。经常与p键连用,用作复制粘贴
    yw复制单词。
    p粘贴。p表示粘贴别的东西进入vim
    u撤销
    ctrl+r重做(注意不是command)
    ZZ(注意是大写) 保存并退出vim
    >><<单行缩进(即使光标在行中间位置也可以)
    J 合并两行
    . 重复上一次命令

    可视模式(Visual mode)

    用途:选择文件的一部分内容,以便作比如删除,复制等工作
    o切换可视模式的选中端点
    复制选中区域: y

    选择模式(Select mode)

    gh进入选择模式,然后移动光标开始选中。当再按下字符时可直接进行替换。

    命令模式→可视模式
    v一个字符一个字符的选择
    V一整行一整行的选择
    ctrl+v列选取模式,可以选取竖行文本

    其他综合功能划分出的命令

    • 保存并退出vim::wqZZ:x

    • 底行命令行字符替换:
      :#,#s/old/new/g 其中 #,# 代表的是替换操作的若干行中首尾两行的行号。
      :%s/old/new/g 则是替换整个文件中的每个匹配串。等价于%s;old;new;g(用分号做替换分隔符也可以)

    • 查找功能:向前搜索/searchStr 向后搜索?search_text

    • 全选:ggVG
      稍微解释一下上面的命令
      gg 让光标移到全文开头
      V 是进入Visual(可视)模式,并且是整行整行选取
      G 光标移到最后一行

    • 全文格式化(format)缩进:gg=G

    • 防止粘贴时由智能缩进造成排版混乱::set paste

    • 临时返回命令行界面以及重返vim
      mac 下可以使用 ctrl+z (挂起vim)以及 fg(bring to foreground) 来返回 VIM
      但在 cmder 中似乎不起作用,可以尝试使用:sh来退出默认shell,返回命令行界面以及exit来返回VIM

    • 如何查看vim 是否具有某个功能
      vi --version |grep clipboard查看是否具有clipboard 功能,有+则表明由此功能。-则表明无此功能。clipboard 命令会影响vim中的复制是否能复制到系统剪贴板。

    • 上下移动某单行
      :{原始行号} m {移动到的目标行号} 移动到第几行(注意不是相对距离是绝对距离),从 0 开始计算。
      :m +1 下移 1行
      :m -2 上移 1行
      或者dd{k、j移动}p也不错。

    • {行数}G转到指定的行数,比如:9G,转到第9行。建议 G 用shift+g 触发,而不要用 caps lock + g 触发。

    • 插入列(等价于多光标输入)
      ctrl+v进入可视列模式
      shift+i从可视列模式进入插入模式,并输入要插入的内容
      Esc退回到命令模式,在每行的选定区域内新增选中的内容。


    其他

    vim不支持在command按键上绑定快捷键
    操作系统差异。windows系统下用gvim命令,linux系统下用vim命令。

    插件

    emmet-vim插件
    <c-y>,来触发标签扩展,也可以自制 snippet 看链接,具体没研究过。

    nerdtree插件——file drawer
    深入使用 nerdtree(好多快捷键需要进一步学习)

    • 在vim 中唤醒 nerdtree 操作区:
      tt (自制快捷键)命令模式下切换目录文档
    • 在 nerdtree 操作区的一些基本操作:
      q退出操作区
      ?切换帮助菜单
      go 预览文件内容

    vim-autoformat插件
    :Autoformat自动格式化,目前针对 html

    [ctrlp] fuzzy file finder (尚未使用)
    [fugitive] Git Tool。有一些 Git 的高级用法,比如迅速切换各个版本的 commit 代码,一个按键多次还原代码。比如能看到各个行代码是谁提交的。

    Vim 寄存器

    • 使用d, c, s, x等会删除字符的命令时,被删除字符会进入匿名寄存器""。
    • "*"+在Mac和Windows中,都是指系统剪切板(clipboard),例如"*yy即可复制当前行到剪切板。
    • 寄存器被存储在 ~/.viminfo 中, 在下次重启vim时仍会加载
    • 查看 VIM 寄存器的内容,通过:reg
      非常系统的博客

    vim中的配置项

    vim的set relativenumberset number有冲突部分,set number必须是在set relativenumber之后做。

    参考资料

    总有你要的编程书单(GitHub)https://juejin.im/entry/5920f4f0a0bb9f005f4d9535
    vim插件 http://vimawesome.com/
    [vim 切换页签快捷键(还没完全应用成功)]https://www.liurongxing.com/vim-tab-shortcut.html
    方方老师的配置:https://github.com/FrankFang/dot-files/blob/master/vimrc

    边角知识学习

    y 代表从缓冲区拉至寄存器
    .vimrc 设置缩进之道

    相关文章

      网友评论

          本文标题:【vim】学习笔记

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