Emacs: как сделать отступ / неиспользуемую область кода на 4 пробела?

32723
Ian Mackinnon

У меня есть область кода Python, выбранного в Emacs. Каковы наиболее эффективные способы отступа и отступа каждой строки в ней на 4 пробела?

В идеале я хотел бы что-то, что не зависит от контекста (например, это позволит мне делать отступы внутри строк документации, где отступ не относится к синтаксису Python).

Моя строка режима показывает (Python). В поисках в Интернете я нашел много дискуссий об использовании python-modeвместо python, но я начал использовать emacs всего несколько дней назад, поэтому я опасаюсь изменить значения по умолчанию, прежде чем у меня появится возможность понять и их. Если переход python-modeна лучший вариант, я рад принять это как ответ.

Что я пробовал (из руководства):

  • <TAB> нет эффекта
  • C-M-\ нет эффекта
  • C-x <TAB> (Отступ жестко) отступ каждой строки на один столбец (и отменяет выбор области)
  • M-i отступ первой строки на вкладке (длина 8 пробелов)
  • C-M-q - "CMq не определено"

Единственный способ, который я нашел, это использовать regex-replace, но это ужасное количество нажатий клавиш для такой простой задачи.

54

8 ответов на вопрос

66
Chen Levy

Предполагая, что переменная python-indentравна 4:

M-x python-shift-right (C-c >) M-x python-shift-left (C-c <) 
Я должен был сделать `python-indent-shift-left`. nnyby 9 лет назад 4
15
Gilles

indent-rigidlyпринимает аргумент префикса, указывающий, на сколько отступать, поэтому отступ на C-u 42 C-x TAB42 столбца, а так как аргумент префикса по умолчанию равен 4, C-u C-x TABотступ на 4 столбца.

Если вы хотите выбрать регион снова, сделайте C-x C-xпотом.

7
KeithB

Используйте команду indent-жестко с числовым префиксом.

C-u 4 M-x indent-rigidlyсделать отступ на четыре пробела, C-u -4 M-x indent-rigidlyудалить четыре пробела.

4
Nestor A. Diaz

Cx Cx пометить код, а затем Mx режим отступа для табуляции

Это сохранение, если вы нажали клавишу Tab для каждой строки.

3
Steve Lianoglou

Вы также можете использовать режим столбца.

Выберите строки в режиме столбца, затем добавьте четыре пробела ко всем сразу:

  1. Перейти к столбцу 1 первой строки, которую вы хотите сделать отступ.
  2. C-<space> поставить отметку
  3. переместите точку вниз до последних строк (оставайтесь в первом столбце)
  4. C-x r tчтобы войти в режим столбца (или C-<RET>если у вас есть режим CUA)
  5. <space><space><space><space><RET>

Вы можете сделать аналогичный маневр, чтобы удалить четыре пробела - просто включите 4 столбца в отмеченную область (шаги 2-3) и нажмите <DEL>

3
Amnon Harel

Обновляя решение Чена выше, в настоящее время (проверено на Emacs 24.4.1) команды были переименованы. Итак, предполагая, что вы хотите сделать отступ в соответствии с переменной python-indent, командами являются python-indent-shift-left и python-indent-shift-right. Вы можете:

  1. выдать их, набрав M-x python-indent-shift-rightилиM-x python-indent-shift-left

  2. использовать стандартные сочетания клавиш в режиме Python C-c >иC-c <

  3. привязать их Например, на клавиатуре с кнопкой Windows я использую:

    (global-set-key (kbd "s-s") 'python-indent-shift-left)  (global-set-key (kbd "s-d") 'python-indent-shift-right) 
0
Evgeniy Dolzhenko

Composability is the king with Emacs, just combine M-i with https://github.com/magnars/multiple-cursors.el and you have your indent block command. That is you do:

  1. M-> N times (where N is the number of lines in block)
  2. M-i
0
Vincent

И то, S-<LEFT>иS-<RIGHT> другое прекрасно работает в Pythonосновном режиме. Это особенно удобно в режиме Cua, где C-cи C-xповедение изменяется на копирование / вырезание при выборе региона.

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