Emacs: 智能感知和操作光标处的语法对象

其实我就觉得 submodule 配合我写的 magit-submodule-add 和 magit-submodule-remove 最好用.

这就是我一直弃用straight的原因,不过如果是极少量的包也还凑合。submodule 确实可以考虑……

这个是鸡生蛋蛋生鸡的问题了?:joy::joy::joy::joy::joy:

1 个赞

用quelpa-use-package作为补充其实也不错

submodule 真的比那些乱七八糟的包管理器好太多了, 啥限制都没有. 缺啥就 magit-submodule-add, 试用好 commit, 不好直接 magit-submodule-remove 就可以了.

我真的就不明白, 那些包管理器搞那么多功能, 然后限制又大, 真麻烦.

我就两种途径, github (magit / submodule), emacswiki (auto-install.el ), 虽然现在都是用的 github.

2 个赞

嗯,我研究下。谢谢!

我的理解是,MELPA 存在的价值在于有个集中审核、管理的类似官方市场,package 内置也方便了其推广使用。虽然审核和管理做得还不够好,但是已经有很大进步。就像其他语言基本都有一套包管理系统是一样的道理。

目前大多数代码库都是依赖于 github(或者其他基于 git 的系统),用起来是最灵活的。Golang 的包管理基本就是基于 git 的,用起来很爽很方便。不过同样也有问题,就是太容易开发和引入第三方库,导致库的水平参差不齐,需要费很大劲才能找到质量好的库,用着用着还被废弃了,头大得很。其实我这是在吐槽开源的问题吧,扯远了~~~

最近我在Windows上使用你的配置,启动速度快的飞起啊。
有个小白问题想请教一下,你的one-key.el 使用的是哪个按键作为Leader键,绑定的是哪个函数?
我找了wiki的文档,上面写的是 键,但是我Windows系统这个键是apps键。

完全自定义的,可以搜索 lazycat-emacs源码,很多例子

感谢猫哥,原来我将s键误认为shift键了, 原来这是super键。 你的配置是我目前用过的感觉最好用的,它解决了我困扰已久的几个问题:

  1. 在Windows 操作系统启动慢 (之前的配置有几个.session需要要回复的时候就要30-50s)
    现在基本就是3s左右,而且F5关闭emacs时没有了烦人的yes/no
  2. 自动保存的功能也是贼强,已经不用再按C-c,C-s了。
  3. 自动补全不会没次都弹出烦人的文档。
  4. 有了Awesome-tab,很少用C-x,b 去切换buffer了。
  5. 其他的就不列举了。 总体感觉:操作顺畅,爽快,简洁,是我理想中的emacs :smile:

thing-edit 不支持引号(单引号,双引号)吗?还是说支持,怎么没有找到。

thing-copy-parentheses

一直这个问题:”Scan error: “Unbalanced parentheses”, 6, 1“ 我是裸emacs配置的。

我的配置

(add-to-list 'load-path "~/Vemacs/myemacs/packages/thing-edit")
(require 'thing-edit)

;; {{{ thing-edit settings using hydra
;; see @ https://github.com/manateelazycat/thing-edit for more details
(defhydra hydra-thing-edit (:color pink :hint nil)
"
                               ^Thing edit^
-----------------------------------------------------------------------
^file^    ^sentence^  ^buffer^ ^line^ ^parenthese^ ^sexp^   ^paragrap^
_f_ copy     _s_      _b_      _r_       _p_           _s_  _a_
_F_ cut      _S_      _B_      _R_       _P_           _S_  _A_
_1_ replace  _2_      _3_      _4_       _5_           _6_  _7_
"
("f" thing-copy-filename)
("F" thing-cut-filename)
("1" thing-replace-filename)
("s" thing-copy-sentence)
("S" thing-cut-sentence)
("2" thing-replace-sentence)
("b" thing-copy-whole-buffer)
("B" thing-cut-whole-buffer)
("3" thing-replace-whole-buffer)
("r" thing-copy-line)
("R" thing-cut-line)
("4" thing-replace-line)
("p" thing-copy-parentheses)
("P" thing-cut-parentheses)
("5" thing-replace-parentheses)
("s" thing-copy-sexp)
("S" thing-cut-sexp)
("6" thing-replace-sexp)
("a" thing-copy-paragrap)
("A" thing-cut-paragrap)
("7" thing-replace-paragrap)
;; quit
("q" nil)
("." nil :color blue))

(global-set-key (kbd "C-.")'hydra-thing-edit/body)
;;; }}}

貌似问题是这样的:如果是这样的

'thing'

这样执行 thing-copy-parentheses 就提示错误:Scan error: “Unbalanced parentheses”,。 如果是这样的

('thing')

执行上面的命令就work。奇怪。 我使用 emacs -Q 也发现有这个问题。

thing-copy-parentheses 的算法是,如果光标在字符串中先拷贝字符串的内容,如果不在字符串语法区域内再拷贝括号内的内容。

‘thing’ 不行的原因是 Elisp 只认 “” 不认 ‘’ 为字符串 (‘thing’) 可以是,因为 thing-copy-parentheses 认为 ‘’ 不是字符串,向外扩展到 () 内的内容。

核心原因是,Emacs每个语言的 mode 有自己的正则表达式,如果编程语言的 mode 不认为光标在字符串中,thing-edit.el 也会遵守语言 mode 的设定规则。

1 个赞

我尝试了我常用的mode, latex-mode, matlab-mode, python-mode,都存在这个问题,matlab python特别是一些打印信息的代码经常出现这个‘’,不能选中这个感觉不是太方便。之前用过很长时间的vim,vim中还是normal 模式下 vi’ vi" vi( vi} di’ di" di} di( 等这个功能该觉比较好用。也是快速选中,快速删除。不能快速选中引号里面的内容,感觉不是太方便。

那你可以用awesome-pair

请教下这里的thing-copy-whole-buffer 和 thing-copy-page 有什么区别? 使用下来感觉二者都是Copy了整页的内容。

刚写了个包avy-thing-edit,给thing-edit 加上了avy-jump功能,对于远处的目标可以更方便地copy/cut/replace啦!

1 个赞