Commits (24)
  • Dustin L. Howett's avatar
    Squashed 'pack/3rdparty/start/vim-go/' changes from d4a9cc7246..0906172085 · 10dff972
    Dustin L. Howett authored
    0906172085 update CHANGELOG.md for #2785
    6fa4425f6a Merge pull request #2785 from bhcleek/run/show-command
    ef32ee3e5d cmd: show command in :GoRun when g:go_debug includes shell-commands
    ec5a7b1149 update CHANGELOG.md for #2782
    c3993c8180 Merge pull request #2782 from bhcleek/run/relative-to-buffer
    f2e1f9827a update CHANGELOG.md for #2784
    77bf4a7741 Merge pull request #2784 from bhcleek/uri/multi-byte
    bda950117d lsp: handle encoding and decoding of multi-byte characters in paths
    0e8aef56b6 cmd: use the local variable prefix, l:, for clarity and consistency in go#cmd#Run
    13a7fc2ffe cmd: execute go run in the buffer's directory
    50d52bafa0 update CHANGELOG.md for #2779
    898ebbd1e9 Merge pull request #2779 from bhcleek/lsp/highlight/after-save
    7a97d3a21b fmt: preserve gopls diagnostic highlighting
    60a39be65e fmt: add tests for highlighting gopls diagnostics
    f5d34f40d6 update CHANGELOG.md for #2778
    8896e575ff Merge pull request #2778 from bhcleek/lsp/handle-null
    3284455ba4 lsp: handle null and empty lists in infoDefinitionHandler
    0334ef40a7 update CHANGELOG.md for #2768
    877a56b2a1 Merge pull request #2768 from bhcleek/lsp/godef/windows/filename
    14382b346e Merge pull request #2774 from bhcleek/complete/remove-unneeded-tests
    c82133cd54 complete: remove obsolete tests for go#complete#GoInfo()
    dcb1c9e09a update CHANGELOG.md for #2773
    2f52c327db Merge pull request #2773 from bhcleek/lsp/logs/readability
    6d7981a167 lsp: output logs in a more readable format
    57940ec982 def: fix the filename passed to gopls on Windows
    52b66c0b12 update CHANGELOG.md for #2753
    00ef99278a Merge pull request #2759 from bhcleek/lsp/debug/preserve-order
    fc8e40b1a6 lsp: preserve the order of messages in the log
    cb2aafa406 Merge pull request #2758 from bhcleek/lsp/diagnostic/version-handling
    299712cfbe lsp: highlight diagnostics when version is missing
    6a04f1030d Merge pull request #2756 from bhcleek/lsp/tempModFile-conditionally
    94dac537f7 lsp: only set tempModFile when g:go_gopls_temp_modfile is set
    23a33e4013 update CHANGELOG.md for #2752
    ff3eeea1be Merge pull request #2752 from bhcleek/fmt/gopls/error
    5157c43864 fmt: show errors when g:go_fmt_command is gopls
    be888d7761 remove gocode reference in README.md
    6af52b33b3 update CHANGELOG.md for #2747
    88e9d31ba9 Merge pull request #2747 from bhcleek/gopls/config
    8ba49a1bcb config: add g:go_gopls_temp_modfile
    95ac618211 config: add g:go_gopls_options
    1bf0d57e01 update CHANGELOG.md for #2733
    32026717bd Merge pull request #2733 from bhcleek/autocmd/multiple-errors
    192265909d update CHANGELOG.md for #2746
    af0a13f194 Merge pull request #2746 from bhcleek/lsp/highlight-after-goimports
    0df29414a4 lsp: drop out of date diagnostics
    252602d546 update CHANGELOG.md for #2743
    d123284b9c Merge pull request #2743 from bhcleek/go1.14
    f92bfc3d9e update for Go 1.14
    4556030b76 Merge pull request #2742 from bhcleek/issue/filetype
    4b4757674e issue: improve automated issue template execution
    dc02b2192f update CHANGELOG.md for #2729
    7cc81b55d9 Merge pull request #2729 from bhcleek/lsp/format
    0aa7e02803 update ISSUE_TEMPLATE.md
    e1211dbfb8 update ISSUE_TEMPLATE.md
    fe9dab9cde preserve previous quickfix errors from formatting
    26c00294a0 update CHANGELOG.md for #2727
    a32f714748 Merge pull request #2727 from bhcleek/lint/homogenize
    f17b742691 update CHANGELOG.md for #2736
    10bf9a0ddc Merge pull request #2736 from bhcleek/term/sizing
    67e51d0725 term: fix terminal window sizing
    692f483793 Merge pull request #2734 from orlangure/fix-gopls-matcher-help
    ef356a841c Fix g:go_gopls_matcher variable name in docs
    9fd82541cc fmt: add tests for gopls formatting
    8a8824f609 fmt: add an option to format with gopls
    ca65507cf9 fmt: scope bin_name uses and assign it at the top of go#fmt#Format
    e88217e137 fmt: use errorformat to parse errors
    aeae2aca0b update CHANGELOG.md for #2728
    be6d52dea0 Merge pull request #2728 from bhcleek/lsp/config/matcher
    0c839eaad3 config: replace g:go_gopls_fuzzy_matching with g:go_gopls_matcher
    7d21c2e1ae lint: set progress and statusline for consistently
    936c7c3896 lint: homogenize vet and errcheck handling
    13c943aaad update CHANGELOG.md for #2726
    092da30975 Merge pull request #2726 from bhcleek/lint/errcheck/options-no-package
    c99b2f176d lint: execute errcheck using ExecInDir
    364a8cfe33 update CHANGELOG.md for #2724
    b8213ab989 Merge pull request #2724 from drichardson/use_COMSEC
    fd4baa7ee0 Use COMSPEC to find cmd.exe.
    b3c3b65853 update CHANGELOG.md for #2720
    5a427b9084 Merge pull request #2720 from bhcleek/lint/golangci-lint/moar-problems
    b865d5c751 lint: handle more golangci-lint output
    10f8fea26e update CHANGELOG.md for #2639
    9179a56193 Merge pull request #2639 from ldelossa/louis/vim8-term-mode
    e76a194a89 term: enable tests for Vim8
    1757165a9a update CHANGELOG.md for #2715
    0e74c13a58 Merge pull request #2715 from bhcleek/pr-2655
    1232d66069 lint: remove disable-all option if no lint is enabled
    636c7f5054 lint: improve golangci-lint interoperability
    25ab5d31c8 update CHANGELOG.md for #2706
    5ffaef81e4 Merge pull request #2706 from bhcleek/golangci-lint/failures
    8708d8daba update CHANGELOG.md for #2713
    582796994a Merge pull request #2713 from drichardson/fix-2712
    f4741a08c9 Set shell to cmd.exe with flag /C before running system command on windows.
    593b8e2c35 lint: add tests for golangci-lint problems
    7d86f18877 lint: specify which linter's messages are to be filtered
    d418151332 lint: update golangci-lint handling to report compiler problems
    d698de4a29 Merge pull request #2705 from bhcleek/test/vim-8.2
    d86826fd1e update README.md with a section on contributing
    83a65fb736 build and test againt Vim 8.2
    13a33b0675 doc: fix terminal tag
    4f47808b43 update CHANGELOG.md for #2660
    ccb265a3ff Merge pull request #2660 from igrmk/skip-private
    ea431dc372 update CHANGELOG.md for #2696
    5693974d24 Merge pull request #2696 from bhcleek/gopls/defaults
    ccac4bce7c update CHANGELOG.md for #2703
    d2aa3527b2 Merge pull request #2703 from bhcleek/lsp/no-same-ids
    f46bfed842 lsp: handle some null arrays
    a086b60909 update CHANGELOG.md for #2699
    90b0b28386 Merge pull request #2699 from bhcleek/mappings/go-def-type
    b5405bcbc9 mappings: add missing help for newish mappings
    bae7d9b341 handle vertical modifiers correctly
    6c147b2d0d allow additional command modifiers
    3481b593f0 make conditional buildtags work
    fdb828407b implement vim8 terminal functionality
    16911da6ca tags: document g:go_addtags_skip_unexported
    8f7d7e6fe4 cosmetic
    4939c79d40 rename flag go_addtags_skip_private to go_addtags_skip_unexported
    d2666bbfc5 add documentation for new go_addtags_skip_private option
    e5d6960ab9 add new go_addtags_skip_private option
    57ee7595d3 lsp: use gopls defaults by default
    b686094cef update CHANGELOG.md for #2695
    88d88571b6 Merge pull request #2695 from bhcleek/config/complete-unimported/enabled-by-default
    077d67d442 config: enable g:go_gopls_complete_unimported by default
    9b34b29fcc update CHANGELOG.md for #2692
    a9b2bb0827 Merge pull request #2692 from bhcleek/rename/command
    462257ae83 rename: use the correct variable to execute gopls
    3d4f148832 update CHANGELOG.md for #2686
    d66f327636 Merge pull request #2686 from bhcleek/complete/no-gocode
    e2395b7b22 update CHANGELOG.md for #2690
    e0224b42ea Merge pull request #2690 from bhcleek/config/rename-go_debug_breakpoint_symbol
    7bb3bec9eb rename g:go_debug_breakpoint_symbol
    bd2e839a0b update CHANGELOG.md for #2676
    fd1477d735 Merge pull request #2676 from louzp/master
    9adfd0bd7b Merge pull request #2674 from oalders/fix-typo
    4032fe716b Merge pull request #2685 from bhcleek/lsp/latest
    311ea9dbbe Merge pull request #2688 from abeltay/update-readme
    184a888f1f Update README to new GoMetaLinter
    061cc207fa complete: drop support for gocode
    804c8db75f update CHANGELOG.md for v1.22
    891f391c58 plugin: use latest gopls
    59e14ba3fe Merge pull request #2683 from bhcleek/lsp/debug
    605cd6b40d Merge pull request #2684 from bhcleek/lsp/v0.2.2
    9cfc2fc2a2 plugin: pin gopls to v0.2.2
    5e8617e176 lsp: identify debug port message correctly
    7c1e962dee config: remove whitespace
    076091f88e doc: edit documentation for g:go_debug_breakpoint_symbol
    614d342aa5 Add debug breakpoint symbol config, And add documentation for the new config value
    be73eeb632 update CHANGELOG.md for #2672 and #2678
    144ce8dd76 Merge pull request #2678 from bhcleek/util/highlight/multi-line
    ed5a4defdf util: text property end_col calculation
    28c944721a Fix typo in docs
    025af24e79 Merge pull request #2672 from bhcleek/lsp/bdelete
    5aef4ff74d lsp: delete lsp buffer autocmds on BufDelete
    0aeb9e5648 Merge pull request #2669 from bhcleek/gotest/lsp
    c54c86c8f1 gotest: cycle files for gopls after setting cursor
    cd996e4a35 update CHANGELOG.md for #2667
    c8683b5563 Merge pull request #2667 from bhcleek/lint/errcheck/syntax-errors
    e131dbe3ff lint: handle Go syntax errors from errcheck
    8b60f95bdf lint: add test for errcheck with compiler error
    82376e0b49 minor refactors to some tests
    e1f168e4f6 Merge pull request #2666 from igrmk/documentation-small-fix
    7a56fd7f23 small documentation typo fix
    52a1ac97b0 update CHANGELOG.md for #2663
    2760cd697a Merge pull request #2663 from bhcleek/prop-ordering
    d5ef8ec059 update CHANGELOG.md for #2662
    bd6341559c define text property types in syntax/go.vim
    b5ae1493b7 Merge pull request #2662 from bhcleek/prop/remove
    0d43f711c8 util: work around prop_remove bug in vim < 8.1.1035
    d15b85a710 update CHANGELOG.md for #2652
    4c5464a348 Merge pull request #2652 from bhcleek/text-properties
    e427e96dfd util: use byte2line to highlight when possible
    38da4fb228 refactor clearing highlighting
    aeee359d7b refactor highlighting to use text properties
    2ec5ad43c3 register text properties for highlighting
    810e4b9faf update CHANGELOG.md for #2649
    59088fd518 Merge pull request #2649 from bhcleek/lint/no-failure-progress
    5eaa306800 lint: do not echo on failure
    f7d0d82cbc update CHANGELOG.md for #2646
    b1872d94d5 Merge pull request #2646 from bhcleek/lint/failure-messages
    3fb831015d lint: update progress with failure messages
    ee2071d8e6 update CHANGELOG.md for #2643
    22928f28d7 Merge pull request #2643 from bhcleek/gopls/diagnostics/clear
    00787d9d9c Merge pull request #2644 from bhcleek/gopls/default
    2dfd13ab63 lsp: simplify default lsp instance
    c4377cd924 clear matches when a buffer is removed from a window
    ae7b7ea6dc Merge pull request #2642 from hogedigo/patch-1
    3f80994f4c fix typo
    393807eb84 update CHANGELOG.md for #2640
    7f0d635f96 Merge pull request #2640 from bhcleek/config/gopls_enabled/test
    6baebfbfc7 Merge pull request #2641 from bhcleek/doc/rename/gopls-warning
    a50a0b095c doc: remove obsolete warning
    77611d2860 update CHANGELOG.md for #2638
    13a899a8ec config: add a test for go_gopls_enabled=0
    46459ee73d Merge pull request #2638 from skanehira/fix-open-error
    a179cf927d add default value at newlsp for #2637
    412778027b fix #2637
    5f2a478647 update CHANGELOG.md for #2630
    83634c4fd6 Merge pull request #2630 from bhcleek/issue/gopls-version
    d2c0ec4b54 update CHANGELOG.md for #2632
    2db252a0c2 Merge pull request #2632 from bhcleek/doc/faq/function-not-found
    772421987a doc: update unknown function FAQ answer
    18fedb94c4 issue: include gopls version
    b1b9a1b0d4 update CHANGELOG.md for #2627
    2debac85fd Merge pull request #2627 from bhcleek/snippets
    185720d528 snippets: remove rew snippet
    e433d67a93 update CHANGELOG.md for #2612
    d30be89569 Merge pull request #2612 from bhcleek/lsp/analysis
    9d912c9d90 Merge pull request #2626 from bhcleek/lsp/debug
    39dfc11809 lsp: adjust the regex for getting the debug port
    a469939504 lsp: add g:go_diagnostics_enabled
    b095c563ff lint: make gopls diagnostics visible
    9262f08002 lsp: add support for staticcheck analysis
    f4c8ba9cee lsp: default state handleResult to a noop
    48773caf0b lint: correct a typo in a comment (is -> isn't)
    0e33a2334d update CHANGELOG.md for #2624
    6e92983ca0 Merge pull request #2624 from bhcleek/lsp/placeholders/expansion
    345050380f install latest version of covimerage
    9cd7495c2f lsp: handle completions with placeholders as snippets
    51e9f40e8d update CHANGELOG.md for #2623
    18cd29a118 Merge pull request #2623 from bhcleek/snippets
    ce9140075f snippets: add some snippets from #2455
    8e6fcae371 update CHANGELOG.md for #2615
    ba85eb8384 Merge pull request #2615 from hoenn/master
    16f5cdc0cc update CHANGELOG.md for #2618
    ee51371226 Merge pull request #2618 from bhcleek/rename/rename-config
    df4fde2839 rename: change command config variable name
    c74d4de7cc Refactor vet cmd construction
    bca5f56b46 Merge pull request #2616 from bhcleek/doc/link-options
    622bf7e0e8 doc: remove link notation from options
    20fd5f6e51 update CHANGELOG.md for #2613
    c640518339 Merge pull request #2613 from hdonnay/master
    be9535c2b7 doc: clarify the example for b:go_fmt_options
    7b4fb73b73 Add build tags to GoVet, surface vet invocation errors
    106edc862b Merge pull request #2614 from ian-howell/update-docs
    084bb3e6bc Remove docs for defunct g:go_metalinter_disabled
    e63b2cb459 fmt: respect buffer-level go_fmt_options
    d27aa72b20 Merge pull request #2610 from bhcleek/lsp/completion/placeholders
    4699dedfb4 lsp: use g:go_gopls_use_placeholders to register for snippets
    09a5a51fbd update CHANGELOG.md for #2609
    581d1b732d Merge pull request #2609 from bhcleek/referrers/lsp/fix
    9e676a5257 referrers: fix handling of the gopls case
    2a37642747 Merge pull request #2606 from bhcleek/impl/tests
    3dfc4ab1b2 update CHANGELOG.md for #2605
    87780c14f3 Merge pull request #2605 from bhcleek/lsp/disable
    0911de061e impl: expect new TODO comment
    e3a0e1ead2 lsp: add an option to disable use of gopls
    git-subtree-dir: pack/3rdparty/start/vim-go
    git-subtree-split: 0906172085c35e02436027efb29491b2cc021dd4
  • Dustin L. Howett's avatar
    Merge commit '10dff972' · d2fcf182
    Dustin L. Howett authored
  • Dustin L. Howett's avatar
    Squashed 'pack/3rdparty/start/tagbar/' changes from a0f51bd5a6..679a9d9ac9 · 35c4fe41
    Dustin L. Howett authored
    679a9d9ac9 Block ProcessFile from processing unloaded or nonexistant buffers (#589)
    6dafb3dfe8 Merge pull request #308 from gryf/show_tag_kind2
    f3b76f9832 Fix for embedded interfaces
    175f5053a1 Add package to singular_types dict to make it work for Golang
    d864a44a3d Additional function for displaying type of a current tag.
    db6f884fc7 Update information amout contributors
    86ab45aba7 Fix document syntax highlight (#587)
    65e014e5a3 Revert incorrect function argument handling 'fix'
    2e952fb336 Fix bug in function 'put', was parsing wrong number of args (#585)
    bdcdd8d0d7 Fix argument handling bug in AutoUpdate function (#584)
    3bd3ba403d gotags: kinds support ```e:embedded``` and ```w:fields``` (#583)
    c876263e47 feat(dart_ctags): Support dart if dart_ctags is installed (#581)
    3753b235a1 Merge pull request #580 from jrc2139/gotags
    0a8a22e34d feat(gotags): override ctags for go if gotags is installed
    524aa93372 Add g:tagbar_show_balloon option
    ccc0d64e59 Merge pull request #575 from majutsushi/termencoding
    3c4c8af4b4 Test whether &termencoding even exists before use
    d1c3f516ea Use Reviewdog to run Vint for nicer PR feedback (#572)
    ce30e3f0d1 Fall back to using bourne shell if $SHELL is Elvish (#571)
    git-subtree-dir: pack/3rdparty/start/tagbar
    git-subtree-split: 679a9d9ac9579bd18225409d85ed4870fb6c9c62
  • Dustin L. Howett's avatar
    Merge commit '35c4fe41' · 3f02895d
    Dustin L. Howett authored
  • Dustin L. Howett's avatar
    Squashed 'pack/3rdparty/start/ultisnips/' changes from c309637e02..ee31ea1c7d · cae94c81
    Dustin L. Howett authored
    ee31ea1c7d Fix typo in doc (#1197)
    e910b4fb9e Fix identity check to content equality.
    6f39b0e915 Feature: implement choices (#1172)
    129d33fc34 Send the correct trigger key to _handle_failure() (#1181)
    a6c9d4fd1b Handle general case of MYVIMRC not being set in environment (#1173)
    bb760a5d8f Remove unnecessary print (#1178)
    96026a4df2 Expand shell variables in MYVIMRC. (#1162)
    4f4d500e21 Add a trigger for ListSnippets in repro environment.
    dc9d8f5e16 Replace boolean parameter to `jump` with an Enum (#1125)
    1027ef784d Formatting.
    c4bb89495a Normalize all paths before returning them (#1159)
    29068c5e79 Show better error message if no directory for snippets is found. (#1156)
    f9679e3387 Adedd stuff to Pipfile.
    3a8b0548b3 Do not use realpath in most cases (#1154)
    43b059bf1c Other triggers for the repro image.
    d36bdaf93d Added missing px.snippets import on example (#1151)
    git-subtree-dir: pack/3rdparty/start/ultisnips
    git-subtree-split: ee31ea1c7d08ced8577120b4c1d55c5a05351a75
  • Dustin L. Howett's avatar
    Merge commit 'cae94c81' · 153f4b8b
    Dustin L. Howett authored
  • Dustin L. Howett's avatar
    Squashed 'pack/3rdparty/start/vim-snippets/' changes from 5d259617f5..a18c2155dd · d0acbdae
    Dustin L. Howett authored
    a18c2155dd Add perl ddp snippet
    6bc21b994e Fixes: 'null == null' and performance improvements
    30fad6c2c4 C# Equals snippet added
    33f89dbf20 Javascript af afb snippet
    7e8a72c093 Javascript a snippet
    6e6b69fd5c Update Comment, Disclosure for markdown
    8eafafe246 markdown: add tb scripts
    28ad6344e1 tex.snippets: generalize \begin snippet
    66975121c7 Add pudbr for remote pudb debugging
    35067caeca Replace old logging functions in julia by macros
    2ee1ce0c02 Added julia test snippets
    b765719ce8 Update tex.snippets
    cca8bdc4df added process with reset snipped for VHDL
    56e5bb1046 Add rmd.snippets
    f0289e816c update r.snippets and add rmd.snippets for rmarkdown (copied from https://github.com/jalvesaq/Nvim-R/tree/master/R)
    bda7ca48e6 Rust: Fix description of function snippet
    71b30be001 Update snippet to include Render
    867f5cc995 Add snippets for new glossary items in TeX
    5279654b3e Remove undefined "pipefail" from shell snippet
    977cc05194 move cursor to end of snippet instead of newline (because normally you'd save and run your code rather than write more code)
    e3650624c7 fix formatting again
    38ab6663b9 fix formatting
    7224df39f4 Elixir - add piping pry
    f324a43a5f Add octave & pandoc
    2f653c1f36 Limit snippets to beginning of line
    a3e0ad0d0e Use standard triggers for switch(case)
    a8e89d40b6 Use standard triggers for while
    0856ec44ed Use VISUAL for shell control statements
    180d239935 updated Ultisnips puppet exec snip to reflect more commonly used fields
    3ba36bb710 Extend verilog snippets
    a7a7d4d2dd Guess class name from filename for class and module snippet in ruby
    c1d1cdce4f Fix hash syntax
    2d3c81cf32 Fix some rails snippets that were failing because of a closing brace
    7454ec49ea fix the `$0` issue
    git-subtree-dir: pack/3rdparty/start/vim-snippets
    git-subtree-split: a18c2155dd219edcb94dab573b005f40433fbc84
  • Dustin L. Howett's avatar
    Merge commit 'd0acbdae' · 2dfd3d7f
    Dustin L. Howett authored
  • Dustin L. Howett's avatar
    Squashed 'pack/3rdparty/start/vim-fugitive/' changes from 13fdeb5fa7..0e35c9bbc7 · b931c306
    Dustin L. Howett authored
    0e35c9bbc7 Fix typos in README
    9a4d730270 Drop support for :{windowheight}Git
    ccf582838b Fix some inconsistencies in help mappings
    d3cdb3208d Have remaining mappings use S:Map()
    4a24804adc Rewrite feature summary in README
    5ad42e307f Factor in 8.2.0239 when checking for job env support
    68f570ec38 Enable closing stdin by pressing CTRL-D
    12e43b62cc Don't use "Head:" header for commit under cursor
    ffd7042c15 Fix echoed line during :Gread
    dbc8d9a32c Fix list indexing bug
    e06005a742 Fix staging hunk that comes after binary file
    8388b6d0fb Use status headers for commit maps
    7ae214e445 Fix erroneous temp buffer on non-listing :Git branch
    3c3e6ea67b Support most top level Git options
    5d7516d3c1 Don't override alternate implementations of legacy commands
    8aaf744f2a Don't rely on rebase --autosquash shorthand
    d102dd92fd Fix :GRename ../
    9acced1409 Fix typo
    3bd69748c3 Remove remaining :Gsubcmd calls from implementation
    abb4a26c1e Fix internal documentation command references
    3e59a79e48 Move :Ggrep docs near other :Gcommands
    e84f023edf Remove redundant exists(':Gblame') check
    d0dceb9feb Change subtopic help tag style from :Git- to :Git_
    025151bc78 Fix deletion of trailing fold upon loading blob
    aada6479cf Use :Gsubcmd completion for :Git subcmd
    6b40e51008 Remove most uses of s:EchoExec()
    c452181975 Remove old :Git! temp buffer behavior
    430253c302 Drop support for non-PTY :!
    a5c921190a Override existing config values on :Git -c config.option=
    31629d8bd1 Use :read for :{range}Git! --paginate
    5a5a95b90a Tease apart bang and non-bang variants of :Gread
    87f998e15f Remove erroneous :Gedit! deprecation
    2acea41bef Handle custom Git executable for :Git --paginate
    c0aad3ac78 Update internal uses of :Git! to :Git --paginate
    8b83d6ec6c Use :pedit for :Git! --paginate
    efb1c8a29d Add - map for Push header
    9e4a5239ee Respect 'wildignorecase' when completing :Gedit
    349b18d373 Pull out s:fileignorecase()
    2e67f82b79 Refine handling of pagination via temp buffer
    a81ba999e8 Correctly treat config keys without values as true
    cb1300d751 Deprecate :Gsplit! family in documentation
    d10dc9ea93 Quarantine deprecated commands in documentation
    2401f1a7da Work around minibufexpl/autochdir induced error
    81ca98d7e8 Fix Trailing Characters, Invalid range error for :<count>Gstatus
    9bbbb65888 Add capitalized versions of non-standard commands
    9f69019424 Partially support :Git difftool on old Git
    98f67310aa Parameterize subcommand Git executable
    460664018a Fix typo --include-index to --keep-index in help
    0e6f72b005 Allow custom subcommands outside of Git repository
    e144a9f559 Extract helper for setting job environment
    df3ac9d278 Enable opening arbitrary URLs with :Gbrowse
    3c45ed0d13 Fix false positive on deprecated :.Glog usage
    a95972cefc Don't clobber alternate buffer on :Gstatus
    18582f4986 Remove deprecated C map to fix broken warning
    083f3c23cc Preserve existing 'scrollbind' arrangement with :Gblame
    9ecd6ebf92 Eliminate last temporary :cd
    3221cdfbde Support :Git -c config.name=value
    8e90d82eb4 Use --no-optional-locks for :Gstatus
    1c1014a046 Continue running commands on Vim exit
    268a9c1b8f Don't make assumptions about current line number when displaying commit
    fc0199555e Extend nvim carriage return workaround to ptys
    d926e3beb4 Try to wipe out temp buffer from :read
    40872a9555 Don't use job pty unless Vim supports it
    279d56eb47 Show unpulled before unpushed
    54b308eedb Revert work in progress changes
    655f7c92f3 Show unpushed and unpulled sections for both upstream and push
    477f26cf50 Include refs/heads in constructed push commands
    76ffaf4e7d Recognize pull.rebase=preserve in :Gstatus
    90b7d98b6c Temporarily restore User Fugitive autocommand
    4637aca145 Remove tags file warning
    cd7db1d57c Replace old public detection API with hint errors
    036fe0f084 Job environment variables are broken on Neovim
    22255613f7 Replace :Gcommit/:Grevert with standard job runner
    c989c1f59e Replace :Grebase/:Gmerge/:Gpull with standard job runner
    6b18f7b758 Remove :Gwrite in :Git diff
    8d6f9734c1 Use jobs for :Git
    4301c57f24 Extract helper script creator function
    7f22cc6167 Revert "Specify shell command, not wrapper, in b:dispatch"
    9d62c67737 Remove legacy autocommands
    71038e83f1 Try to use relative path for :Ggrep
    21ed533001 fugitive.vim 3.2
    29153d5ba1 Provide git config --get-all wrapper
    8d4b85ed09 Replace --format with --pretty=format for older Git
    708595d996 Fix comment typo
    dc6719e7b0 Fix :Gdiffsplit! help typo
    c48db08e4e Use appropriate slashes for :Dispatch working directory
    2ebdeef9e0 Change :Git --paginate from :terminal to temp buffer
    bc0b78ee84 Remove dead code
    5bcb42164e Specify shell command, not wrapper, in b:dispatch
    1a6934fc7e Fix FugitiveParse() return value documentation
    397fb99921 Provide FugitiveBlob style autocommands
    5b1213d0db Fix :Gmerge
    ae52b5a96a Better PowerShell support
    9f032ed040 Prevent alternate buffer change loading Fugitive buffer
    d428032600 Fix netrw gx in Fugitive buffers AGAIN
    c83355d5c5 Accomodate loading Fugitive buffers in popup window
    4732bb964a Generalize :Git environment variable overrides
    3e32a55619 Avoid false positives on rebase todo handler
    a65db6fcf8 Move :Gmerge warning to top level function
    305337a9c1 Begin phasing out :Git --paginate special case
    6a638f2392 Match "* Unmerged path" in mergetool
    6bc345f6f1 Map cmt to :Git mergetool
    def982ac4d Softly deprecate :Gmerge for quickfix conflicts
    5fe99dc5df Provide interface for subcommands to set execution options
    394c925381 Fix netrw gx in Fugitive buffers
    4074727343 Really fix packed ref handling in :Gbrowse
    cfa7bdc82a Handle packed refs in :Gbrowse
    ddd64fc4c5 Provide :Git difftool and :Git mergetool
    2bcf755c6e Run QuickFix autocommands on :Gclog
    295f41bbf4 Save diff context in :Gclog
    9ec6b55d03 Improve display of :Gclog --summary
    3604fab3b7 Fix whitespace in README
    6d011f1ea5 Improve :Gclog window title
    726fdf1c94 Support ...commit as HEAD...commit
    3bf602b13d Use underlying commit not tag for :Gedit tag:path
    3729c351e1 Fix unknown function error on Vim < 7.2.061
    7848779d3b Don't error if we can't :bwipeout
    b68b6d4329 Mention vim-phabricator for Phabricator browsing
    6d4564a05e Fix timer invocation
    5d37b17e34 Match Git semantics for GIT_CEILING_DIRECTORIES symlink resolution
    b48a572475 Use timers to avoid Vim patch 8.1.1756
    e1ab8fff09 Handle both amended and new commits during rebase
    d3a2bdbe2c Don't abort rebase after committing on last step
    42c6fd1440 Don't override explicit empty string for core.askPass
    671a85daba Fix erroneous ? escaping in * pattern
    6d9dd103c0 Fix false positive matching filename in blame
    3b1da8b217 Remove debugging function
    67efbf66e0 Don't fall back to pwd for Git dir of blank filename
    eed46c1f24 Perform automatic :diffoff on :Gdiffsplit /external/file buffers
    dc5320630d Provide explanatory error on :Gdiff ~
    git-subtree-dir: pack/3rdparty/start/vim-fugitive
    git-subtree-split: 0e35c9bbc78159318e7b7ffd228f09a96afb8fde
  • Dustin L. Howett's avatar
    Merge commit 'b931c306' · 016edf0f
    Dustin L. Howett authored
  • Dustin L. Howett's avatar
    Squashed 'pack/3rdparty/start/vim-surround/' changes from e4c4cc0f81..f51a26d371 · d966cbc3
    Dustin L. Howett authored
    f51a26d371 Fix bug when closing delimiter is at line end (#284) (#285)
    git-subtree-dir: pack/3rdparty/start/vim-surround
    git-subtree-split: f51a26d3710629d031806305b6c8727189cd1935
  • Dustin L. Howett's avatar
    Merge commit 'd966cbc3' · ff3a0736
    Dustin L. Howett authored
  • Dustin L. Howett's avatar
    Squashed 'pack/3rdparty/start/ctrlp/' changes from 44c8e24956..585143acbe · c507bbc1
    Dustin L. Howett authored
    585143acbe Merge pull request #527 from ctrlpvim/fix-520
    aad415299f Fix #520
    git-subtree-dir: pack/3rdparty/start/ctrlp
    git-subtree-split: 585143acbe15f362852d78bd050baff3c12902d7
  • Dustin L. Howett's avatar
    Merge commit 'c507bbc1' · 2ec75cc7
    Dustin L. Howett authored
  • Dustin L. Howett's avatar
    Squashed 'pack/3rdparty/start/neocomplete/' changes from 5f3e213c62..0f83788cb6 · b9f7a7b8
    Dustin L. Howett authored
    0f83788cb6 Fix #615 README
    git-subtree-dir: pack/3rdparty/start/neocomplete
    git-subtree-split: 0f83788cb67e0743a3a9c8d3a3a6e52a01bdc6c2
  • Dustin L. Howett's avatar
    Merge commit 'b9f7a7b8' · 983d2f58
    Dustin L. Howett authored
  • Dustin L. Howett's avatar
    Squashed 'pack/3rdparty/start/vim-ps1/' changes from 0b2509f210..2decf51f19 · 2b5e964d
    Dustin L. Howett authored
    2decf51f19 make compiler work under WSL and shellescape file path (#42)
    2008b24c1d add keyword lookup by PowerShell Get-Help (#41)
    7283c6bb25 Add compiler for running powershell scripts (#40)
    72de10080d Only highlight dashed-words starting with an approved verb. (#39)
    d11593b4a6 Make docstring Parameters less visible (#36)
    git-subtree-dir: pack/3rdparty/start/vim-ps1
    git-subtree-split: 2decf51f19834434e34f1a8d79056b7014120ca3
  • Dustin L. Howett's avatar
    Merge commit '2b5e964d' · 7219d65f
    Dustin L. Howett authored
  • Dustin L. Howett's avatar
    Squashed 'pack/3rdparty/start/vim-sneak/' changes from 24e6c3f4cd..98a5c946d6 · d5eac4b2
    Dustin L. Howett authored
    98a5c946d6 doc: style
    08414770f4 doc: how to "disable" mappings #248
    7afd63b455 label-mode: support multibyte labels
    git-subtree-dir: pack/3rdparty/start/vim-sneak
    git-subtree-split: 98a5c946d6dc76528b9d9b044059b5ef1fab5a48
  • Dustin L. Howett's avatar
    Merge commit 'd5eac4b2' · 184eb1df
    Dustin L. Howett authored
  • Dustin L. Howett's avatar
    go: enable terminal · 40e0202d
    Dustin L. Howett authored
  • Dustin L. Howett's avatar
    Squashed 'pack/3rdparty/start/vim-jsonnet/' content from commit b7459b36e5 · 3a927361
    Dustin L. Howett authored
    git-subtree-dir: pack/3rdparty/start/vim-jsonnet
    git-subtree-split: b7459b36e5465515f7cf81d0bb0e66e42a7c2eb5
  • Dustin L. Howett's avatar
  • Dustin L. Howett's avatar
    Fix vimrc for vim < 8.0 · 3bcb15b7
    Dustin L. Howett authored
......@@ -450,6 +450,8 @@
let g:go_highlight_extra_types = 1
let g:go_highlight_space_tab_error = 1
let g:go_highlight_trailing_whitespace_error = 1
let g:go_term_enabled = 1
let g:go_version_warning = 0
let g:tagbar_type_go = {
\ 'ctagstype' : 'go',
......@@ -626,7 +628,7 @@ endif
" }
" { termguicolors, SGR mouse mode for xterm
if &term =~ "xterm-.*color"
if has('termguicolors') && &term =~ "xterm-.*color"
set termguicolors
set ttymouse=sgr
......@@ -639,7 +641,7 @@ endif
" }
" Use DEVroot vimrc if available {
if getenv('DEV') != v:null && filereadable($DEV."/.vimrc")
if $DEV != "" && filereadable($DEV."/.vimrc")
source $DEV/.vimrc
" }
......@@ -1107,13 +1107,13 @@ c) End the string with a colon ':' followed by a Vim command to execute that
See also: Vim's |++opt| and |+cmd|.
d) Submit two dots '..' to go upward the directory tree by 1 level. To go up
d) Input two dots '..' and then hit the <Enter> key to go upward the directory tree by 1 level. To go up
multiple levels, use one extra dot for each extra level:
Raw input Interpreted as
.. ../
... ../../
.... ../../../
..<Cr> ../
...<Cr> ../../
....<Cr> ../../../
Note: if the parent directories are large and uncached, this can be slow.
......@@ -63,9 +63,7 @@ To install Vim (as opposed to MacVim) with homebrew:
Make sure you have any of these packages:
* vim-nox
* vim-gtk
* vim-gnome
* vim-athena
* vim-gtk3
Which package depends on your graphical environment (except vim-nox which is
for vim with no GUI).
name: Vint
on: [push, pull_request]
fail-fast: false
runs-on: ubuntu-latest
- name: Checkout
uses: actions/checkout@master
- name: Set up Python
uses: actions/setup-python@v1
- name: Run vint with reviewdog
uses: reviewdog/action-vint@v1.0.1
python-version: 3.7
- name: Setup dependencies
run: pip install vim-vint
- name: Run Vimscript Linter
run: vint .
github_token: ${{ secrets.github_token }}
reporter: github-pr-review
......@@ -87,8 +87,11 @@ against Tagbar](https://github.com/majutsushi/tagbar/issues?labels=ctags-bug&pag
## License
Vim license, see LICENSE
Tagbar is distributed under the terms of the *Vim license*, see the included [LICENSE][] file.
## Maintainer
## Contributors
Jan Larres <[jan@majutsushi.net](mailto:jan@majutsushi.net)>
Tagbar was originally written by [Jan Larres](https://github.com/majutsushi).
It is actively maintained by [Caleb Maclennan](https://github.com/alerque).
At least [45 others have contributed](https://github.com/majutsushi/tagbar/graphs/contributors) features and bug fixes over the years.
Please document [issues](https://github.com/majutsushi/tagbar/issues) or submit [pull requests](https://github.com/majutsushi/tagbar/issues) on Github.
......@@ -555,6 +555,22 @@ Example:
let g:tagbar_indent = 1
Default: 1
Whether balloon messages should be shown in the Tagbar window.
Possible values are:
0: Don't show any balloon messages.
1: Show balloon messages. This is only available in the GUI when
compiled with the |+balloon_eval| feature.
let g:tagbar_show_balloon = 0
Default: 1
......@@ -894,6 +910,17 @@ tagbar#currenttag({format}, {default} [, {flags}])
%{tagbar#currenttag('[%s] ','')}
< then the function "myfunc" will be shown as "[myfunc()] ".
Additionally you can show the kind (type) of the current tag, using following
tagbar#currenttagtype({format}, {default})
{format} and {default} are treated in the same way as for
tagbar#currenttag function.
Altering previous example, like below: >
%{tagbar#currenttag('[%s] ','')}\ %{tagbar#currenttagtype("(%s) ", '')
< the function "myfunc" will be shown as "[myfunc()] (function)".
Note that if there is an error when processing the current file no error
message will be shown in order to not disrupt the statusline. If the function
doesn't seem to work right open the Tagbar window to see any error messages.
......@@ -67,6 +67,7 @@ function! s:setup_options() abort
\ ['indent', 2],
\ ['left', 0],
\ ['previewwin_pos', previewwin_pos],
\ ['show_balloon', 1],
\ ['show_visibility', 1],
\ ['show_linenumbers', 0],
\ ['singleclick', 0],
......@@ -86,7 +87,7 @@ call s:setup_options()
if !exists('g:tagbar_iconchars')
if has('multi_byte') && has('unix') && &encoding ==# 'utf-8' &&
\ (empty(&termencoding) || &termencoding ==# 'utf-8')
\ (!exists('+termencoding') || empty(&termencoding) || &termencoding ==# 'utf-8')
let g:tagbar_iconchars = ['▶', '▼']
let g:tagbar_iconchars = ['+', '-']
......@@ -10,6 +10,7 @@ pylint = "*"
mypy = "*"
black = "*"
python_version = "3.7"
This diff is collapsed.
......@@ -1094,7 +1094,7 @@ example illustrating an HTML anchor snippet.
------------------- SNIP -------------------
snippet a
<a href="${1:http://www.${2:example.com}}"</a>
<a href="${1:http://www.${2:example.com}}"
......@@ -25,9 +25,7 @@ However, with UltiSnips, it can be done via only one keypress:
## Implementation
Using awesome [vim-pythonx
which provides set of functions to make coding little bit easier.
This example uses the [vim-pythonx library](https://github.com/reconquest/vim-pythonx/blob/master/pythonx/px/snippets.py) which provides set of functions to make coding little bit easier.
global !p
......@@ -2,14 +2,17 @@
Let's imagine we're editing shell file and we need to debug some vars.
These examples use thes [vim-pythonx library](https://github.com/reconquest/vim-pythonx/blob/master/pythonx/px/snippets.py) which provides set of functions to make coding little bit easier.
Essentially, we will end up with snippet like that, that will automatically
insert location of the debug statement and variable name.
Let's imagine we're editing a shell file and we need to debug some state.
Example of that snippet is shown below:
We will probably end up with a snippet that will automatically insert the location of the debug statement, the variable name and its content:
global !p
import px.snippets
snippet pr "print debug" bw
prefix = t[1] + ": %q\\n' "
......@@ -22,7 +25,7 @@ prefix = "{}:{}: {}".format(
Now, we want to use same debug snippet, but dump variable to the file.
Now, we want to use same debug snippet, but dump output to a file.
How can we do it?
Simple, declare new snippet in that way:
......@@ -34,7 +37,7 @@ pr$1 >${2:/tmp/debug}
This snippet will expand `pr` snippet automatically (note `pr$1` part) after
This snippet will expand the `pr` snippet automatically (note `pr$1` part) after
jumping to the first placeholder (jump will be done automatically by UltiSnips
......@@ -48,5 +51,4 @@ def expand(snip, jump_pos=1):
`px.buffer.get()` and `px.cursor.get()` are simple helpers for the
`vim.current.window.buffer` and `vim.current.window.cursor`.
`px.buffer.get()` and `px.cursor.get()` are simple helpers for the `vim.current.window.buffer` and `vim.current.window.cursor`.
......@@ -4,8 +4,13 @@ Plug '/src/UltiSnips'
Plug 'honza/vim-snippets'
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"
" Weird choices for triggers, but I wanted something that is rarely typed and
" never eaten by the shell.
let g:UltiSnipsListSnippets="9"
let g:UltiSnipsJumpForwardTrigger="2"
let g:UltiSnipsJumpBackwardTrigger="1"
let g:UltiSnipsEditSplit="vertical"
call plug#end()
......@@ -196,7 +196,6 @@ class VimBufferProxy(vim_helper.VimBuffer):
diff = Position(direction, 0)
if len(change) != 5:
diff = Position(0, direction * len(change_text))
print(change, diff)
self._snippets_stack[0]._move(Position(line_number, column_number), diff)
#!/usr/bin/env python
# encoding: utf-8
"""Represents a Position in a text file: (0 based line index, 0 based column
index) and provides methods for moving them around."""
from enum import Enum
class Position:
class JumpDirection(Enum):
"""See module docstring."""
class Position:
"""Represents a Position in a text file: (0 based line index, 0 based column
index) and provides methods for moving them around."""
def __init__(self, line, col):
self.line = line
......@@ -57,7 +57,11 @@ def tokenize_snippet_text(
klass = token_to_textobject.get(token.__class__, None)
if klass is not None:
klass(parent, token)
text_object = klass(parent, token)
# TabStop has some subclasses (e.g. Choices)
if isinstance(text_object, TabStop):
seen_ts[text_object.number] = text_object
_do_parse(snippet_instance, text, allowed_tokens_in_text)
return all_tokens, seen_ts
......@@ -250,6 +250,49 @@ class MirrorToken(Token):
return "MirrorToken(%r,%r,%r)" % (self.start, self.end, self.number)
class ChoicesToken(Token):
P.S. This is not a subclass of TabStop,
so its content will not be parsed recursively.
CHECK = re.compile(r"^\${\d+\|")
def starts_here(cls, stream):
"""Returns true if this token starts at the current position in
return cls.CHECK.match(stream.peek(10)) is not None
def _parse(self, stream, indent):
next(stream) # $
next(stream) # {
self.number = _parse_number(stream)
if self.number == 0:
raise RuntimeError(
"Choices selection is not supported on $0"
next(stream) # |
choices_text = _parse_till_unescaped_char(stream, "|")[0]
self.choice_list = choices_text.split(",")
self.initial_text = "|{0}|".format(choices_text)
def __repr__(self):
return "ChoicesToken(%r,%r,%r,|%r|)" % (
class EscapeCharToken(Token):
......@@ -12,6 +12,7 @@ from UltiSnips.snippet.parsing.lexer import (
......@@ -27,6 +28,7 @@ from UltiSnips.text_objects import (
......@@ -35,12 +37,14 @@ _TOKEN_TO_TEXTOBJECT = {
ShellCodeToken: ShellCode,
PythonCodeToken: PythonCode,
VimLCodeToken: VimLCode,
ChoicesToken: Choices,
......@@ -80,3 +84,4 @@ def parse_and_instantiate(parent_to, text, indent):
resolve_ambiguity(all_tokens, seen_ts)
_create_transformations(all_tokens, seen_ts)
finalize(all_tokens, seen_ts, parent_to)
......@@ -74,10 +74,10 @@ class SnippetFileSource(SnippetSource):
elif event == "extends":
# TODO(sirver): extends information is more global
# than one snippet source.
filetypes, = data
(filetypes,) = data
self.update_extends(ft, filetypes)
elif event == "snippet":
snippet, = data
(snippet,) = data
assert False, "Unhandled %s: %r" % (event, data)
......@@ -3,6 +3,13 @@
"""Common code for snipMate and UltiSnips snippet files."""
import os.path
def normalize_file_path(path: str) -> str:
"""Calls normpath and normcase on path"""
return os.path.normcase(os.path.normpath(path))
def handle_extends(tail, line_index):
"""Handles an extends line in a snippet."""
......@@ -9,7 +9,7 @@ import glob
from UltiSnips import vim_helper
from UltiSnips.snippet.definition import SnipMateSnippetDefinition
from UltiSnips.snippet.source.file.base import SnippetFileSource
from UltiSnips.snippet.source.file.common import handle_extends
from UltiSnips.snippet.source.file.common import handle_extends, normalize_file_path
from UltiSnips.text import LineIterator, head_tail
......@@ -44,7 +44,7 @@ def _snipmate_files_for(ft):
ret = set()
for rtp in vim_helper.eval("&runtimepath").split(","):
path = os.path.realpath(os.path.expanduser(os.path.join(rtp, "snippets")))
path = normalize_file_path(os.path.expanduser(os.path.join(rtp, "snippets")))
for pattern in patterns:
for fn in glob.glob(os.path.join(path, pattern)):
......@@ -11,9 +11,10 @@ from UltiSnips import vim_helper
from UltiSnips.snippet.definition import UltiSnipsSnippetDefinition
from UltiSnips.snippet.source.file.base import SnippetFileSource
from UltiSnips.snippet.source.file.common import (
from UltiSnips.text import LineIterator, head_tail
......@@ -25,7 +26,7 @@ def find_snippet_files(ft, directory):
directory = os.path.expanduser(directory)
for pattern in patterns:
for fn in glob.glob(os.path.join(directory, pattern % ft)):
return ret
......@@ -55,7 +56,9 @@ def find_all_snippet_directories():
"directory is reserved for snipMate snippets. Use another "
"directory for UltiSnips snippets."
pth = os.path.realpath(os.path.expanduser(os.path.join(rtp, snippet_dir)))
pth = normalize_file_path(
os.path.expanduser(os.path.join(rtp, snippet_dir))
return all_dirs
......@@ -196,7 +199,7 @@ def _parse_snippets_file(data, filename):
if head == "error":
yield (head, tail)
actions[head], = tail
(actions[head],) = tail
elif head and not head.startswith("#"):
yield "error", ("Invalid line %r" % line.rstrip(), lines.line_index)
......@@ -13,7 +13,7 @@ import vim
from UltiSnips import vim_helper
from UltiSnips import err_to_scratch_buffer
from UltiSnips.diff import diff, guess_edit
from UltiSnips.position import Position
from UltiSnips.position import Position, JumpDirection
from UltiSnips.snippet.definition import UltiSnipsSnippetDefinition
from UltiSnips.snippet.source import (
......@@ -47,6 +47,13 @@ def _ask_user(a, formatted):
return None
def _show_user_warning(msg):
"""Shows a Vim warning message to the user."""
vim_helper.command("echohl WarningMsg")
vim_helper.command('echom "%s"' % msg.replace('"', '\\"'))
vim_helper.command("echohl None")
def _ask_snippets(snippets):
"""Given a list of snippets, ask the user which one they want to use, and
return it."""
......@@ -58,6 +65,8 @@ def _ask_snippets(snippets):
def _select_and_create_file_to_edit(potentials: Set[str]) -> str:
assert len(potentials) >= 1
file_to_edit = ""
if len(potentials) > 1:
files = sorted(potentials)
......@@ -140,7 +149,7 @@ class SnippetManager:
"""Jumps to the next tabstop."""
vim_helper.command("let g:ulti_jump_forwards_res = 1")
vim_helper.command("let &undolevels = &undolevels")
if not self._jump():
if not self._jump(JumpDirection.FORWARD):
vim_helper.command("let g:ulti_jump_forwards_res = 0")
return self._handle_failure(self.forward_trigger)
return None
......@@ -150,7 +159,7 @@ class SnippetManager:
"""Jumps to the previous tabstop."""
vim_helper.command("let g:ulti_jump_backwards_res = 1")
vim_helper.command("let &undolevels = &undolevels")
if not self._jump(True):
if not self._jump(JumpDirection.BACKWARD):
vim_helper.command("let g:ulti_jump_backwards_res = 0")
return self._handle_failure(self.backward_trigger)
return None
......@@ -176,7 +185,7 @@ class SnippetManager:
rv = self._try_expand()
if not rv:
vim_helper.command("let g:ulti_expand_or_jump_res = 2")
rv = self._jump()
rv = self._jump(JumpDirection.FORWARD)
if not rv:
vim_helper.command("let g:ulti_expand_or_jump_res = 0")
......@@ -232,7 +241,7 @@ class SnippetManager:
snippets = self._snips(before, True)
if len(snippets) == 0:
return True
# Sort snippets alphabetically
......@@ -522,7 +531,7 @@ class SnippetManager:
if not self._active_snippets:
def _jump(self, backwards=False):
def _jump(self, jump_direction: JumpDirection):
"""Helper method that does the actual jump."""
if self._should_update_textobjects:
self._should_reset_visual = False
......@@ -552,7 +561,7 @@ class SnippetManager:
snippet_for_action = None
if self._current_snippet:
ntab = self._current_snippet.select_next_tab(backwards)
ntab = self._current_snippet.select_next_tab(jump_direction)
if ntab:
if self._current_snippet.snippet.has_option("s"):
lineno = vim_helper.buf.cursor.line
......@@ -587,7 +596,7 @@ class SnippetManager:
# have been popped when its final tabstop was used.
# Cleanup by removing current snippet and recursing.
jumped = self._jump(backwards)
jumped = self._jump(jump_direction)
if jumped:
if self._ctab:
......@@ -600,7 +609,7 @@ class SnippetManager:
with use_proxy_buffer(stack_for_post_jump, self._vstate):
-1 if backwards else 1,
-1 if jump_direction == JumpDirection.BACKWARD else 1,
......@@ -764,9 +773,9 @@ class SnippetManager:
if not self._snip_expanded_in_action:
elif self._current_snippet.current_text != "":
......@@ -845,6 +854,13 @@ class SnippetManager:
if bang:
for ft in filetypes:
if not potentials:
"UltiSnips was not able to find a default directory for snippets. "
"Do you have a .vim directory? Try :UltiSnipsEdit! instead of :UltiSnipsEdit."
return ""
return _select_and_create_file_to_edit(potentials)
......@@ -12,3 +12,4 @@ from UltiSnips.text_objects.tabstop import TabStop
from UltiSnips.text_objects.transformation import Transformation
from UltiSnips.text_objects.viml_code import VimLCode
from UltiSnips.text_objects.visual import Visual
from UltiSnips.text_objects.choices import Choices
#!/usr/bin/env python
# encoding: utf-8
"""Choices are enumeration values you can choose, by selecting index number.
It is a special TabStop, its content are taken literally, thus said, they will not be parsed recursively.
from UltiSnips import vim_helper
from UltiSnips.position import Position
from UltiSnips.text_objects.tabstop import TabStop
from UltiSnips.snippet.parsing.lexer import ChoicesToken
class Choices(TabStop):
"""See module docstring."""
def __init__(self, parent, token: ChoicesToken):
self._number = token.number # for TabStop property 'number'
self._initial_text = token.initial_text
# empty choice will be discarded
self._choice_list = [s for s in token.choice_list if len(s) > 0]
self._done = False
self._input_chars = list(self._initial_text)
self._has_been_updated = False
TabStop.__init__(self, parent, token)
def _get_choices_placeholder(self) -> str:
# prefix choices with index number
# e.g. 'a,b,c' -> '1.a|2.b|3.c'
text_segs = []
index = 1
for choice in self._choice_list:
text_segs.append("%s.%s" % (index, choice))
index += 1
text = "|".join(text_segs)
return text
def _update(self, done, buf):
if self._done:
return True
# expand initial text with select prefix number, only once
if not self._has_been_updated:
# '${1:||}' is not valid choice, should be downgraded to plain tabstop
are_choices_valid = len(self._choice_list) > 0
if are_choices_valid:
text = self._get_choices_placeholder()
self.overwrite(buf, text)
self._done = True
self._has_been_updated = True
return True
def _do_edit(self, cmd, ctab=None):
if self._done:
# do as what parent class do
TabStop._do_edit(self, cmd, ctab)
ctype, line, col, cmd_text = cmd
cursor = vim_helper.get_cursor_pos()
[buf_num, cursor_line] = map(int, cursor[0:2])
# trying to get what user inputted in current buffer
if ctype == "I":
elif ctype == "D":
line_text = vim_helper.buf[cursor_line - 1]
self._input_chars = list(line_text[self._start.col: col])
inputted_text = "".join(self._input_chars)
if not self._input_chars:
# if there are more than 9 selection candidates,
# may need to wait for 2 inputs to determine selection number
is_all_digits = True
for s in self._input_chars:
if not s.isdigit():
is_all_digits = False
should_continue_input = False
index_strs = [str(index) for index in list(range(1, len(self._choice_list) + 1))]
if is_all_digits:
matched_index_strs = list(filter(lambda s: s.startswith(inputted_text), index_strs))
if len(matched_index_strs) == 0:
remained_choice_list = []
elif len(matched_index_strs) == 1:
num = int(inputted_text)
remained_choice_list = list(self._choice_list)[num - 1: num]
should_continue_input = True
remained_choice_list = []
if should_continue_input:
# will wait for further input
buf = vim_helper.buf
if len(remained_choice_list) == 0:
# no matched choice, should quit selection and go on with inputted text
overwrite_text = inputted_text
self._done = True
elif len(remained_choice_list) == 1:
# only one match
matched_choice = remained_choice_list[0]
overwrite_text = matched_choice
self._done = True
if overwrite_text is not None:
old_end_col = self._end.col
# change _end.col, thus `overwrite` won't alter texts after this tabstop
displayed_text_end_col = self._start.col + len(inputted_text)
self._end.col = displayed_text_end_col
self.overwrite(buf, overwrite_text)
# notify all tabstops those in the same line and after this to adjust their positions
pivot = Position(line, old_end_col)
diff_col = displayed_text_end_col - old_end_col
Position(0, diff_col)
vim_helper.set_cursor_from_pos([buf_num, cursor_line, self._end.col + 1])
def __repr__(self):
return "Choices(%s,%r->%r,%r)" % (self._number, self._start, self._end, self._initial_text)
......@@ -10,7 +10,7 @@ also a TextObject.
from UltiSnips import vim_helper
from UltiSnips.position import Position
from UltiSnips.position import Position, JumpDirection
from UltiSnips.text_objects.base import EditableTextObject, NoneditableTextObject
from UltiSnips.text_objects.tabstop import TabStop
......@@ -103,12 +103,12 @@ class SnippetInstance(EditableTextObject):
def select_next_tab(self, backwards=False):
"""Selects the next tabstop or the previous if 'backwards' is True."""
def select_next_tab(self, jump_direction: JumpDirection):
"""Selects the next tabstop in the direction of 'jump_direction'."""
if self._cts is None:
if backwards:
if jump_direction == JumpDirection.BACKWARD:
cts_bf = self._cts
res = self._get_prev_tab(self._cts)
......@@ -117,7 +117,7 @@ class SnippetInstance(EditableTextObject):
return self._tabstops.get(self._cts, None)
self._cts, ts = res
return ts
elif jump_direction == JumpDirection.FORWARD:
res = self._get_next_tab(self._cts)
if res is None:
self._cts = None
......@@ -134,6 +134,8 @@ class SnippetInstance(EditableTextObject):
self._cts, ts = res
return ts
assert False, "Unknown JumpDirection: %r" % jump_direction
return self._tabstops[self._cts]
......@@ -7,6 +7,7 @@ from contextlib import contextmanager
import os
import platform
from UltiSnips.snippet.source.file.common import normalize_file_path
from UltiSnips.compatibility import col2byte, byte2col
from UltiSnips.position import Position
from vim import error # pylint:disable=import-error,unused-import
......@@ -223,11 +224,12 @@ def get_dot_vim():
candidates.append(os.path.join(home, ".vim"))
my_vimrc = os.environ["MYVIMRC"]
if "MYVIMRC" in os.environ:
my_vimrc = os.path.expandvars(os.environ["MYVIMRC"])
for candidate in candidates:
if os.path.isdir(candidate):
return os.path.realpath(candidate)
return normalize_file_path(candidate)
raise RuntimeError(
"Unable to find user configuration directory. I tried '%s'." % candidates
from test.vim_test_case import VimTestCase as _VimTest
from test.constant import *
class Choices_WillBeExpandedToInlineSelection(_VimTest):
snippets = ("test", "${1|red,gray|}")
keys = "test" + EX
wanted = "1.red|2.gray"
class Choices_ExpectCorrectResult(_VimTest):
snippets = ("test", "${1|red,gray|}")
keys = "test" + EX + "2"
wanted = "gray"
class Choices_WillAbandonSelection_If_CharTyped(_VimTest):
snippets = ("test", "${1|red,green|}")
keys = "test" + EX + "char"
wanted = "char"
class Choices_WillAbandonSelection_If_InputIsGreaterThanMaxSelectionIndex(_VimTest):
snippets = ("test", "${1|red,green|}")
keys = "test" + EX + "3"
wanted = "3"
class Choices_WilNotMessWithTabstopsAfterIt(_VimTest):
snippets = ("test", "${1|red,gray|} is ${2:color}\nline 2")
keys = "test" + EX + "2"
wanted = "gray is color\nline 2"
class Choices_MoreThan9Candidates_ShouldWaitForInputs(_VimTest):
snippets = ("test", "${1|a,b,c,d,e,f,g,h,i,j,k,l,m,n|} is ${2:a char}")
keys = "test" + EX + "1"
wanted = "1 is a char"
class Choices_EmptyChoiceWillBeDiscarded(_VimTest):
snippets = ("test", "${1|a,,c|}")
keys = "test" + EX
wanted = "1.a|2.c"
class Choices_WillNotExpand_If_ChoiceListIsEmpty(_VimTest):
snippets = ("test", "${1||}")
keys = "test" + EX
wanted = "||"
class Choices_CanTakeNonAsciiCharacters(_VimTest):
snippets = ("test", "${1|Русский язык,中文,한국어,öääö|}")
keys = "test" + EX
wanted = "1.Русский язык|2.中文|3.한국어|4.öääö"
class Choices_AsNestedElement_ShouldOverwriteDefaultText(_VimTest):
snippets = ("test", "${1:outer ${2|foo,blah|}}")
keys = "test" + EX
wanted = "outer 1.foo|2.blah"
class Choices_AsNestedElement_ShallNotTakeActionIfParentInput(_VimTest):
snippets = ("test", "${1:outer ${2|foo,blah|}}")
keys = "test" + EX + "input"
wanted = "input"
class Choices_AsNestedElement_CanBeTabbedInto(_VimTest):
snippets = ("test", "${1:outer ${2|foo,blah|}}")
keys = "test" + EX + JF + "1"
wanted = "outer foo"
class Choices_AsNestedElement_CanBeTabbedThrough(_VimTest):
snippets = ("test", "${1:outer ${2|foo,blah|}} ${3}")
keys = "test" + EX + JF + JF + "input"
wanted = "outer 1.foo|2.blah input"
class Choices_With_Mirror(_VimTest):
snippets = ("test", "${1|cyan,magenta|}, mirror: $1")
keys = "test" + EX + "1"
wanted = "cyan, mirror: cyan"
class Choices_With_Mirror_ContinueMirroring_EvenAfterSelectionDone(_VimTest):
snippets = ("test", "${1|cyan,magenta|}, mirror: $1")
keys = "test" + EX + "1 is a color"
wanted = "cyan is a color, mirror: cyan is a color"
class Choices_ShouldThrowErrorWithZeroTabstop(_VimTest):
snippets = ("test", "${0|red,blue|}")
keys = "test" + EX
expected_error = "Choices selection is not supported on \$0"
# fugitive.vim
I'm not going to lie to you; fugitive.vim may very well be the best
Git wrapper of all time. Check out these features:
Bring up an enhanced version of `git status` with `:G` (also known as
`:Gstatus`). Press `g?` to bring up a list of maps for numerous operations
including diffing, staging, committing, rebasing, and stashing.
View any blob, tree, commit, or tag in the repository with `:Gedit` (and
`:Gsplit`, `:Gvsplit`, `:Gtabedit`, ...). Edit a file in the index and
write to it to stage the changes. Use `:Gdiffsplit` to bring up the staged
version of the file side by side with the working tree version and use
Vim's diff handling capabilities to stage a subset of the file's
Commit, merge, and rebase with `:Gcommit`, `:Gmerge`, and `:Grebase`, using
the current Vim instance to edit commit messages and the rebase todo list.
Use `:Gpush`, `:Gfetch`, and `:Gpull` to send and retrieve upstream changes.
`:Gblame` brings up an interactive vertical split with `git blame`
output. Press enter on a line to edit the commit where the line
changed, or `o` to open it in a split. When you're done, use `:Gedit`
in the historic buffer to go back to the work tree version.
`:Gmove` does a `git mv` on a file and simultaneously renames the
buffer. `:Gdelete` does a `git rm` on a file and simultaneously deletes
the buffer.
Use `:Ggrep` to search the work tree (or any arbitrary commit) with
`git grep`, skipping over that which is not tracked in the repository.
`:Gclog` and `:Gllog` load all previous commits into the quickfix or location
list. Give them a range (e.g., using visual mode and `:'<,'>Gclog`) to
iterate over every change to that portion of the current file.
`:Gread` is a variant of `git checkout -- filename` that operates on the
buffer rather than the filename. This means you can use `u` to undo it
and you never get any warnings about the file changing outside Vim.
`:Gwrite` writes to both the work tree and index versions of a file,
making it like `git add` when called from a work tree file and like
`git checkout` when called from the index or a blob in history.
Use `:Gbrowse` to open the current file on the web front-end of your favorite
hosting provider, with optional line range (try it in visual mode). Plugins
are available for popular providers such as [GitHub][rhubarb.vim],
[GitLab][fugitive-gitlab.vim], [Bitbucket][fubitive.vim],
[Gitee][fugitive-gitee.vim], and [Pagure][pagure].
Fugitive is the premier Vim plugin for Git. Or maybe it's the premier Git
plugin for Vim? Either way, it's "so awesome, it should be illegal". That's
why it's called Fugitive.
The crown jewel of Fugitive is `:Git` (or just `:G`), which calls any
arbitrary Git command. If you know how to use Git at the command line, you
know how to use `:Git`. It's vaguely akin to `:!git` but with numerous
* The default behavior is to directly echo the command's output. Quiet
commands like `:Git add` avoid the dreaded "Press ENTER or type command to
continue" prompt.
* `:Git commit`, `:Git rebase -i`, and other commands that invoke an editor do
their editing in the current Vim instance.
* `:Git diff`, `:Git log`, and other verbose, paginated commands have their
output loaded into a temporary buffer. Force this behavior for any command
with `:Git --paginate` or `:Git -p`.
* `:Git blame` uses a temporary buffer with maps for additional triage. Press
enter on a line to view the commit where the line changed, or `g?` to see
other available maps. Omit the filename argument and the currently edited
file will be blamed in a vertical, scroll-bound split.
* `:Git grep` loads matches into the quickfix list, just like `:grep`.
* `:Git mergetool` and `:Git difftool` load their changesets into the quickfix
* Called with no arguments, `:Git` opens a summary window with dirty files and
unpushed and unpulled commits. Press `g?` to bring up a list of maps for
numerous operations including diffing, staging, committing, rebasing, and
stashing. (This is the successor to the old `:Gstatus`.)
* This command (along with all other commands) always uses the current
buffer's repository, so you don't need to worry about the current working
Additional commands are provided for higher level operations:
* View any blob, tree, commit, or tag in the repository with `:Gedit` (and
`:Gsplit`, etc.). For example, `:Gedit HEAD~3:%` loads the current file as
it existed 3 commits ago.
* `:Gdiffsplit` brings up the staged version of the file side by side with the
working tree version. Use Vim's diff handling capabilities to apply changes
to the staged version, and write that buffer to stage the changes. You can
also give an arbitrary `:Gedit` argument to diff against older versions of
the file.
* `:Gread` is a variant of `git checkout -- filename` that operates on the
buffer rather than the file itself. This means you can use `u` to undo it
and you never get any warnings about the file changing outside Vim.
* `:Gwrite` writes to both the work tree and index versions of a file, making
it like `git add` when called from a work tree file and like `git checkout`
when called from the index or a blob in history.
* `:GMove` does a `git mv` on the current file and changes the buffer name to
match. `:GRename` does the same with a destination filename relative to the
current file's directory.
* `:GDelete` does a `git rm` on the current file and simultaneously deletes
the buffer. `:GRemove` does the same but leaves the (now empty) buffer
* `:GBrowse` to open the current file on the web front-end of your favorite
hosting provider, with optional line range (try it in visual mode). Plugins
are available for popular providers such as [GitHub][rhubarb.vim],
[GitLab][fugitive-gitlab.vim], [Bitbucket][fubitive.vim],
[Gitee][fugitive-gitee.vim], [Pagure][pagure], and
[rhubarb.vim]: https://github.com/tpope/vim-rhubarb
[fugitive-gitlab.vim]: https://github.com/shumphrey/fugitive-gitlab.vim
[fubitive.vim]: https://github.com/tommcdo/vim-fubitive
[fugitive-gitee.vim]: https://github.com/linuxsuren/fugitive-gitee.vim
[pagure]: https://github.com/FrostyX/vim-fugitive-pagure
[vim-phabricator]: https://github.com/jparise/vim-phabricator
Add `%{FugitiveStatusline()}` to `'statusline'` to get an indicator
with the current branch in your statusline.
Last but not least, there's `:Git` for running any arbitrary command.
For more information, see `:help fugitive`.
## Screencasts
......@@ -70,7 +84,7 @@ For more information, see `:help fugitive`.
## Installation
Install using your favorite package manager, or use Vim's built-in package support:
mkdir -p ~/.vim/pack/tpope/start
cd ~/.vim/pack/tpope/start
git clone https://tpope.io/vim/fugitive.git
......@@ -78,7 +92,7 @@ Install using your favorite package manager, or use Vim's built-in package suppo
## FAQ
> Why can't I enter my password when I `:Gpush`?
> Why can't I enter my password when I `:Git push`?
It is highly recommended to use SSH keys or [credentials caching][] to avoid
entering your password on every upstream interaction. If this isn't an
......@@ -87,9 +101,8 @@ request the password via a GUI. Fugitive will configure this for you
automatically if you have `ssh-askpass` or `git-gui` installed; otherwise it's
your responsibility to set this up.
As an absolute last resort, you can invoke `:Git --paginate push`. Fugitive
recognizes the pagination request and fires up a `:terminal`, which allows for
interactive password entry.
If you absolutely must type in your password by hand, sidestep Fugitive and
use `:terminal git push`.
[credentials caching]: https://help.github.com/en/articles/caching-your-github-password-in-git
This source diff could not be displayed because it is too large. You can view the blob instead.
Before filing an issue, please check if vim-go's help addresses your problem (see `:help go-troubleshooting`).
Consider executing `:GoReportGitHubIssue` to populate much of this information automatically.
### What did you do? (required: The issue will be **closed** when not provided)
......@@ -12,7 +17,13 @@ If possible, please provide clear steps for reproducing the problem.
#### vim-go version:
#### `vimrc` you used to reproduce (use a *minimal* vimrc with other plugins disabled; do not link to a 2,000 line vimrc):
#### `vimrc` you used to reproduce:
Use a *minimal* vimrc with other plugins disabled; do not link to a 2,000 line vimrc.
If this is not provided or is obviously incomplete, the issue may be unceremoniously closed.
<!-- vimrc -->
......@@ -28,3 +39,9 @@ If possible, please provide clear steps for reproducing the problem.
<!-- go env -->
#### gopls version
<details><summary><code>gopls version</code> Output:</summary><br><pre>
<!-- gopls version -->
language: go
- 1.13
- 1.14
email: false
- env: SCRIPT="test -c" VIM_VERSION=vim-8.0
- env: SCRIPT="test -c" VIM_VERSION=vim-8.2
- env: SCRIPT="test -c" VIM_VERSION=nvim
- env: ENV=vimlint SCRIPT=lint VIM_VERSION=vim-8.0
- env: ENV=vimlint SCRIPT=lint VIM_VERSION=vim-8.2
language: python
python: 3.6
- ./scripts/install-vim $VIM_VERSION
- |
if [ "$ENV" = "vimlint" ]; then
pip install vim-vint covimerage==0.1.6 codecov pathlib
pip install vim-vint covimerage==0.2.1 codecov pathlib
pip install --user vim-vint covimerage==0.1.6 codecov pathlib
pip install --user vim-vint covimerage==0.2.1 codecov pathlib
- ./scripts/$SCRIPT $VIM_VERSION
## unplanned
* Remove support for gocode.
* Make signs for breakpoints configurable.
* Enable g:go_gopls_complete_unimported by default to stay aligned with gopls' defaults.
* Document mappings that were recently added.
* Handle null arrays better in gopls responses.
* Use `gopls` defaults by default when they're not otherwise specified in vim-go options.
* Add support for `gomodifytags --skip-unexported`
* Show problems that prevent golangci-lint from running linters.
* Support golangci-lint config file by not using `--disable-all` when
`g:go_metalinter_enable` or `g:go_metalinter_autosave_enabled` is set.
* Add support for Vim8 terminals.
* Replace `g:go_gopls_fuzzy_matching` with `g:go_gopls_matcher` in response to
`gopls` deprecation of its `fuzzyMatching` option.
* Set statuses and progress messages consistently for code quality tools.
* Add a new supported value to `g:go_fmt_command` to format with `gopls`.
* Handle changes to `go test -v` output.
* Add `g:go_gopls_mod_tempfile` to configure `gopls`' `tempModfile`
* Add `g:go_gopls_options` to configure `gopls`' commandline options.
* Improve readability of gopls logs.
* Use the discovered full path for gopls when renaming.
* Execute commands correctly on windows when `'shell'` is not cmd.exe
* Always execute `errcheck` in the current package's directory.
* Fix errors when highlighting diagnostics after a `:GoImports`.
* Preserve errors from formatting when both formatting and metalinting happen
on save.
* Preserve ordering of gopls messages in the log.
* Fix `:GoDef` on windows when `g:go_def_mode` is set to `gopls`.
* Handle null values from `gopls`.
* Preserve diagnostics highlights after formatting.
* Fix the decoding and encoding of multi-byte file paths received from and sent
to `gopls`.
* Fix `:GoRun` so that it works as expected when the current working directory
is neither in GOPATH nor within a module.
* Show the command executed by `:GoRun` when `g:go_debug` includes `'shell-commands'`.
## v1.22 - (January 30, 2020)
* Drop support for Vim 7.4. The minimum required version of Vim is now 8.0.1453.
......@@ -51,11 +130,46 @@ IMPROVEMENTS:
* Add highlighting of sections reported by gopls diagnostics' errors
and warnings.
* Make the highlighting of fzf decls configurable.
* Support renaming with gopls.
* Add an option, `g:go_gopls_enabled`, to allow gopls integration to be
* Add a buffer level option, `b:go_fmt_options`, to control formatting options
per buffer.
* Use build tags when running `:GoVet`.
* Add new snippets for UltiSnips.
* Expand completions as snippets when `g:go_gopls_use_placeholders` is set.
* Add a new function, `:GoDiagnostics` and an associated mapping for seeing
`gopls` diagnostics. Because of the performance implications on large
projects, `g:go_diagnostics_enabled` controls whether all diagnostics are
processed or only the diagnostics for the current buffer.
* Explain how to find and detect multiple copies of vim-go in the FAQ.
* Update the issue template to ask for the gopls version and
`:GoReportGitHubIssue` to provide it.
* Use text properties when possible for some highlighting cases.
* Fix removal of missing directories from gopls workspaces.
......@@ -74,7 +188,7 @@ BUG FIXES:
* Do not overwrite `updatetime` when `g:go_auto_sameids` or
`g:go_auto_type_info` is set.
* Fix example for g:go_debug_log_output in docs.
* Fix example for `g:go_debug_log_output` in docs.
* Use FileChangedShellPost instead of FileChangedShell so that reload messages
are not hidden.
......@@ -83,6 +197,9 @@ BUG FIXES:
* Expand struct variable correctly in the variables debug window.
* Show output from errcheck when there are failures other than problems it can
## v1.21 - (September 11, 2019)
FROM golang:1.13
FROM golang:1.14.0-buster
RUN apt-get update -y && \
apt-get install -y build-essential curl git libncurses5-dev python3-pip && \
......@@ -14,6 +14,7 @@ COPY . /vim-go/
WORKDIR /vim-go
RUN scripts/install-vim vim-8.0
RUN scripts/install-vim vim-8.2
RUN scripts/install-vim nvim
VIMS ?= vim-8.0 nvim
VIMS ?= vim-8.0 vim-8.2 nvim