Niedawno zapytałem:
Jak dodać prefiks do każdej linii?
Więc idź od kodu poniżej:
I said Hello
I said There
I said I am some code
Aby zakodować:
Hello
There
I am some code
Jak usunąć n liczby znaków z linii?
text-editing
editing
Luke Shimkus
źródło
źródło
Odpowiedzi:
To jeszcze łatwiejsze! Ponownie użyj poleceń prostokątnych . Przejdź do jednego rogu prostokąta, który chcesz usunąć, naciśnij,
C-SPC
aby ustawić znak. Przejdź do drugiego rogu prostokąta i naciśnijC-x r d
(delete-rectangle
). Na przykład przejdź do pierwszej linii, na której chcesz działać, naciśnijC-a
lub,home
aby przejść do początku linii, przejdź do ostatniej linii, na której chcesz działać, aby przejść do prawego dolnego rogu, a następnie usuń.C-u number C-f
C-x r d
Jeśli ostatni wiersz zawiera mniej niż pożądaną liczbę znaków, wygodniej może być zamiast tego użyć lewego dolnego i prawego górnego rogu. Alternatywnie możesz wstawić niepotrzebne znaki (jest to przydatne, jeśli zarówno pierwszy wiersz, jak i ostatni wiersz są krótsze).
Możesz użyć
C-x r k
do zabicia prostokąta, który pozwala ci go szarpać (C-x r y
) później (przejdź do lewego górnego rogu miejsca, w którym chcesz go wstawić).Możesz także użyć
C-x r t
(string-rectangle
) i wprowadzić pusty ciąg.Polecenia prostokąta są oparte na pozycjach kolumn. Jeśli chcesz usunąć n znaków zamiast n kolumn (co robi różnicę w przypadku znaków wielokolumnowych, takich jak tabulatory), możesz użyć zamiany wyrażeń regularnych : zamień
^.\{42\}
na nic, aby usunąć pierwsze 42 znaki każdej linii.źródło
Inna możliwość: naprawdę lubię używać wielu kursorów do takich zadań. Dostępny w
package.el
MELPA, stał się nieodłączną częścią moich emacs. Po prostu wybrałbymI said
(i ewentualnie dołączałbym przed nim podział linii), użyłemM-x mc/mark-all-like-this
i byłem na mojej drodze. Jeśli chcesz uzyskać bardziej szczegółową kontrolę, możesz użyćmc/mark-next-like-this
lubmc/mark-next-lines
.Moje skróty klawiszowe:
Obowiązkowe Emacs Rocks! odcinek: http://emacsrocks.com/e13.html
źródło
Jeśli
cua-mode
włączyłeś, to:Wolę
cua-mode
sposób pracy, niż standardowy prostokąt Emacsa, gdzie odpowiednikiem byłoby:cua-mode
Oszczędza trzech naciśnięć klawiszy w porównaniu do standardowej Emacs prostokąta.źródło
W trosce o kompletność: usunięcie pierwszych 3 znaków z każdej linii (formalnie: od punktu lub w regionie) można wykonać przez zastąpienie wyrażenia regularnego
^...
(lub bardziej ogólnie :)^.\{3\}
pustym ciągiem.Objaśnienie: w wyrażeniu regularnym
^
oznacza „początek linii”,.
oznacza „dowolny znak” i\{n\}
„ n powtórzeń rzeczy przed”.Ma to dodatkową zaletę bycia interaktywnym (chyba że się naciska
!
, co powoduje, żequery-regexp-replace
odtąd wszystko zastępuje się bez dalszych pytań).źródło
I jeszcze jedna możliwość:
F3C-aC-3C-dC-nF4
rejestruje makro klawiatury, mówiąc w zasadzie „przejdź do początku linii, usuń trzy znaki i przejdź do następnej linii”. Następnie możesz odtworzyć go do końca bufora przez C-uF4lub C-xC-krzastosować do linii w regionie. Ma to jedną wadę: pęknie, gdy jakaś linia ma mniej niż 3 znaki.
źródło
Jeśli jest to tylko linia, którą możesz przełączyć na char z Mz, zakładając, że znak nie jest powtarzany między punktem a tym, który chcesz usunąć. W niektórych przypadkach jest to szybsze niż tworzenie regionu.
źródło