2010-07-01 12 views
10

我正在尋找一種在emacs中將文本向右或向左移位01​​空格的方法。它在vim <<>>中具有類似的功能。它應該在一個區域上工作,或者如果在當前行上沒有選擇區域,並且不將光標從當前位置移開。在emacs中移動一個區域或行

EmacsWiki的解決方案不如M-x indent-rigidly很好,因爲它有點記得最後使用的區域,並改變它。最接近的似乎是一個here,但我沒有設法使其工作。我不是一個lisp開發人員,所以很難修改代碼。我會感謝任何幫助。

謝謝!

回答

6

也許這是你想要的方式。

 
(defun shift-text (distance) 
    (if (use-region-p) 
     (let ((mark (mark))) 
     (save-excursion 
      (indent-rigidly (region-beginning) 
          (region-end) 
          distance) 
      (push-mark mark t t) 
      (setq deactivate-mark nil))) 
    (indent-rigidly (line-beginning-position) 
        (line-end-position) 
        distance))) 

(defun shift-right (count) 
    (interactive "p") 
    (shift-text count)) 

(defun shift-left (count) 
    (interactive "p") 
    (shift-text (- count))) 
+0

非常好!這正是我期待的!非常感謝。你不想把它也放到EmacsWiki嗎? – fikovnik 2010-07-01 21:25:32

5

要做到這一點,我通常做的一招:

  • 激活CUA模式
  • 去行
  • C-RET,年初現在如果你移動光標,你應該看到一個矩形紅色區域
  • 將光標向下移動並輸入空格,直到獲得正確的移位。

這也可以以某種方式編程(以相同的方式)。

編輯: 我剛剛閱讀了emacs wiki中的文章,除了CUA模式比「常見」的矩形選擇(因爲它是可視的)功能更強大之外,它是相同的解決方案。

+2

您可以使用'(cua-selection-mode t)'將CUA優秀的矩形編輯工具與其他功能分開。假如你沒有將'C-RET'綁定到別的東西,你可以把它放在init文件中,它不會和任何東西衝突。 – phils 2010-07-01 22:14:57

+1

有關移動線條基本用法的簡要說明:'C-RET' +光標移動指定矩形,'RET'旋轉拐角,在矩形前/後輸入插入,'C-RET'退出。有關此次要模式提供的完整詳細信息,請參閱cua-base.el中的「CUA矩形支持」下的說明,或閱讀http://trey-jackson.blogspot.com/2008/10/emacs-tip-26- cua-mode-specifically.html – phils 2010-07-01 22:35:50

+0

我有一個坦白。我使用CUA模式。 – 2017-02-16 08:40:27

31

您可以選擇區域然後C-u C-x <tab>將移動4個空格。您可以在C-u後鍵入一個數字,將其他值改爲4。

+0

另一個提示:'C-u'之後的數字可能是負數,在這種情況下,區域將被移到左邊而不是右邊。 – 2016-12-01 14:33:34

相關問題