Emacs删除到下一个单词的开头(如Vim'dw')?

时间:2014-10-06 18:03:13

标签: vim emacs

所以我试图在一行的开头删除一些空格,当我按 M-d 时,我最终删除的内容超出了我的需要:

   (add-to-list 'load-path
                "~/path-to-yasnippet")
   (require 'yasnippet)
   (yas-global-mode 1)
^ ^
| |__ want to delete to here    
|
|___ Cursor here

我看了好几个地方但是还没能做到Vim的 dw 命令。

例如,Emacs'在words上操作的命令似乎没有。

3 个答案:

答案 0 :(得分:3)

其实我刚刚发现:

中号 - \

是否适合我,因为我只需要删除空格。

答案 1 :(得分:1)

有很多不同的解决方案,所以这里有一个:

(defun forward-kill-whitespace-or-word ()
  "If `point' is followed by whitespace kill that.
Otherwise call `kill-word'"
  (interactive)
  (if (looking-at "[ \t\n]")
      (let ((pos (point)))
        (re-search-forward "[^ \t\n]" nil t)
        (backward-char)
        (kill-region pos (point)))
    (kill-word 1)))

修改 p应该是pos。

答案 2 :(得分:0)

有几种方法可以理解你想要做什么:

  1. 删除行首的空白
  2. 删除行尾的所有字符
  3. 删除任何字符,但不包括下一个字词的开头,无论您在哪一行,以及在下一个字词之前是否有任何换行符
  4. 模仿Vim' dw命令
  5. 的行为

    我选择解决第3项问题,因为这是我自己想做的事情。

    我想要执行的操作等同于以下一系列命令:

    • 设置标记命令
    • 正向字
    • 后向字
    • 杀区域

    这就是我所做的:

    • 开启了微距录制
    • 执行了命令(通过它们的键绑定,但你也可以通过它们的函数名执行它们)
    • 保存了宏
    • 将名称与该宏相关联
    • 将宏内容作为函数
    • 复制到我的init文件中
    • 将该功能与键绑定相关联

    宏内容如下所示:

    ;; kill all characters up to but not including the start of the next word ;; (unlike kill-word, which kills the next word as well) (fset 'my-delete-to-start-of-word (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([67108896 C-right C-left delete] 0 "%d")) arg)))