我想删除一些文本,以便可以复制其他文本而不是它。我该怎么做?使用C-w剪切所选文本到kill ring并且我最终没有想要复制的文本。
另外,有没有可能直接复制文本而不是按下按钮将其删除?
我想删除一些文本,以便可以复制其他文本而不是它。我该怎么做?使用C-w剪切所选文本到kill ring并且我最终没有想要复制的文本。
另外,有没有可能直接复制文本而不是按下按钮将其删除?
delete-region
函数将删除所选区域而不将其添加到kill ring中。(delete-selection-mode 1)
将允许您在所选区域上进行粘贴/粘贴操作。它还允许您只需键入即可替换所选区域。(setq select-enable-primary nil)
以防止将所选区域复制到kill ring中。添加一个删除 kill-region 和 kill-line 键 C-w 和 C-k 的等效键,如下所示。绑定到键 C-v 和 C-z。
;; 一个 keybinding to delete-region 给出了一个很好的“Windows CUT Ctrl-x 等效”。 ;; 选择使用哪个键绑定是很棘手的。 ;; 使用 C-v “Windows PASTE Ctrl-v” 是一个相当颠覆性的选项。 ;; C-v = emacs 中向上滚动,我没有用处。 (global-set-key (kbd "C-v") 'delete-region)
;; 为了也有一个“Windows CUT”的替代方案 C-k(kill-line),可以这样做: (defun delete-line () "delete line, take it out of kill ring. bind this func to C-z" (interactive) (setq last-command 'delete-line) (kill-line) (setq kill-ring (cdr kill-ring)) (setq kill-ring-yank-pointer kill-ring) (setq last-command 'delete-line) ) (global-set-key (kbd "C-z") 'delete-line) ;; 没有设置 last-command,2+ C-zs 会搞乱 kill-ring
我的回答是:在emacs中标记文本(使用鼠标或设置标记C-SPC
),而不是使用C-w
,按键盘上的“<- Backspace”按钮。这样,您仍然可以将文本粘贴到系统剪贴板中,而不必担心剪贴板被C-w
删除的文本覆盖。
此答案的背景是:有时候我需要用emacs中的某些文本替换在emacs之外的文本,我通常会先将该文本复制到系统剪贴板中(即在Windows上使用Ctrl + C
),然后在emacs中使用C-w
“删除”我想要替换的文本区域,希望稍后使用M-w
可以从kill-ring中恢复我的剪贴板中的文本。不幸的是,剪贴板会被C-w
删除的文本覆盖,原始消息将永远不会显示在kill-ring中。
对于第二个问题,是的,您可以始终在emacs中先标记文本,然后直接使用C-y
(defun delete-something()
"Delete something without storing in kill ring."
(let (kill-ring)
(kill-something)))
使用任何一个杀死某物的函数来替代kill-something。该函数将删除内容,而在真正的kill-ring中不会保留任何内容。
kill-region
,它不会强制将值放入kill-ring中。(defun kill-or-delete-region (beg end prefix)
"Delete the region, storing it in the kill-ring.
If a prefix argument is given, don't change the kill-ring."
(interactive "r\nP")
(if prefix
(delete-region beg end)
(kill-region beg end)))
(global-set-key (kbd "C-w") 'kill-or-delete-region)
这使您可以像以前一样使用C-w
,但C-u C-w
现在会删除文本而不更改kill-ring。