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

60

У меня есть область кода 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, но это ужасное количество нажатий клавиш для такой простой задачи.

Ян Маккиннон
источник

Ответы:

69

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

M-x python-shift-right (C-c >)
M-x python-shift-left  (C-c <)
Чен Леви
источник
5
Я должен был сделать python-indent-shift-left.
nnyby
17

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

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

Жиль "ТАК - перестань быть злым"
источник
8

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

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

KeithB
источник
4

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

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

Нестор А. Диас
источник
3

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

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

  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

Обновляя решение Чена выше, в настоящее время (проверено на 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

Композиционность - король в Emacs, просто объедините ее M-iс https://github.com/magnars/multiple-cursors.el, и у вас есть команда отступа блока. Это вы делаете:

  1. M-> N раз (где N - количество строк в блоке)
  2. M-i
Евгений Долженко
источник
0

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

Винсент
источник