请记住,单独使用C-u作为前缀时,默认将'(4)'作为参数传递,每个在命令之前插入的C-u都会将其乘以4。
因此,您可以通过使用ctrl-u前缀快速编写一些简单选择,例如:
(defun insert-date (prefix)
"Insert the current date. With prefix-argument, use ISO format. With
two prefix arguments, write out the day and month name."
(interactive "P")
(let ((format (cond
((not prefix) "%A, %d %B %Y %H:%M %Z" )
((equal prefix '(4)) "%d/%m/%Y %H:%M")
((equal prefix '(16)) "%d/%m/%Y")
((equal prefix '(64)) "%H:%M:%S")
))
(system-time-locale "en_GB"))
(insert (format-time-string format))))
(global-set-key (kbd "C-c d") 'insert-date)
请查看前缀命令参数文档了解更多信息。
简而言之,它是一种交互式提供命令更多信息的方式。
'self-insert
,它告诉它们要插入多少个相同字符。'isearch-forward-regexp
而不是正常的'isearch-forward
。因此,它完全取决于命令如何使用前缀参数。
至于其他“前缀参数”,有C--、M--、M-3(或任何其他数字)和其他一些。
另一种看待它的方式是,前缀参数让您将两个或多个不同但相似/相关的命令合并为一个,并将它们放在相似但相关的键上。
KEY
的KEY上。或者将它们中的许多命令放在不同的数字前缀上:...,C-u -2 KEY,C-u -1 KEY,C-u 0 KEY,C-u 1 KEY,C-u 2 KEY,...
prefix
值。例如,没有数字的C-u
-
使prefix
等于符号“-”。 - echristophersonC-u
可以工作,但是显式编号的前缀,例如C-u 4
将被忽略,就好像没有前缀一样。据我所知,最佳实践是首先解开前缀,如果它是一个列表:(when (listp prefix (setq prefix (car prefix))))
。就我个人而言,当只有前缀参数的增量是重要的时候,我还会考虑使用<=
而不是equal
来进行比较,这样介于4的幂之间的显式编号前缀也能直观地工作。 - mtraceur