Polecenie Emacs do usuwania Do Nie-białych znaków
Często chcę wywołać funkcję wielowierszową i zredukować ją do jednej linii. Na przykład Konwertuj...
function_call(
'first_arg',
'second')
Do
function_call('first_arg', 'second')
Czy emacs ma jakieś polecenia, aby w tym pomóc. W szczególności, czy istnieje polecenie, które usunie wszystkie białe znaki od punktu do pierwszego Nie-białego znaku?
10 answers
Możesz spróbować delete-indentation
, mojego ulubionego polecenia do łączenia wielu linii w jedną linię. W twoim przykładzie, Umieść kursor na linii z "second" i naciśnij M-^ dwa razy. Oto dokumenty:
M - ^ uruchamia polecenie
delete-indentation
, które jest interaktywną skompilowaną funkcją Lispu wsimple.el
.Jest związana z M - ^.
(delete-indentation &optional arg)
Połącz tę linię z poprzednią i napraw białe znaki przy połączeniu. Jeśli istnieje prefiks wypełnienia, usuń go z początek tej linii. Za pomocą argumentu połącz ten wiersz z następującym wierszem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-17 19:31:27
Spójrz na funkcję fixup-whitespace
. Pochodzi z Emacs, w simple.el
. Jego dokumenty to:
Poprawianie białej przestrzeni między obiektami wokół punktu. Zostaw jedną przestrzeń lub żadnej, w zależności od kontekstu.
Podobną funkcję, just-one-space
, że
Usuwa wszystkie spacje i tabulatory wokół punktu, pozostawiając jedną spację
Jest zazwyczaj związane z M-SPC .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-27 01:39:17
W szczególności, czy istnieje polecenie, które usunie wszystkie białe znaki od punktu do pierwszego Nie-białego znaku?
Jest polecenie, które robi prawie to:
M - \ uruchamia polecenie delete-horizontal-space który jest interaktywną skompilowaną funkcją Lispu w ' simple.el'.
Jest związana z M -\.
(delete-horizontal-space &opcjonalne tylko do tyłu)
Usuń wszystkie spacje i tabulatory wokół punktu. If backward-only nie jest nil, tylko skreślić je przed punktem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-15 05:19:28
Używam następującego makra, aby "pociągnąć" następną linię na koniec bieżącej linii, kompresując białe znaki.
(defun pull-next-line()
(interactive)
(move-end-of-line 1)
(kill-line)
(just-one-space))
Jest to dokładnie przeciwieństwo move-line-up
i delete-indentation
@jrockway, które uważam za bardziej naturalne. Polecenie just-one-space
w makrze jest dokładnie M-SPACE
@Mike.
I bind pull-next-line
to M-J
(analogicznie do Vim ' a J
, dla "join", polecenie) używając następującego w moim .emacs
.
(global-set-key (kbd "M-J") 'pull-next-line)
Przykład. wywołanie pull-next-line
w pierwszej linii z
function_call(
'first_arg',
'second')
function_call( 'first_arg',
'second')
Nazwanie go po raz drugi daje
function_call( 'first_arg', 'second')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-15 15:40:49
Alt-space zmniejszy ciąg znaków spacji do pojedynczego znaku spacji, ale nie usunie nowego wiersza. To powinno trochę pomóc.
Aby usunąć wszystko od punktu do pierwszego znaku Nie-białego (lub nowej linii), wpisz znak nie-białego, Alt-space, backspace (aby usunąć ostateczny znak białej spacji), a następnie backspace (aby usunąć dodany znak.
Aby przekształcić deklarację funkcji wielowierszowej w deklarację jednowierszową, użyj kombinacji Alt-space, backspace i Polecenia Alt-E (goto-endofline).
Zawsze możesz użyć M-z do usunięcia znaku.
Dla np. w Twoim przypadku:
M-z ' aby usunąć pojedynczy cytat (niestety spowoduje to usunięcie pojedynczego cytatu, ale jest to niewielka niedogodność).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-15 03:13:25
Dość drastycznym sposobem na to jest Hungry-Delete mode:
Hungry-Delete jest trybem podrzędnym, który powoduje usunięcie wszystkich białych znaków w kierunku, w którym usuwasz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-14 04:01:46
Nieco innym podejściem byłoby stworzenie makra klawiatury, aby wykonać zadanie za Ciebie. tak więc, do tworzenia makro etapu ogólny scenariusz jak tak:
foo
bar
[wiersz z "foo", a następnie kilka linii później i z kilkoma białymi spacjami, napisz "bar"]
Następnie stojąc gdzieś pomiędzy foo i bar, wykonaj następujące czynności:
C-x ( ; start recording macro M-b ; move backwards to the beginning of foo END ; move to the end of foo C-space ; place mark C-M-f ; move to the end of bar HOME ; move to the beginning of the line C-w ; yank out all the white space M-SPACE ; leave only one space C-x ) ; end recording the macro M-x name-last-kbd-macro ; name it, call it jline or something
Teraz zawsze możesz usunąć wszystkie białe spacje między dwoma wyrazami za pomocą m-x one-line
Pamiętaj, aby zapisać makro klawiatury przez wystawianie M-x insert-kbd-macro gdzieś w Twoim .plik emacs - tak to wygląda:
(fset 'jline
[?\M-b end ?\C- ?\C-\M-f home ?\C-w escape ? ])
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-03 12:22:46
Robię to:
(defun move-line-up ()
"Removes leading spaces from the current line, and then moves
the current line to the end of the previous line."
(interactive)
(let (start end)
(save-excursion
(beginning-of-line)
; get first non-space character, only look on this line
(let ((search-end (save-excursion (end-of-line) (point))))
(re-search-forward "[^[:space:]]" search-end))
(setq end (1- (point)))
(previous-line)
(end-of-line)
(setq start (point))
(delete-region start end))
(goto-char start)))
(defun move-next-line-up ()
"Moves the next line to the end of the current line"
(interactive)
(next-line)
(move-line-up))
I wiążą je jako:
(global-set-key (kbd "C-x ,") 'move-line-up)
(global-set-key (kbd "C-x .") 'move-next-line-up)
Więc aby rozwiązać twój problem, na linii, która mówi "drugi)", po prostu uruchom C-x , C-x ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-15 03:30:42
Jeśli chcesz, aby wszystkie usunięcia działały w ten sposób, możesz sprawdzić greedy-delete.