Можно ли вставить разрыв строки в место, где находится курсор в Vim, не входя в режим вставки? Вот пример ( [x]
означает, что курсор включен x
):
if (some_condition) {[ ]return; }
Иногда мне может понадобиться ввести еще код. Поэтому я нажимал, iчтобы перейти в режим вставки, нажимал, Enterчтобы вставить разрыв строки, а затем удалять лишнее пространство. Затем я перехожу в обычный режим и помещаю курсор перед закрывающей фигурной скобкой, а затем делаю то же самое, чтобы поместить его в отдельную строку.
Я уже давно этим занимаюсь, но есть ли способ лучше?
vim
performance
text-editor
Марк А. Николози
источник
источник
Ответы:
В приведенном вами примере вы можете использовать rEnterдля замены одного символа (пробела) на Enter. Затем, fspace.чтобы перейти к следующему пробелу и повторить последнюю команду.
В зависимости от ваших настроек автоотступа, приведенное выше может или не может правильно сдвигать оператор return. Если нет, используйте sEnterTabEscвместо этого, чтобы заменить пробел новой строкой, сделать отступ строки и выйти из режима вставки. Вам придется заменить второй пробел другой командой, чтобы вы не могли использовать '.' в этом случае.
источник
>>
и<<
для облегчения отступов, если не хотите переходить в режим вставки с помощьюs
.Вот как создать макрос, который вставляет новую строку в курсор всякий раз, когда вы нажимаете 'g', не находясь в режиме вставки:
В vim введите:
Куда:
Вы будете видеть следующее в нижней части окна vim, пока не нажмете последний Enter:
Пояснение:
[Ctrl + V] означает «заключить следующий символ в кавычки» - он позволяет вам вставлять символы новой строки и escape-символы в команду.
Итак, вы сопоставляете клавишу 'g' с последовательностью:
Это vim для вставки новой строки перед курсором, а затем выхода из режима вставки .
Твики:
f}i^M^[O
- Это е Ind } и я nsert другого символа новой строки, а затем выйти из режима вставки и вывод пера пустой строки для ввода больше коды.Наслаждайтесь!
источник
Простое сопоставление для разрыва строки в месте курсора нажатием Ctrl + Enter:
по существу входит в режим «вставки», вставляет разрыв строки и возвращается в нормальный режим.
поместите его в свой файл .vimrc для использования в будущем.
источник
Если вы обычно расширяете однострочный блок до трех строк, попробуйте подстановку. Измените открывающую скобу на скобку / возврат, а закрывающую скобку на возврат / скобу.
Команда замены скобки / возврата на скобку выглядит так:
Поскольку вы хотите использовать это часто, вы можете сопоставить полную последовательность с неиспользуемым нажатием клавиши следующим образом:
Там, где вы видите ^ M в последовательности, введите [Ctrl-V] , затем нажмите Enter .
Теперь, поместив курсор в любом месте строки сэмпла, нажмите назначенную клавишу, и символы возврата каретки будут добавлены.
Ознакомьтесь
:help map-which-keys
с советами по выбору неиспользуемых клавиш для сопоставления.источник
g
не отображается, потому что он используется как ключ «пространства имен» для многих сопоставлений vim, состоящих из двух нажатий клавиш (см.:h g
). Так что это сопоставление на самом деле недопустимо.g
уже используется в качестве ключа «пространства имен»?:help g
это один из способов увидеть списокg
сопоставлений по умолчанию + что-то.z
,[
]
являются дополнительными ключами «пространства имен», см. например:help index
. Вы можете вызвать,:verbose map g
чтобы увидеть все текущие определенные сопоставления, начиная с g. Полезные webresources являются viemu.com/vi-vim-cheat-sheet.gif , vimcasts.org/blog/2014/02/follow-my-leader , vimeo.com/85343734 (слайды: speakerdeck.com/nelstrom/follow-my -leader )Предполагая, что вы в порядке с сопоставлением
K
с чем-то другим (выберите другой ключ по своему вкусу), и использование маркера'
в качестве временного маркера нормально, почему бы не сделать этого?теперь нажатие K в нормальном режиме над символом, после которого вы хотите, чтобы произошел разрыв строки, разделит строку и оставит курсор на месте.
источник
Vim автоматически уничтожит все пробелы справа от курсора, если вы разорвете строку пополам, когда
autoindent
(или любое другое средство для отступов) включено.Если вы не хотите использовать какой - либо из этих параметров, используйте
s
вместоi
для того , чтобы с ubstitute нового текста для заготовки , а не просто вставить. (Если имеется несколько пробелов, поместите курсор в крайнее левое положение и используйтеcw
вместо них.)источник
По сути, когда вы разбиваете строку, вы либо хотите просто вставить возврат каретки, либо, если вы используете пробел, замените его на возврат каретки. Зачем довольствоваться тем или другим? Вот мое отображение для K:
Я использую тернарный оператор, чтобы объединить два действия в одну ключевую карту. Разбивка на части
<expr>
означает, что вывод ключевой карты может быть динамическим и в этом случае зависит от условия,getline('.')[col('.')-1]==' '
которое представляет собой длинный способ спросить vim, является ли символ под курсором пробелом. Наконец, знакомый тернарный оператор? :
либо заменяет пробел на linebreak (r<CR>
), либо вставляет новый (i<CR><Esc>
)Теперь у вас есть прекрасная сестринская карта ключей для
J
команды.источник
Установите это сопоставление клавиш в вашем vimrc
Затем нажмите Ctrl + m, если хотите использовать его в своем vim.
источник
IMHO, встроенное отображение
gs
не является полезным отображением (поместите vim в спящий режим), его можно использовать для разделения:источник
В Vrapper вы можете использовать gql, который разделит строку без перехода в режим вставки, но не всегда может поддерживать отступы.
источник
Фактически вам понадобятся следующие комбинированные операции:
:
чтобы войти в командный режимs/\s/\r/g
источник
Если у вас есть ввод:
и хотите вывести
Вы можете использовать команду
источник
Я обнаружил, что это наиболее точная реализация того, что я ожидал от противоположного поведения
J
Он выполняет упрощенную новую строку у курсора, заботится о любых конечных пробелах в предыдущей строке, если они есть, а затем возвращает курсор в правильную позицию.
i <cr> <esc> - это одно из наиболее распространенных предлагаемых решений, оно не удаляет непробельные символы под курсором, но также оставляет вам конечные пробелы
^mw - перейти к началу новой строки и поставить отметку под
w
gk - перейти на одну строку вверх
:silent! s/\v +$//<cr> - регулярное выражение заменяет любые пробелы в конце строки
:noh<cr> - Удалите все выделения при поиске, которые могли быть включены в регулярное выражение.
`w - вернуть отметку под
w
По сути, сочетает в себе лучшее из обоих r<esc><cr>иi<cr><esc>
Примечание: у меня есть эта привязка, Sкоторая потенциально перезаписывает полезный ключ, но это синоним, ccи, поскольку я не использую его так часто, как разбиения, я могу перезаписать его.
источник
o
ESC
команда сделает это за вас.источник
Это отображение разбивает любую имеющуюся у вас однострочную функцию. Просто поместите курсор на строку и нажмите "g" в обычном режиме:
Предполагается, что у вас есть пробел после открывающей скобки и пробел перед закрывающей скобкой. Посмотрите, работает ли это для вас.
источник