Як вставити новий рядок, не виходячи з звичайного режиму


24

Цікаво, чи можу я вставити новий рядок, не виходячи із звичайного режиму. Наприклад, у мене є два рядки:

this is line one
this is line two

І курсор знаходиться на першій лінії. Тепер я хочу новий рядок між першим і другим рядком:

this is line one

this is line two

Я знаю, що, перебуваючи у звичайному режимі, можу просто натиснути o. Але це увійшло б у режим вставки.

Як я можу вставити новий рядок, як і залишитися в звичайному режимі?


Відповіді:


10

Я використовую для цього картування:

" Quickly insert an empty new line without entering insert mode
    nnoremap <Leader>o o<Esc>
    nnoremap <Leader>O O<Esc>

Таким чином, ви можете вставити рядок під курсором <Leader>oі один у попередньому рядку <Leader>O.

Примітка. Можна стверджувати, що для цього потрібно стільки натискань клавіш, o<Esc>але, сподіваємось, ви вибрали свого лідера, щоб полегшити подібне відображення. Також я дійсно не впевнений, що існує вбудований спосіб зробити це.


8

Рішення, яке не переходить у режим вставки, не переміщує курсор і дозволяє використовувати лічильник для додавання одразу декількох рядків ( 3\oтощо):

nnoremap <silent> <leader>o :<C-u>call append(line("."),   repeat([""], v:count1))<CR>
nnoremap <silent> <leader>O :<C-u>call append(line(".")-1, repeat([""], v:count1))<CR>

6

Якщо ви не хочете додавати відображення, ви можете витягнути yyпорожній рядок, а потім вставити його pза курсором нижче та Pвище.


Це, мабуть, найкраща відповідь без картографування.
Віллем ван Кетвіч

Або збережіть його до oреєстру "oyyта вставте звідти, коли потрібно "op.
mike23

5

Я особисто рекомендую використовувати плагін Тіма Попа Неймовірний . Він надає багато відображень, але ті, які ви шукаєте, [<space>і ]<space>які створюють порожні рядки вище та нижче поточного рядка відповідно. Також Unimpaired надає приємні відображення для переміщення по списку швидких виправлень, списку буферів, перемикання параметрів та багатьох інших. Дивіться :h unimpairedдокладніше.

Якщо ви не хочете використовувати плазмовий модуль, але, як показано нижче, наведено декілька швидких відображень, які слід розмістити у вашому ~/.vimrcфайлі:

nnoremap <silent> [<space>  :<c-u>put!=repeat([''],v:count)<bar>']+1<cr>
nnoremap <silent> ]<space>  :<c-u>put =repeat([''],v:count)<bar>'[-1<cr>

4

Моє відображення використовує Shift-Enter. Він відрізняється від інших тим, що курсор повертається в той самий рядок і стовпець, використовуючи позначку o.

" Insert new line above without going into insert mode
" (uses mark o to return to the previous cursor column)
nnoremap <S-Enter> moO<Esc>`o

5
Зверніть увагу, що відображення <S-Enter>не працює в термінальних емуляторах (воно працює лише в gVim). Тож вам потрібно вибрати іншу комбінацію клавіш, щоб відобразити її ;-)
Martin Tournoij

2

Ця відповідь Максима Кіма змінила життя:

noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR>

і мій рифф на ньому:

noremap <silent> <s-space> :exe "normal a".nr2char(getchar())<CR>

Покладіть ці рядки у своє vimrc. Потім перейдіть в початок другого рядка файлу і потрапляння Space, Enterабо йти до кінця першого рядка і хіта Shift+Space, Enter. Або ви додасте порожній рядок між першим та другим рядками та залиште вас у звичайному режимі.

Ви також можете використовувати їх для будь-якого іншого клавіші - натисніть Spaceабо Shift+Spaceслідуйте за потрібною клавішею, і вона вставить або додає відповідно.


2

Ці відображення будуть робити саме те, що ви шукаєте.

nnoremap <c-n> @="m`o\eg``"<cr>
nnoremap <c-p> @="m`O\eg``"<cr>   

Вони вставляють n кількість нових рядків до або після курсору; утримуючи курсор саме там, де він є, не змінюючи список переходів.

Ще одне рішення - просто зробити ярлик, який заповнює неназваний реєстр новим рядком. Тоді ви можете просто використовувати команди put, p або P, щоб вставити нові рядки. Наприклад:

nnoremap "<cr> :let @@="\n"<cr>

1

Моє відображення для цього

 " Create Blank Newlines and stay in Normal mode
nnoremap <silent> zj o<Esc>k
nnoremap <silent> zk O<Esc>j

Відмінна від статистики статокс тим, що він зберігає курсор у тому самому місці.


що <silent>означає?
Олексій

Це заважає повторювати щось у рядку статусу. Я впевнений, що це нічого не робить у цьому конкретному випадку, воно було там, звідки я його спочатку копіював, давно. Див :h map-silent.
Кевін

-1

Моє особисте рішення вставляє символ нового рядка в реєстр виразів і вставляє його після поточного рядка, після чого відскакує назад у вихідне положення:

nnoremap K m`"="\n"<CR>p``
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.