Blokuj edycję * na żywo * w Emacsie lub Vimie

9

jEdit obsługuje edycję blokową, ale Emacs i Vim wydają się mieć poważne problemy z użytecznością tego samego tematu. Gdyby ktoś mógł tutaj wpisać niewiadome, o wiele bardziej znośne byłoby użycie dowolnego edytora:

  • Rzeczywisty wybór prostokątny : gdzie wybór na ekranie jest prostokątem, a nie wyborem liniowym, który jest następnie używany do obliczania regionu, do którego Emacs wydaje się ograniczony.
    • jEdycja: przytrzymaj Ctrli wybierz.
    • Vim: kliknij Ctrl-vi wybierz.
    • Emacs: Nieznany ; wygląda na to, że potrzebna jest wtyczka 400+ linii .
  • Edycja prostokątna na żywo : zobacz, jak będzie wyglądał wynik na wszystkich liniach podczas edycji po zaznaczeniu bloku.
    • jEdit: Po prostu zacznij pisać, a zobaczysz wynik końcowy.
    • Vim: Kliknij Shift-ii wpisz. Wyświetli wynik końcowy tylko w pierwszym wierszu, dopóki nie naciśniesz, Escaby wyjść z trybu wstawiania. Nie wiadomo, czy jest jakiś sposób, aby natychmiast zobaczyć wynik we wszystkich liniach.
    • Emacs: Nieznany ; wygląda na to, że jedynym sposobem jest C-x r tustawienie tekstu do wypełnienia po naciśnięciu Ret.
  • Początek i koniec zaznaczenia w pozycjach poza tekstem : Na przykład chciałbym usunąć N pierwszych znaków każdego wiersza, ale pierwszy i ostatni wiersz zawierają mniej niż N znaków.
  • Wklej blok w wierszu : wklej skopiowany blok tak, jakbyś wklejał wiele wierszy, np. Wciśnij tekst już tam w dół , a nie w prawo.
    • jEdit: domyślnie. Aby wkleić blok jako blok, musisz najpierw wybrać inny blok.
    • Vim: OEscVp.
    • Emacs: Nieznany .

Ogólne funkcje wyboru bloku Emacsa można znaleźć we cua-modewtyczce .

l0b0
źródło
Najwyraźniej tryb edycji kolumn Emacsa może przeprowadzić edycję prostokątów na żywo: youtube.com/watch?v=k-6BVjlBSVo
Tom
Tylko spostrzeżenie o emacsie 400+ linii „plugin”. Nieco podobny dodatek do gedit, zwany multi-edit, ma ponad 1000 linii kodu python. Dla mnie pugin jest tak przydatny (jak przetrwałem bez niego), rozmiar jest akademicki ... a jeśli emacs jeden działa zgodnie z reklamą, chętnie go użyję, ale mam błąd ładowania kiedy go uruchomiłem "linia-normalizująca-nazwa-pliku: Argumenty spoza zakresu:" ", 1" :( ... Tego też szukałem ...
Peter.O
4
Dla tych, którzy nie korzystali z jEdita, wyjaśnij swoją terminologię. Nie rozumiem, co oznacza tutaj „na żywo”, co to jest „edycja prostokątna na żywo” ani co oznacza „wklej blok w wierszu”.
Gilles „SO- przestań być zły”

Odpowiedzi:

7

Mogę odpowiadać za Vima, ale nie za Emacsa.

Rozpocznij i zakończ zaznaczenie w pozycjach poza tekstem:

:set virtualedit=blockumożliwi zachowanie, które chcesz. Możesz upuścić początkowy dwukropek i dodać go do .vimrc, jeśli chcesz. Aby uzyskać więcej informacji, :help 'virtualedit'z poziomu Vima.

Wklej blok w wierszu:

Jeśli po prostu naciśniesz pw trybie poleceń, Vim wstawi blok, popychając znaki w prawo w każdej linii. Jeśli wybierzesz inny blok i uderzysz p, Vim zastąpi ten blok wklejonym blokiem.

Możesz wkleić blok „linewise” za pomocą sekwencji klawiszy trybu poleceń OEscVp. To wstawia linię powyżej bieżącej linii ( O Esc), wybiera ją linewise ( V), a następnie wkleja nad nią ( p). Można to skrócić do (na przykład) ypza pomocą mapowania, takiego jak :nmap yp O<Esc>Vp- typ, który dosłownie; użyj pięciu kombinacji klawiszy <Esc>zamiast naciskać klawisz Escape.

Jander
źródło
Dobra wskazówka virtualedit; muszę tego spróbować. Informacje na temat wklejania wbudowanego można znaleźć w zaktualizowanym pytaniu opisującym oczekiwaną funkcjonalność.
l0b0
Zaktualizowałem swoją odpowiedź metodą wklejania bloków wzdłuż linii.
Jander
5

Na przykład chciałbym usunąć N pierwszych znaków każdego wiersza, ale pierwszy i ostatni wiersz zawierają mniej niż N znaków.

Emacs: rozpocznij zaznaczenie w pierwszym wierszu i po prostu dodaj brakującą liczbę znaków (np. Spacje) do ostatniego wiersza, a następnie użyj prostokąta

Ewentualnie zobacz artist-modelub, picture-modektóre pozwalają ci swobodnie poruszać się w oknie, niezależnie od długości linii.

Wklej blok w linii

Emacs: Najpierw zapisz blok albo zabijając prostokąt lub zapisując go do rejestru, a następnie przejdź do punktu wstawiania, użyj delete-prostokąt, a następnie wstaw zapisany prostokąt.

wygląda na to, że potrzebna jest wtyczka 400+ linii

W przypadku Emacsa, dlaczego jest to problem? Wtyczkę można skompilować, a filozofią emacsa jest to, że nie wkładasz wszystkiego do rdzenia, ale używasz wtyczek do rozszerzenia edytora.

Tomek
źródło
4

Istnieje „tryb cua”, który jest dostarczany z Emacsen 22.1 i nowszymi, lub kliknij link, aby pobrać wcześniejsze wersje Emacsa. Jest to krótki film , który wprowadza funkcjonalność.

W przypadku ogólnych poleceń prostokąta spróbuj przeczytać instrukcję , która zapewnia łatwe wprowadzenie.

Trey Jackson
źródło
emacs cua-modewygląda dobrze! +1 .. Nie mogłem znaleźć filmu, o którym wspominałeś, zobacz link Toma w komentarzach bezpośrednio pod pytaniem, aby uzyskać link do (innego?)
Filmu
@fered Ups, błąd wycinania / wklejania, naprawiony.
Trey Jackson,
0

W vim typowym sposobem na usunięcie pierwszych n znaków jest zrobienie czegoś takiego :%s/.\{0,6\}//.

%zrobi cały dokument; możesz zastąpić to zaznaczeniem lub liniami, na których ci zależy. sKomenda jest „substytutem”. Zastąpi wyrażenie regularne tym, co mu podasz, i będzie pasować tylko raz w każdej linii, chyba że dodasz konkretną opcję. /Jest separator - może to być dowolny znak, ale /zazwyczaj jest stosowana, chyba że korzystne jest użycie czegoś innego (tak, nie trzeba uciekać /w pozostałej części polecenia). Argument po pierwszym separatorze jest wyrażeniem regularnym, które będzie użyte do znalezienia pasujących ciągów w twoim wyborze. Argument po drugim separatorze jest tym, co zostanie zastąpione dopasowaniem.

To polecenie mówi: znajdź od 0 do 6 wystąpień dowolnej postaci i zastąp je niczym.

Shawn J. Goff
źródło
Nie o to prosiłem.
l0b0
Ale czy uważasz, że nie jest to przydatne dla innych osób, które znajdą to pytanie? Myślę, że tak i dlatego umieściłem to tutaj.
Shawn J. Goff