summaryrefslogtreecommitdiffstats
path: root/autoload
diff options
context:
space:
mode:
Diffstat (limited to 'autoload')
-rw-r--r--autoload/crystal/indent.vim28
-rw-r--r--autoload/crystal_lang.vim546
-rw-r--r--autoload/ecrystal.vim2
-rw-r--r--autoload/go/config.vim2
-rw-r--r--autoload/rust.vim4
5 files changed, 291 insertions, 291 deletions
diff --git a/autoload/crystal/indent.vim b/autoload/crystal/indent.vim
index dbf4c141..63908254 100644
--- a/autoload/crystal/indent.vim
+++ b/autoload/crystal/indent.vim
@@ -31,6 +31,11 @@ lockvar g:crystal#indent#sol
let g:crystal#indent#eol = '\s*\%(%}\)\=\ze\s*\%(#.*\)\=$'
lockvar g:crystal#indent#eol
+" Regex that defines blocks.
+let g:crystal#indent#block_regex =
+ \ '\%(\<do\>\|%\@1<!{\)\s*\%(|[^|]*|\)\='.g:crystal#indent#eol
+lockvar g:crystal#indent#block_regex
+
" Regex that defines the start-match for the 'end' keyword.
" NOTE: This *should* properly match the 'do' only at the end of the
" line
@@ -43,7 +48,7 @@ let g:crystal#indent#end_start_regex =
\ '\<\%(if\|unless\|while\|until\|case\|begin\|for\|union\)\>' .
\ '\)' .
\ '\|' .
- \ '.\{-}\zs\<do\s*\%(|.*|\)\='.g:crystal#indent#eol
+ \ g:crystal#indent#block_regex
lockvar g:crystal#indent#end_start_regex
" Regex that defines the middle-match for the 'end' keyword.
@@ -80,13 +85,15 @@ lockvar g:crystal#indent#crystal_type_declaration
" Regex that defines continuation lines, not including (, {, or [.
let g:crystal#indent#non_bracket_continuation_regex =
\ '\%(' .
- \ '[\\.,:/%+\-=~<>|&^]' .
+ \ '[\\.,:/%+\-=~<>&^]' .
+ \ '\|' .
+ \ '\%(\%(\<do\>\|%\@1<!{\)\s*|[^|]*\)\@<!|' .
\ '\|' .
\ '\W?' .
\ '\|' .
\ '\<\%(if\|unless\)\>' .
\ '\|' .
- \ '\%('.g:crystal#indent#sol.g:crystal#indent#crystal_type_declaration.'\h\k*\)\@<!\*' .
+ \ '\%('.g:crystal#indent#crystal_type_declaration.'\h\k*\)\@<!\*' .
\ '\)' .
\ g:crystal#indent#eol
lockvar g:crystal#indent#non_bracket_continuation_regex
@@ -117,19 +124,6 @@ lockvar g:crystal#indent#continuable_regex
let g:crystal#indent#splat_regex = '[[,(]\s*\*\s*\%(#.*\)\=$'
lockvar g:crystal#indent#splat_regex
-" Regex that defines blocks.
-"
-" Note that there's a slight problem with this regex and crystal#indent#continuation_regex.
-" Code like this will be matched by both:
-"
-" method_call do |(a, b)|
-"
-" The reason is that the pipe matches a hanging "|" operator.
-"
-let g:crystal#indent#block_regex =
- \ '\%(\<do:\@!\>\|%\@1<!{\)\s*\%(|\s*(*\s*\%([*@&]\=\h\w*,\=\s*\)\%(,\s*(*\s*[*@&]\=\h\w*\s*)*\s*\)*|\)\=\s*\%(%}\)\=\s*\%(#.*\)\=$'
-lockvar g:crystal#indent#block_regex
-
let g:crystal#indent#block_continuation_regex = '^\s*[^])}\t ].*'.g:crystal#indent#block_regex
lockvar g:crystal#indent#block_continuation_regex
@@ -368,4 +362,6 @@ function! crystal#indent#FindContainingClass() abort
return 0
endfunction
+" vim: sw=2 sts=2 et:
+
endif
diff --git a/autoload/crystal_lang.vim b/autoload/crystal_lang.vim
index 98359a4b..a697a943 100644
--- a/autoload/crystal_lang.vim
+++ b/autoload/crystal_lang.vim
@@ -10,41 +10,41 @@ let s:C = s:V.import('ColorEcho')
let s:IS_WINDOWS = has('win32')
if exists('*json_decode')
- function! s:decode_json(text) abort
- return json_decode(a:text)
- endfunction
+ function! s:decode_json(text) abort
+ return json_decode(a:text)
+ endfunction
else
- let s:J = s:V.import('Web.JSON')
- function! s:decode_json(text) abort
- return s:J.decode(a:text)
- endfunction
+ let s:J = s:V.import('Web.JSON')
+ function! s:decode_json(text) abort
+ return s:J.decode(a:text)
+ endfunction
endif
function! s:echo_error(msg, ...) abort
- echohl ErrorMsg
- if a:0 == 0
- echomsg a:msg
- else
- echomsg call('printf', [a:msg] + a:000)
- endif
- echohl None
+ echohl ErrorMsg
+ if a:0 == 0
+ echomsg a:msg
+ else
+ echomsg call('printf', [a:msg] + a:000)
+ endif
+ echohl None
endfunction
function! s:run_cmd(cmd) abort
- if !executable(g:crystal_compiler_command)
- throw "vim-crystal: Error: '" . g:crystal_compiler_command . "' command is not found."
- endif
- return s:P.system(a:cmd)
+ if !executable(g:crystal_compiler_command)
+ throw "vim-crystal: Error: '" . g:crystal_compiler_command . "' command is not found."
+ endif
+ return s:P.system(a:cmd)
endfunction
function! s:find_root_by(search_dir, d) abort
- let found_dir = finddir(a:search_dir, a:d . ';')
- if found_dir ==# ''
- return ''
- endif
+ let found_dir = finddir(a:search_dir, a:d . ';')
+ if found_dir ==# ''
+ return ''
+ endif
- " Note: ':h:h' for {root}/{search_dir}/ -> {root}/{search_dir} -> {root}
- return fnamemodify(found_dir, ':p:h:h')
+ " Note: ':h:h' for {root}/{search_dir}/ -> {root}/{search_dir} -> {root}
+ return fnamemodify(found_dir, ':p:h:h')
endfunction
" Search the root directory containing a 'spec/' and a 'src/' directories.
@@ -53,319 +53,321 @@ endfunction
" compiler has a 'cr_sources/src/spec/' directory that would otherwise give the root
" directory as 'cr_source/src/' instead of 'cr_sources/'.
function! s:find_root_by_spec_and_src(d) abort
- " Search for 'spec/'
- let root = s:find_root_by('spec', a:d)
- " Check that 'src/' is also there
- if root !=# '' && isdirectory(root . '/src')
- return root
- endif
-
- " Search for 'src/'
- let root = s:find_root_by('src', a:d)
- " Check that 'spec/' is also there
- if root !=# '' && isdirectory(root . '/spec')
- return root
- endif
-
- " Cannot find a directory containing both 'src/' and 'spec/'
- return ''
+ " Search for 'spec/'
+ let root = s:find_root_by('spec', a:d)
+ " Check that 'src/' is also there
+ if root !=# '' && isdirectory(root . '/src')
+ return root
+ endif
+
+ " Search for 'src/'
+ let root = s:find_root_by('src', a:d)
+ " Check that 'spec/' is also there
+ if root !=# '' && isdirectory(root . '/spec')
+ return root
+ endif
+
+ " Cannot find a directory containing both 'src/' and 'spec/'
+ return ''
endfunction
function! crystal_lang#entrypoint_for(file_path) abort
- let parent_dir = fnamemodify(a:file_path, ':p:h')
- let root_dir = s:find_root_by_spec_and_src(parent_dir)
- if root_dir ==# ''
- " No spec directory found. No need to make temporary file
- return a:file_path
- endif
-
- let required_spec_path = get(b:, 'crystal_required_spec_path', get(g:, 'crystal_required_spec_path', ''))
- if required_spec_path !=# ''
- let require_spec_str = './' . required_spec_path
- else
- let require_spec_str = './spec/**'
- endif
-
- let temp_name = root_dir . '/__vim-crystal-temporary-entrypoint-' . fnamemodify(a:file_path, ':t')
- let contents = [
- \ 'require "spec"',
- \ 'require "' . require_spec_str . '"',
- \ printf('require "./%s"', fnamemodify(a:file_path, ':p')[strlen(root_dir)+1 : ])
- \ ]
-
- let result = writefile(contents, temp_name)
- if result == -1
- " Note: When writefile() failed
- return a:file_path
- endif
-
- return temp_name
+ let parent_dir = fnamemodify(a:file_path, ':p:h')
+ let root_dir = s:find_root_by_spec_and_src(parent_dir)
+ if root_dir ==# ''
+ " No spec directory found. No need to make temporary file
+ return a:file_path
+ endif
+
+ let required_spec_path = get(b:, 'crystal_required_spec_path', get(g:, 'crystal_required_spec_path', ''))
+ if required_spec_path !=# ''
+ let require_spec_str = './' . required_spec_path
+ else
+ let require_spec_str = './spec/**'
+ endif
+
+ let temp_name = root_dir . '/__vim-crystal-temporary-entrypoint-' . fnamemodify(a:file_path, ':t')
+ let contents = [
+ \ 'require "spec"',
+ \ 'require "' . require_spec_str . '"',
+ \ printf('require "./%s"', fnamemodify(a:file_path, ':p')[strlen(root_dir)+1 : ])
+ \ ]
+
+ let result = writefile(contents, temp_name)
+ if result == -1
+ " Note: When writefile() failed
+ return a:file_path
+ endif
+
+ return temp_name
endfunction
function! crystal_lang#tool(name, file, pos, option_str) abort
- let entrypoint = crystal_lang#entrypoint_for(a:file)
- let cmd = printf(
- \ '%s tool %s --no-color %s --cursor %s:%d:%d %s',
- \ g:crystal_compiler_command,
- \ a:name,
- \ a:option_str,
- \ a:file,
- \ a:pos[1],
- \ a:pos[2],
- \ entrypoint
- \ )
-
- try
- let output = s:run_cmd(cmd)
- return {'failed': s:P.get_last_status(), 'output': output}
- finally
- " Note:
- " If the entry point is temporary file, delete it finally.
- if a:file !=# entrypoint
- call delete(entrypoint)
- endif
- endtry
+ let entrypoint = crystal_lang#entrypoint_for(a:file)
+ let cmd = printf(
+ \ '%s tool %s --no-color %s --cursor %s:%d:%d %s',
+ \ g:crystal_compiler_command,
+ \ a:name,
+ \ a:option_str,
+ \ a:file,
+ \ a:pos[1],
+ \ a:pos[2],
+ \ entrypoint
+ \ )
+
+ try
+ let output = s:run_cmd(cmd)
+ return {'failed': s:P.get_last_status(), 'output': output}
+ finally
+ " Note:
+ " If the entry point is temporary file, delete it finally.
+ if a:file !=# entrypoint
+ call delete(entrypoint)
+ endif
+ endtry
endfunction
" `pos` is assumed a returned value from getpos()
function! crystal_lang#impl(file, pos, option_str) abort
- return crystal_lang#tool('implementations', a:file, a:pos, a:option_str)
+ return crystal_lang#tool('implementations', a:file, a:pos, a:option_str)
endfunction
function! s:jump_to_impl(impl) abort
- execute 'edit' a:impl.filename
- call cursor(a:impl.line, a:impl.column)
+ execute 'edit' a:impl.filename
+ call cursor(a:impl.line, a:impl.column)
endfunction
function! crystal_lang#jump_to_definition(file, pos) abort
- echo 'analyzing definitions under cursor...'
-
- let cmd_result = crystal_lang#impl(a:file, a:pos, '--format json')
- if cmd_result.failed
- return s:echo_error(cmd_result.output)
- endif
-
- let impl = s:decode_json(cmd_result.output)
- if impl.status !=# 'ok'
- return s:echo_error(impl.message)
- endif
-
- if len(impl.implementations) == 1
- call s:jump_to_impl(impl.implementations[0])
- return
- endif
-
- let message = "Multiple definitions detected. Choose a number\n\n"
- for idx in range(len(impl.implementations))
- let i = impl.implementations[idx]
- let message .= printf("[%d] %s:%d:%d\n", idx, i.filename, i.line, i.column)
- endfor
- let message .= "\n"
- let idx = str2nr(input(message, "\n> "))
- call s:jump_to_impl(impl.implementations[idx])
+ echo 'analyzing definitions under cursor...'
+
+ let cmd_result = crystal_lang#impl(a:file, a:pos, '--format json')
+ if cmd_result.failed
+ return s:echo_error(cmd_result.output)
+ endif
+
+ let impl = s:decode_json(cmd_result.output)
+ if impl.status !=# 'ok'
+ return s:echo_error(impl.message)
+ endif
+
+ if len(impl.implementations) == 1
+ call s:jump_to_impl(impl.implementations[0])
+ return
+ endif
+
+ let message = "Multiple definitions detected. Choose a number\n\n"
+ for idx in range(len(impl.implementations))
+ let i = impl.implementations[idx]
+ let message .= printf("[%d] %s:%d:%d\n", idx, i.filename, i.line, i.column)
+ endfor
+ let message .= "\n"
+ let idx = str2nr(input(message, "\n> "))
+ call s:jump_to_impl(impl.implementations[idx])
endfunction
function! crystal_lang#context(file, pos, option_str) abort
- return crystal_lang#tool('context', a:file, a:pos, a:option_str)
+ return crystal_lang#tool('context', a:file, a:pos, a:option_str)
endfunction
function! crystal_lang#type_hierarchy(file, option_str) abort
- let cmd = printf(
- \ '%s tool hierarchy --no-color %s %s',
- \ g:crystal_compiler_command,
- \ a:option_str,
- \ a:file
- \ )
-
- return s:run_cmd(cmd)
+ let cmd = printf(
+ \ '%s tool hierarchy --no-color %s %s',
+ \ g:crystal_compiler_command,
+ \ a:option_str,
+ \ a:file
+ \ )
+
+ return s:run_cmd(cmd)
endfunction
function! s:find_completion_start() abort
- let c = col('.')
- if c <= 1
- return -1
- endif
+ let c = col('.')
+ if c <= 1
+ return -1
+ endif
- let line = getline('.')[:c-2]
- return match(line, '\w\+$')
+ let line = getline('.')[:c-2]
+ return match(line, '\w\+$')
endfunction
function! crystal_lang#complete(findstart, base) abort
- if a:findstart
- return s:find_completion_start()
- endif
-
- let cmd_result = crystal_lang#context(expand('%'), getpos('.'), '--format json')
- if cmd_result.failed
- return
- endif
-
- let contexts = s:decode_json(cmd_result.output)
- if contexts.status !=# 'ok'
- return
- endif
-
- let candidates = []
-
- for c in contexts.contexts
- for [name, desc] in items(c)
- let candidates += [{
- \ 'word': name,
- \ 'menu': ': ' . desc . ' [var]',
- \ }]
- endfor
+ if a:findstart
+ return s:find_completion_start()
+ endif
+
+ let cmd_result = crystal_lang#context(expand('%'), getpos('.'), '--format json')
+ if cmd_result.failed
+ return
+ endif
+
+ let contexts = s:decode_json(cmd_result.output)
+ if contexts.status !=# 'ok'
+ return
+ endif
+
+ let candidates = []
+
+ for c in contexts.contexts
+ for [name, desc] in items(c)
+ let candidates += [{
+ \ 'word': name,
+ \ 'menu': ': ' . desc . ' [var]',
+ \ }]
endfor
+ endfor
- return candidates
+ return candidates
endfunction
function! crystal_lang#get_spec_switched_path(absolute_path) abort
- let base = fnamemodify(a:absolute_path, ':t:r')
-
- " TODO: Make cleverer
- if base =~# '_spec$'
- let parent = fnamemodify(substitute(a:absolute_path, '/spec/', '/src/', ''), ':h')
- return parent . '/' . matchstr(base, '.\+\ze_spec$') . '.cr'
- else
- let parent = fnamemodify(substitute(a:absolute_path, '/src/', '/spec/', ''), ':h')
- return parent . '/' . base . '_spec.cr'
- endif
+ let base = fnamemodify(a:absolute_path, ':t:r')
+
+ " TODO: Make cleverer
+ if base =~# '_spec$'
+ let parent = fnamemodify(substitute(a:absolute_path, '/spec/', '/src/', ''), ':h')
+ return parent . '/' . matchstr(base, '.\+\ze_spec$') . '.cr'
+ else
+ let parent = fnamemodify(substitute(a:absolute_path, '/src/', '/spec/', ''), ':h')
+ return parent . '/' . base . '_spec.cr'
+ endif
endfunction
function! crystal_lang#switch_spec_file(...) abort
- let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
- if path !~# '.cr$'
- return s:echo_error('Not crystal source file: ' . path)
- endif
+ let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
+ if path !~# '.cr$'
+ return s:echo_error('Not crystal source file: ' . path)
+ endif
- execute 'edit!' crystal_lang#get_spec_switched_path(path)
+ execute 'edit!' crystal_lang#get_spec_switched_path(path)
endfunction
function! s:run_spec(root, path, ...) abort
- " Note:
- " `crystal spec` can't understand absolute path.
- let cmd = printf(
- \ '%s spec %s%s',
- \ g:crystal_compiler_command,
- \ a:path,
- \ a:0 == 0 ? '' : (':' . a:1)
- \ )
-
- let saved_cwd = getcwd()
- let cd = haslocaldir() ? 'lcd' : 'cd'
- try
- execute cd a:root
- call s:C.echo(s:run_cmd(cmd))
- finally
- execute cd saved_cwd
- endtry
+ " Note:
+ " `crystal spec` can't understand absolute path.
+ let cmd = printf(
+ \ '%s spec %s%s',
+ \ g:crystal_compiler_command,
+ \ a:path,
+ \ a:0 == 0 ? '' : (':' . a:1)
+ \ )
+
+ let saved_cwd = getcwd()
+ let cd = haslocaldir() ? 'lcd' : 'cd'
+ try
+ execute cd a:root
+ call s:C.echo(s:run_cmd(cmd))
+ finally
+ execute cd saved_cwd
+ endtry
endfunction
function! crystal_lang#run_all_spec(...) abort
- let path = a:0 == 0 ? expand('%:p:h') : a:1
- let root_path = s:find_root_by_spec_and_src(path)
- if root_path ==# ''
- return s:echo_error("'spec' directory is not found")
- endif
- call s:run_spec(root_path, 'spec')
+ let path = a:0 == 0 ? expand('%:p:h') : a:1
+ let root_path = s:find_root_by_spec_and_src(path)
+ if root_path ==# ''
+ return s:echo_error("'spec' directory is not found")
+ endif
+ call s:run_spec(root_path, 'spec')
endfunction
function! crystal_lang#run_current_spec(...) abort
- " /foo/bar/src/poyo.cr
- let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
- if path !~# '.cr$'
- return s:echo_error('Not crystal source file: ' . path)
- endif
-
- " /foo/bar/src
- let source_dir = fnamemodify(path, ':h')
-
- " /foo/bar
- let root_dir = s:find_root_by_spec_and_src(source_dir)
- if root_dir ==# ''
- return s:echo_error("Root directory with 'src/' and 'spec/' not found")
- endif
-
- " src
- let rel_path = source_dir[strlen(root_dir)+1 : ]
-
- if path =~# '_spec.cr$'
- call s:run_spec(root_dir, path[strlen(root_dir)+1 : ], line('.'))
- else
- let spec_path = substitute(rel_path, '^src', 'spec', '') . '/' . fnamemodify(path, ':t:r') . '_spec.cr'
- if !filereadable(root_dir . '/' . spec_path)
- return s:echo_error('Error: Could not find a spec source corresponding to ' . path)
- endif
- call s:run_spec(root_dir, spec_path)
+ " /foo/bar/src/poyo.cr
+ let path = a:0 == 0 ? expand('%:p') : fnamemodify(a:1, ':p')
+ if path !~# '.cr$'
+ return s:echo_error('Not crystal source file: ' . path)
+ endif
+
+ " /foo/bar/src
+ let source_dir = fnamemodify(path, ':h')
+
+ " /foo/bar
+ let root_dir = s:find_root_by_spec_and_src(source_dir)
+ if root_dir ==# ''
+ return s:echo_error("Root directory with 'src/' and 'spec/' not found")
+ endif
+
+ " src
+ let rel_path = source_dir[strlen(root_dir)+1 : ]
+
+ if path =~# '_spec.cr$'
+ call s:run_spec(root_dir, path[strlen(root_dir)+1 : ], line('.'))
+ else
+ let spec_path = substitute(rel_path, '^src', 'spec', '') . '/' . fnamemodify(path, ':t:r') . '_spec.cr'
+ if !filereadable(root_dir . '/' . spec_path)
+ return s:echo_error('Error: Could not find a spec source corresponding to ' . path)
endif
+ call s:run_spec(root_dir, spec_path)
+ endif
endfunction
function! crystal_lang#format_string(code, ...) abort
- if s:IS_WINDOWS
- let redirect = '2> nul'
- else
- let redirect = '2>/dev/null'
- endif
- let cmd = printf(
- \ '%s tool format --no-color %s - %s',
- \ g:crystal_compiler_command,
- \ get(a:, 1, ''),
- \ redirect,
- \ )
- let output = s:P.system(cmd, a:code)
- if s:P.get_last_status()
- throw 'vim-crystal: Error on formatting with command: ' . cmd
- endif
- return output
+ if s:IS_WINDOWS
+ let redirect = '2> nul'
+ else
+ let redirect = '2>/dev/null'
+ endif
+ let cmd = printf(
+ \ '%s tool format --no-color %s - %s',
+ \ g:crystal_compiler_command,
+ \ get(a:, 1, ''),
+ \ redirect,
+ \ )
+ let output = s:P.system(cmd, a:code)
+ if s:P.get_last_status()
+ throw 'vim-crystal: Error on formatting with command: ' . cmd
+ endif
+ return output
endfunction
" crystal_lang#format(option_str [, on_save])
function! crystal_lang#format(option_str, ...) abort
- let on_save = a:0 > 0 ? a:1 : 0
-
- if !executable(g:crystal_compiler_command)
- if on_save
- " Finish command silently on save
- return
- else
- throw 'vim-crystal: Command for formatting is not executable: ' . g:crystal_compiler_command
- endif
- endif
+ let on_save = a:0 > 0 ? a:1 : 0
- let before = join(getline(1, '$'), "\n")
- try
- let formatted = crystal_lang#format_string(before, a:option_str)
- catch /^vim-crystal: /
- echohl ErrorMsg
- echomsg v:exception . ': Your code was not formatted. Exception was thrown at ' . v:throwpoint
- echohl None
- return
- endtry
-
- if !on_save
- let after = substitute(formatted, '\n$', '', '')
- if before ==# after
- return
- endif
+ if !executable(g:crystal_compiler_command)
+ if on_save
+ " Finish command silently on save
+ return
+ else
+ throw 'vim-crystal: Command for formatting is not executable: ' . g:crystal_compiler_command
endif
+ endif
- let view_save = winsaveview()
- let pos_save = getpos('.')
- let lines = split(formatted, '\n')
- silent! undojoin
- if line('$') > len(lines)
- execute len(lines) . ',$delete' '_'
+ let before = join(getline(1, '$'), "\n")
+ try
+ let formatted = crystal_lang#format_string(before, a:option_str)
+ catch /^vim-crystal: /
+ echohl ErrorMsg
+ echomsg v:exception . ': Your code was not formatted. Exception was thrown at ' . v:throwpoint
+ echohl None
+ return
+ endtry
+
+ if !on_save
+ let after = substitute(formatted, '\n$', '', '')
+ if before ==# after
+ return
endif
- call setline(1, lines)
- call winrestview(view_save)
- call setpos('.', pos_save)
+ endif
+
+ let view_save = winsaveview()
+ let pos_save = getpos('.')
+ let lines = split(formatted, '\n')
+ silent! undojoin
+ if line('$') > len(lines)
+ execute len(lines) . ',$delete' '_'
+ endif
+ call setline(1, lines)
+ call winrestview(view_save)
+ call setpos('.', pos_save)
endfunction
function! crystal_lang#expand(file, pos, ...) abort
- return crystal_lang#tool('expand', a:file, a:pos, get(a:, 1, ''))
+ return crystal_lang#tool('expand', a:file, a:pos, get(a:, 1, ''))
endfunction
let &cpo = s:save_cpo
unlet s:save_cpo
+" vim: sw=2 sts=2 et:
+
endif
diff --git a/autoload/ecrystal.vim b/autoload/ecrystal.vim
index 1a00b894..20f3151f 100644
--- a/autoload/ecrystal.vim
+++ b/autoload/ecrystal.vim
@@ -31,4 +31,6 @@ function! ecrystal#SetSubtype() abort
endif
endfunction
+" vim: sw=2 sts=2 et:
+
endif
diff --git a/autoload/go/config.vim b/autoload/go/config.vim
index a2df286f..a7fd29f9 100644
--- a/autoload/go/config.vim
+++ b/autoload/go/config.vim
@@ -310,7 +310,7 @@ function! go#config#FmtAutosave() abort
endfunction
function! go#config#ImportsAutosave() abort
- return get(g:, 'go_imports_autosave', 1)
+ return get(g:, 'go_imports_autosave', 0)
endfunction
function! go#config#SetFmtAutosave(value) abort
diff --git a/autoload/rust.vim b/autoload/rust.vim
index 373be590..34dd1673 100644
--- a/autoload/rust.vim
+++ b/autoload/rust.vim
@@ -502,13 +502,13 @@ function! s:SearchTestFunctionNameUnderCursor() abort
" Search the end of test function (closing brace) to ensure that the
" cursor position is within function definition
if maparg('<Plug>(MatchitNormalForward)') ==# ''
- normal! %
+ keepjumps normal! %
else
" Prefer matchit.vim official plugin to native % since the plugin
" provides better behavior than original % (#391)
" To load the plugin, run:
" :packadd matchit
- execute 'normal' "\<Plug>(MatchitNormalForward)"
+ execute 'keepjumps' 'normal' "\<Plug>(MatchitNormalForward)"
endif
if line('.') < cursor_line
return ''