emacs中的Ctrl-backspace删除太多

时间:2015-01-29 17:37:43

标签: emacs

emacs中的ctrl-backspace将删除所有空格,这很好。但是,它并没有止步于此!它似乎只是在删除至少一个单词后才停止。这意味着,例如,在这里使用它:

foo(bar)
    <cursor>

结果

foo(<cursor>

哪个真笨(恕我直言)!我想要的行为类似于以下内容:

  1. 如果光标前面有空格,则删除所有空格(然后停止!)。
  2. 如果光标前面有一个单词,请删除该单词。
  3. 否则,删除光标前面任何字符的所有相邻重复。
  4. 这似乎是一个更合理的Ctrl-Backspace,但老实说,如果我能得到(1),那将是一个巨大的进步。有没有这个或一个设置的包?我不太了解emacs lisp,但可能会指出相关API的位置......

6 个答案:

答案 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执行以下操作:

  1. 如果光标前的字符为空格,请删除光标前的所有空格(包括换行符)。
  2. 如果光标前的字符不是空格,请执行正常的杀死词行为。

这是我的实现方式

(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