感觉还是projectile用的更加顺手,比如切换项目的时候自动列出所有打开的项目,输入关键词就可以可以配合ivy进行快速选择。不知道project是否也可以结合ivy 达到这样的效果。
project用的是completing-read,所以支持所有补全框架,我等下补个图好了.
可以试试flyspell-correct-ivy
.
多谢指点,之前就是用的这个包中的flyspell-correct-wrapper
,方便是方便,就是有点影响Emacs启动时间。所以现在想尽量少装一些包。目前用ispell-word
+ i 刚好够用了
参考下我的配置,并没有影响启动时间。
(use-package flyspell-correct-ivy
:after ivy
:bind (:map flyspell-mode-map
([remap flyspell-correct-word-before-point] . flyspell-correct-wrapper))
:init (setq flyspell-correct-interface #'flyspell-correct-ivy))
C-c .
是类似与终端里M-.
的命令
C-c . runs the command comint-insert-previous-argument (found in
shell-mode-map), which is an interactive native compiled Lisp function
in ‘comint.el’.
It is bound to C-c ..
(comint-insert-previous-argument INDEX)
Probably introduced at or before Emacs version 22.1.
Insert the INDEXth argument from the previous Comint command-line at point.
Spaces are added at beginning and/or end of the inserted string if
necessary to ensure that it’s separated from adjacent arguments.
Interactively, if no prefix argument is given, the last argument is inserted.
尝试了 flyspell-correct-ivy
, 但这个功能没有像flyspell-correct-ido
那样的需要加入个人词库的时候直接输入save 就保存。不知道 flyspell-correct-ivy
是怎么保存生词到个人词库的?
请问阁下是如何做到让 abbrev 支持字母数字之外的字符的。
abbrev-expand
是以 WORD 为展开,如果在emacs-lisp-mode
下使用;license
则会不生
效,因为;license
不是 1 个单词。需要间接通过指定 abbrev-table 来完成。define-abbrev-table
可以使用:regexp
来指
定所提取的内容。于是可以使用;\w
来匹配单词前有 ;
的情况,因此可以这样写:
(defun foo ()
(message "foo"))
;; From https://lists.gnu.org/archive/html/emacs-devel/2021-01/msg00553.html
(define-abbrev-table 'fundamental-mode-abbrev-table
'(
(";license" t foo :count 0))
:regexp "\\(;\\w+\\)")
可以切换到fundamental-mode
体验一下。
因为 :regexp
已经在当前 table 里使用了,所以也要求其他的展开项也是要满足这个正则。想要扩展当前的 abbrev-table 可能需要通过 define-abbrev-table
的 :parent
属性来继承其他 table.
Changelog
- 2021-03-07 新增
repeat-mode
介绍
repeat-mode
如果有订阅 emacs-devel 邮件列表的话会发现曾经有一个投票令 C-x o 调用的是一个 transient-map,后续再切换窗口可以直接用 o
来切换。POLL: make C-x o transient
这样的一个好处是可以减少 Ctrl 按键的使用,降低 RSI 的风险;此外, transient-map 下还有一个 keymap 可以自定义,扩展性就更强了(例如可以在这个 keymap 上再定义 O
为 backward-other-window
函数)。
在最终的实现里则是新增了一个 repeat-mode
, 这个 minor-mode
在 post-command-hook
新增了一个 repeat-post-hook
钩子。这个钩子函数检测如果最后调用的函数有 repeat-map
属性,接下来会对这个 keymap 使用 set-transient-map
。
Emacs 内部已经提供了一些常用的函数 repeat-map:
- 切换窗口
other-window
, 可以使用 C-x o o o 来切换窗口了 - 缩小/增大窗口
enlarge-window
系列,可以使用 C-x { { { 来缩小窗口,其他命令类似 -
undo
, C-x u u u 来进行 3 次undo
-
next-error
, M-g n n n 调用 3 次next-error
做一个对比,如果没有启用 repeat-map
, 那么调用 3 次 next-error
需要 M-g n M-g n M-g n,操作极其不连贯。而在 repeat-map
加持下的 M-g n n n 就显得非常自然。
而它的开启方式也非常简单,打开 repeat-mode
这个 minor-mode 即可。
(use-package repeat
:ensure nil
:hook (after-init . repeat-mode)
:custom
(repeat-exit-key (kbd "RET")))
注意,因为它是在 post-command-hook
里增加了一个钩子,所以会拖慢一个按键的总体运行时间,当然这点差异非常不明显。
注: repeat-mode
Emacs 28 上可用
有点模式编辑器的味道!
感谢楼主,终于学到term/shell的正确姿势了
能否贴上spacemacs的配置文件?
spacemacs 的你要是刚开始用就把上面 :config
后的内容放到 dotspacemacs/user-config
中应该就可以了。
Emacs 里面有个命令叫 repeat
可以用来重复上一个命令。如果用模式编辑的话,这个命令可以给一个单键,这样就可以直接重复上一个按键较长的命令了。
这个配置repeat-mode会让daemon启动卡在最后一步,好奇怪。没空折腾了,有空再试
对于eshell,要启用ctrl-d退出或删除字符的话,还可通过修改eshell-module-list,加入eshell-rebind模块。
当然这会在eshell模式下也rebind其他健,如ctrl-w等和普通shell环境一样的快捷键。
repeat-mode
repeat-mode
新增了一个命令支持查看都有哪些 repeat-map
, M-x describe-repeat-maps 即可。
关于 repeat-mode
的完整介绍可以往上翻翻。
dired
RET 后仅保留一个 dired buffer
之前要完成这个功能,需要将 dired-mode 中 RET 绑定的 dired-find-file
remap 至 dired-find-alternate-file
。但是 Emacs 28 现在直接提供了一个用户选项来开启这个功能。
;; For Emacs 28
(use-package dired
:ensure nil
:custom
(dired-kill-when-opening-new-dired-buffer t))
即可。
;; For Emacs 27
(use-package dired
:ensure nil
:bind (:map dired-mode-map
([remap dired-find-file] . dired-find-alternate-file))
:config
;; Enable the disabled dired commands
(put 'dired-find-alternate-file 'disabled nil))
默认 dired-find-alternate-file
是被禁用的,需要将其解禁。
注意: dired-up-directory
还是会创建新的 buffer.
这个变量是什么时候加入的?我4月27日编译的 28.0.50 还没有这个变量。