Ustaw 4 wcięcia spacji w Emacsie w trybie tekstowym
Nie udało mi się przełączyć Emacsa z 8 spacji na 4 spacje po naciśnięciu karty w buforach z trybem głównym text-mode
. Dodałem do mojego .emacs
:
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
;;; And I have tried
(setq indent-tabs-mode nil)
(setq tab-width 4)
Bez względu na to, jak zmienię mój plik .emacs
(lub lokalne zmienne mojego bufora), przycisk TAB zawsze robi to samo.
- Jeśli nie ma tekstu powyżej, tiret 8 spacje
- Jeśli w poprzednim wierszu znajduje się tekst, wcięcie na początek drugie słowo
19 answers
(customize-variable (quote tab-stop-list))
Lub dodać tab-stop-listdo custom-set-variables W .emacs Plik:
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))))
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
2008-09-16 07:19:32
Krótka odpowiedź:
Kluczowym punktem jest polecenie Emacsa, aby wstawiał cokolwiek chcesz podczas wcięcia, odbywa się to poprzez zmianę funkcji indent-line. Łatwiej jest zmienić go, aby wstawić kartę, a następnie zmienić tabulatory na 4 spacje, niż zmienić go, aby wstawić 4 spacje. Poniższa konfiguracja rozwiąże twój problem:
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
Wyjaśnienie:
Z wcięcia kontrolowane przez Tryb główny @ podręcznik emacs :
Ważną funkcją każdego większego tryb jest aby dostosować klucz do wcięcie właściwe dla języka będącego edycja.
[...]
Zmienna funkcji indent-line jest funkcja, która ma być używana przez (i różne komendy, np. podczas wywoływania indent-region), aby wcięcie bieżącego Kolejka Dowództwo wcięcie zgodnie z trybem nie ma więcej niż wywołać tę funkcję.
[...]
Domyślną wartością jest indent-relative dla wielu trybów.
From indent-relative @ emacs Instrukcja:
Indent-relative Space out to under next Wcięcie w poprzednim wierszu nieblank.
[...]
Jeśli poprzednia linia nieblank nie ma punkty wcięcia poza punktem kolumny zaczyna się od, "tab-to-tab-stop" jest zrobione zamiast tego.
Wystarczy zmienić wartość funkcji indent-line na funkcję insert-tab i skonfigurować wstawianie tabulacji jako 4 spacje.
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-02-18 00:52:45
Zawsze trochę mnie boli widząc rzeczy takie jak {[2] } Kiedy funkcja number-sequence
czeka na użycie.
(setq tab-stop-list (number-sequence 4 200 4))
Lub
(defun my-generate-tab-stops (&optional width max)
"Return a sequence suitable for `tab-stop-list'."
(let* ((max-column (or max 200))
(tab-width (or width tab-width))
(count (/ max-column tab-width)))
(number-sequence tab-width (* tab-width count) tab-width)))
(setq tab-width 4)
(setq tab-stop-list (my-generate-tab-stops))
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
2012-05-03 21:20:05
Może być łatwiej skonfigurować karty w następujący sposób:
M-x customize-group
W wierszu Customize group:
Wprowadź indent
.
Zobaczysz ekran, na którym możesz ustawić wszystkie opcje wcięcia i ustawić je dla bieżącej sesji lub zapisać je dla wszystkich przyszłych sesji.
Jeśli zrobisz to w ten sposób, będziesz chciał skonfigurować plik customizations.
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
2008-09-16 08:23:05
(setq tab-width 4)
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80))
(setq indent-tabs-mode nil)
(defun my-custom-settings-fn ()
(setq indent-tabs-mode t)
(setq tab-stop-list (number-sequence 2 200 2))
(setq tab-width 2)
(setq indent-line-function 'insert-tab))
(add-hook 'text-mode-hook 'my-custom-settings-fn)
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
2015-07-21 20:51:42
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
(setq c-default-style "linux")
(setq c-basic-offset 4)
(c-set-offset 'comment-intro 0)
To działa dla kodu C++ i komentarza wewnątrz też
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
2013-04-25 09:39:15
Ten problem nie jest spowodowany brakiem tabulacji, chodzi o to, że emacs ma (nowy?) metoda tab o nazwie indent-relative, która wydaje się zaprojektowana do wyrównywania danych tabelarycznych. Klawisz TAB jest mapowany do metody indent-for-Tab-command, która wywołuje dowolną metodę zmiennej indent-line-function, która jest metodą indent-relative dla trybu tekstowego. Nie wymyśliłem dobrego sposobu na nadpisanie zmiennej funkcji indent-line (hook trybu tekstowego nie działa, więc może jest resetowany po mode-hooks run?) ale jednym z prostych sposobów na pozbycie się tego zachowania jest po prostu rzucenie metody intent-for-Tab-command poprzez ustawienie TAB na prostszą metodę tab-to-tab-stop:
(define-key text-mode-map (KBD" TAB") 'tab-to-tab-stop)
Spróbuj tego:
(add-hook 'text-mode-hook
(function
(lambda ()
(setq tab-width 4)
(define-key text-mode-map "\C-i" 'self-insert-command)
)))
Spowoduje to, że TAB zawsze wstawi literalny znak tabulacji, a tab zatrzyma się co 4 znaki (ale tylko w trybie tekstowym). Jeśli nie o to prosisz, opisz zachowanie, które chciałbyś zobaczyć.
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
2008-09-16 07:53:41
Możesz dodać te linie kodu do swojego .plik emacs. Dodaje hook dla trybu tekstowego, aby użyć insert-tab zamiast indent-relative.
(custom-set-variables
'(indent-line-function 'insert-tab)
'(indent-tabs-mode t)
'(tab-width 4))
(add-hook 'text-mode-hook
(lambda() (setq indent-line-function 'insert-tab)))
Mam nadzieję, że to pomoże.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
2012-10-29 00:37:09
Sama zmiana stylu z C-set-style mi wystarczyła.
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-08-21 01:21:20
Dodaj to do swojego .plik emacs:
To ustawi szerokość karty na 2 znaki (zmień liczbę 2 na dowolną)
(setq default-tab-width 2)
Aby upewnić się, że emacs używa tabulatorów zamiast spacji:
(global-set-key (kbd "TAB") 'self-insert-command)
Na marginesie, domyślnym dla Emacsa podczas Backspace ' u nad tabulatorem jest przekonwertowanie go na spacje, a następnie usunięcie spacji. To może być irytujące. Jeśli chcesz, aby po prostu usunąć kartę, możesz to zrobić:
(setq c-backspace-function 'backward-delete-char)
Smacznego!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
2012-05-03 20:07:25
Dostosowywanie może być cieniem (setq tab width 4)
, więc albo użyj setq-default
, albo daj znać, co robisz. Miałem też problemy podobne do OP i naprawiłem je tylko tym, nie musiałem dostosowywać tab-stop-list
ani żadnych insert
funkcji:
(custom-set-variables
'(tab-width 4 't)
)
Uznałem, że warto dodać to natychmiast po (wskazówka od emacsWiki):
(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)
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
2017-03-16 17:39:24
Najlepsze odpowiedzi nie zadziałały, dopóki nie napisałem tego w .plik emacs:
(global-set-key (kbd "TAB") 'self-insert-command)
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
2015-06-29 19:57:35
Jest to jedyne rozwiązanie, które zapobiega wstawianiu tabulatora, bez sekwencji lub konwersji tabulatorów na spacje. Oba wydawały się odpowiednie, ale marnotrawne: {]}
(setq-default
indent-tabs-mode nil
tab-width 4
tab-stop-list (quote (4 8))
)
Zauważ, że quote
potrzebuje dwóch liczb do działania (ale nie więcej!).
Ponadto, w większości głównych trybów (na przykładPython
), wcięcie jest automatyczne w Emacsie. Jeśli potrzebujesz wcięcia poza Auto indent, użyj:
na-i
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
2017-02-20 23:15:24
Czy próbowałeś
(setq tab-width 4)
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
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
2012-09-30 19:06:52
Przy okazji, dla C-mode dodam (setq-default c-basic-offset 4)
za .emacs. Zobacz http://www.emacswiki.org/emacs/IndentingC po szczegóły.
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
2013-09-19 06:11:05
Z mojego pliku init, inny, bo chciałem spacje zamiast tabulatorów:
(add-hook 'sql-mode-hook (lambda () (progn (setq-default tab-width 4) (setq indent-tabs-mode nil) (setq indent-line-function 'tab-to-tab-stop) (modify-syntax-entry ?_ "w") ; now '_' is not considered a word-delimiter (modify-syntax-entry ?- "w") ; now '-' is not considered a word-delimiter )))
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-25 14:30:46