summaryrefslogtreecommitdiffstats
path: root/indent/go.vim
diff options
context:
space:
mode:
Diffstat (limited to 'indent/go.vim')
-rw-r--r--indent/go.vim25
1 files changed, 20 insertions, 5 deletions
diff --git a/indent/go.vim b/indent/go.vim
index 887fb587..d31a6a1d 100644
--- a/indent/go.vim
+++ b/indent/go.vim
@@ -26,7 +26,11 @@ if exists("*GoIndent")
finish
endif
-function! GoIndent(lnum)
+" don't spam the user when Vim is started in Vi compatibility mode
+let s:cpo_save = &cpo
+set cpo&vim
+
+function! GoIndent(lnum) abort
let prevlnum = prevnonblank(a:lnum-1)
if prevlnum == 0
" top of file
@@ -40,10 +44,17 @@ function! GoIndent(lnum)
let ind = previ
- if prevl =~ ' = `[^`]*$'
- " previous line started a multi-line raw string
- return 0
- endif
+ for synid in synstack(a:lnum, 1)
+ if synIDattr(synid, 'name') == 'goRawString'
+ if prevl =~ '\%(\%(:\?=\)\|(\|,\)\s*`[^`]*$'
+ " previous line started a multi-line raw string
+ return 0
+ endif
+ " return -1 to keep the current indent.
+ return -1
+ endif
+ endfor
+
if prevl =~ '[({]\s*$'
" previous line opened a block
let ind += shiftwidth()
@@ -70,6 +81,10 @@ function! GoIndent(lnum)
return ind
endfunction
+" restore Vi compatibility settings
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
" vim: sw=2 ts=2 et
endif