Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
emacs中的Ctrl退格删除了太多内容_Emacs - Fatal编程技术网

emacs中的Ctrl退格删除了太多内容

emacs中的Ctrl退格删除了太多内容,emacs,Emacs,emacs中的ctrl backspace将删除所有空白,这是好事。然而,它并没有就此停止!它似乎只有在删除至少一个单词后才会停止。这意味着,例如,在这里使用它: foo(bar) <cursor> foo(bar) 导致 foo(<cursor> foo( 这真是愚蠢(IMHO)!我想要的行为类似于以下: 如果光标前面有空格,请删除所有空格(然后停止!) 如果光标前面有一个单词,请删除该单词 否则,删除光标前面任何字符的所有相邻重复 这似乎是一个更合理的

emacs中的ctrl backspace将删除所有空白,这是好事。然而,它并没有就此停止!它似乎只有在删除至少一个单词后才会停止。这意味着,例如,在这里使用它:

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:

  • 如果光标前的字符是空白,请删除光标前的所有空白(包括换行符)
  • 如果光标前的字符不是空白,则执行正常的kill-word行为
  • 以下是我的实现:

    (defun ryanmarcus/backward kill word()
    如果光标后面的字符是空白,请删除所有空白,否则请删除单词
    (互动)
    (如果(回顾“[\n]”)
    删除前面的水平空格,然后检查是否
    我们在看一条新线
    (progn(删除水平空格't)
    (当(回头看“[\n]”)时)
    (向后删除字符1)))
    否则,就照常杀人。
    (向后删除单词1)))
    
    这里有一个链接,指向我使用的自定义版本的
    删除单词或空格
    ——请随意修改代码以满足您的精确需求——我设计它的目的是不在
    杀死环中放置任何东西
    :您是否实现了
    中止/向前杀死单词
    ?这是一个极好的解决方案!这正是我所要的e一直在寻找。您是否有用于向前删除的等效文件?