evil 寄存器?

spacemacs

#1

有什么办法, 让 evil 中的删除命令, 如 dd, dw 等, 不把系统寄存器里面拷贝的内容给覆盖了. 这个特性好像和原生 vim 不一样啊. 好不容易在外面拷贝了内容, 准备到 emacs 中粘贴, 之前按任何删除的命令都会把系统外的拷贝内容给覆盖了. 那 evil 搞那么多寄存器还有什么意义? 如图: 在外部拷贝的内容, 在evil中做任何删除操作,就跑到后面去了, 有没有什么方法, 让外部拷贝的内容像 vim 一样, 固定在 * + 寄存器里面


#2

good 关闭就行了
(setq x-select-enable-clipboard nil)


#3

回去试试,我也太讨厌这个


#4

定义了两个快捷键, emacs快速从系统剪切板拷贝复制

  (setq x-select-enable-clipboard nil)
  (defun evil-paste-after-from-+ ()
    (interactive)
    (let ((evil-this-register ?+))
      (call-interactively 'evil-paste-after)))
  (define-key evil-normal-state-map ",p" 'evil-paste-after-from-+)

  (defun evil-yank-to-+ ()
    (interactive)
    (let ((evil-this-register ?+))
      (call-interactively 'evil-yank)))
  (define-key evil-visual-state-map ",v" 'evil-yank-to-+)


#5

vim register 的用法 :reg 可以查看所有寄存器中的内容 默认的寄存器为"即yy dd 的内容会被放到"寄存器中,即 "“yy 与yy等同,”"p 与p 等同

要操作指定的寄存器可以 "ayy 即把当前行yy到a的寄存器中 "ap 把寄存器a的内容paste 下当下位置

利用 “ 与0的区别的一个小技巧 yank 操作默认会把内容放到"与0中, 而delete操作则只会放到"而不会放到0中 即都会影响",区别是 是否影响0

而"1 "2 "3 … "9 则分别存最近yank or delete 的内容,即类似于emacs 中的kill-ring 而利用1~9 这几个寄存器与.重复命令,可以依次将其取出 "1p… 则会依次将 1 2 3 4 寄存器中的内容paste 到当前位置