Vim: Отступ с одним пробелом (не пробелом смещения) - PullRequest
41 голосов
/ 15 февраля 2012

Команды по умолчанию для отступов VIM с отступом по пробелам смещения

Например,

>>   Indent line by shiftwidth spaces
<<   De-indent line by shiftwidth spaces

Есть ли способ сделать отступ с одним или n (где n! = Смещением) пробелом (ами)?

Один из способов сделать это - выбрать столбец в блоке по вертикали с помощью Ctrl+V, затем I для вертикальной вставки, а затем набрать space и <Esc>.Но есть ли лучший способ?

Ответы [ 6 ]

37 голосов
/ 15 февраля 2012

Я не уверен, что есть лучший способ.Но есть несколько способов, которыми вы могли бы сделать это (о чем я могу думать в любом случае) ...

Ваше решение для визуального блока

Как вы сказали: нажмите Ctl-V, выберите нужные строки, нажмите I, чтобы вставить, и введите количество пробелов.

Поиск

АналогичноВыше, но немного более гибко - вы можете использовать с командой vip «выбрать абзац» или с любым другим диапазоном: нажмите v или vip, или что у вас есть, чтобы выбрать диапазон, и введите :s/^/{n spaces} где {n пробелов} - это количество пробелов, которые вы хотите вставить.

Это немного более многословно, но работает довольно хорошо для практически любого диапазона.Черт возьми, если вы хотите сделать весь файл, вы можете сделать Ctl-A или что у вас (зависит от ОС) и сделать отступ для всего файла (или просто пропустить весь процесс визуального режима и просто сделать это в командном режиме ... как в :1,$s/^/{n spaces}

Обратите внимание, что вам не нужно включать третью косую черту в s ///, так как вы не ставите никаких тегов в конце.

Global

Может быть, вы хотите сделать отступ только для тех строк, которые соответствуют некоторому шаблону. Скажем ... Все строки, содержащие foo. Нет проблем: введите :g/foo/s/^/{n spaces}

Global особенно удобен, если его многострочныйучастки с похожим рисунком. Вы можете просто уйти в землю обычного режима и выбрать нужные линии и сделать отступ соответственно: :g/foo/norm Vjj:s/^/{n spaces}Ctl-V{Enter}. Немного сложнее с этим дополнительным Ctl-V{Enter} в конце, но полезно при определенных обстоятельствах.

Используйте tabstop и shiftwidth

Да, если вы делаете это много - я бы сделал :set ts=2 и :set et и :set sw=2 и использовал бы >> и << в разные стороны ...

Создать функцию

Хорошо, так что все еще недостаточно кратко, и по какой-то причине вам нужно много делать, и вы не можете терпеть неудачи с настройками sw, et и ts.Нет проблем, просто напишите быструю функцию и присвойте ей localleader сопоставление:

function! AddSpace(num) range
  let s:counter = 0
  let s:spaces = ''
  while s:counter < a:num
    let s:spaces .= ' '
    let s:counter = s:counter + 1
  endwhile
    execute a:firstline .','. a:lastline .'s/^/'. s:spaces
endfunction

:map <LocalLeader>i :call AddSpace(3)Ctl-V{enter}

Может быть, просто знать, что для этого есть несколько способов, лучше, чем знать только один?Ведь иногда лучшее решение зависит от проблемы:)

25 голосов
/ 27 июня 2013

Отступ блока кода в vi тремя пробелами в режиме Visual Block:

  1. Выберите блок кода, который вы хотите сделать отступ. Сделайте это, используя Ctrl + V в обычном режиме и используя стрелки вниз, чтобы выделить текст. Пока он выбран, введите «:», чтобы дать команду блоку выделенного текста.

  2. В командной строке появится следующее: :'<,'>

  3. Чтобы установить отступ в 3 пробела, введите le 3 и нажмите ввод. Вот что появляется: :'<,'>le 3

  4. Выбранный текст сразу смещается на 3 пробела.

Отступ блока кода в vi тремя пробелами в режиме Visual Line:

  1. Откройте ваш файл в VI.
  2. Наведите курсор на код
  3. Находясь в обычном режиме, нажмите следующие клавиши:

    Vjjjj:le 3
    

Интерпретация того, что вы сделали:

V означает начать выделение текста.

jjjj стрелки вниз на 4 строки, выделяя 4 строки.

: говорит vi, что вы введете инструкцию для выделенного текста.

le 3 означает отступ выделенного текста на 3 строки.

14 голосов
/ 15 февраля 2012

Чтобы изменить количество пробелов, вставленных для отступа, используйте параметр shiftwidth:

:set shiftwidth = <number>

Узнайте больше подробнее .

Вы также можете добавить это в файл .vimrc.

6 голосов
/ 28 апреля 2013

Если я правильно понимаю, вы можете использовать:

ctrl + V, jj, затем ': le n', где n - количество пробелов для отступа.

http://vim.wikia.com/wiki/Shifting_blocks_visually

4 голосов
/ 01 октября 2014

Поместите метки ('a' и 'b') между кодом, который вы хотите сделать отступом:

<position cursor at top of block>
m a
<position cursor at bottom of block>
m b

Выполните команду замены таким образом, чтобы каждый символ новой строки между вашими метками заменялся количеством пробелов.желаемый (в данном примере 2 пробела):

:'a,'bs/^/  /g
0 голосов
/ 13 июля 2015

Мне пришлось сделать отступ на заданное количество пробелов, amount, внутри скрипта vim. Это сработало:

    let sw_setting = &shiftwidth
    set shiftwidth=1
    exe "normal v" . amount . "<"
    let &shiftwidth = sw_setting

Побочным эффектом является то, что он сбрасывает последний выбор визуального режима. Вместо этого вы можете отредактировать строку exe... так, чтобы она выполняла «<<», повторяемые <code>amount раз в обычном режиме. То есть: вместо normal v3< сделайте его normal <<<<<<, если amount равно 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...