我想使用 C-k 来杀死一个块或者杀死js-mode中当前行的其余部分。
在我搜索谷歌一段时间后,我认为defadvice
将是答案,但我不熟悉elisp。所以我希望有人可以帮我写一下:)
我提到的功能类似paredit-mode
,但我不想在paredit-mode
中启用js-mode
,因为我的要求会简单得多。当我写js时,有时我想杀掉跟随块,如:
function test() {
if () {
} else {
}
}
如果光标现在在function
和test
之间,那么我使用 C-k 我可以杀死整个块
test() {
if () {
} else {
}
}
只剩下单词function
。这里的'block'仅仅意味着'{}'之间的某种东西。
如果当前行没有跟随一个块, C-k 应该表现为其原始行为,应该是(kill-line &optional ARG)
,默认情况下会杀掉其余行。
如果您熟悉paredit-mode
,您会发现它只是一个非常简单的版本!
我希望你能理解我的意思,因为我的英语已被打破。任何帮助将不胜感激!
答案 0 :(得分:4)
我建议不要使用相关建议,因为您可以在C-k
中重新绑定js-mode-map
。 E.g。
(defun my-kill-line-or-block (&optional arg)
"Kill line or whole block if line ends with a block opener."
(interactive "P")
(if (looking-at ".*\\({[^{}\n]*$\\)")
(kill-region (point)
(progn (goto-char (match-beginning 1))
(forward-sexp 1)
(point)))
(kill-line arg)))
(define-key js-mode-map [?\C-k] 'my-kill-line-or-block)
答案 1 :(得分:1)
(defadvice kill-visual-line (around cus-kill activate)
(unless (let ((mark-point (point)))
(if (search-forward "{" (line-end-position) t)
(kill-region mark-point (scan-sexps (- (point) 1) 1))))
ad-do-it))
在我的情况下, C-k 绑定到 kill-visual-line 。如果您确保 Ck 绑定到 kill-line (使用 Ch k Ck 进行检查),请更改 kill-visual -line 到该函数中的 kill-line 。
PS:该功能未经过全面测试。如果{}不平衡,则扫描性别信号会发出警告信号。你可以忽略它。