如何在Emacs中輕鬆複製10行?我找不到複製行快捷方式或功能。我可以使用C-aC-spcC-eM-w來費力地複製該行,但是如何將它粘貼多次?Emacs相當於Vim的yy10p?
任何想法,然後我去寫我自己的功能。
如何在Emacs中輕鬆複製10行?我找不到複製行快捷方式或功能。我可以使用C-aC-spcC-eM-w來費力地複製該行,但是如何將它粘貼多次?Emacs相當於Vim的yy10p?
任何想法,然後我去寫我自己的功能。
複製:
如果你經常用線工作,則可能會在沒有選擇的區域要進行復制(kill-ring-save
)和切工(kill-region
)上線工作:
(defadvice kill-ring-save (before slickcopy activate compile)
"When called interactively with no active region, copy a single line instead."
(interactive
(if mark-active (list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))
(defadvice kill-region (before slickcut activate compile)
"When called interactively with no active region, kill a single line instead."
(interactive
(if mark-active (list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))
然後你可以複製只有Mw的線。
粘貼:
通常前綴參數只是執行一個動作多次,所以你所期望的銅10賽揚工作,但在這種情況下,賽揚使用它的參數來表示的kill-的哪個元素戒指「抽筋」(粘貼)。我能想到的唯一解決方案是kronoz所說的:用Cx(Cy Cx)記錄一個宏,然後讓Cu的參數代替kmacro-end-and-call-macro
(即Cu 9 Cx e或甚至只是C-9 Cx e或M-9 Cx e)。
另一種方式: 你也可以留在M-x viper-mode
和使用yy10p :)
你可以使用一個鍵盤宏: -
鈣CK CX(CY CJ CX)銅9 CXË
說明: -
請注意,自Emacs 22.1發佈以來,您實際上可以使用運行`kill-whole-line`的`
上述工作正常,但只是在Emacs 25(可能更早的版本?)FYI而不是`C-x(`和`C-x)`,你可以分別鍵入`F3`和`F4`鍵。 [參見emacs手冊瞭解更多信息](https://www.gnu.org/software/emacs/manual/html_node/emacs/Basic-Keyboard-Macro.html#Basic-Keyboard-Macro) – user12345 2017-09-21 19:34:35
我不知道直接相當於(Cy 10倍是我所知道的最好的),但是您可能對Viper感興趣,它是用於emacs的vi仿真軟件包。它是標準emacs發行版的一部分。
我知道重複任意命令的唯一途徑是「通過論證重複」使用鍵盤宏的功能。
鈣C-空間向下的Mw CX(CY CX)C-9 CXÊ
與vim相比,這有點弱。但僅僅是因爲vim在這類事情上效率非常高。
如果您真的想要進行模態vi式交互,您可以使用其中一種vi仿真模式,例如viper模式。檢查在線emacs手冊的「仿真」部分。
嘿嘿,這是8擊鍵相比,10只是C - Y的十倍。我保證我可以輸入C-y的次數比我輸入的快十倍。 – Baxissimo 2008-09-17 09:37:39
您可能知道這一點,但對於許多命令「C-u 10」前綴將執行此操作。不幸的是,對於C-y yank命令,「C-u」被重新定義爲「將殺死戒指中的許多物品歸還,然後抽出該物品」。
我想你或許可以用C-u前綴命令使用copy-to-register和insert-register命令,但顯然這也不起作用。
另外C-x z,「重複上一個命令」似乎對C-u免疫。
另一個想法是使用M-:得到一個Eval提示符並輸入一點elisp。我認爲像(網絡'10'猛拉)可能會這樣做,但它似乎並沒有。
所以它看起來像在一個宏上使用C-u可能確實是你編寫自己的小函數的最佳選擇。
如果我有投票權,我會爲kronoz答案投票。
(dotimes '10(yank))似乎對我有用 – quodlibetor 2009-10-29 02:18:53
這是我從Emacs的OS/2端口上取得的功能。 (是的,我使用Emacs已有一段時間。)
;; Author: Eberhard Mattes <[email protected]>
(defun emx-dup-line (arg)
"Duplicate current line.
Set mark to the beginning of the new line.
With argument, do this that many times."
(interactive "*p")
(setq last-command 'identity) ; Don't append to kill ring
(let ((s (point)))
(beginning-of-line)
(let ((b (point)))
(forward-line)
(if (not (eq (preceding-char) ?\n)) (insert ?\n))
(copy-region-as-kill b (point))
(while (> arg 0)
(yank)
(setq arg (1- arg)))
(goto-char s))))
我有一個綁定到F9 d:
(global-set-key [f9 ?d] 'emx-dup-line)
然後我會用銅10 F9 d重複線路10倍。
你得到C-k的命令行,你用C-u 10命令發生下一個命令十次,然後用C-y粘貼該命令行。很簡單。
如果您總是希望C-k完成整個生產線,您可以將kill-whole-line設置爲t。沒有更多的C-a或C-e擺弄。
有很多你可以用花哨的殺死戒指,寄存器和宏做的事情,我鼓勵你學習它們,但是排行十次並不一定很難或很奇怪。
在這個例子中,你不需要C-x)和C-x e。
您可以直接給予重複參數C-x)。這將停止錄製並一次重複執行宏。或者您可以跳過C-x)並直接轉到C-x e,因爲C-x e將在重複之前結束記錄。
選擇哪種方式取決於您喜歡重複計數的工作方式。對於C-x)你說總共需要多少次重複(在這種情況下是10)。對於C-x e,您需要說明還有多少重複(即9)。
C-A C-K C-K也將殺死後換行,所以你不必把它後來回自己。它比使用標記更快,並且不需要您更改任何變量。
甚至更好(除非你在終端中),你可以使用C-S- Backspace *殺死整條生產線,無論你在哪裏。
[*如果您使用的X窗口,請確保輸入偏移(不 ALT),或者你可以終止你的會話!]終端
說到,M-9是一個不錯的選擇,如果你發現你不能輸入C-9。
在Emacs 22及更高版本中,默認情況下F3啓動宏,F4結束/重複宏。您只需按F3即可開始錄製,完成後按F4,再次按F4重複該宏。 (F4還需要一個參數。)
把所有這些組合起來,以獲得當前行的10個人副本:
不像10年前那麼短,但非常接近。 :)基於Baxissimo的回答
我defuned這樣的:
(defun yank-n-times (arg)
"yank prefix-arg number of times. Not safe in any way."
(interactive "*p")
(dotimes 'arg (yank)))
設置,爲一些關鍵的,用一個前綴參數調用它,和您去。
編輯(還修改了上面的互動呼叫不太糟糕)
或者,這裏有一個版本,可以排序的替代使勁流行:
(defun yank-n-times (&optional arg)
"yank prefix-arg number of times. Call yank-pop if last command was yank."
(interactive "*p")
(if (or (string= last-command "yank")
(string= last-command "yank-pop"))
(yank-pop arg)
(if (> arg 1)
(dotimes 'arg (yank))
(message "Previous arg was not a yank, and called without a prefix."))))
消息是怎麼樣的說謊,但是你不應該在沒有大於1的前綴的情況下調用它,所以。
不知道這是個好主意,但我用這個替換了M-Y,我會看看那是怎麼回事。
你可以抽出一本線(或地區)的十倍用較少的按鍵:
C-w C-x (C-y C-1 C-0 C-x)
使用F3和F4功能鍵開始和結束鍵盤宏:
C-w F3 C-y C-1 C-0 F4
我推薦[Evil]( `viper-mode`上的http://www.emacswiki.org/emacs/Evil); [它有很多Vim功能,v蛇沒有](http://stackoverflow.com/questions/14291260/difference-between-viper-vimpulse-and-evil-for-emacs)。 – 2013-09-04 19:49:15