【问题标题】:Any Emacs command like paste-mode in vim?任何 Emacs 命令,如 vim 中的粘贴模式?
【发布时间】:2009-06-12 13:17:17
【问题描述】:

当我尝试将一些代码从浏览器粘贴到 Emacs 时,它会自动缩进代码,有什么方法可以阻止 Emacs 像 vim 中的 :set paste 那样暂时缩进?

【问题讨论】:

  • 您要粘贴到终端吗?如果您要粘贴到“直接”粘贴的 GUI Emacs,则不会发生这种情况;当您粘贴到终端时,实际上就像一个接一个地输入所有这些字符。
  • 所有模式/缓冲区都会发生这种情况吗?还是只是一些?您是否尝试过在没有自定义的情况下启动 emacs 时粘贴到 Emacs 中(ala emacs -q)?
  • 不知道“粘贴”——谢谢!
  • 前缀 C-u C-y 应该不缩进。使用 Emacs 25 为我工作
  • @4e6 你为什么把这个作为评论?这是一个有效的答案,比 Jouni K. Seppänen 的答案更容易,我在第一次阅读时错过了它。

标签: vim emacs copy-paste


【解决方案1】:

使用 emacs24 最简单的方法是:

M-x electric-indent-mode RET

这会禁用自动缩进。

粘贴你的东西。

重新启用

M-x electric-indent-mode RET

或者只是M-x UP-Arrow ;-)

【讨论】:

  • 我希望能够添加一个钩子,这样当我粘贴时,它会自动禁用然后重新启用。有人有什么想法吗?
  • 我认为您可以通过自己的键绑定覆盖 C-c 并调用执行此操作的函数,从 CUA 或其他 emacswiki.org/emacs/CuaMode 调用粘贴
【解决方案2】:

切换到*scratch* 缓冲区(或只是到一些不存在的缓冲区;它将处于基本模式,除非您以某种方式对其进行了配置,否则不应执行任何自动缩进),键入C-SPC 以启动区域,粘贴文本,输入 C-w 以在 Emacs 中剪切它,切换回原始缓冲区,输入 C-y 进行粘贴。

【讨论】:

  • 这是一个很好的解决方法,虽然不是完全。例如,我注意到,当粘贴带有笑脸的文本(到基于终端的 Emacs 实例中)时,这仍然会针对不匹配的括号给出警告。 (:))最好有某种“模式”(非常松散地使用该术语)来关闭所有这些东西(因为它们会使粘贴需要很长时间,如果它是一大块文本)。尽管如此,这至少解决了某些方面的问题,并且清楚地解决了最初提问者的主要问题。
  • 这不适用于很多输入。原因是当您粘贴 windows/dos 编码的文本时,\r\n 会强制显示选项卡。如果可以,将 Windows 上的文件切换到 unix 行尾,然后它会停止
  • 粘贴到暂存缓冲区会为我删除所有缩进。我想保留复制文本中最初的缩进。禁用电动缩进模式的解决方案有效。
  • @ishmael *scratch* 缓冲区默认为 Lisp 交互模式。通过M-x fundamendal-mode手动更改它
  • 这是唯一对我有用的解决方案。
【解决方案3】:

Python 的一个快速解决方法是粘贴到 """ ... """ 块中。

【讨论】:

    【解决方案4】:

    带前缀的 yank 命令 C-uC-y 会在没有缩进的情况下进行 yank。适用于 Emacs 25。

    【讨论】:

    • @Bae 很高兴我的评论有所帮助,所以我从中做出了回答。
    • @ 4e6 在这里 2 年后我在谷歌上搜索同样的东西,但仍然缺少这个答案:) 至少我现在已经投票了,所以我会在 2 年后找到它......
    【解决方案5】:

    你可以试试

    c-toggle-syntactic-indentation
    

    【讨论】:

    • c-toggle-syNtactic-indentation
    • 感谢您发现错字。固定。
    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多