Как вставить строку, где курсор не входит в режим вставки в Vim?
Можно ли вставить разрыв строки, где курсор находится в Vim без входа в режим вставки? Здесь пример ([x]
означает, что курсор находится на x
):
if (some_condition) {[ ]return; }
Иногда мне может понадобиться ввести еще один код. Поэтому я нажимаю i, чтобы перейти в режим вставки, нажмите Enter, чтобы вставить разрыв строки, а затем удалить лишнее пространство. Затем я должен войти в обычный режим и поместить курсор перед закрывающей скобкой, а затем сделать то же самое, чтобы получить его на своей собственной линии.
Я делал это некоторое время, но, конечно, лучший способ сделать это?
Ответы
Ответ 1
В приведенном примере вы можете использовать r Enter для замены одного символа (пробела) на Enter. Затем f space ., чтобы перейти к следующему пространству и повторить последнюю команду.
В зависимости от ваших настроек автоопределения вышесказанное может или не может правильно указывать оператор возврата. Если нет, используйте s Enter Tab Esc вместо этого, чтобы заменить пространство символом новой строки, отступом строки и выходом в режим вставки. Вам нужно будет заменить второе пространство другой командой, чтобы вы не могли использовать '.' в этом случае.
Ответ 2
Здесь, как создать макрос, который вставляет новую строку под курсором всякий раз, когда вы нажимаете 'g', а не в режиме вставки:
Изнутри vim введите:
:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter]
Где:
- [Ctrl + V] означает удерживать клавишу Ctrl и нажать 'v'
- [Enter] означает нажать клавишу Enter
- [Esc] означает нажатие клавиши Esc
Вы увидите следующее внизу окна vim, пока не нажмете конечный Enter:
:map g i^M^[
Объяснение:
[Ctrl + V] означает "процитировать следующий символ" - он позволяет вставлять символы новой строки и escape-символов в команду.
Итак, вы сопоставляете ключ "g" с последовательностью:
i [Enter] [Escape]
Это vim для вставки новой строки перед курсором, затем выход из режима вставки.
Tweaks:
- Вы можете заменить "g" на любой символ, который еще не связан с используемой вами командой.
- Добавьте еще одну команду, например.
f}i^M^[O
- Это будет f в } и i nsert другой новой строке, затем выйдите из режима вставки и O введите пустую строку для ввода более кода.
- Вы можете добавить команду в файл .vimrc или .exrc, чтобы сделать ее постоянной. Просто опустите двоеточие с самого начала, поэтому команда начинается с "map"
Наслаждайтесь!
Ответ 3
Простой сопоставление, чтобы разбить строку на курсор, нажав Ctrl + Enter:
:nmap <c-cr> i<cr><Esc>
по сути входит в режим "вставки", вставляет разрыв строки и возвращается в нормальный режим.
поместите его в ваш .vimrc файл для дальнейшего использования.
Ответ 4
Если вы обычно расширяете один строковый блок на три строки, попробуйте заменить. Измените открывающий кронштейн на кронштейн/возврат, а закрывающий кронштейн вставьте в скобу.
Команда для замены скобки/возврата для скобки выглядит следующим образом:
:s/{/{\r/
Поскольку вы хотите часто использовать это, вы можете отобразить полную последовательность в неиспользуемое нажатие клавиши следующим образом:
:map <F7> :s/{/{\r/ ^M :s/}/\r}/ ^M
Где вы видите ^ M в последовательности, введите [Ctrl-V], затем нажмите введите.
Теперь, когда ваш курсор находится в любом месте вашей строки с образцом, нажмите отображаемый ключ и добавьте возвращения каретки.
Проверьте :help map-which-keys
за советом по выбору неиспользуемых нажатий клавиш.
Ответ 5
Vim автоматически уничтожит любые пробелы справа от курсора, если вы сломаете строку за две, а autoindent
(или любое другое средство отступов) включено.
Если вы не хотите использовать какие-либо из этих параметров, используйте s
вместо i
, чтобы s заполнить ваш новый текст пустым, а не просто вставлять. (Если имеется несколько пробелов, поместите курсор в крайнее левое и используйте вместо него cw
.)
Ответ 6
Предполагая, что вы в порядке с сопоставлением K
с чем-то другим (выберите другой ключ по своему вкусу) и используя маркер '
в качестве временного маркера, хорошо, почему бы не сделать это?
:nmap K m'a<CR><Esc>`'
теперь нажатие K в нормальном режиме над символом, после которого вы хотите, чтобы разрыв строки произошел, разделит строку и оставьте курсор там, где он был.
Ответ 7
Установите это сопоставление клавиш в vimrc
:map <C-m> i<CR><Esc>h
Затем нажмите Ctrl + m, если вы хотите использовать его в своем vim.
Ответ 8
IMHO, встроенное отображение gs
не является полезным отображением (поместите vim в режим сна), его можно использовать для разделения:
nmap gs i<CR><ESC>
Ответ 9
В Vrapper вы можете использовать gql, который разделит строку без ввода режима вставки, но может не всегда поддерживать отступ.
Ответ 10
В принципе, когда вы разделяете строку, вы либо хотите просто вставить возврат каретки, либо в том случае, если вы находитесь на пробеле, замените его на возврат каретки. Ну, зачем соглашаться на то или другое? Здесь мое отображение для K:
"Have K split lines the way J joins lines
nnoremap <expr>K getline('.')[col('.')-1]==' ' ? "r<CR>" : "i<CR><Esc>"
Я использую тернарный оператор, чтобы сконденсировать два действия на одну ключевую карту. Разбивая его, <expr>
означает, что вывод карты карты может быть динамическим, и в этом случае зависит от условия getline('.')[col('.')-1]==' '
, которое является длинным извилистым способом спросить vim, если символ под курсором - это пробел. Наконец, знакомый тернарный оператор ? :
либо заменяет пространство с помощью linebreak (r<CR>
), либо вставляет новый (i<CR><Esc>
)
Теперь у вас есть симпатичная карта с ключом к команде J
.
Ответ 11
На самом деле вам понадобятся следующие комбинированные операции:
- Нажмите v, чтобы войти в визуальный режим
- Выберите строку, которую вы хотите разделить.
- Нажмите
:
, чтобы войти в командный режим
-
s/\s/\r/g
- Готово
Ответ 12
Если у вас есть вход:
aaa bbb ccc ddd
и хотите вывести
aaa
bbb
ccc
ddd
Вы можете использовать команду
f r<ENTER>;.;.
Ответ 13
Я обнаружил, что это самая верная реализация того, что я ожидал от поведения, противоположного J
nnoremap S i<cr><esc>^mwgk:silent! s/\v +$//<cr>:noh<cr>'w
Он делает упрощенную новую строку в курсоре, обрабатывает любые пробелы в предыдущей строке, если они есть, и затем возвращает курсор в правильную позицию.
i <cr> <esc> - это одно из наиболее распространенных предлагаемых решений, оно не удаляет непробельные символы под вашим курсором, но также оставляет вам пробелы в конце
^mw - перейти к началу новой строки и создать отметку под w
gk - подняться на одну строчку
:silent! s/\v +$// <cr> - регулярное выражение заменяет любые пробелы в конце строки
:noh <cr> - Очистить все выделения, которые могли бы включить регулярные выражения.
`w - вернуть отметку под w
Ответ 14
Это сопоставление разбивает любую однострочную функцию, которая у вас есть. Просто наведите курсор на строку и нажмите "g" в обычном режиме:
:map g ^f{malr<CR>`a%hr<CR>`a
Это предполагает, что у вас есть пробел после открытия скобки и пробел перед закрывающей скобкой. Посмотрите, работает ли это для вас.