Подтвердить что ты не робот

Сдвиньте область или линию в emacs

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

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

Спасибо!

4b9b3361

Ответ 1

Возможно, это работает так, как вы хотите.

(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)))

Ответ 2

Вы можете выбрать область, затем C-u C-x <tab> сдвинет 4 пробела. Вы можете ввести число после C-u, чтобы изменить 4 на что-либо еще.

Ответ 3

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

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

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

EDIT: Я только что прочитал статью в emacs wiki, это же решение, за исключением режима CUA, который бесконечно более мощный, чем "общий" прямоугольный выбор (так как он визуальный).