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

Уменьшение отступов на нескольких строках

Можно ли каким-либо образом пометить текст в emacs и сдвинуть его влево (удаление стартовых пробелов) по пространству/градации табуляции?

То же самое я сделал бы в другом редакторе с Shift + Tab.

4b9b3361

Ответ 1

  • Выберите свой регион;
  • Тип C-u, за которым следует количество пробелов, которые вы хотите отступать (отрицательный номер, если вы хотите уменьшить отступ);
  • Используйте C-x TAB (по умолчанию привязаны к indent-rigidly), чтобы применить отступ к области.

Это гораздо более громоздко, чем S-TAB, но это IMHO - это последнее средство в случае, если форматирование Emacs не решит вашу проблему.

EDIT: гораздо лучшее решение: Сменить регион или строку в emacs (принятый ответ). Это то, что я использую в Emacs для изменения отступа. ПРЕДУПРЕЖДЕНИЕ: включает некоторые Emacs Lisp.

Ответ 2

В общем, emacs помещает предметы, в которых текущий стиль диктует, когда вы нажимаете <TAB>, поэтому, естественно, это немного отличается здесь. Самое близкое, что приходит в голову, - это M-\, который разрушает горизонтальные пробелы вокруг точки. Если вы хотите удалить "прямоугольник" пробела перед строками, то delete-rectangle может быть более уместным, что вы можете сделать, установив метку и точку перемещения, чтобы выбрать прямоугольник, а затем с помощью C-x r d.

Ответ 3

Это может быть проще и визуально интуитивно: сначала убедитесь, что cua-mode включен (M-x cua-mode переключает его). Затем перейдите к началу строки и нажмите C-return. Появляется красный прямоугольник. Теперь переместите курсор вниз и вправо, чтобы увеличить прямоугольник по мере необходимости. Затем нажмите C-d, чтобы удалить его. Что это.

Я часто сталкиваюсь с этой проблемой, когда основной режим не требует автоматического отступа (или когда он беспорядочен).

С прямоугольниками cua-mode можно многое сделать, см. http://trey-jackson.blogspot.com/2008/10/emacs-tip-26-cua-mode-specifically.html

Ответ 4

Похоже, проблема, которую вы пытаетесь решить, - это неправильный отступ кода при вырезании/вставке. Вы можете решить это, автоматически перепечатав текст с помощью следующего.

Примечание. Использование аргумента префикса не приводит к повторному отступу (C-u C-y), плюс переменная порога размера.

;; automatically indenting yanked text if in programming-modes
(defvar yank-indent-modes '(emacs-lisp-mode
                            c-mode c++-mode
                            tcl-mode sql-mode
                            perl-mode cperl-mode
                            java-mode jde-mode
                            lisp-interaction-mode
                            LaTeX-mode TeX-mode)
  "Modes in which to indent regions that are yanked (or yank-popped)")

(defvar yank-advised-indent-threshold 1000
  "Threshold (# chars) over which indentation does not automatically occur.")

(defun yank-advised-indent-function (beg end)
  "Do indentation, as long as the region isn't too large."
  (if (<= (- end beg) yank-advised-indent-threshold)
      (indent-region beg end nil)))

(defadvice yank (after yank-indent activate)
  "If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)."
  (if (and (not (ad-get-arg 0))
           (member major-mode yank-indent-modes))
      (let ((transient-mark-mode nil))
        (yank-advised-indent-function (region-beginning) (region-end)))))