emacs中的Ctrl退格删除了太多内容
emacs中的ctrl backspace将删除所有空白,这是好事。然而,它并没有就此停止!它似乎只有在删除至少一个单词后才会停止。这意味着,例如,在这里使用它:emacs中的Ctrl退格删除了太多内容,emacs,Emacs,emacs中的ctrl backspace将删除所有空白,这是好事。然而,它并没有就此停止!它似乎只有在删除至少一个单词后才会停止。这意味着,例如,在这里使用它: foo(bar) <cursor> foo(bar) 导致 foo(<cursor> foo( 这真是愚蠢(IMHO)!我想要的行为类似于以下: 如果光标前面有空格,请删除所有空格(然后停止!) 如果光标前面有一个单词,请删除该单词 否则,删除光标前面任何字符的所有相邻重复 这似乎是一个更合理的
foo(bar)
<cursor>
foo(bar)
导致
foo(<cursor>
foo(
这真是愚蠢(IMHO)!我想要的行为类似于以下:
这似乎是一个更合理的Ctrl退格,但老实说,如果我能得到(1),这将是一个巨大的改进。是否有用于此的软件包或设置?我不太了解emacs lisp,但可能会告诉我相关API的位置…Ctrl backspace运行命令
backward kill word
,顾名思义,它将始终尝试删除前面的单词
也许您需要M-\(
删除水平空格
),它删除光标周围的所有空白。无论如何,这将满足您的第一个要求。我在前一段时间遇到了同样的问题,并用它覆盖了C-backspace
;;Eclipse-like C-backspace
(defun my-kill-back ()
(interactive)
(if (bolp) ; beginnning of line, just delete 1
(backward-delete-char 1)
(if (string-match "[^[:space:]]" (buffer-substring (point-at-bol) (point)))
; There's a word on the line, delete it
(backward-kill-word 1)
(delete-region (point-at-bol) (point))))) ; all whitespace, delete it
(global-set-key [C-backspace] 'my-kill-back)
这有点问题。例如,如果行中存在的所有字符都是分号,那么向后的kill-word可能会删除太多。不过,大部分工作还是完成了。在引用的特定案例中,可能使用了“删除缩进”(通常绑定到M-^)这将删除行首和前一个换行符处的所有空白,实际上将当前行移到上面的行。我发现此命令非常有用,即使可能无法解决所述的确切问题。我使用以下intellij风格的智能反向终止字
(defun aborn/backward-kill-word ()
"Customize/Smart backward-kill-word."
(interactive)
(let* ((cp (point))
(backword)
(end)
(space-pos)
(backword-char (if (bobp)
"" ;; cursor in begin of buffer
(buffer-substring cp (- cp 1)))))
(if (equal (length backword-char) (string-width backword-char))
(progn
(save-excursion
(setq backword (buffer-substring (point) (progn (forward-word -1) (point)))))
(setq ab/debug backword)
(save-excursion
(when (and backword ;; when backword contains space
(s-contains? " " backword))
(setq space-pos (ignore-errors (search-backward " ")))))
(save-excursion
(let* ((pos (ignore-errors (search-backward-regexp "\n")))
(substr (when pos (buffer-substring pos cp))))
(when (or (and substr (s-blank? (s-trim substr)))
(s-contains? "\n" backword))
(setq end pos))))
(if end
(kill-region cp end)
(if space-pos
(kill-region cp space-pos)
(backward-kill-word 1))))
(kill-region cp (- cp 1))) ;; word is non-english word
))
(global-set-key [C-backspace]
'aborn/backward-kill-word)
@谢谢。我做了一个小改动,使它的行为类似于Atom向后删除单词的默认方式
(当(和backword;;当backword包含空格时)
(s-contains?“backword”)
(setq space pos(1+(忽略错误(向后搜索regexp“[[:space:]][[:word:]]))))
这个正则表达式选择一个起始位置,删除下一个单词开头的任意数量的空格。这与MacOS、Google Docs、Sublime和Atom中的行为相同
我想要的行为是C-Backspace:
(defun ryanmarcus/backward kill word()
如果光标后面的字符是空白,请删除所有空白,否则请删除单词
(互动)
(如果(回顾“[\n]”)
删除前面的水平空格,然后检查是否
我们在看一条新线
(progn(删除水平空格't)
(当(回头看“[\n]”)时)
(向后删除字符1)))
否则,就照常杀人。
(向后删除单词1)))
这里有一个链接,指向我使用的自定义版本的删除单词或空格
——请随意修改代码以满足您的精确需求——我设计它的目的是不在杀死环中放置任何东西
:您是否实现了中止/向前杀死单词
?这是一个极好的解决方案!这正是我所要的e一直在寻找。您是否有用于向前删除的等效文件?