mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge #5872 justinmk/test_autochdir
This commit is contained in:
commit
6f9be2464c
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
||||
*mbyte.txt* For Vim version 7.4. Last change: 2013 May 18
|
||||
*mbyte.txt* For Vim version 7.4. Last change: 2016 Jul 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar et al.
|
||||
@ -849,6 +849,7 @@ text, you can use the 'keymap' option. This will translate one or more
|
||||
(English) characters to another (non-English) character. This only happens
|
||||
when typing text, not when typing Vim commands. This avoids having to switch
|
||||
between two keyboard settings.
|
||||
{only available when compiled with the |+keymap| feature}
|
||||
|
||||
The value of the 'keymap' option specifies a keymap file to use. The name of
|
||||
this file is one of these two:
|
||||
|
@ -1,4 +1,4 @@
|
||||
*repeat.txt* For Vim version 7.4. Last change: 2016 Apr 05
|
||||
*repeat.txt* For Vim version 7.4. Last change: 2016 Jul 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -286,7 +286,9 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
|
||||
... not converted ...
|
||||
|
||||
< When conversion isn't supported by the system, there
|
||||
is no error message and no conversion is done.
|
||||
is no error message and no conversion is done. When a
|
||||
line can't be converted there is no error and the
|
||||
original line is kept.
|
||||
|
||||
Don't use "ucs-2" or "ucs-4", scripts cannot be in
|
||||
these encodings (they would contain NUL bytes).
|
||||
|
@ -1040,6 +1040,21 @@ This works immediately.
|
||||
|
||||
CLOJURE *ft-clojure-syntax*
|
||||
|
||||
The default syntax groups can be augmented through the
|
||||
*g:clojure_syntax_keywords* and *b:clojure_syntax_keywords* variables. The
|
||||
value should be a |Dictionary| of syntax group names to a |List| of custom
|
||||
identifiers:
|
||||
>
|
||||
let g:clojure_syntax_keywords = {
|
||||
\ 'clojureMacro': ["defproject", "defcustom"],
|
||||
\ 'clojureFunc': ["string/join", "string/replace"]
|
||||
\ }
|
||||
<
|
||||
Refer to the Clojure syntax script for valid syntax group names.
|
||||
|
||||
If the |buffer-variable| *b:clojure_syntax_without_core_keywords* is set, only
|
||||
language constants and special forms are matched.
|
||||
|
||||
Setting *g:clojure_fold* enables folding Clojure code via the syntax engine.
|
||||
Any list, vector, or map that extends over more than one line can be folded
|
||||
using the standard Vim |fold-commands|.
|
||||
|
@ -592,7 +592,7 @@ String manipulation: *string-functions*
|
||||
match() position where a pattern matches in a string
|
||||
matchend() position where a pattern match ends in a string
|
||||
matchstr() match of a pattern in a string
|
||||
matchstrpos() match and postions of a pattern in a string
|
||||
matchstrpos() match and positions of a pattern in a string
|
||||
matchlist() like matchstr() and also return submatches
|
||||
stridx() first index of a short string in a long string
|
||||
strridx() last index of a short string in a long string
|
||||
@ -799,6 +799,7 @@ Command line: *command-line-functions*
|
||||
setcmdpos() set position of the cursor in the command line
|
||||
getcmdtype() return the current command-line type
|
||||
getcmdwintype() return the current command-line window type
|
||||
getcompletion() list of command-line completion matches
|
||||
|
||||
Quickfix and location lists: *quickfix-functions*
|
||||
getqflist() list of quickfix errors
|
||||
@ -896,6 +897,7 @@ Mappings: *mapping-functions*
|
||||
Testing: *test-functions*
|
||||
assert_equal() assert that two expressions values are equal
|
||||
assert_notequal() assert that two expressions values are not equal
|
||||
assert_inrange() assert that an expression is inside a range
|
||||
assert_match() assert that a pattern matches the value
|
||||
assert_notmatch() assert that a pattern does not match the value
|
||||
assert_false() assert that an expression is false
|
||||
|
@ -77,12 +77,15 @@ Clipboard integration |provider-clipboard|
|
||||
|
||||
USER EXPERIENCE ~
|
||||
|
||||
A major goal of Nvim is to work intuitively and consistently. For example,
|
||||
Nvim does not have `-X`, a platform-specific option available in some Vim
|
||||
builds (with potential surprises: http://stackoverflow.com/q/14635295). Nvim
|
||||
avoids features that cannot be provided on all platforms--instead that is
|
||||
delegated to external plugins/extensions.
|
||||
Working intuitively and consistently is a major goal of Nvim. Examples:
|
||||
|
||||
- Nvim does not have `-X`, a platform-specific option "sometimes" available in
|
||||
Vim (with potential surprises: http://stackoverflow.com/q/14635295). Nvim
|
||||
avoids features that cannot be provided on all platforms--instead that is
|
||||
delegated to external plugins/extensions.
|
||||
|
||||
- Test-only globals and functions such as test_autochdir(), test_settime(),
|
||||
etc., are not exposed (because they don't exist).
|
||||
|
||||
ARCHITECTURE ~
|
||||
|
||||
@ -271,6 +274,19 @@ MS-DOS support:
|
||||
Highlight groups:
|
||||
|hl-VisualNOS|
|
||||
|
||||
Test functions:
|
||||
test_alloc_fail()
|
||||
test_autochdir()
|
||||
test_disable_char_avail()
|
||||
test_garbagecollect_now()
|
||||
test_null_channel()
|
||||
test_null_dict()
|
||||
test_null_job()
|
||||
test_null_list()
|
||||
test_null_partial()
|
||||
test_null_string()
|
||||
test_settime()
|
||||
|
||||
Other options:
|
||||
'antialias'
|
||||
'cpoptions' ("g", "w", "H", "*", "-", "j", and all POSIX flags were removed)
|
||||
|
@ -1,7 +1,7 @@
|
||||
" Vim support file to detect file types
|
||||
"
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2016 Jul 12
|
||||
" Last Change: 2016 Jul 21
|
||||
|
||||
" Listen very carefully, I will say this only once
|
||||
if exists("did_load_filetypes")
|
||||
@ -530,7 +530,7 @@ au BufNewFile,BufRead configure.in,configure.ac setf config
|
||||
au BufNewFile,BufRead *.cu setf cuda
|
||||
|
||||
" Dockerfile
|
||||
au BufNewFile,BufRead Dockerfile setf dockerfile
|
||||
au BufNewFile,BufRead Dockerfile,*.Dockerfile setf dockerfile
|
||||
|
||||
" WildPackets EtherPeek Decoder
|
||||
au BufNewFile,BufRead *.dcd setf dcd
|
||||
|
@ -1,11 +1,11 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: Clojure
|
||||
" Author: Meikel Brandmeyer <mb@kotka.de>
|
||||
" Language: Clojure
|
||||
" Author: Meikel Brandmeyer <mb@kotka.de>
|
||||
"
|
||||
" Maintainer: Sung Pae <self@sungpae.com>
|
||||
" URL: https://github.com/guns/vim-clojure-static
|
||||
" License: Same as Vim
|
||||
" Last Change: 27 March 2014
|
||||
" Maintainer: Sung Pae <self@sungpae.com>
|
||||
" URL: https://github.com/guns/vim-clojure-static
|
||||
" License: Same as Vim
|
||||
" Last Change: 18 July 2016
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
@ -43,7 +43,7 @@ setlocal commentstring=;\ %s
|
||||
" specially and hence are not indented specially.
|
||||
"
|
||||
" -*- LISPWORDS -*-
|
||||
" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-010/clj/src/vim_clojure_static/generate.clj
|
||||
" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-011/clj/src/vim_clojure_static/generate.clj
|
||||
setlocal lispwords=as->,binding,bound-fn,case,catch,cond->,cond->>,condp,def,definline,definterface,defmacro,defmethod,defmulti,defn,defn-,defonce,defprotocol,defrecord,defstruct,deftest,deftest-,deftype,doseq,dotimes,doto,extend,extend-protocol,extend-type,fn,for,if,if-let,if-not,if-some,let,letfn,locking,loop,ns,proxy,reify,set-test,testing,when,when-first,when-let,when-not,when-some,while,with-bindings,with-in-str,with-local-vars,with-open,with-precision,with-redefs,with-redefs-fn,with-test
|
||||
|
||||
" Provide insert mode completions for special forms and clojure.core. As
|
||||
@ -82,9 +82,9 @@ endif
|
||||
" Win32 can filter files in the browse dialog
|
||||
if has("gui_win32") && !exists("b:browsefilter")
|
||||
let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" .
|
||||
\ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
|
||||
\ "Java Source Files (*.java)\t*.java\n" .
|
||||
\ "All Files (*.*)\t*.*\n"
|
||||
\ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
|
||||
\ "Java Source Files (*.java)\t*.java\n" .
|
||||
\ "All Files (*.*)\t*.*\n"
|
||||
let b:undo_ftplugin .= ' | unlet! b:browsefilter'
|
||||
endif
|
||||
|
||||
|
@ -1,17 +1,12 @@
|
||||
" Vim indent file
|
||||
" Language: Clojure
|
||||
" Author: Meikel Brandmeyer <mb@kotka.de>
|
||||
" URL: http://kotka.de/projects/clojure/vimclojure.html
|
||||
" Language: Clojure
|
||||
" Author: Meikel Brandmeyer <mb@kotka.de>
|
||||
" URL: http://kotka.de/projects/clojure/vimclojure.html
|
||||
"
|
||||
" Maintainer: Sung Pae <self@sungpae.com>
|
||||
" URL: https://github.com/guns/vim-clojure-static
|
||||
" License: Same as Vim
|
||||
" Last Change: 27 March 2014
|
||||
|
||||
" TODO: Indenting after multibyte characters is broken:
|
||||
" (let [Δ (if foo
|
||||
" bar ; Indent error
|
||||
" baz)])
|
||||
" Maintainer: Sung Pae <self@sungpae.com>
|
||||
" URL: https://github.com/guns/vim-clojure-static
|
||||
" License: Same as Vim
|
||||
" Last Change: 18 July 2016
|
||||
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
@ -57,36 +52,39 @@ if exists("*searchpairpos")
|
||||
let g:clojure_align_subforms = 0
|
||||
endif
|
||||
|
||||
function! s:SynIdName()
|
||||
function! s:syn_id_name()
|
||||
return synIDattr(synID(line("."), col("."), 0), "name")
|
||||
endfunction
|
||||
|
||||
function! s:CurrentChar()
|
||||
function! s:ignored_region()
|
||||
return s:syn_id_name() =~? '\vstring|regex|comment|character'
|
||||
endfunction
|
||||
|
||||
function! s:current_char()
|
||||
return getline('.')[col('.')-1]
|
||||
endfunction
|
||||
|
||||
function! s:CurrentWord()
|
||||
function! s:current_word()
|
||||
return getline('.')[col('.')-1 : searchpos('\v>', 'n', line('.'))[1]-2]
|
||||
endfunction
|
||||
|
||||
function! s:IsParen()
|
||||
return s:CurrentChar() =~# '\v[\(\)\[\]\{\}]' &&
|
||||
\ s:SynIdName() !~? '\vstring|regex|comment|character'
|
||||
function! s:is_paren()
|
||||
return s:current_char() =~# '\v[\(\)\[\]\{\}]' && !s:ignored_region()
|
||||
endfunction
|
||||
|
||||
" Returns 1 if string matches a pattern in 'patterns', which may be a
|
||||
" list of patterns, or a comma-delimited string of implicitly anchored
|
||||
" patterns.
|
||||
function! s:MatchesOne(patterns, string)
|
||||
function! s:match_one(patterns, string)
|
||||
let list = type(a:patterns) == type([])
|
||||
\ ? a:patterns
|
||||
\ : map(split(a:patterns, ','), '"^" . v:val . "$"')
|
||||
\ ? a:patterns
|
||||
\ : map(split(a:patterns, ','), '"^" . v:val . "$"')
|
||||
for pat in list
|
||||
if a:string =~# pat | return 1 | endif
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
function! s:MatchPairs(open, close, stopat)
|
||||
function! s:match_pairs(open, close, stopat)
|
||||
" Stop only on vector and map [ resp. {. Ignore the ones in strings and
|
||||
" comments.
|
||||
if a:stopat == 0
|
||||
@ -95,11 +93,11 @@ if exists("*searchpairpos")
|
||||
let stopat = a:stopat
|
||||
endif
|
||||
|
||||
let pos = searchpairpos(a:open, '', a:close, 'bWn', "!s:IsParen()", stopat)
|
||||
return [pos[0], virtcol(pos)]
|
||||
let pos = searchpairpos(a:open, '', a:close, 'bWn', "!s:is_paren()", stopat)
|
||||
return [pos[0], col(pos)]
|
||||
endfunction
|
||||
|
||||
function! s:ClojureCheckForStringWorker()
|
||||
function! s:clojure_check_for_string_worker()
|
||||
" Check whether there is the last character of the previous line is
|
||||
" highlighted as a string. If so, we check whether it's a ". In this
|
||||
" case we have to check also the previous character. The " might be the
|
||||
@ -113,17 +111,17 @@ if exists("*searchpairpos")
|
||||
|
||||
call cursor(nb, 0)
|
||||
call cursor(0, col("$") - 1)
|
||||
if s:SynIdName() !~? "string"
|
||||
if s:syn_id_name() !~? "string"
|
||||
return -1
|
||||
endif
|
||||
|
||||
" This will not work for a " in the first column...
|
||||
if s:CurrentChar() == '"'
|
||||
if s:current_char() == '"'
|
||||
call cursor(0, col("$") - 2)
|
||||
if s:SynIdName() !~? "string"
|
||||
if s:syn_id_name() !~? "string"
|
||||
return -1
|
||||
endif
|
||||
if s:CurrentChar() != '\\'
|
||||
if s:current_char() != '\\'
|
||||
return -1
|
||||
endif
|
||||
call cursor(0, col("$") - 1)
|
||||
@ -138,40 +136,40 @@ if exists("*searchpairpos")
|
||||
return indent(".")
|
||||
endfunction
|
||||
|
||||
function! s:CheckForString()
|
||||
function! s:check_for_string()
|
||||
let pos = getpos('.')
|
||||
try
|
||||
let val = s:ClojureCheckForStringWorker()
|
||||
let val = s:clojure_check_for_string_worker()
|
||||
finally
|
||||
call setpos('.', pos)
|
||||
endtry
|
||||
return val
|
||||
endfunction
|
||||
|
||||
function! s:StripNamespaceAndMacroChars(word)
|
||||
function! s:strip_namespace_and_macro_chars(word)
|
||||
return substitute(a:word, "\\v%(.*/|[#'`~@^,]*)(.*)", '\1', '')
|
||||
endfunction
|
||||
|
||||
function! s:ClojureIsMethodSpecialCaseWorker(position)
|
||||
function! s:clojure_is_method_special_case_worker(position)
|
||||
" Find the next enclosing form.
|
||||
call search('\S', 'Wb')
|
||||
|
||||
" Special case: we are at a '(('.
|
||||
if s:CurrentChar() == '('
|
||||
if s:current_char() == '('
|
||||
return 0
|
||||
endif
|
||||
call cursor(a:position)
|
||||
|
||||
let nextParen = s:MatchPairs('(', ')', 0)
|
||||
let next_paren = s:match_pairs('(', ')', 0)
|
||||
|
||||
" Special case: we are now at toplevel.
|
||||
if nextParen == [0, 0]
|
||||
if next_paren == [0, 0]
|
||||
return 0
|
||||
endif
|
||||
call cursor(nextParen)
|
||||
call cursor(next_paren)
|
||||
|
||||
call search('\S', 'W')
|
||||
let w = s:StripNamespaceAndMacroChars(s:CurrentWord())
|
||||
let w = s:strip_namespace_and_macro_chars(s:current_word())
|
||||
if g:clojure_special_indent_words =~# '\V\<' . w . '\>'
|
||||
return 1
|
||||
endif
|
||||
@ -179,27 +177,43 @@ if exists("*searchpairpos")
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
function! s:IsMethodSpecialCase(position)
|
||||
function! s:is_method_special_case(position)
|
||||
let pos = getpos('.')
|
||||
try
|
||||
let val = s:ClojureIsMethodSpecialCaseWorker(a:position)
|
||||
let val = s:clojure_is_method_special_case_worker(a:position)
|
||||
finally
|
||||
call setpos('.', pos)
|
||||
endtry
|
||||
return val
|
||||
endfunction
|
||||
|
||||
function! GetClojureIndent()
|
||||
" Check if form is a reader conditional, that is, it is prefixed by #?
|
||||
" or @#?
|
||||
function! s:is_reader_conditional_special_case(position)
|
||||
if getline(a:position[0])[a:position[1] - 3 : a:position[1] - 2] == "#?"
|
||||
return 1
|
||||
endif
|
||||
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
" Returns 1 for opening brackets, -1 for _anything else_.
|
||||
function! s:bracket_type(char)
|
||||
return stridx('([{', a:char) > -1 ? 1 : -1
|
||||
endfunction
|
||||
|
||||
" Returns: [opening-bracket-lnum, indent]
|
||||
function! s:clojure_indent_pos()
|
||||
" Get rid of special case.
|
||||
if line(".") == 1
|
||||
return 0
|
||||
return [0, 0]
|
||||
endif
|
||||
|
||||
" We have to apply some heuristics here to figure out, whether to use
|
||||
" normal lisp indenting or not.
|
||||
let i = s:CheckForString()
|
||||
let i = s:check_for_string()
|
||||
if i > -1
|
||||
return i + !!g:clojure_align_multiline_strings
|
||||
return [0, i + !!g:clojure_align_multiline_strings]
|
||||
endif
|
||||
|
||||
call cursor(0, 1)
|
||||
@ -207,28 +221,28 @@ if exists("*searchpairpos")
|
||||
" Find the next enclosing [ or {. We can limit the second search
|
||||
" to the line, where the [ was found. If no [ was there this is
|
||||
" zero and we search for an enclosing {.
|
||||
let paren = s:MatchPairs('(', ')', 0)
|
||||
let bracket = s:MatchPairs('\[', '\]', paren[0])
|
||||
let curly = s:MatchPairs('{', '}', bracket[0])
|
||||
let paren = s:match_pairs('(', ')', 0)
|
||||
let bracket = s:match_pairs('\[', '\]', paren[0])
|
||||
let curly = s:match_pairs('{', '}', bracket[0])
|
||||
|
||||
" In case the curly brace is on a line later then the [ or - in
|
||||
" case they are on the same line - in a higher column, we take the
|
||||
" curly indent.
|
||||
if curly[0] > bracket[0] || curly[1] > bracket[1]
|
||||
if curly[0] > paren[0] || curly[1] > paren[1]
|
||||
return curly[1]
|
||||
return curly
|
||||
endif
|
||||
endif
|
||||
|
||||
" If the curly was not chosen, we take the bracket indent - if
|
||||
" there was one.
|
||||
if bracket[0] > paren[0] || bracket[1] > paren[1]
|
||||
return bracket[1]
|
||||
return bracket
|
||||
endif
|
||||
|
||||
" There are neither { nor [ nor (, ie. we are at the toplevel.
|
||||
if paren == [0, 0]
|
||||
return 0
|
||||
return paren
|
||||
endif
|
||||
|
||||
" Now we have to reimplement lispindent. This is surprisingly easy, as
|
||||
@ -246,58 +260,120 @@ if exists("*searchpairpos")
|
||||
" - In any other case we use the column of the end of the word + 2.
|
||||
call cursor(paren)
|
||||
|
||||
if s:IsMethodSpecialCase(paren)
|
||||
return paren[1] + &shiftwidth - 1
|
||||
if s:is_method_special_case(paren)
|
||||
return [paren[0], paren[1] + &shiftwidth - 1]
|
||||
endif
|
||||
|
||||
if s:is_reader_conditional_special_case(paren)
|
||||
return paren
|
||||
endif
|
||||
|
||||
" In case we are at the last character, we use the paren position.
|
||||
if col("$") - 1 == paren[1]
|
||||
return paren[1]
|
||||
return paren
|
||||
endif
|
||||
|
||||
" In case after the paren is a whitespace, we search for the next word.
|
||||
call cursor(0, col('.') + 1)
|
||||
if s:CurrentChar() == ' '
|
||||
if s:current_char() == ' '
|
||||
call search('\v\S', 'W')
|
||||
endif
|
||||
|
||||
" If we moved to another line, there is no word after the (. We
|
||||
" use the ( position for indent.
|
||||
if line(".") > paren[0]
|
||||
return paren[1]
|
||||
return paren
|
||||
endif
|
||||
|
||||
" We still have to check, whether the keyword starts with a (, [ or {.
|
||||
" In that case we use the ( position for indent.
|
||||
let w = s:CurrentWord()
|
||||
if stridx('([{', w[0]) > -1
|
||||
return paren[1]
|
||||
let w = s:current_word()
|
||||
if s:bracket_type(w[0]) == 1
|
||||
return paren
|
||||
endif
|
||||
|
||||
" Test words without namespace qualifiers and leading reader macro
|
||||
" metacharacters.
|
||||
"
|
||||
" e.g. clojure.core/defn and #'defn should both indent like defn.
|
||||
let ww = s:StripNamespaceAndMacroChars(w)
|
||||
let ww = s:strip_namespace_and_macro_chars(w)
|
||||
|
||||
if &lispwords =~# '\V\<' . ww . '\>'
|
||||
return paren[1] + &shiftwidth - 1
|
||||
return [paren[0], paren[1] + &shiftwidth - 1]
|
||||
endif
|
||||
|
||||
if g:clojure_fuzzy_indent
|
||||
\ && !s:MatchesOne(g:clojure_fuzzy_indent_blacklist, ww)
|
||||
\ && s:MatchesOne(g:clojure_fuzzy_indent_patterns, ww)
|
||||
return paren[1] + &shiftwidth - 1
|
||||
\ && !s:match_one(g:clojure_fuzzy_indent_blacklist, ww)
|
||||
\ && s:match_one(g:clojure_fuzzy_indent_patterns, ww)
|
||||
return [paren[0], paren[1] + &shiftwidth - 1]
|
||||
endif
|
||||
|
||||
call search('\v\_s', 'cW')
|
||||
call search('\v\S', 'W')
|
||||
if paren[0] < line(".")
|
||||
return paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)
|
||||
return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)]
|
||||
endif
|
||||
|
||||
call search('\v\S', 'bW')
|
||||
return virtcol(".") + 1
|
||||
return [line('.'), col('.') + 1]
|
||||
endfunction
|
||||
|
||||
function! GetClojureIndent()
|
||||
let lnum = line('.')
|
||||
let orig_lnum = lnum
|
||||
let orig_col = col('.')
|
||||
let [opening_lnum, indent] = s:clojure_indent_pos()
|
||||
|
||||
" Account for multibyte characters
|
||||
if opening_lnum > 0
|
||||
let indent -= indent - virtcol([opening_lnum, indent])
|
||||
endif
|
||||
|
||||
" Return if there are no previous lines to inherit from
|
||||
if opening_lnum < 1 || opening_lnum >= lnum - 1
|
||||
call cursor(orig_lnum, orig_col)
|
||||
return indent
|
||||
endif
|
||||
|
||||
let bracket_count = 0
|
||||
|
||||
" Take the indent of the first previous non-white line that is
|
||||
" at the same sexp level. cf. src/misc1.c:get_lisp_indent()
|
||||
while 1
|
||||
let lnum = prevnonblank(lnum - 1)
|
||||
let col = 1
|
||||
|
||||
if lnum <= opening_lnum
|
||||
break
|
||||
endif
|
||||
|
||||
call cursor(lnum, col)
|
||||
|
||||
" Handle bracket counting edge case
|
||||
if s:is_paren()
|
||||
let bracket_count += s:bracket_type(s:current_char())
|
||||
endif
|
||||
|
||||
while 1
|
||||
if search('\v[(\[{}\])]', '', lnum) < 1
|
||||
break
|
||||
elseif !s:ignored_region()
|
||||
let bracket_count += s:bracket_type(s:current_char())
|
||||
endif
|
||||
endwhile
|
||||
|
||||
if bracket_count == 0
|
||||
" Check if this is part of a multiline string
|
||||
call cursor(lnum, 1)
|
||||
if s:syn_id_name() !~? '\vstring|regex'
|
||||
call cursor(orig_lnum, orig_col)
|
||||
return indent(lnum)
|
||||
endif
|
||||
endif
|
||||
endwhile
|
||||
|
||||
call cursor(orig_lnum, orig_col)
|
||||
return indent
|
||||
endfunction
|
||||
|
||||
setlocal indentexpr=GetClojureIndent()
|
||||
|
108
runtime/keymap/armenian-eastern_utf-8.vim
Normal file
108
runtime/keymap/armenian-eastern_utf-8.vim
Normal file
@ -0,0 +1,108 @@
|
||||
" Maintainer: Benjamin Linskey <vim@benlinskey.com>
|
||||
" Last Changed: 2016 July 20
|
||||
" URL: https://github.com/blinskey/vim-armenian-keymaps
|
||||
|
||||
let b:keymap_name = "hy"
|
||||
|
||||
loadkeymap
|
||||
|
||||
" Capital letters
|
||||
A Ա
|
||||
B Բ
|
||||
C Գ
|
||||
D Դ
|
||||
Y Ե
|
||||
Z Զ
|
||||
E Է
|
||||
U Ը
|
||||
: Թ
|
||||
+ Ժ
|
||||
I Ի
|
||||
L Լ
|
||||
Q Խ
|
||||
? Ծ
|
||||
K Կ
|
||||
H Հ
|
||||
@ Ձ
|
||||
> Ղ
|
||||
J Ճ
|
||||
M Մ
|
||||
# Յ
|
||||
N Ն
|
||||
< Շ
|
||||
O Ո
|
||||
{ Չ
|
||||
P Պ
|
||||
} Ջ
|
||||
_ Ռ
|
||||
S Ս
|
||||
V Վ
|
||||
T Տ
|
||||
R Ր
|
||||
X Ց
|
||||
W Ւ
|
||||
\" Փ
|
||||
G Ք
|
||||
) Օ
|
||||
F Ֆ
|
||||
|
||||
" Lowercase letters
|
||||
a ա
|
||||
b բ
|
||||
c գ
|
||||
d դ
|
||||
y ե
|
||||
z զ
|
||||
e է
|
||||
u ը
|
||||
; թ
|
||||
= ժ
|
||||
i ի
|
||||
l լ
|
||||
q խ
|
||||
/ ծ
|
||||
k կ
|
||||
h հ
|
||||
2 ձ
|
||||
. ղ
|
||||
j ճ
|
||||
m մ
|
||||
3 յ
|
||||
n ն
|
||||
, շ
|
||||
o ո
|
||||
[ չ
|
||||
p պ
|
||||
] ջ
|
||||
- ռ
|
||||
s ս
|
||||
v վ
|
||||
t տ
|
||||
r ր
|
||||
x ց
|
||||
w ւ
|
||||
' փ
|
||||
g ք
|
||||
0 օ
|
||||
f ֆ
|
||||
|
||||
& և
|
||||
|
||||
" Punctuation
|
||||
` ՝
|
||||
~ ՜
|
||||
1 ։
|
||||
4 ՛
|
||||
5 ,
|
||||
6 -
|
||||
7 .
|
||||
8 «
|
||||
9 »
|
||||
\\ '
|
||||
| ՞
|
||||
|
||||
" Numbers
|
||||
! 1
|
||||
$ 3
|
||||
% 4
|
||||
^ 9
|
108
runtime/keymap/armenian-western_utf-8.vim
Normal file
108
runtime/keymap/armenian-western_utf-8.vim
Normal file
@ -0,0 +1,108 @@
|
||||
" Maintainer: Benjamin Linskey <vim@benlinskey.com>
|
||||
" Last Changed: 2016 July 20
|
||||
" URL: https://github.com/blinskey/vim-armenian-keymaps
|
||||
|
||||
let b:keymap_name = "hy"
|
||||
|
||||
loadkeymap
|
||||
|
||||
" Capital letters
|
||||
A Ա
|
||||
P Բ
|
||||
C Գ
|
||||
T Դ
|
||||
Y Ե
|
||||
Z Զ
|
||||
E Է
|
||||
U Ը
|
||||
: Թ
|
||||
+ Ժ
|
||||
I Ի
|
||||
L Լ
|
||||
Q Խ
|
||||
? Ծ
|
||||
G Կ
|
||||
H Հ
|
||||
@ Ձ
|
||||
> Ղ
|
||||
J Ճ
|
||||
M Մ
|
||||
# Յ
|
||||
N Ն
|
||||
< Շ
|
||||
O Ո
|
||||
{ Չ
|
||||
B Պ
|
||||
} Ջ
|
||||
_ Ռ
|
||||
S Ս
|
||||
W Վ
|
||||
D Տ
|
||||
R Ր
|
||||
X Ց
|
||||
V Ւ
|
||||
\" Փ
|
||||
K Ք
|
||||
) Օ
|
||||
F Ֆ
|
||||
|
||||
" Lowercase letters
|
||||
a ա
|
||||
p բ
|
||||
c գ
|
||||
t դ
|
||||
y ե
|
||||
z զ
|
||||
e է
|
||||
u ը
|
||||
; թ
|
||||
= ժ
|
||||
i ի
|
||||
l լ
|
||||
q խ
|
||||
/ ծ
|
||||
g կ
|
||||
h հ
|
||||
2 ձ
|
||||
. ղ
|
||||
j ճ
|
||||
m մ
|
||||
3 յ
|
||||
n ն
|
||||
, շ
|
||||
o ո
|
||||
[ չ
|
||||
b պ
|
||||
] ջ
|
||||
- ռ
|
||||
s ս
|
||||
w վ
|
||||
d տ
|
||||
r ր
|
||||
x ց
|
||||
v ւ
|
||||
' փ
|
||||
k ք
|
||||
0 օ
|
||||
f ֆ
|
||||
|
||||
& և
|
||||
|
||||
" Punctuation
|
||||
` ՝
|
||||
~ ՜
|
||||
1 ։
|
||||
4 ՛
|
||||
5 ,
|
||||
6 -
|
||||
7 .
|
||||
8 «
|
||||
9 »
|
||||
\\ '
|
||||
| ՞
|
||||
|
||||
" Numbers
|
||||
! 1
|
||||
$ 3
|
||||
% 4
|
||||
^ 9
|
File diff suppressed because one or more lines are too long
@ -1,7 +1,7 @@
|
||||
" Vim syntax file
|
||||
" Language: Python
|
||||
" Maintainer: Zvezdan Petkovic <zpetkovic@acm.org>
|
||||
" Last Change: 2016 Feb 20
|
||||
" Last Change: 2016 Jul 21
|
||||
" Credits: Neil Schemenauer <nas@python.ca>
|
||||
" Dmitry Vasiliev
|
||||
"
|
||||
@ -72,7 +72,7 @@ set cpo&vim
|
||||
" built-in below (use 'from __future__ import print_function' in 2)
|
||||
" - async and await were added in Python 3.5 and are soft keywords.
|
||||
"
|
||||
syn keyword pythonStatement False, None, True
|
||||
syn keyword pythonStatement False None True
|
||||
syn keyword pythonStatement as assert break continue del exec global
|
||||
syn keyword pythonStatement lambda nonlocal pass print return with yield
|
||||
syn keyword pythonStatement class def nextgroup=pythonFunction skipwhite
|
||||
|
@ -4,7 +4,12 @@
|
||||
" Repository: https://github.com/chrisbra/vim-sqloracle-syntax
|
||||
" License: Vim
|
||||
" Previous Maintainer: Paul Moore
|
||||
" Last Change: 2015 Nov 24
|
||||
" Last Change: 2016 Jul 22
|
||||
|
||||
" Changes:
|
||||
" 02.04.2016: Support for when keyword
|
||||
" 03.04.2016: Support for join related keywords
|
||||
" 22.07.2016: Support Oracle Q-Quote-Syntax
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
@ -24,10 +29,11 @@ syn keyword sqlKeyword index initial initrans into is level link logging loop
|
||||
syn keyword sqlKeyword maxextents maxtrans mode modify monitoring
|
||||
syn keyword sqlKeyword nocache nocompress nologging noparallel nowait of offline on online start
|
||||
syn keyword sqlKeyword parallel successful synonym table tablespace then to trigger uid
|
||||
syn keyword sqlKeyword unique user validate values view whenever
|
||||
syn keyword sqlKeyword unique user validate values view when whenever
|
||||
syn keyword sqlKeyword where with option order pctfree pctused privileges procedure
|
||||
syn keyword sqlKeyword public resource return row rowlabel rownum rows
|
||||
syn keyword sqlKeyword session share size smallint type using
|
||||
syn keyword sqlKeyword join cross inner outer left right
|
||||
|
||||
syn keyword sqlOperator not and or
|
||||
syn keyword sqlOperator in any some all between exists
|
||||
@ -47,8 +53,13 @@ syn keyword sqlType boolean char character date float integer long
|
||||
syn keyword sqlType mlslabel number raw rowid varchar varchar2 varray
|
||||
|
||||
" Strings:
|
||||
syn region sqlString start=+"+ skip=+\\\\\|\\"+ end=+"+
|
||||
syn region sqlString start=+'+ skip=+\\\\\|\\'+ end=+'+
|
||||
syn region sqlString matchgroup=Quote start=+"+ skip=+\\\\\|\\"+ end=+"+
|
||||
syn region sqlString matchgroup=Quote start=+'+ skip=+\\\\\|\\'+ end=+'+
|
||||
syn region sqlString matchgroup=Quote start=+n\?q'\z([^[(<{]\)+ end=+\z1'+
|
||||
syn region sqlString matchgroup=Quote start=+n\?q'<+ end=+>'+
|
||||
syn region sqlString matchgroup=Quote start=+n\?q'{+ end=+}'+
|
||||
syn region sqlString matchgroup=Quote start=+n\?q'(+ end=+)'+
|
||||
syn region sqlString matchgroup=Quote start=+n\?q'\[+ end=+]'+
|
||||
|
||||
" Numbers:
|
||||
syn match sqlNumber "-\=\<\d*\.\=[0-9_]\>"
|
||||
@ -118,6 +129,7 @@ syn keyword sqlTodo TODO FIXME XXX DEBUG NOTE contained
|
||||
|
||||
" Define the default highlighting.
|
||||
command -nargs=+ HiLink hi def link <args>
|
||||
HiLink Quote Special
|
||||
HiLink sqlComment Comment
|
||||
HiLink sqlFunction Function
|
||||
HiLink sqlKeyword sqlSpecial
|
||||
|
@ -17265,14 +17265,6 @@ static void f_termopen(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* "test(list)" function: Just checking the walls...
|
||||
*/
|
||||
static void f_test(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
/* Used for unit testing. Change the code below to your liking. */
|
||||
}
|
||||
|
||||
static bool callback_from_typval(Callback *callback, typval_T *arg)
|
||||
{
|
||||
if (arg->v_type == VAR_PARTIAL && arg->vval.v_partial != NULL) {
|
||||
|
@ -302,7 +302,6 @@ return {
|
||||
tanh={args=1, func="float_op_wrapper", data="&tanh"},
|
||||
tempname={},
|
||||
termopen={args={1, 2}},
|
||||
test={args=1},
|
||||
timer_start={args={2,3}},
|
||||
timer_stop={args=1},
|
||||
tolower={args=1},
|
||||
|
@ -1611,6 +1611,7 @@ int do_write(exarg_T *eap)
|
||||
int retval = FAIL;
|
||||
char_u *free_fname = NULL;
|
||||
buf_T *alt_buf = NULL;
|
||||
int name_was_missing;
|
||||
|
||||
if (not_writing()) /* check 'write' option */
|
||||
return FAIL;
|
||||
@ -1734,6 +1735,7 @@ int do_write(exarg_T *eap)
|
||||
fname = curbuf->b_sfname;
|
||||
}
|
||||
|
||||
name_was_missing = curbuf->b_ffname == NULL;
|
||||
retval = buf_write(curbuf, ffname, fname, eap->line1, eap->line2,
|
||||
eap, eap->append, eap->forceit, TRUE, FALSE);
|
||||
|
||||
@ -1743,7 +1745,11 @@ int do_write(exarg_T *eap)
|
||||
curbuf->b_p_ro = FALSE;
|
||||
redraw_tabline = TRUE;
|
||||
}
|
||||
/* Change directories when the 'acd' option is set. */
|
||||
}
|
||||
|
||||
// Change directories when the 'acd' option is set and the file name
|
||||
// got changed or set.
|
||||
if (eap->cmdidx == CMD_saveas || name_was_missing) {
|
||||
do_autochdir();
|
||||
}
|
||||
}
|
||||
|
@ -43,8 +43,8 @@ NEW_TESTS = \
|
||||
test_quickfix.res \
|
||||
test_signs.res \
|
||||
test_syntax.res \
|
||||
test_usercommands.res \
|
||||
test_timers.res \
|
||||
test_usercommands.res \
|
||||
test_viml.res \
|
||||
test_visual.res \
|
||||
test_window_id.res \
|
||||
|
@ -425,7 +425,7 @@ static int included_patches[] = {
|
||||
// 2018,
|
||||
// 2017,
|
||||
// 2016 NA
|
||||
// 2015,
|
||||
2015,
|
||||
2014,
|
||||
2013,
|
||||
2012,
|
||||
@ -602,7 +602,7 @@ static int included_patches[] = {
|
||||
1841,
|
||||
1840,
|
||||
1839,
|
||||
// 1838 NA
|
||||
1838,
|
||||
1837,
|
||||
1836,
|
||||
1835,
|
||||
|
@ -14,6 +14,7 @@ local neq = global_helpers.neq
|
||||
local eq = global_helpers.eq
|
||||
local ok = global_helpers.ok
|
||||
|
||||
local start_dir = lfs.currentdir()
|
||||
local nvim_prog = os.getenv('NVIM_PROG') or 'build/bin/nvim'
|
||||
local nvim_argv = {nvim_prog, '-u', 'NONE', '-i', 'NONE', '-N',
|
||||
'--cmd', 'set shortmess+=I background=light noswapfile noautoindent laststatus=1 undodir=. directory=. viewdir=. backupdir=.',
|
||||
@ -440,6 +441,12 @@ end
|
||||
|
||||
local function rmdir(path)
|
||||
local ret, _ = pcall(do_rmdir, path)
|
||||
if not ret and os_name() == "windows" then
|
||||
-- Maybe "Permission denied"; try again after changing the nvim
|
||||
-- process to the top-level directory.
|
||||
nvim_command([[exe 'cd '.fnameescape(']]..start_dir.."')")
|
||||
ret, _ = pcall(do_rmdir, path)
|
||||
end
|
||||
-- During teardown, the nvim process may not exit quickly enough, then rmdir()
|
||||
-- will fail (on Windows).
|
||||
if not ret then -- Try again.
|
||||
|
26
test/functional/legacy/autochdir_spec.lua
Normal file
26
test/functional/legacy/autochdir_spec.lua
Normal file
@ -0,0 +1,26 @@
|
||||
local lfs = require('lfs')
|
||||
local helpers = require('test.functional.helpers')(after_each)
|
||||
local clear, eq = helpers.clear, helpers.eq
|
||||
local eval, execute = helpers.eval, helpers.execute
|
||||
|
||||
describe('autochdir behavior', function()
|
||||
local dir = 'Xtest-functional-legacy-autochdir'
|
||||
|
||||
before_each(function()
|
||||
lfs.mkdir(dir)
|
||||
clear()
|
||||
end)
|
||||
|
||||
after_each(function()
|
||||
helpers.rmdir(dir)
|
||||
end)
|
||||
|
||||
-- Tests vim/vim/777 without test_autochdir().
|
||||
it('sets filename', function()
|
||||
execute('set acd')
|
||||
execute('new')
|
||||
execute('w '..dir..'/Xtest')
|
||||
eq('Xtest', eval("expand('%')"))
|
||||
eq(dir, eval([[substitute(getcwd(), '.*[/\\]\(\k*\)', '\1', '')]]))
|
||||
end)
|
||||
end)
|
Loading…
Reference in New Issue
Block a user