Jak ustawić emacs w przesuniętej zakładce, aby przesunąć zaznaczony tekst w lewo o 4 spacje?Emacs Shift-Tab, aby przesunąć w lewo blok
Odpowiedz
Usuwa 4 spacje z przodu bieżącej linii (pod warunkiem, że istnieją spacje).
(global-set-key (kbd "<S-tab>") 'un-indent-by-removing-4-spaces)
(defun un-indent-by-removing-4-spaces()
"remove 4 spaces from beginning of of line"
(interactive)
(save-excursion
(save-match-data
(beginning-of-line)
;; get rid of tabs at beginning of line
(when (looking-at "^\\s-+")
(untabify (match-beginning 0) (match-end 0)))
(when (looking-at "^ ")
(replace-match "")))))
Jeśli zmienna tab-width
dzieje się 4 (i to, co chcesz „cofnąć”), a następnie można wymienić (looking-at "^ ")
z czymś bardziej ogólnym jak (concat "^" (make-string tab-width ?\))
.
Ponadto kod przekształci zakładki z przodu wiersza w spacje, używając untabify.
Aby to zrobić, używam polecenia indent-rigidly
, związanego z C-x TAB
. Podaj argument -4, aby przesunąć wybrany region w lewo o cztery spacje: C-u -4 C-x TAB
.
http://www.gnu.org/s/emacs/manual/html_node/elisp/Region-Indent.html
W tym samym manualnym wpisie, możesz preferować 'sztywny-kod-wcięcia 'ponieważ pozostawia komentarze i wielowątkowe same ciągi znaków – toolbear
Zrobiłem pewne funkcje tabbing region na cztery przestrzenie w lewo lub w prawo w zależności od przypadku korzystania z karty lub Shift + Tab:
(defun indent-region-custom(numSpaces)
(progn
; default to start and end of current line
(setq regionStart (line-beginning-position))
(setq regionEnd (line-end-position))
; if there's a selection, use that instead of the current line
(when (use-region-p)
(setq regionStart (region-beginning))
(setq regionEnd (region-end))
)
(save-excursion ; restore the position afterwards
(goto-char regionStart) ; go to the start of region
(setq start (line-beginning-position)) ; save the start of the line
(goto-char regionEnd) ; go to the end of region
(setq end (line-end-position)) ; save the end of the line
(indent-rigidly start end numSpaces) ; indent between start and end
(setq deactivate-mark nil) ; restore the selected region
)
)
)
(defun untab-region (N)
(interactive "p")
(indent-region-custom -4)
)
(defun tab-region (N)
(interactive "p")
(if (active-minibuffer-window)
(minibuffer-complete) ; tab is pressed in minibuffer window -> do completion
; else
(if (string= (buffer-name) "*shell*")
(comint-dynamic-complete) ; in a shell, use tab completion
; else
(if (use-region-p) ; tab is pressed is any other buffer -> execute with space insertion
(indent-region-custom 4) ; region was selected, call indent-region
(insert " ") ; else insert four spaces as expected
)))
)
(global-set-key (kbd "<backtab>") 'untab-region)
(global-set-key (kbd "<tab>") 'tab-region)
Edit: Kod Added Maven do sprawdź, czy w minibuforze, jak również w przypadku uzupełniania kart w określonych buforach (na przykład powłoka).
Przyjemnie, zaakceptowana odpowiedź działa tylko dla 1 linii, a nie dla regionów –
Idealny. Działa dla regionów i linii Replikuje inne wspólne funkcje edytora. – mythicalcoder
Ulepszyłem odpowiedź Stanleya Baka. Dla mnie to powiązanie z kluczem globalnym komplikowało proces uzupełniania minibufów.
Tak więc włączyłem także walizkę do minibufora.
Edytuj: Zmienianie nazwy indent-region
->indent-region-custom
.
indent-region
koliduje z istniejącym poleceniem i podaje błąd wcięcia przy składowaniu (przechwyceniu przed zapisaniem) i kilku innych kombinacjach klawiszy.
(defun indent-region-custom(numSpaces)
(progn
;; default to start and end of current line
(setq regionStart (line-beginning-position))
(setq regionEnd (line-end-position))
;; if there's a selection, use that instead of the current line
(when (use-region-p)
(setq regionStart (region-beginning))
(setq regionEnd (region-end))
)
(save-excursion ; restore the position afterwards
(goto-char regionStart) ; go to the start of region
(setq start (line-beginning-position)) ; save the start of the line
(goto-char regionEnd) ; go to the end of region
(setq end (line-end-position)) ; save the end of the line
(indent-rigidly start end numSpaces) ; indent between start and end
(setq deactivate-mark nil) ; restore the selected region
)
)
)
(defun untab-region (N)
(interactive "p")
(indent-region-custom -4)
)
(defun tab-region (N)
(interactive "p")
(if (active-minibuffer-window)
(minibuffer-complete) ; tab is pressed in minibuffer window -> do completion
(if (use-region-p) ; tab is pressed is any other buffer -> execute with space insertion
(indent-region-custom 4) ; region was selected, call indent-region-custom
(insert " ") ; else insert four spaces as expected
)
)
)
(global-set-key (kbd "<backtab>") 'untab-region)
(global-set-key (kbd "<tab>") 'tab-region)
- 1. przesunąć o jeden znak w lewo w konsoli
- 2. Jak przesunąć bitowo w VB.NET?
- 3. jak przesunąć przycisk w lewo lub w prawo programowo w Androidzie
- 4. Łańcuch wypychania w lewo
- 5. Jak przesunąć obrazy strony w plikach PDF bardziej w lewo lub w prawo?
- 6. Jak programowo przesunąć UITableView w dół, aby odsłonić podstawowy UIRefreshControl
- 7. touchpad przewijanie w poziomie w aplikacji emacs
- 8. Skrót, aby otworzyć określony plik w Emacs
- 9. Programowo naciśnij klawisz "Lewo" w polu tekstowym
- 10. iOS: przesuń palcem w lewo/w prawo pomiędzy zakładkami?
- 11. Jak przesunąć początek tablicy w C#?
- 12. Scala REPL w Emacs
- 13. Jak przesunąć okrąg w tablicy 4 znaków?
- 14. Każdy sposób, aby zatrzymać blok dosłowne w szybkim
- 15. emacs: wymusić tryb ido, aby zapomnieć historię
- 16. Spraw, aby Emacs zignorował pliki * .orig.
- 17. Powiedz, aby Emacs nigdy nie wstawiał zakładek
- 18. Emacs: wyrażenie regularne zastąpienie aby zmienić wielkość
- 19. Blok "Ostatni" w Iteratorach
- 20. Jak przesunąć wartość wielu kolumnach w grupie
- 21. Jak przesunąć ramkę textbox w prawo?
- 22. Obróć ciało w JS, w lewo w prawo i w prawo w lewo
- 23. Najnowsze rekord w lewo dołączyć
- 24. Wyciągnij znacznik Dl w bootstrapie w lewo
- 25. Jak przenieść ikonę w lewo na nagłówek MDL?
- 26. Jeśli blok a blok-obudowa blokuje
- 27. Ustawianie Emacs 24 kolorów motyw z .emacs
- 28. preferencje trybu emacs w pythonie
- 29. W Emacs, czy jest polecenie, aby odwiedzić ostatnio otwarty plik?
- 30. .emacs Edytuj, aby zawsze uruchamiać Emacsa w trybie terminalowym?
Nice! Ale użyłbym WHEN zamiast IF, ponieważ nie ma drugiej klauzuli. – Ken
dla mnie nie działa z wybranym regionem. Tylko z pierwszą linią: -/ – Ismael
Dla mnie to w ogóle nie działa. :( –