【问题标题】:Surround region with dollar sign ($) in Emacs在 Emacs 中使用美元符号 ($) 包围区域
【发布时间】:2014-12-19 09:04:42
【问题描述】:

有一个内置的 emacs 函数可以用括号包围一个区域,我在这里找到了它:https://stackoverflow.com/a/2952021/1635919。有没有类似的方法用美元 ($) 包围一个区域?

C-h f insert-pair 告诉这个函数可以用任何字符包围 sexp,那么如何像链接的答案那样将用 $ 包围的包围绑定到 M-$

我的 Emacs:GNU Emacs 24.3.1(i686-pc-linux-gnu,GTK+ 版本 3.10.7)

【问题讨论】:

    标签: emacs editing surround


    【解决方案1】:

    有一个工具包可以与一堆相关的工具一起提供。

    它叫ar-dollar-region-atpt

    在这里获取:

    https://launchpad.net/s-x-emacs-werkstatt/

    【讨论】:

    • 由于某种原因,包需要 sh-beg-end.el 文件并且没有得到它(在评估“(需要'thing-at-point-utils)'emacs时)说'无法打开加载文件:sh-beg-end')。在我从here 下载了 sh-beg-end 之后,一切正常。调用 ar-region-dollar-atpt 完成了这项工作,谢谢 :)
    • @danek 抱歉,这是一个错误。您可以放心地注释掉“(需要 ...” - 它只会影响 sh-script-mode 中的编辑。将尽快上传下一个版本的修复。
    • @danek 发布了新版本,应该没有那个bug:launchpad.net/s-x-emacs-werkstatt/+download
    【解决方案2】:

    您可以通过查看插入括号函数来复制 M-( 所做的事情。它所做的只是使用硬编码参数调用插入对,因此您可以将 M-$ 类似地绑定到以下函数:

        (defun insert-dolla-dolla-bills-yall (&optional arg)
          (interactive "P")
          (insert-pair arg ?\$ ?\$))
    

    【讨论】:

    • 是的,就是这样! :) 但是你是怎么找到函数代码的?我尝试了所有this tips,但没有找到任何.el 或包含源的其他文件。 C-h f insert-parenthesis 也不知道去哪里看。
    • 有趣 - 您的 Linux 发行版可能默认不安装 elisp 源代码,仅安装字节编译版本。如果你有 elisp 源,当你执行 M-x describe-function 时,帮助缓冲区有一个指向源代码位置的链接,这是我找到插入对源的地方。您可以尝试搜索您的发行版的包存储库,以查看是否有 Emacs elisp 源代码的包。
    • @neal - 是否可以使用 (insert-pair arg ?\$\$ ?\$\$)) 来做到这一点。这段代码似乎不起作用,所以无论如何使用插入对插入双美元符号?
    • @Neail - 不,但这确实有效,因为意识到这一点可能会增加你的答案,(defun jj/insert-double-dollar-dollar-sign (&optional arg) (interactive "P") (save-mark-and-excursion (insert-pair arg ?\$ ?\$)) (let (( parens-require-spaces nil)) (insert-pair arg ?\$ ?\$)) (forward-char ))
    • @neal - 你的对我不起作用,因为我认为 insert-pair 只接受单个字符参数。无论如何,我试图输入多个我得到错误的字符。例如......“$$$”。我上面的对你有用吗?
    【解决方案3】:

    设置变量insert-pair-alist 包括(?\$ ?\$)

    (add-to-list 'insert-pair-alist (list ?\$ ?\$))
    

    然后将密钥绑定到insert-pair,做你想做的事:

    (global-set-key (kbd "M-$") 'insert-pair)
    

    【讨论】:

    • 试过了:将这两行粘贴到 scratch,然后执行 'M-x eval-current-buffer'。结果: 'M-$' 在标记区域后仅产生一个 $ 字符。我是不是做错了什么?
    • 抱歉,不知怎的,我本来想输入 ?\$ 时却输入了 ?\?。已更正,如上。
    【解决方案4】:

    如果您使用库 YASnippet,它内置支持在所选区域的任一端使用自定义代码包装环绕区域:

    注意:看起来最新版本的 YASnippet 已将函数名称从 yas/selected-text 更改为 yas-selected-text。不过,似乎也有向后兼容的版本。

    # -*- mode: snippet -*-
    # name: dollar-surround
    # key: dollar-surround
    # binding: C-I $
    # --
    $`yas/selected-text`$
    

    【讨论】:

    • 使用 yasn-p 版本 20141017.736 --- 提供的剪断工作正常。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多