В vim, почему это :-1j чтобы присоединиться к строке выше?

например :g/^ /-1j чтобы объединить все строки, начинающиеся с пробела.

Команды легче запомнить, когда вы понимаете, как они возникли, и в этом случае я ожидал :g/^ /-1J

-1 перейти к строке выше и J чтобы присоединиться к строке ниже.

2 ответа2

4

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

В :g/^ /-1j , j - это сокращение :join: вы переходите на одну строку вверх (-1 , это может быть -) и выполняете :join .

В :g/^ /-1J , J ничего не значит для Vim: вы используете команду нормального режима вне ее контекста, поэтому, в основном, она ничего не делает после -1 за исключением вывода четкого сообщения об ошибке.

Vim ожидает команду Ex, а не команду нормального режима.

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

:g/^ /:-1:j

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

:g/^ /-1norm J
1

В vi есть два типа команд. Есть команды, которые могут быть вызваны непосредственно из командного режима в любом месте файла (я не уверен, есть ли конкретное имя для этих видов команд), и есть команды, которые приходят от ex которые специально работают со строками (не на символы) и требует : символ, чтобы вызвать их.

Как правило, только команда ex может использоваться с командой :g .

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