gpt4 book ai didi

Emacs:将功能分配给键绑定(bind),并重复按下,撤消最后一次按下并在更广泛的设置下重做

转载 作者:行者123 更新时间:2023-12-04 19:07:12 25 4
gpt4 key购买 nike

这是我正在尝试做的事情的更大图景:

使用按键,它将在最里面的关闭/打开分隔符(括号、大括号、括号等)之后/之前插入一个左括号和右括号。

但是如果紧接着按下它,它将撤消最后的插入,寻找下一个关闭分隔符,然后将其放在后面,依此类推。

我有第一部分的工作版本,但我正在寻找第二部分的“最佳实践”(它撤消并向外移动)

作为一个激励因素和具体示例,这是使用 Python 编码时的典型场景。我经常使用列表推导,并且经常构建列表,然后决定要对所有元素求和,等等。所以我会首先输入:

[x*x for x in some_lst if is_prime(x)]

然后我想用“sum”命令封装这个列表:
sum([x*x for x in some_lst if is_prime(x)])

我不想为了插入括号而一直将光标移动到开头和结尾。我宁愿在列表中有点,按一个键,让它找出分隔符,然后把标记放在插入括号的开头,这样我就可以输入“sum”。我下面的功能似乎有效(搭载“expand-region”包):
(defun add-paren ()
(interactive)
(er/mark-outside-pairs)
(exchange-point-and-mark)
(insert-string ")")
(exchange-point-and-mark)
(insert-string "(")
(left-char 1)
)

第二步的最佳做法是什么?

(对上述内容的任何建议/改进也将不胜感激。这是我在 Elisp 中的第一个“真正”功能。)

谢谢。

更新:谢谢大家的提示。我可能会在我的最终解决方案中使用其中的一些。我最初的问题仍然存在:是否存在“大规模撤消和重做”的标准模式,还是每个问题都有自己的自定义解决方案?假设我使用 smartparens正如建议的那样,一键完成所有操作,但我希望它发生在第三级。我想要的是按3次击键并将括号放在那里。

因此,在第一次击键后,它将括号放在最内层。再次按下它应该删除插入的括号,并将它们放在下一个级别,依此类推......

(顺便说一句,不是试图重新发明轮子。我怀疑列出的一些包可能正是我需要的——我只是想在 Elisp 中练习编码)。

更新 2:
我想这没有最佳实践吗?无论如何,我使用 expand-region 解决了这个问题和 smartparens :
(defun add-paren ()
(interactive)
(if (eq last-command 'add-paren)
;; (message "AAAA")
(delete-paren)
)
(setq currpoint (point))
(er/mark-outside-pairs)
(if (eq currpoint (point))
(er/mark-outside-pairs)
)
(sp-wrap-with-pair "(")
(left-char 1)
)

(global-set-key (kbd "<f5>") 'add-paren)

(defun delete-paren ()
(interactive)
(setq currloc (point))
(sp-unwrap-sexp)
(goto-char currloc)
(left-char 1)
)

最佳答案

您已经在使用 expand-region .为什么不将其与众多“带有...的环绕区域”模式之一结合起来呢?

我个人喜欢 smartparens (可通过 Marmalade 或 MELPA 获得),但还有许多其他类似的工具。

  • 使用er/expand-region直到你有一个合适的选择,然后
  • (用括号括起来。
  • 关于Emacs:将功能分配给键绑定(bind),并重复按下,撤消最后一次按下并在更广泛的设置下重做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21535615/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com