emacs 命令如何复制粘贴

请教一个问题, 我下载用 spacemacs 是 hybrid 模式, 但是每到复制粘贴的时候就不得不切回 vim 的命令模式,用 “yy“ 和 ”p”来 复制粘贴,然后再切换 vim 的编辑模式继续写代码,但是这样来回切换比较麻烦。

但是我在网上搜了一下,感觉 emacs 复制粘贴没有 vim 这么方便,先要选中区域,再复制,再粘贴。 大家有没有什么好用的简洁的命令啊?

谢谢

Insert 模式可以这样设置,这两个键也是 emacs 默认设置:

(define-key evil-insert-state-map (kbd "C-y") #'yank)
(define-key evil-insert-state-map (kbd "M-w") #'kill-ring-save)

不知道 hybrid 对应哪个 map。

粘贴只要一个命令就够了,重要的是删除。 C-k 删除整行,M-k删除整句。M-d 删除一个词。 你应该把自带的教程先过一遍,然后具体该怎么编辑全都有介绍。

来自李杀网(我好像有点修改),没有选中就默认复制和剪切一行

;;;###autoload
(defun xah-copy-line-or-region ()
  "Copy current line, or text selection.
  When called repeatedly, append copy subsequent lines.
  When `universal-argument' is called first, copy whole buffer (respects `narrow-to-region').

  URL `http://ergoemacs.org/emacs/emacs_copy_cut_current_line.html'
  Version 2017-03-17"
  (interactive)
  (let (-p1 -p2)
    (if current-prefix-arg
        (setq -p1 (point-min) -p2 (point-max))
      (if (use-region-p)
          (setq -p1 (region-beginning) -p2 (region-end))
        (setq -p1 (line-beginning-position) -p2 (line-end-position))))
    (if (eq last-command this-command)
        (progn (progn ; hack. exit if there's no more next line
             (end-of-line) (forward-char) (backward-char))
           ;; (push-mark (point) "NOMSG" "ACTIVATE")
           (kill-append "\n" nil)
           (kill-append (buffer-substring-no-properties (line-beginning-position) (line-end-position)) nil)
           (message "Line copy appended"))
      (progn (kill-ring-save -p1 -p2)))))

;;;###autoload
(defun xah-cut-line-or-region ()
  (interactive)
  (if current-prefix-arg
      (progn ; not using kill-region because we don't want to include previous kill
        (kill-new (buffer-string)) (delete-region (point-min) (point-max)))
    (progn (if (use-region-p)
           (kill-region (region-beginning) (region-end) t)
         (kill-region (line-beginning-position) (line-beginning-position 2))))))

你如果还是觉得麻烦可以自己定制自己需要的功能。。。 几乎没有什么别的编辑器的功能是完全实现不了的。。。

比如可以筛选kill-ring, 可以在复制完之后顺便打印一下,可以重复剪切,把内容 append 到一起。。。等等。

我觉得如果vim要实现以上这些功能的话可能没有Emacs这么直观。

1 个赞

我是想复制,不是删除

不是写了吗,复制也有啊。。。

既不想切换状态,又不想选中区域,就得设置快捷键来完成这一系列动作。yy 有了一键击中的替代方案,那么其它操作呢?或者沿用 vi 的习惯:C-o 临时进入 normal 模式,这时可以做的就不止 yy 了。

为了达到 yy 的效果专门设置一个快捷键,我认为有点浪费,而且增加负担:因为要记住 yy 这个特例。

至于粘贴,建议还是绑定到 C-y

hi 请问在org mode里有没有复制当前光标所在行但复制最前面的星号的命令

看看 easy-kill, M-w 直接复制一行,还可以 + - w s f b,好用到爆。vim默认的哪有这么好用啊?

我喜欢移动即选择,这样就没有这些问题了。

不过 emacs 的话,完全可以跟据喜好搞成自己想要的样子。

谢谢大佬们 我少打了个字 想问在org mode里有没有复制当前光标所在行但不复制最前面的星号的命令

有没有听说过,C-c C-v教会?

复制粘贴教会 (瑞典语:Missionerande Kopimistsamfundet,英语:Missionary Church of Kopimism),又称 拷贝教复制共享教 (Kopimism),由瑞典人以撒克·葛森(Isak Gerson)创立,在2012年被瑞典政府接受为合法教会。它的宗旨在于反对反盗版法案,支持各种数字文件的复制与下载权利,他们主张网络版权法案侵犯了言论自由。拷贝教成员认为,分享文件是一种宗教服务,对该教而言,透过计算机键盘复制和粘贴的Ctrl-C和Ctrl-V动作是一种神圣的象征。

1 个赞

大神 用这个操作复制不来东西啊

能不能把远程(ssh)Emacs里选中的内容复制粘贴到我本地app(例如微信)?

下面这个只能用在本地的Emacs

(defun copy-region (start end)
  "Copy the region to Mac pastboard"
  (interactive "r")
  (shell-command-on-region start end "pbcopy"))

推荐懒猫大佬的 thing-edit

可以考虑借助 tmux

https://chromium.googlesource.com/chromiumos/platform/assets/+/863cae3e4a79e123d04f9ee0b34ca1f14faa38d9/chromeapps/hterm/etc/osc52.el https://github.com/Mic92/osc52/blob/master/osc52.el

可以看看这种思路行不行(没有真正验证过)。 需要特定支持osc 52 的终端才行 比如macos的 iterm2 ,xterm等

printf "\033]52;c;$(printf "%s" "blabla" | base64)\a" 

可以通过这条命令验证你的终端支不支持osc52 ,如果支持,“blabla”会被复制到你的剪贴板。 当然有可能你的终端需要勾选某个选项后才会开启。

1 个赞

呃,还没用过tmux,只用了 screen
你说的是 screen 没有的功能吗?

不太了解 screen ,tmux 有一套接口可让其他应用和他交互。