vi / vim abrumpt ruchy bufora w oknie

11

Podczas korzystania :set wrapz vi / vim zawartość całej owiniętej linii jest umieszczana w buforze wyświetlania po przeniesieniu kursora do nowej linii, nawet podczas nawigacji po pliku przez linię wyświetlania (gj / gk) w przeciwieństwie do linii rzeczywistej (j / k). Na przykład, jeśli linia jest owinięta ponad 5 liniami ekranu i obecnie znajduje się poza buforem wyświetlacza, bufor przeskoczy o 5 linii podczas nawigacji do tej linii, aby wymusić dopasowanie całej linii na ekranie. Czy istnieje sposób na wyłączenie tego zachowania? Zauważ, że set display+=lastlinepozwoli na wyświetlenie częściowych linii, gdy owinięta linia zostanie wypchnięta z ekranu poprzez nawigację od linii, ale to nie rozwiąże przeskoków bufora, które występują podczas nawigacji do linii, która początkowo znajdowała się poza buforem.

Wyjaśnienie: W przypadku, gdy powyższy opis jest mglisty, chodzi przede wszystkim o to, że chciałbym móc płynnie przewijać w vimie z włączonym zawijaniem linii, tak aby linie były częściowo wyświetlane poza ekranem, a nie obligatoryjnie wyświetlane w całości.

użytkownik001
źródło
1
Czy możesz potwierdzić, że masz na myśli: chcesz, aby część zawiniętej części linii była poza wyświetlaniem i była w stanie płynnie przewijać? Vim pokazuje linie całkowicie, kiedy 'wrap'jest włączony, obawiam się
Benoit
Dokładnie. Rozumiem, że nie ma sposobu, aby pominąć to zachowanie pokazujące zawinięte linie w całości podczas przewijania? Dziękuję Ci.
user001
1
Nie to co wiem. Poczekaj na odpowiedzi, nikt nie wie, co potrafi Vim.
Benoit,
1
zgadzam się z @Benoit. O ile mi wiadomo, nie jest to możliwe.
Fredrik Pihl,
1
Obecnie trwa dyskusja na liście mailingowej vim_dev na ten temat. Wygląda na to, że nie tylko ty masz tę prośbę.
Randy Morris,

Odpowiedzi:

1

Nie jest to kompletna odpowiedź, ale może trop. Jest scrollopcja. Pomoc dla tej opcji brzmi między innymi:

{Vi jest trochę inna: „przewijanie” podaje liczbę linii ekranu zamiast linii pliku, robi różnicę, gdy linie się zawijają}

thebodzio
źródło
Dzięki, to jest pomocne. Kombinacje klawiszy <Ctrl-E> (w dół) i <Ctrl-Y> (w górę) dają podstawowe zachowanie, którego chcę. Jeśli istnieje sposób na wykrycie, czy kursor znajduje się w górnej lub dolnej linii okna, wówczas rozwiązanie tymczasowe wymagałoby warunkowego mapowania klawiszy strzałek w górę i w dół na <Ctrl-Y> gk i <Ctrl-E> gj, odpowiednio. Gdy kursor nie znajduje się w górnej lub dolnej linii okna, konieczne jest mapowanie ich na gk i gj (instrukcja else w warunkowym). Czy istnieje prosty sposób na wykrycie, czy kursor znajduje się w górnej czy dolnej linii bieżącego okna?
user001
0

w trybie normalnym możesz przeskakiwać między wyświetlanymi częściami owiniętej linii za pomocą gki gj( g<up>lub g<down>). Ta strona vim wyjaśnia, jak trwale zmienić zachowanie.

jpjacobs
źródło
1
Oczywiście i odwzorowałem te zachowania na klawisze strzałek kierunkowych. Różni się to jednak od obowiązkowego wyświetlania całej owiniętej linii po przejściu do tej linii. To zachowanie jest niezależne od użycia gj / gk lub j / k. Chciałbym móc częściowo nawigować do linii, która początkowo jest poza buforem (poza ekranem) bez wyświetlania całej owiniętej linii.
user001
OK, więc źle zrozumiałem. Cóż, myślę, że twoja linia jest albo owinięta, albo nie. To, czego chcesz, to coś pośredniego, ale myślę, że to po prostu niemożliwe.
jpjacobs,