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?

Author: Cristian, 2009-01-15

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 w simple.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.

 56
Author: Bill White,
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 .

 27
Author: Brian Clapper,
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.

 17
Author: Jouni K. Seppänen,
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')
 6
Author: Chris Conway,
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).

 5
Author: ,
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 00:46:42

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ść).

 5
Author: Amjith,
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.

 4
Author: Pavel Chuchuva,
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 ? ])
 3
Author: Ayal Gelles,
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 ,

 1
Author: jrockway,
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.

 1
Author: ,
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:24:53