xref: /llvm-project/llvm/utils/vim/vimrc (revision 94fa92b441fca82dc2eb334f23938847867546f5)
1" LLVM coding guidelines conformance for VIM
2"
3" Maintainer: The LLVM Team, http://llvm.org
4" WARNING:    Read before you source in all these commands and macros!  Some
5"             of them may change VIM behavior that you depend on.
6"
7" You can run VIM with these settings without changing your current setup with:
8" $ vim -u /path/to/llvm/utils/vim/vimrc
9
10" It's VIM, not VI
11set nocompatible
12
13" A tab produces a 2-space indentation
14set softtabstop=2
15set shiftwidth=2
16set expandtab
17
18" Highlight trailing whitespace and lines longer than 80 columns.
19highlight LongLine ctermbg=DarkYellow guibg=DarkYellow
20highlight WhitespaceEOL ctermbg=DarkYellow guibg=DarkYellow
21if v:version >= 702
22  " Lines longer than 80 columns.
23  au BufWinEnter * let w:m0=matchadd('LongLine', '\%>80v.\+', -1)
24
25  " Whitespace at the end of a line. This little dance suppresses
26  " of whitespace that has just been typed.
27  au BufWinEnter * let w:m1=matchadd('WhitespaceEOL', '\s\+$', -1)
28  au InsertEnter * call matchdelete(w:m1)
29  au InsertEnter * let w:m2=matchadd('WhitespaceEOL', '\s\+\%#\@<!$', -1)
30  au InsertLeave * call matchdelete(w:m2)
31  au InsertLeave * let w:m1=matchadd('WhitespaceEOL', '\s\+$', -1)
32else
33  au BufRead,BufNewFile * syntax match LongLine /\%>80v.\+/
34  au InsertEnter * syntax match WhitespaceEOL /\s\+\%#\@<!$/
35  au InsertLeave * syntax match WhitespaceEOL /\s\+$/
36endif
37
38" Enable filetype detection
39filetype on
40
41" Optional
42" C/C++ programming helpers
43augroup csrc
44  au!
45  autocmd FileType *      set nocindent smartindent
46  autocmd FileType c,cpp  set cindent
47augroup END
48" Set a few indentation parameters. See the VIM help for cinoptions-values for
49" details.  These aren't absolute rules; they're just an approximation of
50" common style in LLVM source.
51set cinoptions=:0,g0,(0,Ws,l1
52" Add and delete spaces in increments of `shiftwidth' for tabs
53set smarttab
54
55" Highlight syntax in programming languages
56syntax on
57
58" LLVM Makefiles can have names such as Makefile.rules or TEST.nightly.Makefile,
59" so it's important to categorize them as such.
60augroup filetype
61  au! BufRead,BufNewFile *Makefile* set filetype=make
62augroup END
63
64" In Makefiles, don't expand tabs to spaces, since we need the actual tabs
65autocmd FileType make set noexpandtab
66
67" Useful macros for cleaning up code to conform to LLVM coding guidelines
68
69" Delete trailing whitespace and tabs at the end of each line
70command! DeleteTrailingWs :%s/\s\+$//
71
72" Convert all tab characters to two spaces
73command! Untab :%s/\t/  /g
74
75" Enable syntax highlighting for LLVM files. To use, copy
76" utils/vim/llvm.vim to ~/.vim/syntax .
77augroup filetype
78  au! BufRead,BufNewFile *.ll     set filetype=llvm
79augroup END
80
81" Enable syntax highlighting for tablegen files. To use, copy
82" utils/vim/tablegen.vim to ~/.vim/syntax .
83augroup filetype
84  au! BufRead,BufNewFile *.td     set filetype=tablegen
85augroup END
86
87" Additional vim features to optionally uncomment.
88"set showcmd
89"set showmatch
90"set showmode
91"set incsearch
92"set ruler
93