s
dash
(use-package
sniem
:init (global-sniem-mode t)
:config
(sniem-set-keyboard-layout 'qwerty))
Sniem 全称 Hands-eased United Editing Method,是一款新的编辑模式
last-point
last-point
是 sniem 中贯穿所有动作和几乎所有操作的概念,如其名,当执行任意动作时,一般情况下执行前的那个位置会被设置为 last-point
leader-key
Sniem 自带 leader key,leader map 的按键可通过 (sniem-leader-set-key)
来设置。也可通过 (sniem-set-leader-key)
来设置 leader 的按键。
(sniem-leader-set-key
"d" 'sniem-digit-argument-or-fn
"D" 'dired)
(sniem-set-leader-key ",")
Sniem 有以下几个模式
NORMAL
一般情况下的模式,此模式下绑定了许多按键,可通过 (sniem-cheatsheet)
或者 ?
键来查看绑定的按键。可通过 (sniem-normal-set-key)
来绑定按键,用法与 (sniem-leader-set-key)
相同。
INSERT
此模式下 <ESC>
(可通过 (sniem-set-quit-insert-key)
设置) 按键会被绑定为 (sniem-quit-insert)
以退出此模式 ,其它按键都是 global-map
里的按键
MOTION
与 INSERT
模式相同,除了 <SPC>
键被绑定为 leader,其它按键都是原本的按键。(原来的空格键被绑定为了 <SPC> <SPC>
)
EXPAND
这个模式使扩展选中区域更舒适。
可通过 (sniem-expand-set-key)
来绑定按键,用法与 (sniem-leader-set-key)
相同。
Key | Function |
RET |
调用 object-catch |
TAB |
sniem-shift |
r |
重复上一次的 object-catch |
p |
抓取当前选中内容的父级 pair |
b |
获取 pair 通过其前缀字符 |
B |
获取当前选中内容的父级 pair 通过其前缀字符 |
o |
获取 () pair |
O |
获取当前选中内容的父级 () pair |
s |
获取 [] pair |
S |
获取当前选中内容的父级 [] pair |
c |
获取 {} pair |
C |
获取当前选中内容的父级 {} pair |
q |
获取 ~”~ pair |
Q |
获取当前选中内容的父级 ~”~ pair |
d |
获取 ~”“~ pair |
D |
获取当前选中内容的父级 ~”“~ pair |
a |
获取 <> pair |
A |
获取当前选中内容的父级 <> pair |
/ |
反转抓取的方向 |
其它字母、负号按键 | 切换到 NORMAL 模式 |
MINIBUFFER-KEYPAD
此模式下允许用户在 minibuffer 中使用 keypad 。 当你打开 minibuffer 之后,你可以正常输入。但当你按下两次空格之后,就会进入 keypad 模式;再次按两次空格就会退出 keypad 模式。
Sniem 针对目前主流的四种键盘布局提供了支持,可通过 (sniem-set-keyboard-layout)
来设置
(sniem-set-keyboard-layout 'qwerty)
(sniem-set-keyboard-layout 'colemak)
(sniem-set-keyboard-layout 'dvorak)
(sniem-set-keyboard-layout 'dvp) ;For Dvorak Programmer
在设置了键盘布局之后,Sniem 会根据键盘布局来设置 NORMAL
模式下的默认按键,并生成当前布局的 cheatsheet
Sniem 提供 Keypad 支持,进入 Keypad 之后: , 为 C-
, . 为 M-
, / 为 C-M-
;按下空格再按上面这几个键,则是它们本身。
此功能默认绑定在 <SPC>
键上。执行后,可通过键盘中间的键来分别代替数字键和减号,回车即录入完毕;也可按下以下键来进行特殊操作:
Key | function |
, | 重复 object-catch |
. | 标记当前光标下内容或区域 |
k | 解除当前光标下内容的标记并选中 |
K | 解除最新标记内容 |
SPC | 执行 motion-hint |
/ | 反转 object-catch 方向 |
p | 添加,更改或删除当前选中内容的 pair |
< | 跳转到下一个 comment mark |
> | 跳转到上一个 comment mark |
m | 插入新的 comment mark |
c | 清空特殊剪贴板 |
x | 删除特殊剪贴板最新的内容 |
P | 从特殊剪贴板粘贴 |
y | 复制内容至特殊剪贴板 |
Y | 以 in-region 方式复制内容至剪贴板 |
(sniem-shift)
这个函数默认在各个模式中被绑定于 TAB
。(除了 insert mode keymap)
它提供了一个行为列表(下面称为 shift-motion-list
),它包括: sniem-forward-char
, sniem-backward-char
, sniem-next-line
, sniem-prev-line
, sniem-next-word
, sniem-prev-word
, sniem-scroll-up-command
.
你执行它的时候有三种情况。
TAB
(绑定了该函数的键) 一次
当你只按下一次,这个函数就为 shift 键的代替。
例如:你可以使用 TAB k
执行 K
键的命令。
但如果你按下后又按下了一个大写字母的键,且该字母的小写字母所绑定的命令属于 shift-motion-list
,这个行为会被加入或删除于 motion-shift-locked 按键列表。
当你按下两次,就会进入 motion-shift-locked mode。这样,当你按下属于 shift-motion-list
的键时,将会执行其大写键所绑定的行为。
一般的,只有 shift-motion-list
前四个会被自动加入 motion-shift-locked 按键列表中。如果你想把 motion 加入或从中删除,按其大写键即可。
你可以通过再次按两下 TAB
退出 motion-shift-locked mode。
这样会在 sniem-insert-mode
进入大写锁定模式。效果与 caps-lock
这个包相同。再按三下退出该模式。
(sniem-goto-prev)
& (sniem-goto-next)
使用 middle-keyboard
来获取前进或后退的行数,并执行(sniem-next-word)
& (sniem-prev-word)
一般情况下,跳转到下一个词或者上一个词。如果有内容被选中,则跳转到下一个或上一个与选中内容相同的位置(sniem-goto-last-point)
一般情况下,跳转到 last-point
的位置。如果有内容被记录,则跳转到其第一个字符。(sniem-beginning-of-line)
一般情况下,跳转到行首。如果光标已经在行首,则对当前行缩进。
Sniem 中几乎所有编辑操作都与 last-point
有关 (除了 (sniem-paste)
)
p
即可进行与 last-point
有关的操作(sniem-lock-unlock-last-point)
将 last-point
锁定或者解除锁定,此时任何移动都不会改变其值。如果被锁定了,会在当前 buffer 显示出来。所有以 -in-region
为结尾的操作,都是在 region 中对其开头的后一个位置到结尾的前一个位置进行编辑
object-catch
Sniem 提供了一个智能获取 object 的功能, object-catch
。此源于本人用 evil
的时候写的一个插件: evil-wildfire
。
<RET>
按下此键即可选取离光标最近的 pair
<M-RET>
按下此键会选取当前选中的 pair 的父级 pair
<C-RET>
按下此键后,输入所需 pair ,然后即可选取离光标最近的 pair
<C-M-RET>
按下此键后,输入所需 pair ,然后会选取当前所选的父级 pair
(
& [
& {
可用于快速选取指定 pair
(sniem-paste)
Sniem 的粘贴有些许不同,默认按下 p
键后进入粘贴面板,随后可用 n
& p
进行翻页,如果在第一页按下 p
,则粘贴第一个结果。
可用数字键对内容进行选择
(sniem-macro)
Sniem 为键盘宏提供了一些不错的功能。
q
录制, e
执行, n
为最后一个宏命名, l
锁定或者解除锁定宏, .
强制锁定宏, c
调用宏。
(sniem-next-word)
或者 (sniem-prev-word)
即跳转到此内容,按下 C-g
可取消内容锁定(sniem-search)
一般情况下,搜索你输入的原生内容。 当你给其 prefix argument 时,它将给你自动添加匹配 symbol 的正则表达式。
(sniem-mark) Expand
当你使用该函数来选择 symbol 时,如果当前选择周围有属于 sniem-mark-attachments
expand 的字符,你就可以再次执行选择命令来扩展你的选择。
例如,当你编辑 Python 文件时,你可以通过连续执行两次选择命令(mark symbol)来选择 self.test
。
sniem-mark-jump 提供了两个 motions,即 (sniem-mark-jump-next)
& (sniem-mark-jump-prev)
。
一般情况下,执行它们会跳转到上一个或者下一个 comment mark。但如果你使用了 digit-argument
,它们将跳转到上一个或下一个指定类型的 comment mark,此类型是以你所使用的 digit-argument
为索引向类型列表里获取到的结果。
sniem-center-message
& sniem-mark-message
, etc.
这些变量是其操作的帮助信息。如果你不想要它们,可以执行一下语句:
(setq sniem-center-message nil
sniem-mark-message nil
sniem-delete-message nil
sniem-change-message nil
sniem-yank-message nil
sniem-macro-message nil
sniem-pair-message nil)
sniem-xxx-mode-cursor
xxx
可以是: normal
, insert
, motion
sniem-motion-hint-sit-time
这是动作提示的显示时间,默认为 1
如果你使用 awesome-tray, sniem 将自动把 (sniem-state)
添加到指定列表,供你使用。
或者,你可以根据你的 modeline 来设置模式提醒。
如果你使用的是默认的 modeline, 你可以尝试以下方案:
(setq-default mode-line-format (append '((:eval (sniem-state))) mode-line-format))
(force-mode-line-update)
sniem-mark-jump-author-name
这是 comment mark 中的人名。
sniem-mark-jump-author-name-enable
这是当前人名的启用状态。
sniem-mark-attachments
当你选择 symbol 的时候,它会尝试从该变量中获取连接符 。如果光标下的字符处于这个变量中,它将会被视为 symbol 的一部分。
你可以使用 (sniem-mark-set-attachment)
来设置该变量。
实例:
(sniem-mark-set-attachment 'global "_")
(sniem-mark-set-attachment 'emacs-lisp-mode "<" ">")
(sniem-mark-set-attachment
'c-mode
:expand '("::")
;; Normally, if the expand attachment is one char, it will only work for once.
;; But if you set it to more chars, the attachment will work like a normal attachment.
)
(sniem-mark-set-attachment
'python-mode
:expand '(".") ;For expand
)
sniem-object-catch-global-symbol-alist
这个变量包含能够被“抓取”的 pair ,它也为 (sniem-mark)
& (sniem-pair)
提供 pair 信息。
该变量包括全局 pair 和一些具体 mode 的 pair 。
你可以使用 (add-to-list)
来设置全局 pair ,或者使用 (sniem-object-catch-mode-defalist)
设置具体 mode 的 pair 。
实例:
(add-to-list 'sniem-object-catch-global-symbol-alist '("^" . "^"))
(sniem-object-catch-mode-defalist emacs-lisp-mode
("`" . "'")
("'" . "")) ;Set the back-pair to empty string, means to remove it from pair-list
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )