Подтвердить что ты не робот

Как вставить блок белых пробелов, начиная с позиции курсора в vi?

Предположим, что у меня есть фрагмент текста ниже, когда курсор остается на первом A в настоящее время,

AAAA
BBB
CC
D

Как я могу добавить пробелы перед каждой строкой, чтобы сделать это, и было бы здорово, если бы количество столбцов пробелов можно было указывать "на лету", например, два здесь.

  AAAA
  BBB
  CC
  D

Я бы предположил, что есть способ сделать это быстро в визуальном режиме, но любые идеи?

В настоящее время я дважды копирую первый столбец текста в визуальном режиме и заменяю весь два столбца на пробелы, что связано s > 5 нажатиями клавиш, слишком громоздкими.

Constraint:

Извините, что я не четко сформулировал вопрос и мог создать некоторые недоумения.

Цель - только часть более крупного файла, поэтому было бы здорово, если можно указать количество строк и столбцов, начиная с первого A.

Edit:

Спасибо как @DeepYellow, так и @Johnsyweb, видимо, >} и >ap - все это отличные советы, о которых я не знал, и оба они могли быть действительными ответами, прежде чем я уточню конкретное требование для ответа на мой вопрос, но в любом случае ответ @luser droog выделяется как единственный жизнеспособный ответ. Спасибо всем!

4b9b3361

Ответ 1

Я бы использовал :%s/^/ /

Вы также можете указать диапазон строк :10,15s/^/ /

Или относительный диапазон :.,+5s/^/ /

Или используйте регулярные выражения для местоположений :/A/,/D/>.

Чтобы скопировать код для вставки на SO, я обычно использую sed из терминала sed 's/^/ /' filename


Shortcut

Я только что изучил новый трюк для этого. Вы введете визуальный режим v, выберите регион (с регулярными командами движения), затем нажмите :, который даст вам следующее:

:'<,'>

готово для ввода только командной части вышеуказанных команд, метки '< и '> автоматически устанавливаются на границы визуального выделения.

Чтобы выбрать и отменить текущий абзац:

vip>

или

vip:>

затем enter.

Edit:

Как указано в комментариях, вы также можете добавить пробелы в середину строки, используя квантификатор regex \{n} для любого метасимвола ..

:%s/^.\{14}/& /

Это добавляет пробел 14 символов слева на каждой строке. Конечно, % может быть заменен любым из указанных выше параметров для указания диапазона команды ex.

Ответ 2

Когда на первом A я перейду в режим визуального отображения ctrl-v, выберите строки, которые вы хотите изменить, нажмите I (режим вставки с капиталом I) и примените любые изменения, которые я хочу для первая строка. Выход из визуального режима esc будет применять все изменения в первой строке ко всем строкам.

Вероятно, не самый эффективный по числу нажатий клавиш, но дает вам всю свободу, которую вы хотите, прежде чем покинуть визуальный режим. Мне не нравится, когда мне нужно вручную указать диапазон строк и столбцов в команде regex.

Ответ 3

Я бы использовал > }.

Где...

  • >: сдвиги вправо и
  • }: означает до конца абзаца

Надеюсь, что это поможет.

Ответ 4

  • Ctrl + v (для входа в визуальный режим)
  • С помощью клавиш со стрелками выберите строки
  • Shift + я (позволяет перейти в режим вставки)
  • Нажмите клавиши пробела или все, что вы хотите ввести перед выбранными строками.
  • Сохраните изменения (используйте: w), и теперь вы увидите изменения во всех выбранных строках.

Ответ 5

Я бы сделал, как Нигу. Другое решение - использовать :normal:

  • <S-v>, чтобы войти в режим VISUAL-LINE
  • 3j или jjj или /D<CR>, чтобы выбрать строки
  • :norm I<Space><Space>, правильный диапазон ('<,'>) автоматически вставлен

:normal, вероятно, немного переборщик для этого конкретного случая, но иногда вам может понадобиться выполнить множество сложных операций в диапазоне строк.

Ответ 6

Вы можете выбрать строки в визуальном режиме и введите >. Это предполагает, что вы установили свои вкладки для вставки пробелов, например:

setl expandtab
setl shiftwidth=4
setl tabstop=4

(замените 4 своим предпочтением в отступе)

Если строки образуют абзац, >ap в нормальном режиме сдвигает весь абзац выше и ниже текущей позиции.

Ответ 7

Еще одна вещь, которую вы могли бы попробовать - это макрос. Если вы еще не знаете, вы начинаете макрос с q и выбираете регистр для сохранения макроса... поэтому, чтобы сохранить макрос в регистре a, вы должны набрать qa в нормальном режиме.

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

Итак, в этом случае вам нужно было 2 пробела перед каждой строкой, поэтому с помощью курсора уже в начале первой строки перейдите в режим вставки и дважды нажмите пробел. Теперь нажмите escape, чтобы перейти в обычный режим, затем до следующей строки, затем в начало этой строки и нажмите q. Это заканчивается и сохраняет макрос

(так, чтобы все было в одном месте, это полный список комбинаций клавиш, которые вы бы сделали, где <esc> - это когда вы нажимаете клавишу эвакуации, а <space> - это место, где вы нажимаете пробел: qai<space><space><esc>j0q Это сохраняет макрос в регистре a)

Теперь, чтобы воспроизвести макрос назад, вы делаете @, за которым следует регистр, который вы сохранили в... так что в этом примере @a. Теперь вторая строка также будет иметь 2 пробела перед ними.

Макросы также могут выполняться несколько раз, поэтому, если бы я сделал [email protected], макрос будет выполняться 3 раза, и с этим вы справитесь.

Мне нравится использовать макросы для этого как это, потому что это более интуитивно для меня, потому что я могу делать именно то, что я хочу, чтобы это делать, и просто повторять его несколько раз.

Ответ 8

Предположим, вы хотите сдвинуть блок кода:

  • установить количество пробелов, используемых каждой командой сдвига :set shiftwidth=1, по умолчанию 8.
  • нажмите Ctrl+v в соответствующем месте и переместите курсор вверх k или вниз j чтобы выбрать некоторую область.
  • нажмите > чтобы сдвинуть блок и . повторять действие до желаемой позиции (если курсор пропущен, вернитесь назад с помощью h или b).

move block of code