emacs:在终端中,选定的字符串在 ctrl-k 上丢失

emacs:在终端中,选定的字符串在 ctrl-k 上丢失
  1. 我在终端中用鼠标选择绝对文件名
  2. 我想在正在运行的 emacs 中打开这个文件:ctrl++x ctrlf
  3. Emacs 迷你缓冲区:包含“~/....”
  4. 我输入 ctrl-a ctrl-k 删除“~/....”
  5. 我想用中间按钮粘贴
  6. 插入“~/....”,而不是第一步的文件名。

如何阻止 emacs 覆盖我用鼠标选择的文本?

答案1

如果我正确理解您的要求,可能最简单的解决方案是在迷你缓冲区的开头提取(粘贴)复制的文件名执行kill-to-end-of-line ie而不是Ctrl++ a Ctrlkdo Ctrl+a Ctrl+yCtrl+ k.如果您更喜欢使用鼠标,则可以在同一点用中键粘贴替换Ctrl+ 。y

或者,根据这个 stackoverflow 答案删除(而不是杀死)emacs 中的一行应该可以通过添加以下内容自动将外部复制的文本添加到 emacs Kill-ring 中

(setq save-interprogram-paste-before-kill t)

Meta到您的 emacs 配置 - 这应该使文件名可通过使用+向后滚动删除环来进行拉取y

答案2

这在过去也困扰过我。

我找到的解决方案是制作Ctrl+K仅删除命令。这对我有用,因为我从来没有使用Ctrl+K来复制和粘贴。

最初发布这里

;; Ctrl-K with no kill
(defun delete-line-no-kill ()
  (interactive)
  (delete-region
   (point)
   (save-excursion (move-end-of-line 1) (point)))
  (delete-char 1)
)
(global-set-key (kbd "C-k") 'delete-line-no-kill)

答案3

EMACS 会将多个斜杠转换为根路径,例如//变为/
如果您要

  1. 保留迷你缓冲区中的所有文本
  2. 附加一个/
  3. 将绝对路径粘贴到迷你缓冲区中,并将其附加到现有文本中

迷你缓冲区将有一个路径,例如~//path2file/file
EMACS 将打开/path2file/file

无需重新分配Ctrl+K,只需了解 EMACS 如何处理迷你缓冲区中的文件名即可。
阅读 GNU EMACS 手册主题“文件名的迷你缓冲区”这里;开始阅读文本“但是你不需要杀死默认值;”

相关内容