Powiedzmy, że chcę utworzyć następujący tekst w moim dokumencie:
%
% Not Important
% O ------------------------->
% |
% S |
% o |
% m |
% e |
% |
% M |
% s |
% g |
% |
% V
Czy jest jakiś prosty sposób na napisanie „Some Msg” w pionie, jak powyżej, bez konieczności ręcznego wstawiania każdego znaku w każdym wierszu?
insert-mode
formatting
Allan Hasegawa
źródło
źródło
:s/./% \0\r/
dodać%
i nowe wiersze ... Nie jest to jednak świetne rozwiązanie ...Odpowiedzi:
Naprawdę dobre rozwiązanie prawdopodobnie wymagałoby nieco więcej pracy, ale „niezłe” nie jest bardzo trudne do osiągnięcia.
Pomysł
Wystarczy przesunąć jedną linię w dół po każdej postaci, więc zróbmy to tylko za pomocą
InsertCharPre
automatycznego polecenia!Kod
Umieść go
.vimrc
lub jeszcze lepiej w jakimś pliku wplugin/
katalogu.Stosowanie
Wpisz
:Vert
polecenie, aby rozpocząć pisanie w pionie. Opuszczenie trybu wstawiania automatycznie wyłącza ten „tryb”. Oczywiście możesz zamapować go na skrót, jeśli często używasz tego polecenia.Znane problemy
InsertLeave
zdarzenia, które nie jest uruchamiane; w związku z tym należy zachować ostrożność przy użyciu klawisza).źródło
<C-C>
.InsertLeave
nie jest uruchamiany dla tego klucza.<C-C>
jako dobrego sposobu na wyjście z trybu wstawiania. Sposób, w jaki wspomniałeś, może sugerować, że czasami jest to dobra metoda. To tak jakby powiedzieć „Zastrzeżenie: twój dokument nie zostanie zapisany, jeśli zamkniesz Microsoft Word przez odłączenie komputera”.<C-C>
przyczynie problemu. Nie znam innej metody opuszczania trybu wstawiania, która tłumi rozwijanie skrótów, ponieważ<C-C>
jeśli nie, jest przydatna przynajmniej jako część odwzorowaniainoremap <silent> <c-c> <c-c>:doautocmd InsertLeave<cr>
.<C-C>
opuszczanie trybu wstawiania bez rozwijania skrótów i nie ma wzmianki o tym, jak nie wyzwalaInsertLeave
zdarzeń. Jestem teraz ciekawy, czy istnieje wbudowany sposób, aby to zrobić, ale na razie mapowanie to świetny pomysł.Możesz pisać jak zwykle, a następnie przekonwertować bieżący tekst poziomy na pionowy, używając podstawiania w Vimie w następujący sposób (dotyczy bieżącej linii):
Lub znacznie łatwiejszą do zapamiętania metodą jest wykonanie jednego z następujących poleceń (dla wszystkich wierszy):
Aby zastosować tylko do bieżącej linii lub większej liczby linii, poprzedzaj ją V, w razie potrzeby rozwiń obszar dla większej liczby linii i wykonaj powyżej (ale bez
%
).W przypadku programu PowerShell w systemie Windows sprawdź zastąpienie fold .
Aby zdefiniować proste mapowanie klawiszy (np. F2), Spróbuj wykonać następujące czynności:
Następnie wpisz coś i naciśnij, F2aby tekst był pionowy, tak prosty.
Inną alternatywą jest ustawienie automatycznego zawijania słów, np
Spowoduje to automatyczne zawinięcie tekstu tak blisko 1 znaku, jak pozwala na to spacja. Wadą jest to, że po każdej literze musi znajdować się spacja (więc jest prawie taka sama, jak w przypadku naciśnięciaEnter
źródło
:s/\(.\)/\1\r/g
możesz użyć tego,:s/./\0\r/g
który jest funkcjonalnie identyczny.Uważam, że makra to świetny sposób na robienie niezwykłych rzeczy, jeśli jesteś zainteresowany zrobieniem tego nie więcej niż raz na niebieskim księżycu. Powiedzmy, że masz następującą tabelę:
I powiedzmy, że chcesz zamienić
Some Msg
zOther Message
. Po pierwsze, powiększmy tabelę o dodatkowy znak (wiersz przed ostatnimyy5p
:Makro, które zamierzam wymyślić, zajmie się konwertowaniem tekstu z poziomego na pionowy, zastępując jednocześnie stary tekst. Zacznij od wpisania tekstu w pierwszej lokalizacji (kursor znajduje się na końcu
Other Message
):Zapisz następujące makro:
qq
: rozpocznij rejestrowanie makra o nazwieq
^
: przejdź do początku linii3l
: przejdź do kolumny, w której ma zostać umieszczony tekstx
: usuń stary znakl
: przesuń w prawo, pozostawiając jeden znak z wiadomości zamiast starego znaku:v
: przejdź do trybu wizualnegof|
: Skocz do|
2h
: cofnij dwie postacied
: cięcie zaznaczeniaj
: padnijP
: wklej przed kursoremq
: zakończ nagrywanie makraW tym momencie masz:
Powtórz makro tyle razy (tj. Liczbę znaków, ale nie musisz go znać wcześniej. Po prostu nie doceniaj i kontynuuj, gdy zobaczysz, jak blisko była twoja ocena). Więc chodźmy
10@q
. Dostajesz:Ok, jeszcze jeden (
@q
):Twój kursor jest teraz na ostatnim
e
. Makro nie działa dobrze z ostatnią literą (możesz spróbować z,@q
a następnieu
(cofnąć), aby uzyskać niezadowalające wyniki). Po prostu dostosuj to sam (X
dla backspace).źródło
qq03lxldt|i ^[jPxq@q