想问一下道友们,定义什么复制当前行

一直在使用 vim的 esc y p 复制当前行,

有没有什么在插入状态下更好的按键设计复制当前行,这个问题同适于用 emacs

我一直用C-a C-k C-y(

短距离内把一行上下移动,我抄了一个函数绑定到了M-上下,挺方便的

C+S Backspace, 再C-y

y p 不够语义化……

如果 p 代表整行,那么 l 代表什么?又如何复制光标之后的部分呢?

我有一段时间没用 Vim 了,虽然以前用了很久,但习惯了 Emacs 的快捷键一段时间后感觉非常自然。

我用了很久的c-a c-k c-y,有一天终于受不了了,一搜索发现并不需要专门绑定按键,就用默认的m-w,c-w,判断一下没有选中任何文本时m-w,c-w的操作就是针对当前行即可。

(global-set-key "\M-w"
                (lambda ()
                  (interactive)
                  (if mark-active
                      (kill-ring-save (region-beginning)
                                      (region-end))
                    (progn
                      (kill-ring-save (line-beginning-position)
                                      (line-end-position))
                      (message "copied line")))))
;;//blog.csdn.net/ruglcc/article/details/7875631
(global-set-key "\C-w"
                (lambda ()
                  (interactive)
                  (if mark-active
                      (kill-region (region-beginning)
                                   (region-end))
                    (progn
                      (kill-region (line-beginning-position)
                                   (line-end-position))
                      (message "killed line")))))
2 个赞

内置 duplicate-dwim 函数了解一下~

支持参数、支持 region (包括列式/竖向 region),默认复制整行并保持光标所在行列。

2 个赞

找不到呀,哪个包的?

Emacs 内置的函数啊,不过文档里没写是哪个版本加入的。

duplicate-line duplicate-line/duplicate-line.el at 5abe4b81fa1618212938eb2e9b153975c34c11f1 · manateelazycat/duplicate-line · GitHub

2 个赞

我一直以为这个函数是外部引入的,原来在 misc.el, 学习了~ :grin:

忘了是在别人配置里学到的还是自己翻 Emacs NEWS 看到的了,嘿嘿。

是29引入的,怪不得我没有 :cry:

VIM的复制当前行不是esc回到Normal然后按yy吗?

1 个赞

easy-kill

(global-set-key [remap kill-ring-save] 'easy-kill)
(global-set-key [remap mark-sexp] 'easy-mark)

使用 M-w 有惊喜。如果要复制并粘贴,用内置的duplicate-dwim最方便。

2 个赞

一般就是C-o y y

1 个赞

很久很久之前有人写的几行配置抄来用。用alt y 复制当前行。用了很久。

后来整理配置,没copy过来这段配置。就改为了:先选择当前行,然后再alt y复制

用的是purcell写的插件

C-a C-K M-w

删除当前行用: C-S-<backspace>

都是默认的

看了那么多回复,我觉得模式编辑下,要么就采用上述一种方式,赋予一个好记的快捷键;要么就别优化了,总要退出插入模式,复制选中一行的操作。两种方式都差不了太多,一个省步骤,另一个符合操作逻辑习惯。

1 个赞

高度自定义意味着高度的心智负担,我现在就是尽量用 Emacs 已有的功能,并且在插件中尽量少的使用 keymap 并倾向于 [remap emacs-command] 到插件的 command。