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?
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?
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śnij C-x r d
( delete-rectangle
). Na przykład przejdź do pierwszej linii, na której chcesz działać, naciśnij C-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.
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łbym I said
(i ewentualnie dołączałbym przed nim podział linii), użyłem M-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
lub mc/mark-next-lines
.
Moje skróty klawiszowe:
(use-package multiple-cursors
:bind (("C->" . mc/mark-next-like-this)
("C-M->" . mc/mark-all-like-this-dwim)))
Obowiązkowe Emacs Rocks! odcinek: http://emacsrocks.com/e13.html
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.
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, że query-regexp-replace
odtąd wszystko zastępuje się bez dalszych pytań).
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.