Jak uniknąć wcięcia zawartości przestrzeni nazw w Vimie?
Jak ustawić zawartość przestrzeni nazw w Vimie, aby nie wciskała w C++?
namespace < identifier >
{
< statement_list > // Unwanted indentation
}
Co zaskakujące, 'cinoptions' nie zapewnia sposobu na edycję wcięcia zawartości przestrzeni nazw.
5 answers
Nie wiem, kiedy został wprowadzony, ale moja zainstalowana wersja Vima, v7.3.353 ma opcję cino, która jawnie obsługuje przestrzeń nazw cpp. Obecnie używam przykładowej wartości:
cino=N-s
I zgodnie z :help cinoptions-values
NN Indent inside C++ namespace N characters extra compared to a
normal block. (default 0).
cino= cino=N-s
namespace { namespace {
void function(); void function();
} }
namespace my namespace my
{ {
void function(); void function();
} }
Link zamieszczony przez OP jest dla v7.3.162
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
2011-11-30 20:24:26
Cpp.vim rozwiąże twój problem, ale jeśli nie chcesz pełnego stylu kodowania Google, po prostu Zerknij na źródło wtyczki i zobacz, jak obsługuje przestrzenie nazw. To jest super proste:
function! IndentNamespace()
let l:cline_num = line('.')
let l:pline_num = prevnonblank(l:cline_num - 1)
let l:pline = getline(l:pline_num)
let l:retv = cindent('.')
while l:pline =~# '\(^\s*{\s*\|^\s*//\|^\s*/\*\|\*/\s*$\)'
let l:pline_num = prevnonblank(l:pline_num - 1)
let l:pline = getline(l:pline_num)
endwhile
if l:pline =~# '^\s*namespace.*'
let l:retv = 0
endif
return l:retv
endfunction
setlocal indentexpr=IndentNamespace()
W zasadzie wszystko, co robisz, to dopasowanie ostatniej niepustej linii do /^\s*namespace/
, a jeśli pasuje, zwróć 0 (jako pozycję wcięcie dla indentexpr
); w przeciwnym razie zwróć wartość wbudowanego mechanizmu cindent Vima.
W zasadzie wykradłem kod z wtyczki, rozebrałem wszystko co nie jest przestrzeń nazw związana z funkcją indent i przemianowana na IndentNamespace()
. Zapisz to jako~/.vim / indent / cpp.vim.
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-03-31 18:44:39
Używam cpp.vim, który jest inspirowany przez Google C++ Style Guide. Między innymi, Ten scenariusz robi to, o co prosisz.
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-03-30 22:23:30
Jak wielu wspomniało styl Google C++ jest całkiem dobry.
Polecam zainstalować clang-format
który uważam za lepszy niż zalecane wtyczki, a następnie zainstalować wtyczkę vim na górze.
Install clang-format
Ubuntu:
sudo apt-get install clang-format
// or for older versions:
sudo apt-get install clang-format-3.6
Mac:
brew install clang-format
Vim plugin:
Zainstaluj za pomocą swojego ulubionego menedżera wtyczek.
Sprawdź link wtyczki, aby uzyskać więcej opcji. Domyślnym stylem jest google
, ale jest też llvm
i i inni
Jedną z opcji, której możesz potrzebować, jeśli używasz niestandardowej wersji polecenia, jest
Przykład:
let g:clang_format#command ="clang-format-3.6"
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-05-06 10:54:28
Skonfigurowałem Vima tak, aby nie wcinał przestrzeni nazw. Są to odpowiednie linie w moim vimrc:
autocmd Filetype cpp set shiftwidth=2
set cino=>2(0^-2g0h2
Szczerze mówiąc, nie pamiętam, jak interpetować cino
oświadczenie, ale :help cinoptions
powinno pomóc w jego rozszyfrowaniu. Jedno zastrzeżenie: myślę, że jest skonfigurowany tak, aby nie wciąć podczas korzystania z takiego formatu:
namespace foo
{ // <- curly bracket on next line
...
Kontra
namespace foo { // <- same line
Ponieważ umieściłem nawias klamrowy w następnej linii wyłącznie dla przestrzeni nazw, robi to, co chcę, ale może nie działać, jeśli użyjesz tego stylu dla innych deklaracje funkcji, dla, itp.
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-03-31 00:52:28