2013-04-21 21 views
35

chcę wstawić nowe linie w trybie normalnym w vim za pomocą Shift-Enter i Ctrl-Enter. Staram pewne rozwiązania i rozwiązania miksowaniem Vim Wikia - Insert newline without entering insert mode ale Shift-Enter i Ctrl-Enter nie odpowiedział:Wstawianie nowej linii bez wchodzenia w trybie wstawiania, vim

" put a new line before or after to this line 
nnoremap <S-CR> m`o<Esc>`` 
nnoremap <C-CR> m`O<Esc>`` 

" reverse J command 
nnoremap <C-J> vaW<Esc>Bi<CR><Esc>k:s/\s\+$//<CR>$ 
+0

Jaki jest Twój "$ TERM" (jeśli * nix)? – timss

+0

'echo $ TERM' ->' xterm' Dlaczego? – helq

+0

Może być istotne znaczenie interpretacji klawiszy. Czy używasz ekranu lub tmux? Biorąc to pod uwagę, próbowałem kilka alternatyw, i to działa tylko dla 'map o ' tutaj. – timss

Odpowiedz

7

Ze względu na sposób, że klawiatura jest obsługiwany wewnętrznie, to niestety nie jest ogólnie możliwe dzisiaj. (Ten szczególny przypadek powinien pracować w gVim, choć.) Niektóre kombinacje klawiszy, jak Ctrl + niealfabetyczne nie może być odwzorowany i Ctrl + list vs. Ctrl + Przesunięcie + list nie można odróżnić. (O ile twój terminal nie wysyła wyraźnego kodu termcap, który w większości nie działa). W trybie wstawiania lub wiersza poleceń spróbuj wpisać kombinację klawiszy. Jeśli nic się nie dzieje/jest wstawiane, nie możesz użyć tej kombinacji klawiszy. Odnosi się to również do <Tab>/<C-I>, <CR>/<C-M>/<Esc>/<C-[> itd. (Jedynym wyjątkiem jest <BS>/<C-H>). Jest to znany punkt ból, a przedmiotem wielu dyskusji na vim_dev i kanału #vim IRC.

Niektórzy ludzie (przede wszystkim Paul LeoNerd Evans) chcą to naprawić (nawet na konsolę Vima w terminalach, które to obsługują) i przepłynęli various proposals.

Jednak od dzisiaj nie pojawiły się żadne łaty ani ochotnicy, chociaż wielu wyraziło chęć posiadania tego w przyszłym wydaniu Vima 8.

+0

wydaje się niezręczny i dziwny, dzięki za wyjaśnienie – helq

+0

To głównie z przyczyn historycznych, ale niestety dość trudne do zmiany. –

39

My alternatywą jest użycie oo włożyć nową linię pod prąd przepływający tego odwzorowania (odpowiednio OO.) (Odpowiednio, przez.) nmap oo o<Esc>k (. Odpowiednio nmap OO O<Esc>j)

+0

Świetna odpowiedź. Po prostu "o" działa i przechodzi do trybu wstawiania. Dzięki – jpincheira

+0

To, co przeszkadzało mi najbardziej przy innych odpowiedziach, było skrótem. Ta faworyzuje moje preferencje. – Canella

+0

Zrobiłem ** nmap o k ** ponieważ Shift + J usuwa znak nowej linii. – Mo2

1

używać: s/\ n/\ r \ r/g (dodaj nową linię z dwoma znakami nowej linii, która jest taka sama jak "o").

+0

potrzebne dla tego przykuty cabbrev – zzapper

1

To co mam użyć:

nmap <CR> :a<CR><CR>.<CR> 

Próbowałem nmap <CR> o<Esc>, ale to sprawiło UI glitchy jak to było przejście do trybu wstawiania iz powrotem.

-2

Możesz użyć hacka, aby to zrobić.

W trybie edycji można użyć p, aby wkleić bieżący schowek. Od o dodaje znak nowej linii, można użyć o<ESC>ddp, aby dodać nową linię pod kursorem; stamtąd p doda nową linię, dopóki nie usuniesz czegoś innego.