Czy jest możliwe wstawienie końca linii, gdy kursor jest w Vimie bez wchodzenia w tryb wstawiania? Oto przykład ( [x]
oznacza, że kursor jest włączony x
):
if (some_condition) {[ ]return; }
Czasami mogę chcieć wprowadzić więcej kodu. Więc naciskałem, iaby przejść do trybu wstawiania, naciśnij, Enteraby wstawić podział wiersza, a następnie usuwałbym dodatkową spację. Następnie wchodzę w tryb normalny i umieszczam kursor przed nawiasem zamykającym, a następnie robię to samo, aby umieścić go we własnym wierszu.
Robię to od jakiegoś czasu, ale na pewno jest na to lepszy sposób?
vim
performance
text-editor
Mark A. Nicolosi
źródło
źródło
Odpowiedzi:
W podanym przykładzie możesz użyć rEnterdo zastąpienia pojedynczego znaku (spacji) klawiszem Enter. Następnie,fspace. aby przejść do następnego miejsca i powtórzyć ostatnie polecenie.
W zależności od ustawień automatycznego wcięcia powyższe może, ale nie musi, powodować wcięcie instrukcji return. Jeśli nie, użyj sEnterTabEsczamiast tego, aby zastąpić spację nowym wierszem, wciąć wiersz i wyjść z trybu wstawiania. Musiałbyś zastąpić drugą spację innym poleceniem, więc nie możesz użyć znaku „.” w tym przypadku.
źródło
>>
i,<<
aby pomóc w tworzeniu wcięć, jeśli nie chcesz przejść do trybu wstawiania zs
.Oto jak utworzyć makro, które wstawia nową linię w miejscu kursora, gdy naciśniesz „g”, gdy nie w trybie wstawiania:
Z poziomu Vima wpisz:
Gdzie:
U dołu okna vim zobaczysz następujące informacje, dopóki nie naciśniesz ostatniego Enter:
Wyjaśnienie:
[Ctrl + V] oznacza „zacytować następujący znak” - pozwala na osadzenie nowej linii i znaków ucieczki w poleceniu.
Więc mapujesz klawisz „g” do sekwencji:
To jest vim do wstawiania nowej linii przed kursorem, a następnie wychodzenia z trybu wstawiania .
Poprawki:
f}i^M^[O
- to będzie f ind } a ja nsert kolejny przełamane, a następnie uciec z trybu wstawiania i O pióro pusty wiersz, aby wprowadzić więcej kodu.Cieszyć się!
źródło
Proste mapowanie do przerwania linii przy kursorze przez naciśnięcie Ctrl + Enter:
zasadniczo wchodzi w tryb „wstawiania”, wstawia podział wiersza i wraca do trybu normalnego.
umieść go w swoim pliku .vimrc do wykorzystania w przyszłości.
źródło
Jeśli zwykle rozbudowujesz blok z jednej linii do trzech, spróbuj podstawić. Zmień nawias otwierający na powrót / powrót, a nawias zamykający na powrót / nawias.
Polecenie zastępowania nawiasu / powrotu nawiasem wygląda następująco:
Ponieważ chcesz tego często używać, możesz odwzorować pełną sekwencję na nieużywane naciśnięcie klawisza w następujący sposób:
Tam, gdzie zobaczysz ^ M w sekwencji, wpisz [Ctrl-V] , a następnie naciśnij enter .
Teraz, gdy kursor znajduje się w dowolnym miejscu linii próbnej, naciśnij klawisz mapowania, a znaki powrotu karetki zostaną dodane.
Sprawdź
:help map-which-keys
porady dotyczące wybierania nieużywanych skrótów klawiszowych do mapowania.źródło
g
nie jest mapowany, ponieważ jest używany jako klucz 'przestrzeni nazw' dla wielu mapowań vima składający się z dwóch naciśnięć klawiszy (zobacz:h g
). Więc to mapowanie nie jest możliwe.g
jest już używany jako klucz „przestrzeni nazw”?:help g
jest jednym ze sposobów wyświetlenia listy domyślnychg
+ mapowań.z
,[
]
to kolejne klucze „przestrzeni nazw”, patrz np:help index
. Możesz wywołać,:verbose map g
aby zobaczyć wszystkie aktualnie zdefiniowane mapowania zaczynające się od g. Pomocne zasoby internetowe to viemu.com/vi-vim-cheat-sheet.gif , vimcasts.org/blog/2014/02/follow-my-leader , vimeo.com/85343734 (slajdy: speakerdeck.com/nelstrom/follow-my -leader )Zakładając, że nie przeszkadza ci mapowanie
K
na coś innego (wybierz inny klucz, który ci się podoba) i użycie markera'
jako tymczasowego znacznika jest w porządku, dlaczego tego nie zrobić?teraz naciśnięcie K w trybie normalnym nad znakiem, po którym ma nastąpić podział wiersza, spowoduje podzielenie wiersza i pozostawienie kursora w miejscu, w którym się znajdował.
źródło
Vim automatycznie zabije każdą białą spację na prawo od kursora, jeśli złamiesz linię na pół, gdy
autoindent
(lub jakakolwiek inna pomoc przy wcięciach) jest włączona.Jeśli nie chcesz korzystać z żadnej z tych ustawień, użyj
s
zamiasti
w celu s ubstitute nowy tekst do wykroju, a nie tylko włożenie. (Jeśli jest wiele spacji, umieść kursor na skrajnej lewej stronie i użyjcw
zamiast tego).źródło
Zasadniczo, kiedy dzielisz wiersz, chcesz po prostu wstawić powrót karetki lub w przypadku, gdy jesteś w spacji, zamień go na powrót karetki. Cóż, po co zadowalać się jednym lub drugim? Oto moje mapowanie dla K:
Używam operatora trójargumentowego, aby skondensować te dwie akcje w jedną kluczową mapę. Rozbicie go
<expr>
oznacza, że wyjście mapy klawiszy może być dynamiczne iw tym przypadku zależy od warunku,getline('.')[col('.')-1]==' '
który jest długim sposobem zapytania vima, czy znak pod kursorem jest spacją. Wreszcie, znany operator trójskładnikowy? :
zastępuje spacjęr<CR>
znakiem przełamania wiersza ( ) lub wstawia nowy (i<CR><Esc>
)Teraz masz piękną siostrzaną mapę klawiszy do
J
polecenia.źródło
Ustaw to mapowanie kluczy w swoim vimrc
Następnie naciśnij Ctrl + m, jeśli chcesz go użyć w swoim vimie.
źródło
IMHO, wbudowane mapowanie
gs
nie jest użytecznym mapowaniem (uśpij vima), można by użyć tego do rozdzielenia:źródło
W Vrapper możesz użyć gql, który podzieli linię bez wchodzenia w tryb wstawiania, ale może nie zawsze zachować wcięcia.
źródło
W rzeczywistości potrzebujesz następujących połączonych operacji:
:
aby wejść w tryb poleceńs/\s/\r/g
źródło
Jeśli masz dane wejściowe:
i chcesz drukować
Możesz użyć polecenia
źródło
Okazało się, że jest to najwierniejsza realizacja tego, czego oczekiwałbym od przeciwnego zachowania
J
Wykonuje uproszczoną nową linię w miejscu kursora, zajmuje się wszelkimi końcowymi spacjami w poprzedniej linii, jeśli są jakieś, a następnie przywraca kursor do właściwej pozycji.
i <cr> <esc> - jest to jedno z najczęściej sugerowanych rozwiązań, nie usuwa znaków niebędących spacjami pod kursorem, ale pozostawia również końcowe spacje
^mw - idź do początku nowej linii i stwórz znak pod
w
gk - przejdź o jedną linię w górę
:silent! s/\v +$//<cr> - regex zamień wszystkie białe znaki na końcu linii
:noh<cr> - Usuń zaznaczenie wyszukiwania, które mogło być włączone przez wyrażenie regularne
`w - zwróć znak pod
w
Zasadniczo łączy w sobie to, co najlepsze z obu r<esc><cr>ii<cr><esc>
Uwaga: mam to powiązanie, Sktóre potencjalnie zastępuje przydatny klucz, ale jest to synonim, cca ponieważ nie używam go tak często, jak dzielę, mogę go zastąpić.
źródło
o
ESC
polecenie zrobi to za Ciebie.źródło
To mapowanie rozbije każdą posiadaną funkcję jednowierszową. Po prostu umieść kursor na linii i naciśnij „g” w trybie normalnym:
Zakłada się, że masz spację po nawiasie otwierającym i spację przed nawiasem zamykającym. Sprawdź, czy to działa dla Ciebie.
źródło