Как сдвинуть выделенную область текста в Emacs на определенное количество пробелов?

26

Я пишу код на Python, поэтому важно перемещать / перемещать блоки строк, чтобы не проходить каждую строку отдельно. Как я могу сделать это без дополнения? Есть ли какая-либо команда нажатия клавиши, чтобы сделать это?

Васса
источник
3
Для ответов, не относящихся к Python, см. Emacs.stackexchange.com/q/11 и emacs.stackexchange.com/q/18 .
Legoscia

Ответы:

40

Используйте команду indent-rigidly, с которой связано C-x TABпо умолчанию.

Вы можете указать количество пробелов для отступа, используя префиксный аргумент , например C-5 C-x TAB.

Или вы можете вызвать команду и затем использовать стрелки влево / вправо, чтобы интерактивно настроить уровень отступа.

glucas
источник
как добавить префиксный аргумент?
Васс
1
Попробуйте, например, C-5 C-x TABсделать отступ для текущего региона на 5 пробелов.
glucas
отлично, но почему первая строка тоже не двигается? Я должен взять последнюю часть строки над выделением, чтобы сделать набор линий, которые я хочу переместить.
Васс
1
Вам не нужно ничего выбирать из предыдущей строки, но вы хотите выбрать в начале первой строки, которую хотите сделать отступ. Например, C-aчтобы перейти к началу строки, C-SPCначать отмечать регион, C-n C-nсдвинуться вниз на пару строк, C-5 C-x TABчтобы сделать отступ для этих двух линий.
glucas
1
«Используйте стрелки влево / вправо для интерактивного изменения уровня отступа». Действительно? Большой! Я этого не знал, и иногда мне приходилось угадывать, сколько пробелов мне нужно добавить или удалить. Я надеюсь, что это может помочь.
imz - Иван Захарящев
9

Если вы используете python-mode.el C-c >или C-c <для перемещения блоков влево или вправо

Lompik
источник
почему первая строка выделения остается неизменной, если я не выделю последнюю часть строки над ней?
Васс
Я не могу воспроизвести это поведение. Вся строка выделений перемещена. Emacs 24.4
Ломпик
Комментарий глюкаса говорит, что это произойдет, если вы не выберете в начале строки
Vass
6

Команда string-rectangle( C-x r t) может использоваться для вставки любого произвольного текста (включая пробелы) в выбранную область.

Допустим, у вас есть этот блок текста, и вы хотите вставить 5 пробелов перед всеми строками.

abc
  def
    ghi

Сначала выберите область «0 столбца», как показано ниже (точка находится на символе «a», а метка находится в том же столбце в строке, содержащей «ghi»):

▮bc
  def
▯   ghi

Теперь, используя string-rectangle, вставьте текст, который вы хотите вставить в выбранный регион. В этом примере мы будем вставлять 5 пробелов по всем строкам, включая точку и метку и между ними.

C-x r t M-5 SPC RET

Это даст текст с отступом ниже.

     abc
       def
         ghi
Каушал Моди
источник
4

Есть C-x TAB(связано indent-rigidly). Дайте ему префиксный аргумент, чтобы указать, сколько пробелов вы хотите сделать отступом, отрицательное удаляет это количество пробелов.

Харальд Ханче-Олсен
источник
0

Я обнаружил, что, нажав Alt-4, а затем SPC, я получаю желаемый результат. Не уверен, что это лучший способ, но он также работает.

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