zoukankan      html  css  js  c++  java
  • Vim 复制粘帖格式错乱问题的解决办法

    有时候,复制文本(尤其是代码)到 Vim,会出现格式错乱的问题。看样子,应该是自动缩进惹得祸。本文不去深究原因,直接给出解决方法。

     

    1. paste 模式

    运行如下命令,进入 paste 模式:

    :set paste

    进入 paste 模式后,按 i 键进入插入模式,然后再粘帖,文本格式不会错乱了。但粘帖后还需要按 <ESC> 进入普通模式并执行如下命令结束 paste 模式:

    :set nopaste

    显然,这样非常麻烦。下面我们进行改进。

    2. 快捷键一

    我们可以利用设置快捷键来简化上面的两个命令。在 ~/.vimrc 中加入如下两行:

    map <F10>:set paste<CR>
    map <F11>:set nopaste<CR>

    这样,在普通模式下按 F10 (你也可以用自己喜欢的按键)就会进入 paste 模式,按 i 进入插入模式后粘帖,然后按 <ESC> 回到普通模式,再按 F11 结束 paste 模式。

    这样虽然方便了,但占用了两个按键。下面我们继续改进。

    3. 快捷键二

    在 ~/.vimrc 中加入如下内容:

    set pastetoggle=<F11>

    这样就可以把上面的 F10 和 F11 合并为一个快捷键来切换 paste 模式了。

    还有更好的办法么?当然!

    4. Vim 寄存器一

    关于 Vim 寄存器的详细信息请执行命令 “:help registers” 查看。

    对于“剪切板”这个概念,Linux 下有两个东西:一个叫做选择缓冲区(X11 selection buffer),另一个才是剪切板(clipboard)。鼠标或键盘选择内容时,内容实时进入缓冲区,然后按中键将内容插入光标所在位置;鼠标或键盘选择内容后,按Ctrl-C(或Shift-Ctrl-C)或菜单中的“复制”,内容进入剪切板,然后按Ctrl-V(或Shift-Ctrl-V)或菜单中的“粘帖”将内容插入光标所在位置。关于这两者的详细信息,请自行搜索,此处不深究。

    Vim 的寄存器 “* 对应系统缓冲区, 寄存器 “+ 对应系统剪切板。

    如果你是把选择的内容(在系统缓冲区中)粘帖到 Vim ,只需在普通模式下执行如下命令:

    "*p

    对应的,如果你是把复制的内容(在系统剪切板中)粘帖到 Vim,只需在普通模式下执行如下命令:

    "+p

    怎么样?格式没有错乱了吧?

    这样虽然简便很多了,但还是需要输入三个字母,并且这三个字母都得使用右手小拇指输入,甚至其中的两个字母还需要 shift 键配合!

    还有更简单的办法。

    5. Vim 寄存器二

    在 ~/.vimrc 里加入如下内容:

    set clipboard=unnamed

    然后只需在普通模式下按 p 即可把系统缓冲区中的内容粘帖到 Vim 中,就像粘帖用 yy 命令得到的内容一样,并且格式不错乱。

    如果把上面的一行换成如下内容:

    set clipboard=unnamedplus

    普通模式下按 p 粘帖的内容就是系统剪切板里的内容了。

    这已经足够简便了。在搜索此问题的过程中,我还看到了另外一些办法。

    6. 快捷键三

    在 ~/.vimrc 里加入如下内容:

    inoremap <S-Insert><ESC>:setl paste<CR>gi<C-R>+<ESC>:setl nopaste<CR>gi

    这样,你就可以在插入模式下使用 Shift-Insert 快捷键在粘帖系统剪贴板中的内容了。

    把上面一行替换成如下内容同样可以达到相同的效果:

    inoremap <S-Insert><ESC>"+p`]a

    注意,这可是在插入模式下哦!比起第 5 节提到的方法,这种方法省去了一次 <ESC> 按键进入普通模式和一次 i 按键重新回到插入模式。

    至此,你需要做的只是:

    • a. 复制你想要的内容;
    • b. 回到 Vim 并按 Shift-Insert 快捷键;
    • c. 继续编辑其他内容。
  • 相关阅读:
    POJ 1659 Frogs' Neighborhood
    zoj 2913 Bus Pass(BFS)
    ZOJ 1008 Gnome Tetravex(DFS)
    POJ 1562 Oil Deposits (DFS)
    zoj 2165 Red and Black (DFs)poj 1979
    hdu 3954 Level up
    sgu 249 Matrix
    hdu 4417 Super Mario
    SPOJ (BNUOJ) LCM Sum
    hdu 2665 Kth number 划分树
  • 原文地址:https://www.cnblogs.com/Dev0ps/p/9813621.html
Copyright © 2011-2022 走看看