vi linia poleceń, linia i kolumna goto

17

Długo mieszam użycie emacsi vi( vim). Każdy z nich ma swoją przewagę. Analizuję dane wyjściowe błędu z procesu takiego jak kompilacja i uzyskuję numer wiersza i kolumny, ale mogę użyć tylko emacsdo bezpośredniego przejścia do wiersza i kolumny:

emacs +15:25 myfile.xml

z vimam tylko numer linii (zgodnie ze stroną podręcznika)

vi +15 myfile.xml

Istnieje opcja przejścia kursora pozycji na wzorzec ( vi +/pattern myfile.xml), którego nigdy nie dostałem do pracy. Ale to by mi nie pomogło, ponieważ wzorzec nie zawsze jest pierwszym wystąpieniem w pliku.

Jak mogę rozpocząć, viaby przejść do kolumny 25 w wierszu 15 mojego pliku? Czy mogę zrobić coś z -copcją?

Dominique
źródło
3
Ponieważ oznaczone vim, masz uważany za quickfixsystem, który działa kompilator od wewnątrz vim, analizuje wyjście błędu, zapełnia się lista błędów (nawigować :cp, :cn, :clpolecenia) i ustawia kursor na pierwszej?
Random832,
Jeśli otworzysz plik w vi i wpiszesz :15go, przejdzie do wiersza 15 .. Mam nadzieję, że to ci pomoże
kod ninja

Odpowiedzi:

17

Możesz użyć:

vi '+normal 15G25|'  myfile.xml
Christa
źródło
2
wyjaśnienie: większość poleceń (tj. większość liter) w vi może być poprzedzona liczbą (lub zakresem), aby zmienić domyślne zachowanie lub powtórzyć (lub zastosować w określonym zakresie). W vi, w trybie komend, możesz 15Gprzejść do linii 15 i 25|do kolumny 25. A Christa pokazuje, jak to zrobić z linii poleceń.
Olivier Dulac,
7

Za pomocą wtyczki linii pliku możesz po prostu dołączyć linię i kolumnę do nazwy pliku, zarówno podczas wywoływania Vima, jak i wewnątrz za pomocą poleceń takich jak :edit:

vim myfile.xml:15:25
Ingo Karkat
źródło
Dobrze wiedzieć, że istnieją, ale myślę, że użyję odpowiedzi, która nie wymaga dodatkowej wtyczki
Dominique
@Dominique Możesz również vim myfile.xml +15dla wiersza bez wtyczki, ale o ile wiem, nie kolumny
Izkata
5

dla zabawy jest taka, -c 'normal 14j24l'która umieści cię w linii 15 znak 25

Hildred
źródło
4

Nie wiem o tej -copcji, ale powinieneś być w stanie zrobić:

vi '+cal cursor(15,25)' myfile.xml

(pamiętaj, aby zacytować z powodu nawiasu ())

Anthon
źródło
cursor()używa indeksu bajtów dla kolumny, ale zwykle jest to liczba znaków.
Ingo Karkat,
@IngoKarkat Czy to naprawdę ma znaczenie? Tekst to UTF-8.
Dominique,
2
Ma to znaczenie dla znaków spoza ASCII, które są reprezentowane przez więcej niż jeden bajt. Ponadto znaki tabulacji i kontrolne zwykle zajmują więcej niż jedną kolumnę wyświetlacza.
Ingo Karkat,
2

Warto zauważyć:

-c command 

Uruchom podane polecenie ex przy uruchomieniu. Dla vi dozwolona jest tylko jedna opcja -c ; Vim akceptuje do 10. Starsza forma tej opcji +command, jest nadal obsługiwana.

+commandMa ten sam pojedynczy ex commandograniczenia przy stosowaniu vi.

+/patternJest również ograniczona do jednego polecenia z vi.

(pochodzi z vima i byłego edytora )

Bee Kay
źródło
1

Możesz dodać następujący kod do swojego vimrc. Kiedy wrócisz do pliku, vim automatycznie wróci do starej pozycji:

if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
Zatoka Perska
źródło