在 Vim 中粘贴代码时自动禁用缩写扩展

发布于 2024-11-06 11:33:47 字数 116 浏览 0 评论 0原文

在 Vim 的终端实例中,如何在粘贴代码时自动禁用缩写扩展?

注意:这里的关键字是自动,而不是通过:set Paste手动。

In a terminal instance of Vim, how can I make abbreviation expansion be automatically disabled when I am pasting code?

Note: The keyword here is automatically, not manually via :set paste.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

栀梦 2024-11-13 11:33:47

Vim 没有标准的方法来区分输入是否
字符实际上是由用户输入的,或者是由用户生成的
通过剪贴板或选择缓冲区的 X Window 系统。那
这就是为什么有粘贴模式来手动切换Vim进入状态
当所有输入不被解释为交互式键入时。

因此,您有两种选择:

  1. "*"+ 寄存器(代表剪贴板)粘贴
    和 X 选择),如果您正在使用 GVim 或者您的 Vim 是
    使用 X11 功能编译(或者至少使用
    xterm_clipboard 一)

  2. 如果 Vim 在终端中运行,您可以手动
    同步寄存器之一(例如,未命名的寄存器,""
    使用剪贴板或 X 选择。例如,由于我只使用 Vim
    在终端中,我为自己定义了以下映射:

     nmap ; y :call system('xclip', @");
     nmap <静音> p :调用 XClipRead();
    
     功能! XClipRead()
         让 s = 系统('xclip -o')
         如果 v:shell_error
             返回
         恩迪夫
         调用 setreg('"', s)
     结束功能
    

    使用这些粘贴 X 选择缓冲区的内容
    映射,您需要键入前导键,然后键入p,并且
    然后是适当的 Vim 粘贴命令。如果你同意输
    使用不同粘贴命令的机会(例如
    Pgp]p 等),您可以定义一个同时执行这两种操作的映射
    事情:

     nmap ; P :调用 XClipRead()p
    

There is no standard way for Vim to distinguish whether an input
character was actually typed by the user or was generated for them by
the X Window System through the clipboard or selection buffers. That
is why there is the paste mode to manually switch Vim into the state
when all input is not interpreted as interactively typed.

Thus, you have two alternatives:

  1. Paste from the "* or "+ registers (that represent the clipboard
    and X selection, respectively), if you are using GVim or your Vim is
    compiled with the X11 feature (or, at least, with the
    xterm_clipboard one)
    .

  2. In case of Vim running in the terminal, you can manually
    synchronize one of the registers (for example, the unnamed one, "")
    with the clipboard or X selection. For instance, since I use Vim only
    in the terminal, I define the following mappings for myself:

     nmap <silent> <leader>y :call system('xclip', @")<cr>
     nmap <silent> <leader>p :call XClipRead()<cr>
    
     function! XClipRead()
         let s = system('xclip -o')
         if v:shell_error
             return
         endif
         call setreg('"', s)
     endfunction
    

    To paste the contents of the X selection buffer using these
    mappings, you need to type the leader key followed by p, and
    then an appropriate Vim paste command. If you agree to lose
    the opportunity of using different paste commands (such as
    P, gp, ]p, etc), you can define a mapping that does both
    things:

     nmap <silent> <leader>P :call XClipRead()<cr>p
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文