2009-05-05 21 views
22

Po prostu zaczynam odczuwać emacs, ale jestem sfrustrowany tym, że nie wcina się po naciśnięciu klawisza Return. Wiem, że jeśli nacisnę C-j, zrobi to, ale nie mogę wejść w ten nawyk. Po prostu nie mogę. Muszę uderzyć w powrót, a za każdym razem nienawidzę ponownego tabu.Jak ustawić automatyczne wcięcie przez Emacsa mojego kodu C?

Poszedłem do opcji i znalazłem hak trybu C, i hak trybu C++, itd. - i oni zdefiniowali dwa keymappings (10 i 13, i przypomniałem sobie, że 0A i 0D to CR/LF, ponieważ użyłem ich dużo w zespole) - pomyślałem, odkąd jeden powiedział "(lambda nil (define-key lisp-mode-map [13] (quote newline-and-indent))", a drugi taki sam, ale z (quote newline) zamiast tego, po prostu umieściłem i-wcięcie na końcu i uznałem, że zadziała.

Ale nie: ustawiłem i uratowałem, próbowałem, bezskutecznie. Zrestartowane emacs, wciąż bez powodzenia. Jak mogę wprowadzić wcięcie mojego kodu? To szalone, że emacs wymaga pewnego stopnia w seplenie, aby skonfigurować go do swoich podstawowych potrzeb.

Ponadto, jako rodzaj pytania pobocznego: jak skopiować i wkleić ze schowka ? Zabijanie/szarpanie jest wygodne i wszystko, ale nie znoszę, edytuję-> kopiuj za każdym razem, gdy chcę wkleić gdzie indziej.

- EDIT -

porządku, mogę umieścić następujące wiersze do mojego .emacs i to działało:

(add-hook 'c-mode-common-hook (lambda() 
     (local-set-key (kbd "RET") 'newline-and-indent)))

dzięki za pomoc

+4

dlaczego rant o "stopniu lisp"? W emacs, musisz wybrać opcję (!), Aby skonfigurować WSZYSTKO. Mając to na uwadze, seplenienie było bardzo dobrą decyzją w tej chwili. W zależności od aera, kiedy wynaleziono emacs. Współczesne IDE dyktują, co możesz zmienić, a co nie, możesz więc zdecydować, jaki jest jego styl pracy ... –

+1

Przesadą dla wyrażenia mojej frustracji, wiedziałem, że emacs był programowalny przez seplenienie (lub elisp itp.), Ale Nie oczekiwałem, że będzie to wymagało - myślałem, że w trybie okienkowym może być frontend dla niektórych z prostszych ustawień. Podobnie jak wcięcie po naciśnięciu klawisza Enter. –

+6

"dlaczego rant?" Peter, czy naprawdę bronisz użyteczności elisp jako mechanizmu konfiguracyjnego? Hihi! – Cheeso

Odpowiedz

14

Wystarczy popatrzeć na emacswiki - autoindent

Jak sugeruje tam umieścić następujący kod w .emacs

(defun set-newline-and-indent() 
    (local-set-key (kbd "RET") 'newline-and-indent)) 
(add-hook 'c-mode 'set-newline-and-indent) 

Możesz dostosować zmienną C Domyślny styl. W twoich emacs przejdź do Opcje-> Dostosuj Emacs-> Określona opcja, a następnie wpisz c-default-style i ustaw swój wybór. Robiąc to, nie musisz naciskać klawisza TAB. Wpisz od początku linii i po trafieniu ";" , będzie automatycznie wcięty.

Nadzieja to pomaga

+0

Opcja c-default-style dała mi listę języków znajdujących się za polami wyboru, a po nazwie języka była to nazwa wpisana ponownie ... Nie rozumiem, jak powoduje to wywołanie CR newline-and-indent –

+0

That variable ustawia styl wcięć; Tryb CC jest używany w kilku językach podobnych do języka C i można ustawić styl wcięcia dla każdego języka. Przeczytaj przyjazną instrukcję, aby dowiedzieć się, jakie style są. –

1

Try [Enter], (kbd "enter") lub (read-kbd-macro "enter"), wszystkie robią subtelnie różne rzeczy;)

Również dla mnie kopiowanie/wklejanie działa. Czy możesz spróbować uruchomić emacs -q i sprawdzić, czy to działa? Jeśli tak, może to być problem z plikiem .emacs.

mam również:

(when window-system 
    ;; use extended compound-text coding for X clipboard 
    (set-selection-coding-system 'compound-text-with-extensions)) 

jednak, że może zrobić coś innego;)

0

kopiowanie: Przejście na początek, CTRL-Space, przenieść się do końca, Alt-W

wklejanie: Ctrl-y

w systemie UNIX: lewy przycisk myszy na kopiowanie, prawo Mysz do wklejenia

6

Oprócz innych sugestii, spróbuj C-c C-a, aby przełączyć funkcję automatycznego dodawania nowych linii, tak aby modeline odczytała C/la. Wtedy nie musisz nawet naciskać Enter przez większość czasu; zamiast tego podczas wpisywania średnika lub nawiasu wstawiane są znaki nowej linii, a kod jest wcięty.Czasami musisz nacisnąć Enter, a nie dostaniesz autoindentacji (chyba że ponownie powiążesz RET, co sugeruje inna odpowiedź), ale jeśli po prostu zaczniesz wpisywać kolejną linię, możesz zauważyć, że jest poprawnie wcięta po wpisaniu Znak interpunkcyjny.

Aby rozpocząć korzystanie z "stopnia Lispa", wpisz C-h i dla przeglądarki Info i przejdź do węzła "Tryb CC" (jest oddzielny od węzła dla Emacs, wpisz d dla katalogu i znajdź tam tryb CC) .

17

ustawić klawisz Enter, aby globalnie działać jako new-line-i-intencyjny w moim pliku ~/.emacs:

(global-set-key "\C-m" 'newline-and-indent) 

pracuje dla mnie.

+0

Wpadłem na to, bo zaakceptowane odpowiedzi nie działają dla mnie, podczas gdy tak się dzieje. Nie wiem, czy to dlatego, że używam Emacsa 23 lub co, ale używając (kbd "RET") zawsze dostaje mi "Nieprawidłową funkcję". –

5

Jeśli chcesz, aby wciąć plik Cała C/C++, wystarczy robić

  1. znak wszystko: CTRL-x wys
  2. naciśnij TAB

To, btw, działa również na xml, kod Pythona i inne typy.

0

Łatwym sposobem na to jest użycie electric-indent-mode. Jeśli chcesz włączyć ją ręcznie, po prostu zrób

M-x electric-indent-mode 

W celu umożliwienia mu automatycznie, powiedzieć, co następuje w swojej .emacs:

(electric-indent-mode) 

To będzie domyślnym w Emacs 24.4.

Powiązane problemy