Jak wybrać kolumnę, a następnie edytować w GNU Emacs?

15

Używam ViM, TextMate i GNU Emacs od lat.

Na przykład tutaj jest tekst, który chcę edytować

foo
foo
foo

A oto wynik, który chcę uzyskać

bar foo
bar foo
bar foo

Gdy korzystam z Vima, mogę zrobić „Ctrl v” w pierwszej linii i pierwszej kolumnie, następnie nacisnąć „2 j”, następnie nacisnąć „i”, a następnie wpisać „bar”, gotowe.

Kiedy jestem w Textmate, mogę nacisnąć „Apple Command Option” zarówno podczas wybierania w dół (myszką), a następnie wpisać „pasek”, gotowe.

Ale kiedy korzystam z GNU Emacs 23.1, nie wiem, jak to zrobić. : ((

Przeszukałem EmacsWiki i googlowałem po okolicy, ale nie znalazłem rozwiązania. Proszę, prowadź mnie, jeśli znasz moje rozwiązanie. Byłbym za to wdzięczny.

Arie
źródło
@Trey Jackson i @humble coffee, rozwiązane, wielkie dzięki !!
Arie,

Odpowiedzi:

16

Przychodzą mi na myśl dwie opcje. Pierwszy to prostokąty (jak wspomniano w innej odpowiedzi). Oto wyraźne wskazówki:

  1. mam pierwszą linię, pierwszą kolumnę
  2. C-SPC
  3. Goto ostatnia linia (pierwsza kolumna)
  4. C-x r t bar SPC RET

Inną opcją, która zapewnia bardzo ładne polecenia edycji prostokątów / kolumn, jest tryb CUA . Oto post na blogu (ujawnienie: mój blog), który opisuje, jak z niego korzystać. Aby zobaczyć moc trybu CUA, warto obejrzeć ten trzyminutowy film .

Integruję tryb CUA z następującymi (ponieważ wolę nie mieć trybu przejściowego):

(setq cua-enable-cua-keys nil)
(setq cua-highlight-region-shift-only t) ;; no transient mark mode
(setq cua-toggle-set-mark nil) ;; original set-mark behavior, i.e. no transient-mark-mode
(cua-mode)
Trey Jackson
źródło
11

W Emacs-24,4, wsparcie bazą dla prostokątów został poprawiony trochę, więc zamiast używania C-SPCnastępnie C-x r tmożna zrobić:

C-x SPC
down down
C-t bar RET

Jedną z fajnych rzeczy w porównaniu z tą C-SPCmetodą jest to, że otrzymasz wizualną informację zwrotną na temat wybranego prostokąta. Oczywiście cua-modemetoda również działa (i działa podobnie).

Stefan
źródło
niestety wydaje mi się, że ulepszenia wcale nie są wystarczające: czy cua-modebyło bardziej właściwe ... Po prostu wspomnieć o czymś: wewnątrz cua-mode, gdy prostokąt jest podświetlony, mogę pisać i dodawać tekst. W obecnej wbudowanej emacs „podstawowa obsługa” podświetlenie znika (wybór jest „anulowany”), a dane wejściowe są wstawiane w punkcie kursora. Jest to sprzeczne z intuicją i nie jest to, czego zwykle chcę (i przyzwyczajam się do tego, jak cua-modeto robi)
ShinTakezou
@ShinTakezou: podczas gdy uważasz, że licznik w trybie prostokąta jest intuicyjny, uważam, że zachowanie cua jest intuicyjne. Na szczęście masz wybór. Jeśli wolisz obsługę cua, możesz włączyć tryb cua lub (jeśli chcesz tylko obsługę prostokąta) (global-set-key [?\C-x ?\s] 'cua-rectangle-mark-mode).
Stefan
w rzeczywistości to, co robię: trzymanie się trybu cua. Działa to tak: podświetl kolumnę, wpisz tekst, gotowe. W przeciwnym razie: podświetl kolumnę, powiedz, że chcesz dodać tekst, wpisz tekst w minibuforze (nie zobaczysz go w buforze podczas pisania ...), ... gotowe. Później zobaczysz literówkę w ostatnim znaku ... w trybie cua, widzę ją podczas pisania, usuwam (nie cofaj całej wstawki), ponownie myślę, wstaw inny znak ... a prostokąt jest podświetlony tak jak potrzebuję, btw, i mogę go pomniejszyć, powiększyć, wpisać więcej tekstu lub „wyciąć” ten nowy prostokąt ... więc dla mnie jest bardziej intuicyjny i wygodny.
ShinTakezou
Cieszę się, że ci się podoba ;-)
Stefan
BTW, w Emacs-25, C-toperacja prostowania inna niż CUA (aka C-x r t) pokazuje również podgląd nowo wstawionego tekstu podczas pisania.
Stefan
2

W emacach tego rodzaju kolumny są nazywane „prostokątami”. Więc to jest właściwa strona dokumentacji.

Wszystkie te polecenia wymagają, aby region zawierał prostokąt, na którym operujesz. Musisz więc ustawić znak na lewym górnym znaku w prostokącie i rozszerzyć obszar do prawego dolnego znaku w prostokącie. Polecenie, którego szukasz, to M-x string-insert-rectanglemonitujący o wstawienie ciągu.

Nedned
źródło
1

Najkrótsza odpowiedź: Włącz tryb prostokąta CUA przez C-RET.

Tak byłoby w twoim przypadku

  1. Przejdź do pierwszej linii, pierwszej kolumny i naciśnij, C-RETaby przejść do trybu CUA
  2. Przejdź do ostatniej linii, pierwszej kolumny i po prostu wpisz barSPC
  3. Wyjdź z trybu CUA przez ESClub CG

Zobacz odpowiedź @Trey na bardziej skomplikowane rozwiązanie i linki do CUA.

Jaskółka oknówka
źródło
2
Tak, mam zbyt małą reputację, aby komentować. Nie chcę powtarzać jego odpowiedzi, ale dodam więcej informacji z dokumentu CUA.
Martin
0

Możesz użyć replace-regexp do tego:

  1. ustaw znak do ostatniej linii -> C SPC i przejdź do ostatniej linii
  2. wpisz Mx replace-regexp RET w minibuforze (mam przypisanie klucza dla tego Mr)
  3. Daj ^ RET
  4. wpisz pasek i naciśnij klawisz RET

Spowoduje to dodanie paska na początku wiersza.

Neelesh
źródło