Можно ли каким-либо образом пометить текст в emacs и сдвинуть его влево (удаление стартовых пробелов) по пространству/градации табуляции?
То же самое я сделал бы в другом редакторе с Shift + Tab.
Можно ли каким-либо образом пометить текст в emacs и сдвинуть его влево (удаление стартовых пробелов) по пространству/градации табуляции?
То же самое я сделал бы в другом редакторе с Shift + Tab.
indent-rigidly
), чтобы применить отступ к области.Это гораздо более громоздко, чем S-TAB, но это IMHO - это последнее средство в случае, если форматирование Emacs не решит вашу проблему.
EDIT: гораздо лучшее решение: Сменить регион или строку в emacs (принятый ответ). Это то, что я использую в Emacs для изменения отступа. ПРЕДУПРЕЖДЕНИЕ: включает некоторые Emacs Lisp.
В общем, emacs помещает предметы, в которых текущий стиль диктует, когда вы нажимаете <TAB>
, поэтому, естественно, это немного отличается здесь. Самое близкое, что приходит в голову, - это M-\
, который разрушает горизонтальные пробелы вокруг точки. Если вы хотите удалить "прямоугольник" пробела перед строками, то delete-rectangle
может быть более уместным, что вы можете сделать, установив метку и точку перемещения, чтобы выбрать прямоугольник, а затем с помощью C-x r d
.
Это может быть проще и визуально интуитивно: сначала убедитесь, что 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
Похоже, проблема, которую вы пытаетесь решить, - это неправильный отступ кода при вырезании/вставке. Вы можете решить это, автоматически перепечатав текст с помощью следующего.
Примечание. Использование аргумента префикса не приводит к повторному отступу (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)))))