Сместите регион или строку в emacs

Я ищу путь в emacs для смещения текста направо или налево n пробелы. Схожая функциональность, что это в энергии << или >>. Это должно работать над регионом или если никакой регион не выбран на текущей строке, и не перемещают курсор от его текущего местоположения.

Решение от EmacsWiki не работает очень хорошо M-x indent-rigidly так как это несколько помнит последний используемый регион и сдвиги что один вместо этого. Самое близкое, кажется, то здесь, но я не сделал управляемый, чтобы заставить его работать. Я не разработчик шепелявости, таким образом, трудно изменить код. Я буду ценить любую справку.

Спасибо!

11
задан Community 23 May 2017 в 12:00
поделиться

2 ответа

Может быть, это работает так, как вы хотите.

(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)))
6
ответ дан 3 December 2019 в 01:08
поделиться

Для этого я обычно делаю трюк:

  • активирую режим CUA
  • переходите к началу строки
  • C-RET, теперь, если вы переместите курсор, вы должны увидеть прямоугольник ] красный регион
  • Переместите курсор вниз по строкам и введите пробел, пока не получите правильное смещение.

Это можно сделать и программно каким-то образом (таким же образом).

РЕДАКТИРОВАТЬ: Я только что прочитал статью в вики-странице emacs, это то же самое решение, за исключением режима CUA, который бесконечно более мощный, чем «обычный» прямоугольный выбор (поскольку он визуальный).

6
ответ дан 3 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: