emacs中的ctrl-backspace将删除所有空格,这很好。但是,它并没有止步于此!它似乎只是在删除至少一个单词后才停止。这意味着,例如,在这里使用它:
foo(bar)
<cursor>
结果
foo(<cursor>
哪个真笨(恕我直言)!我想要的行为类似于以下内容:
这似乎是一个更合理的Ctrl-Backspace,但老实说,如果我能得到(1),那将是一个巨大的进步。有没有这个或一个设置的包?我不太了解emacs lisp,但可能会指出相关API的位置......
答案 0 :(得分:2)
Ctrl-backspace运行命令backward-kill-word
,顾名思义,它将始终尝试删除前一个单词。
也许你想要M- \(delete-horizontal-space
),删除光标周围的所有空格。无论如何,这将满足您的第一个要求。
答案 1 :(得分:2)
我使用以下intellij-style smart backward-kill-word
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Dish, DishViewModel>();
cfg.CreateMap<Ingredients, IngredientsViewModel>();
});
答案 2 :(得分:2)
我想要的行为是让C-Backspace执行以下操作:
这是我的实现方式
(defun ryanmarcus/backward-kill-word ()
"Remove all whitespace if the character behind the cursor is whitespace, otherwise remove a word."
(interactive)
(if (looking-back "[ \n]")
;; delete horizontal space before us and then check to see if we
;; are looking at a newline
(progn (delete-horizontal-space 't)
(while (looking-back "[ \n]")
(backward-delete-char 1)))
;; otherwise, just do the normal kill word.
(backward-kill-word 1)))
答案 3 :(得分:1)
我回过头来遇到了同样的问题并且用这个覆盖了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可以删除太多。不过,大部分时间都完成了工作。
答案 4 :(得分:0)
在引用的特定情况下,可能会使用“删除缩进”#39; (通常绑定到M- ^)将删除行开头和前一行的所有空格,实际上将当前行移动到上面的行。我发现这个命令非常有用,即使可能没有解决所述的确切问题。
答案 5 :(得分:0)
@AbornJiang谢谢。我做了一个小的更改,使其行为类似于Atom向后删除单词的默认方式。
(when (and backword ;; when backword contains space
(s-contains? " " backword))
(setq space-pos (1+ (ignore-errors (search-backward-regexp "[[:space:]][[:word:]]")))))
此正则表达式选择一个开始位置,该位置将删除下一个单词开头的任意数量的空格。在MacOS,Google文档,Sublime和Atom中,这是相同的行为。
https://gist.github.com/jclosure/d838a672ba77482f2dcc1fc4df3368de#file-emacs-el-L447