2009-12-16 15 views
0

我想複製光標上方的行,但僅從當前列到該行的結尾。如何複製光標上方一行開始的行的結尾?

這裏有一個例證:

photo of before action

photo of result of action

這是我的嘗試,但它並沒有:-(

(defun dupchar() 
    (save-excursion 
    (line-move (-1) nil nil nil) 
    (setq mychar (thing-at-point 'char)) 
    (insert mychar)) 
+0

啓發你能換一種說法?我無法理解你在說什麼。 – 2009-12-16 03:05:22

+0

詳細說明你的意思不好。例如,你的預期行爲是什麼,你觀察到的行爲是什麼。另外,請嘗試格式化您的代碼。 – 2009-12-16 03:07:06

+0

下次您提問時,請儘量幫助您的英語 - 這很難理解您上面寫的內容。 – 2009-12-16 03:08:04

回答

1

工作,以及嘗試這樣的事情。

(defun dupchar() 
    (interactive) 
    (let ((char-above (save-excursion 
         (line-move -1) 
         (following-char)))) 
    (unless (eq char-above ?\n) 
     (insert char-above)))) 

(define-key global-map [(meta \")] 'dupchar) 

你寫的功能,需要注意幾點:

  1. 您需要使用(interactive) 否則你可以在 功能不能結合的關鍵。

  2. 這不是一個好主意,只是 隨機setq事情 - 這會創建一個全局變量 。在這種情況下, 根本不需要變量;你的 可以利用save-excursion的返回值 。 (在此以後的版本中,我需要使用let)。

  3. 括號調用 (E)口齒不清的功能,所以你需要使用-1 代替(-1)

  4. 'line-move的第2-4個參數默認爲nil,所以不需要指定它們。

(注:我修改這個停止在該行的結束,這是一次很難理解你寫的東西,但是這是我最好的猜測。)

+0

謝謝尼古拉斯我得到你解決方案更美麗的代碼在lisp :-),如果當前光標位於行尾(可能是換行符)將不會成功dupchar – leedit 2009-12-16 03:47:29

+0

你仍然有問題你想在行的末尾做什麼? – 2009-12-16 03:55:59

+0

例如我已經行我想要複製這行char字符,所以我按下RET打開新的打開並按(元\「)結果是不正確的 – leedit 2009-12-16 04:09:54

0

不知道你是否打算複製前一行的整個結尾只有一個按鍵。至少我是這麼認爲的我修改尼古拉斯(謝謝!)代碼dupline這將是有益的:

(defun dupline() 
    (interactive) 
    (let ((line-above-tail (save-excursion 
          (line-move -1) 
          (buffer-substring-no-properties (point) (line-end-position))))) 
    (unless (eq line-above-tail ?\n) 
     (insert line-above-tail)))) 

複製到該行的末尾被How do I duplicate a whole line in Emacs?

+0

dupline我簡單地使用嬉皮擴展與第一個字符 爲dupchar我想減少一半類似於先前填充幾塊和相同的再次:-) – leedit 2009-12-18 03:34:48

相關問題