Nie udało mi się zmusić Emacsa do przełączania się z 8 spacji na 4 spacje po naciśnięciu TABbuforów w trybie 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ę .emacs
plik (lub zmienne lokalne mojego bufora), TABprzycisk zawsze robi to samo.
- Jeśli powyżej nie ma tekstu, wcięcie 8 spacji
- Jeśli w poprzednim wierszu znajduje się tekst, użyj wcięcia na początku drugiego słowa
Tak bardzo jak kocham Emacsa, to robi się irytujące. Czy istnieje sposób, aby Emacs wprowadził co najmniej 4 wcięcie spacji, gdy w poprzednim wierszu nie ma tekstu?
emacs
indentation
Cristian
źródło
źródło
(setq-default tab-width 4)
NIE jest tym samym, co(setq tab-width 4)
upewnij się, że nie przegapiłeś opcji „-default”!Odpowiedzi:
lub dodaj pozycję listy tabulacji do zmiennych zestawu niestandardowego w pliku .emacs :
źródło
'(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)))
? Tak długo, jak to działa, chyba ...: P'(tab-stop-list (quote (4)))
.quote
do kontynuowania ciągu w nieskończoność potrzebne są dwie liczby. Zobacz: stackoverflow.com/a/42148697/2662028Krótka odpowiedź:
Kluczową kwestią jest powiedzenie emacsowi, aby wstawiał cokolwiek chcesz podczas wcięcia, odbywa się to poprzez zmianę funkcji indent-line-function. Łatwiej jest to zmienić, aby wstawić tabulator, a następnie zamienić tabulatory na 4 spacje, niż zmienić, aby wstawić 4 spacje. Następująca konfiguracja rozwiąże Twój problem:
Wyjaśnienie:
Z instrukcji Indentation Controlled by Major Mode @ emacs :
Z podręcznika @ emacs względnego wcięcia:
Po prostu zmień wartość indent-line-function na funkcję insert-tab i skonfiguruj wstawianie tabulatorów jako 4 spacje.
źródło
Aktualizacja: Od wersji 24.4 Emacsa:
co oznacza, że nie ma już potrzeby ustawiania
tab-stop-list
w sposób pokazany poniżej, ponieważ możesz to ustawićnil
.Oryginalna odpowiedź jest następująca ...
Zawsze trochę mnie boli,
(setq tab-stop-list 4 8 12 ................)
gdy widzę takie rzeczy, jak sytuacja, gdynumber-sequence
funkcja siedzi tam i czeka na użycie.lub
źródło
tab-stop-list
jest teraz niejawnie rozszerzony do nieskończoności. Jego domyślna wartość jest zmieniona na zero, co oznacza tabulator na każdejtab-width
kolumnie." - więc w rzeczywistości możesz po prostu użyć domyślnej wartościnil
.Konfigurowanie kart może być łatwiejsze w następujący sposób:
Po
Customize group:
monicie wprowadźindent
.Zobaczysz ekran, na którym możesz ustawić wszystkie opcje wcięć 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 dostosowań .
źródło
źródło
źródło
26.3
działa to dla kodu C ++ i komentarza w środku
źródło
Ten problem nie jest spowodowany brakującymi tabulatorami; chodzi o to, że emacs ma (nową?) metodę tabulacji zwaną wcięciem względnym, która wydaje się być zaprojektowana do wyrównywania danych tabelarycznych. Klawisz TAB jest mapowany na metodę indent-for-tab-command, która wywołuje dowolną metodę, na którą ustawiono zmienną indent-line-function, czyli metodę względną wcięcia dla trybu tekstowego. Nie znalazłem dobrego sposobu na przesłonięcie zmiennej indent-line-function (hak trybu tekstowego nie działa, więc może jest resetowany po uruchomieniu haków trybu?), Ale jeden prosty sposób na pozbycie się tego zachowaniem jest po prostu odrzucenie metody intent-for-tab-command, ustawiając TAB na prostszą metodę tab-to-tab-stop:
(zdefiniuj-klawisz-map-trybu-tekstu (kbd "TAB") 'tab-to-tab-stop)
źródło
Spróbuj tego:
To spowoduje, że TAB zawsze wstawi literalny znak TAB z tabulatorami co 4 znaki (ale tylko w trybie tekstowym). Jeśli nie o to prosisz, opisz zachowanie, które chciałbyś zobaczyć.
źródło
Możesz dodać te wiersze kodu do swojego pliku .emacs. Dodaje hak dla trybu tekstowego, aby używać tabulacji wstawiania zamiast wcięcia względnego.
Mam nadzieję, że to pomoże.
źródło
Wystarczyła mi zmiana stylu na c-set-style.
źródło
Dodaj to do swojego pliku .emacs:
Spowoduje to ustawienie szerokości wyświetlanej karty na 2 znaki (zmień liczbę 2 na dowolną)
Aby upewnić się, że emacs faktycznie używa tabulatorów zamiast spacji:
Nawiasem mówiąc, domyślnym ustawieniem emacsa podczas cofania się po tabulacji jest konwersja na spacje, a następnie usunięcie spacji. To może być denerwujące. Jeśli chcesz, aby po prostu usunął kartę, możesz to zrobić:
Cieszyć się!
źródło
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:
Zwróć uwagę, że do działania
quote
potrzebne są dwie liczby (ale nie więcej!).Ponadto, w większości głównych trybów (
Python
na przykład), wcięcia są automatyczne w Emacsie. Jeśli potrzebujesz wcięcia poza automatyczne wcięcie, użyj:M-i
źródło
Dostosowania mogą być cieniem,
(setq tab width 4)
więc użyjsetq-default
lub poinformuj Dostosowywanie, co robisz. Miałem również problemy podobne do OP i naprawiłem je sam, nie musiałem dostosowywaćtab-stop-list
ani żadnychinsert
funkcji:Okazało się, że warto dodać to natychmiast po (wskazówka z emacsWiki):
źródło
Najlepsze odpowiedzi nie działały, dopóki nie napisałem tego w pliku .emacs:
źródło
Czy próbowałeś
źródło
źródło
Nawiasem mówiąc, dla trybu C dodaję
(setq-default c-basic-offset 4)
do .emacs. Szczegółowe informacje można znaleźć pod adresem http://www.emacswiki.org/emacs/IndentingC .źródło
Z mojego pliku init, inny, ponieważ chciałem spacje zamiast tabulatorów:
źródło
Zmodyfikowano tę odpowiedź bez żadnego haka:
źródło