tab 转 空格是 (untabify (point-min) (point-max))
因为都和空白有关我就放到一起了
Changelog
- 2020-04-12
isearch
模拟浏览器搜索操作
使 isearch 工作得像在浏览器里搜索一样
在浏览器里,我们只需要按C-f
,然后敲入所要搜索的字符串。之后只要按回车就可以不
断地向下搜索。如果我们需要向上搜索,那么需要点击一下向上的箭头。
现在我们在isearch
里模拟这种情况,还是使用C-s
来调用isearch
。但是之后的
repeat
操作是交给了回车。
首先,我们先定义一下变量来保存当前搜索的方向。
(defvar my/isearch--direction nil)
然后使得isearch-mode-map
下的C-s
可以告诉我们当前是在向下搜索;同理,使得
isearch-mode-map
下的C-r
告诉我们是在向上搜索。
(define-advice isearch-repeat-forward (:after (_))
(setq-local my/isearch--direction 'forward))
(define-advice isearch-repeat-backward (:after (_))
(setq-local my/isearch--direction 'backward))
这里偷懒,采用了advise
的方式。如果不想侵入,可以自己在上层包装一下对应的命令。
然后在isearch-mode-map
下的回车操作就是根据my/isearch--direction
来搜索了。就
是如此简单。
(defun my/isearch-repeat (&optional arg)
(interactive "P")
(isearch-repeat my/isearch--direction arg))
当然在按Esc
键的时候表明搜索已经结束了,此时应该重置当前的方式:
(define-advice isearch-exit (:after nil)
(setq-local my/isearch--direction nil))
完整代码见下方:
(use-package isearch
:ensure nil
:bind (:map isearch-mode-map
([return] . my/isearch-repeat)
([escape] . isearch-exit))
:config
(defvar my/isearch--direction nil)
(define-advice isearch-exit (:after nil)
(setq-local my/isearch--direction nil))
(define-advice isearch-repeat-forward (:after (_))
(setq-local my/isearch--direction 'forward))
(define-advice isearch-repeat-backward (:after (_))
(setq-local my/isearch--direction 'backward))
)
今天试了一下, 可以了, 是因为我的配置的问题,多谢
tempo不是builtin吧?没有啊
有的啊,记得 (require 'tempo)
插入SPDX
形式的license
头的功能已经独立出来了
Changelog
- 2020-05-26 添加
dired
、ispell
模式的介绍
dired
dired
是一个用于directory
浏览的mode
,功能非常丰富。因此这里介绍的东西肯定不
能完全覆盖,会慢慢完善之。
在 dired 中用外部程序打开对应文件
在dired-mode-map
中,也是可以执行shell
命令的。与之相关的命令有
-
dired-do-shell-command
, 默认绑定在! -
dired-smart-shell-command
,默认绑定在M-! -
async-shell-command
,默认绑定在M-&
其中,通过配置dired-guess-shell-alist-user
可以令dired-do-shell-command
有一个
比较好的默认命令。例如,我这是样配置的:
(setq dired-guess-shell-alist-user `((,(rx "."
(or
;; Videos
"mp4" "avi" "mkv" "flv" "ogv" "mov"
;; Music
"wav" "mp3" "flac"
;; Images
"jpg" "jpeg" "png" "gif" "xpm" "svg" "bmp"
;; Docs
"pdf" "md" "djvu" "ps" "eps")
string-end)
,(cond ((eq system-type 'gnu/linux) "xdg-open")
((eq system-type 'darwin) "open")
((eq system-type 'windows-nt) "start")
(t "")))))
这里考虑了多个平台下的差异。如linux
平台下会使用xdg-open
来打开对应的这些文件
(通过mimeinfo
来配置,见~/.config/mimeapps.list
)。但是它有一个缺点,会阻塞当
前的Emacs
进程,所以仅适用于临时查看的需求。
dired-smart-shell-command
与dired-do-shell-command
类似,也会阻塞当前Emacs
进
程。
async-shell-command
则不会阻塞当前Emacs
,唯一的缺点可能是会多弹出个buffer
吧。
如果对async-shell-command
的结果不是很感兴趣,可能通过shackle
等类似的工具把忽
略对应的buffer
。
如果使用的是Emacs
28的话,并且已经设置了
(setq browse-url-handlers '(("\\`file:" . browse-url-default-browser)))
可以直接在dired
里按W
(browse-url-of-dired-file
), 这会直接用外部程序打开。
当然,它不会阻塞Emacs
。
隐藏、显示 以.
开头的文件
dired
显示文件时使用的ls
命令参数是由dired-listing-switches
来控制的,它的默
认值是-al
。如果不想要显示以.
开头的文件,那么通过C-u s (s
为
dired-sort-toggle-or-edit
)来重新设置dired-listing-switches
。
如果只是想简单地隐藏当前目录下以.
开头的文件,那么可以通过将满足^\\\.
正则的行
删除就行(真实文件并没有删除,只是删除它的显示)。注意到dired-do-print
命令基本
不怎么使用,于是可以利用advice
来覆盖它,实现我们自己的dotfiles-toggle
。
;; 修改自 https://www.emacswiki.org/emacs/DiredOmitMode
(define-advice dired-do-print (:override (&optional _))
"Show/hide dotfiles."
(interactive)
(if (or (not (boundp 'dired-dotfiles-show-p)) dired-dotfiles-show-p)
(progn
(setq-local dired-dotfiles-show-p nil)
(dired-mark-files-regexp "^\\.")
(dired-do-kill-lines))
(revert-buffer)
(setq-local dired-dotfiles-show-p t)))
这样只要按一下P就可以达到隐藏、显示的切换了。
如果不想自己写elisp
,这里也有一个现成的包 https://github.com/mattiasb/dired-hide-dotfiles
ispell
ispell
全称是interactive
spell
检查器,它支持ispell
, aspell
和hunspell
,
以下以hunspell
为例。
;; 这里使用的是 en_US 字典,需要使用包管理安装对应的字典,类似的名字可能 hunspell-en_US
(setq ispell-dictionary "en_US"
ispell-program-name "hunspell"
ispell-personal-dictionary (expand-file-name "hunspell_dict.txt" user-emacs-directory))
这样就可以通过调用ispell-word
来看一个单词是否正确了。如果是evil
用户,这个函
数已经被绑定至z=上了。 \w/
Emacs自带的有dired-omit-mode。要require dired-x.el。改一下dired-omit-files的正则就可以自动隐藏dot file了。
通过dired-omit-mode
的切换也是个不错的想法,我再添加一下
可以给 dired-listing-switches
添加 h
参数,文件大小的可读性要强一些
感谢建议,实际我使用的时候是使用的(setq dired-listing-switches "-Afhlv")
。在这里为了方便说明,就直接用它的默认值了。
goto-address-mode,让 url/邮件地址 可点击
欢迎来PR直接贡献呀
好吧,以后不挖坟了 ,我有点把它当 wiki 用了…
btw,我发现 rust-lang 的论坛好像会自动关闭帖子 ,这样时间比较久的帖子会被自动关闭,不能被回复
论坛的流量应该还没高到顶起坟贴会影响阅读的程度。不喜欢看的人进帖子点静音就可以让一个帖子沉底了
my/isearch--direction
可以直接用isearch-forward
这个variable
emacs 还有和 winner-mode类似的快捷键 C-x C-r w记录窗口布局 C-x C-r j 恢复 可以保存很多个 ,关闭emacs销毁
搞错了 是C-x r w
默认C-x C-r
应该已经绑定至find-file-ready-only
了,这个应该是自己绑定的快捷键吧。
你说的功能是指 desktop
包的吗?
搞错了C-x r w C-x r j 不好意思
C-x r w window-configuration-to-register register.el 不知道desktop包是什么