2011-07-27 11 views
9

Lubię pisać kod za pomocą trójskładnikowej: operator tak:Jak mogę sprawić, aby vim wyrównał trójstronnie?: Operator ładnie?

std::string result = input.empty() ? createNewItem() 
            : processInput(input); 

Jak mogę skonfigurować vim tak, że po naciśnięciu Enter po wpisaniu createNewItem() wcięcia następnej linii tak, że kursor znajduje się w tej samej kolumnie jako ostatni ?, dzięki czemu mogę kontynuować pisanie tylko pod numerem : processInput(input);?

Próbowałem spojrzeć na ustawienie cinoptions-values, ale nie widziałem nic istotnego.

Odpowiedz

1

Zainspirowany roughly similiar question ja wykonywane mój vimscript-fu i stworzył mały skrypt do wykonania tej pracy:

if (!exists("*CppIndentDepth")) 
    function CppIndentDepth() 
     let lineno = v:lnum 
     let lastQuestionMark = match(getline(lineno-1), "?[^?]*") 
     if lastQuestionMark != -1 
      return lastQuestionMark 
     endif 
     return cindent(lineno) 
    endfunction 
endif 

set indentexpr=CppIndentDepth() 

I zapisany ten plik jako vimfiles/indent/after/cpp.vim i dodaną filetype indent on do mojego .vimrc aby włączyć ładowanie wtyczek wcięć. Wydaje się działać wystarczająco dobrze!

1

Można to osiągnąć przynajmniej częściowo jest dodanie nawiasów:

std::string result = (input.empty() 
         ? createNewItem() 
         : processInput(input)); 

Działa to tylko jeśli złamiesz ekspresję na trzy linie: zwykle zrobić, ale muszę przyznać, że formatu wygląda bardzo ładnie i jest czytelny w przypadkach, gdy wyrażenia są krótkie.

W przeszłości znalazłem bardzo przydatną listę mailingową vim dla tego rodzaju pytania: . Kiedyś był zamknięty w grupach Google, więc mógłbyś skonsultować się z tak, jakby był tam grupą; Nie wiem, jaki jest obecny stan (ponieważ nie mogę uzyskać dostępu do grup Google z pracy).

Powiązane problemy