Normal moddan çıkmadan yeni satır nasıl eklenir


24

Acaba normal moddan çıkmadan yeni bir hat ekleyip ekleyemeyeceğim. Örneğin, iki satırım var:

this is line one
this is line two

Ve imleç birinci satırda. Şimdi birinci satır ile ikinci satır arasında yeni bir satır istiyorum, şöyle:

this is line one

this is line two

Normal moddayken sadece basabileceğimi biliyorum o. Ancak bu ekleme moduna girer.

Nasıl yeni bir satır ekleyebilir ve normal modda kalabilirim?


Yanıtlar:


10

Bunun için bir eşleme kullanıyorum:

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

Bu şekilde imlecinizin altına bir satır <Leader>ove bir önceki satıra bir satır ekleyebilirsiniz <Leader>O.

Not: Bunun kadar çok tuşa basması gerektiği söylenebilir, o<Esc>ancak umarım bu tür bir haritalamayı kolaylaştırmak için liderinizi seçtiniz. Ayrıca bunu yapmanın yerleşik bir yolu olduğundan emin değilim.


8

Ekleme modundan geçmeyen bir çözüm, imleci hareket ettirmez ve aynı anda birden fazla satır ( 3\ovb.) Eklemek için bir sayaç kullanmanıza izin verir :

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>

5

Şahsen Tim Pope'nin Unimpaired eklentisini kullanmanızı tavsiye ederim . Birçok eşleme sağlar, ancak arayacağınız [<space>ve ]<space>sırasıyla geçerli satırın üstünde ve altında boş satırlar oluşturur. Unimpaired ayrıca, hızlı düzeltme listesi, arabellek listesi, seçenek değiştirme ve diğer pek çok şey arasında geçiş yapmak için güzel eşlemeler sağlar. Daha fazlası :h unimpairediçin bakınız .

Eşlenmemiş eklentiyi kullanmak istemiyorsanız, ancak aşağıdaki eşlemeler gibi, ~/.vimrcdosyanızı koymak için bazı hızlı eşleştirmeler varsa :

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

5

Eşleme eklemek istemiyorsanız, yyboş bir satır çekip pimlecin altına ve imlecin Püstüne yapıştırılabilir .


Bu muhtemelen haritalama olmadan en iyi cevaptır.
Willem van Ketwich

Veya oile kayıt defterine kaydedin "oyyve gerektiğinde yapıştırın "op.
mike23

4

Haritalama kullanıyorum Shift-Enter. İmlecin o işareti kullanılarak aynı satıra ve sütuna döndürülmesi diğerlerinden farklıdır .

" 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>Eşlemenin terminal öykünücülerinde çalışmadığını unutmayın (yalnızca gVim'de çalışır). Yani ;-)
Martin Tournoij

2

Maxim Kim'in bu yanıtı hayat değiştiriyordu:

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

ve benim rifim:

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

Bu çizgileri senin içine koy vimrc. Ardından dosyanızın ve isabet ikinci satırın başına gitmek Space, Enterya da birinci hat ve hit sonuna gitmek Shift+Space, Enter. Ya birinci ve ikinci satırlar arasına boş satır ekler ve sizi normal modda bırakır.

Bunları başka herhangi bir tek tuş için de kullanabilirsiniz - vurmak Spaceveya Shift+Spaceardından istediğiniz tuşa basarsanız, sırasıyla ekler veya ekler.


2

Bu eşlemeler tam olarak aradığınızı yapar.

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

Bunlar, imlecin önüne veya arkasına n yeni satır ekler; atlama listesini değiştirmeden imleci tam olarak bulunduğu yerde tutun.

Başka bir çözüm, isimsiz kaydı bir satırsonu ile dolduran bir kısayol yapmaktır. Ardından satır satırları eklemek için put komutlarını, p veya P tuşunu kullanabilirsiniz. Örneğin:

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

1

Bunun için eşlemem

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

Statokstan farklı olarak, imleci aynı konumda tutar.


ne <silent>demek
Alex

Durum satırına herhangi bir şey yankılanmasını önler. Bu özel durumda hiçbir şey yapmadığından eminim, uzun zaman önce nereden kopyaladığım her yerde vardı. Bkz :h map-silent.
Kevin

-1

Kişisel çözümüm , ifade kaydına yeni satır karakteri yapıştırıyor ve geçerli satırdan sonra yapıştırıyor, sonra orijinal konumuna geri atlıyor:

nnoremap K m`"="\n"<CR>p``
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.