summaryrefslogtreecommitdiff
path: root/utils/vim
diff options
context:
space:
mode:
authorMatthias Braun <matze@braunis.de>2015-04-21 01:35:42 +0000
committerMatthias Braun <matze@braunis.de>2015-04-21 01:35:42 +0000
commitb1675e53552b818d1724bdfb8d5b3bdcf6db6266 (patch)
tree4c13fe4652873b9c05d22368db8fd64bdb13371d /utils/vim
parent6fbedc4cfdb927032db7c858dd4ebe24fa1f311a (diff)
Enhanced vim support.
This brings the utils/vim folder into a more vim-like format by moving the syntax hightlighting files into a syntax subdirectory. It adds some minimal settings that everyone should agree on to ftdetect/ftplugin and features a new indentation plugin for .ll files. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235369 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/vim')
-rw-r--r--utils/vim/README33
-rw-r--r--utils/vim/ftdetect/llvm.vim1
-rw-r--r--utils/vim/ftdetect/tablegen.vim1
-rw-r--r--utils/vim/ftplugin/llvm.vim11
-rw-r--r--utils/vim/ftplugin/tablegen.vim12
-rw-r--r--utils/vim/indent/llvm.vim72
-rw-r--r--utils/vim/syntax/llvm.vim (renamed from utils/vim/llvm.vim)0
-rw-r--r--utils/vim/syntax/tablegen.vim (renamed from utils/vim/tablegen.vim)0
8 files changed, 103 insertions, 27 deletions
diff --git a/utils/vim/README b/utils/vim/README
index bca25bfe612..1fe00992b0a 100644
--- a/utils/vim/README
+++ b/utils/vim/README
@@ -1,33 +1,12 @@
-*- llvm/utils/vim/README -*-
-These are syntax highlighting files for the VIM editor. Included are:
+This directory contains settings for the vim editor to work on llvm *.ll and
+tablegen *.td files. It comes with filetype detection rules in the (ftdetect),
+syntax highlighting (syntax), some minimal sensible default settings (ftplugin)
+and indentation plugins (indent).
-* llvm.vim
-
- Syntax highlighting mode for LLVM assembly files. To use, copy `llvm.vim' to
- ~/.vim/syntax and add this code to your ~/.vimrc :
-
- augroup filetype
- au! BufRead,BufNewFile *.ll set filetype=llvm
- augroup END
-
-* tablegen.vim
-
- Syntax highlighting mode for TableGen description files. To use, copy
- `tablegen.vim' to ~/.vim/syntax and add this code to your ~/.vimrc :
-
- augroup filetype
- au! BufRead,BufNewFile *.td set filetype=tablegen
- augroup END
-
-
-If you prefer, instead of making copies you can make symlinks from
-~/.vim/syntax/... to the syntax files in your LLVM source tree. Apparently
-this did not work with older versions of vim however, so if this doesn't
-work you may need to make actual copies of the files.
-
-Another option, if you do not already have a ~/.vim/syntax directory, is
-to symlink ~/.vim/syntax itself to llvm/utils/vim .
+To install copy all subdirectories to your $HOME/.vim or if you prefer create
+symlinks to the files here. Do not copy the vimrc file here it is only meant as an inspiration and starting point for those working on llvm c++ code.
Note: If you notice missing or incorrect syntax highlighting, please contact
<llvmbugs [at] cs.uiuc.edu>; if you wish to provide a patch to improve the
diff --git a/utils/vim/ftdetect/llvm.vim b/utils/vim/ftdetect/llvm.vim
new file mode 100644
index 00000000000..161ceb2bd55
--- /dev/null
+++ b/utils/vim/ftdetect/llvm.vim
@@ -0,0 +1 @@
+au BufRead,BufNewFile *.ll set filetype=llvm
diff --git a/utils/vim/ftdetect/tablegen.vim b/utils/vim/ftdetect/tablegen.vim
new file mode 100644
index 00000000000..95efa6efdd0
--- /dev/null
+++ b/utils/vim/ftdetect/tablegen.vim
@@ -0,0 +1 @@
+au BufRead,BufNewFile *.td set filetype=tablegen
diff --git a/utils/vim/ftplugin/llvm.vim b/utils/vim/ftplugin/llvm.vim
new file mode 100644
index 00000000000..04bb9e00169
--- /dev/null
+++ b/utils/vim/ftplugin/llvm.vim
@@ -0,0 +1,11 @@
+" Vim filetype plugin file
+" Language: LLVM Assembly
+" Maintainer: The LLVM team, http://llvm.org/
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal softtabstop=2 shiftwidth=2
+setlocal expandtab
diff --git a/utils/vim/ftplugin/tablegen.vim b/utils/vim/ftplugin/tablegen.vim
new file mode 100644
index 00000000000..cfae846c818
--- /dev/null
+++ b/utils/vim/ftplugin/tablegen.vim
@@ -0,0 +1,12 @@
+" Vim filetype plugin file
+" Language: LLVM TableGen
+" Maintainer: The LLVM team, http://llvm.org/
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal matchpairs+=<:>
+setlocal softtabstop=2 shiftwidth=2
+setlocal expandtab
diff --git a/utils/vim/indent/llvm.vim b/utils/vim/indent/llvm.vim
new file mode 100644
index 00000000000..1ea0ba406b4
--- /dev/null
+++ b/utils/vim/indent/llvm.vim
@@ -0,0 +1,72 @@
+" Vim indent file
+" Language: llvm
+" Maintainer: The LLVM team, http://llvm.org/
+" What this indent plugin currently does:
+" - If no other rule matches copy indent from previous non-empty,
+" non-commented line
+" - On '}' align the same as the line containing the matching '{'
+" - If previous line ends with ':' increase indentation
+" - If the current line ends with ':' indent at the same level as the
+" enclosing '{'/'}' block
+" Stuff that would be nice to add:
+" - Continue comments on next line
+" - If there is an opening+unclosed parenthesis on previous line indent to that
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal shiftwidth=2 expandtab
+
+setlocal indentkeys=0{,0},<:>,!^F,o,O,e
+setlocal indentexpr=GetLLVMIndent()
+
+if exists("*GetLLVMIndent")
+ finish
+endif
+
+function! FindOpenBracket(lnum)
+ call cursor(a:lnum, 1)
+ return searchpair('{', '', '}', 'bW')
+endfun
+
+function! GetLLVMIndent()
+ " On '}' align the same as the line containing the matching '{'
+ let thisline = getline(v:lnum)
+ if thisline =~ '^\s*}'
+ call cursor(v:lnum, 1)
+ silent normal %
+ let opening_lnum = line('.')
+ if opening_lnum != v:lnum
+ return indent(opening_lnum)
+ endif
+ endif
+
+ " Indent labels the same as the current opening block
+ if thisline =~ ':\s*$'
+ let blockbegin = FindOpenBracket(v:lnum)
+ if blockbegin > 0
+ return indent(blockbegin)
+ endif
+ endif
+
+ " Find a non-blank not-completely commented line above the current line.
+ let prev_lnum = prevnonblank(v:lnum - 1)
+ while prev_num > 0 && synIDattr(synID(prev_lnum, indent(prev_lnum)+1, 0), "name") =? "string\|comment"
+ let prev_lnum = prevnonblank(prev_lnum-1)
+ endwhile
+ " Hit the start of the file, use zero indent.
+ if prev_lnum == 0
+ return 0
+ endif
+
+ let ind = indent(prev_lnum)
+ let prevline = getline(prev_lnum)
+
+ " Add a 'shiftwidth' after lines that start a block or labels
+ if prevline =~ '{\s*$' || prevline =~ ':\s*$'
+ let ind = ind + &shiftwidth
+ endif
+
+ return ind
+endfunction
diff --git a/utils/vim/llvm.vim b/utils/vim/syntax/llvm.vim
index 913d0f5f1c3..913d0f5f1c3 100644
--- a/utils/vim/llvm.vim
+++ b/utils/vim/syntax/llvm.vim
diff --git a/utils/vim/tablegen.vim b/utils/vim/syntax/tablegen.vim
index a9b0e4e3a4e..a9b0e4e3a4e 100644
--- a/utils/vim/tablegen.vim
+++ b/utils/vim/syntax/tablegen.vim