57

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

8 ответов8

69

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

M-x python-shift-right (C-c >)
M-x python-shift-left  (C-c <)
15

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

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

7

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

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

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

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

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .