From 186dfa80966f5a92d868847fe94b9d0c7b40a7e8 Mon Sep 17 00:00:00 2001 From: c0dev0id Date: Sun, 25 Jan 2026 09:38:17 +0100 Subject: [PATCH] Update 2026-01-25 09:38 OpenBSD/amd64-t14 --- .Xdefaults | 5 +- .vim/pack/plugins/opt/vim-copilot/LICENSE.md | 4 - .vim/pack/plugins/opt/vim-copilot/README.md | 64 - .vim/pack/plugins/opt/vim-copilot/SECURITY.md | 4 - .../opt/vim-copilot/autoload/copilot.vim | 860 - .../vim-copilot/autoload/copilot/client.vim | 764 - .../vim-copilot/autoload/copilot/handlers.vim | 31 - .../opt/vim-copilot/autoload/copilot/job.vim | 106 - .../vim-copilot/autoload/copilot/logger.vim | 105 - .../vim-copilot/autoload/copilot/panel.vim | 167 - .../opt/vim-copilot/autoload/copilot/util.vim | 61 - .../vim-copilot/autoload/copilot/version.vim | 3 - .../dist/compiled/darwin/arm64/kerberos.node | Bin 325616 -> 0 bytes .../dist/compiled/darwin/x64/kerberos.node | Bin 325616 -> 0 bytes .../dist/compiled/linux/arm64/kerberos.node | Bin 195864 -> 0 bytes .../dist/compiled/linux/x64/kerberos.node | Bin 200048 -> 0 bytes .../dist/compiled/win32/x64/kerberos.node | Bin 211560 -> 0 bytes .../plugins/opt/vim-copilot/dist/crypt32.node | Bin 145880 -> 0 bytes .../opt/vim-copilot/dist/language-server.js | 1067 - .../vim-copilot/dist/language-server.js.map | 6 - .../resources/cl100k_base.tiktoken.noindex | 100256 -------- .../resources/o200k_base.tiktoken.noindex | 199998 --------------- .../opt/vim-copilot/dist/tree-sitter-go.wasm | Bin 179802 -> 0 bytes .../dist/tree-sitter-javascript.wasm | Bin 233302 -> 0 bytes .../vim-copilot/dist/tree-sitter-python.wasm | Bin 261745 -> 0 bytes .../vim-copilot/dist/tree-sitter-ruby.wasm | Bin 990787 -> 0 bytes .../opt/vim-copilot/dist/tree-sitter-tsx.wasm | Bin 1041338 -> 0 bytes .../dist/tree-sitter-typescript.wasm | Bin 994008 -> 0 bytes .../opt/vim-copilot/dist/tree-sitter.wasm | Bin 186526 -> 0 bytes .../plugins/opt/vim-copilot/doc/copilot.txt | 199 - .../plugins/opt/vim-copilot/lua/_copilot.lua | 89 - .../opt/vim-copilot/plugin/copilot.vim | 114 - .../opt/vim-copilot/syntax/copilot.vim | 19 - .../opt/vim-copilot/syntax/copilotlog.vim | 25 - .vim/pack/plugins/start/update-plugins.sh | 39 + .vim/pack/plugins/start/vim-ale | 1 + .../plugins/start/vim-awesome-colorschemes | 1 + .../start/vim-bufferline/.gitattributes | 5 + .../plugins/start/vim-bufferline/.gitignore | 1 + .../pack/plugins/start/vim-bufferline/LICENSE | 32 +- .../plugins/start/vim-bufferline/README.md | 160 +- .../vim-bufferline/autoload/bufferline.vim | 130 - .../bufferline/algos/fixed_position.vim | 9 - .../start/vim-bufferline/doc/bufferline.txt | 119 - .../start/vim-bufferline/doc/buftabline.txt | 143 + .../vim-bufferline/img/bufferline-command.png | Bin 1560 -> 0 bytes .../vim-bufferline/img/bufferline-status.png | Bin 1467 -> 0 bytes .../vim-bufferline/plugin/bufferline.vim | 61 - .../vim-bufferline/plugin/buftabline.vim | 219 + .vim/pack/plugins/start/vim-clap | 1 + .../plugins/start/vim-colorschemes/.gitignore | 2 + .../plugins/start/vim-colorschemes/README.md | 81 + .../vim-colorschemes/colors/0x7A69_dark.vim | 112 + .../start/vim-colorschemes/colors/1989.vim | 186 + .../vim-colorschemes/colors/256-grayvim.vim | 46 + .../vim-colorschemes/colors/256-jungle.vim | 50 + .../vim-colorschemes/colors/256_noir.vim | 170 + .../vim-colorschemes/colors/3dglasses.vim | 110 + .../colors/Atelier_CaveDark.vim | 346 + .../colors/Atelier_CaveLight.vim | 346 + .../colors/Atelier_DuneDark.vim | 346 + .../colors/Atelier_DuneLight.vim | 346 + .../colors/Atelier_EstuaryDark.vim | 346 + .../colors/Atelier_EstuaryLight.vim | 346 + .../colors/Atelier_ForestDark.vim | 346 + .../colors/Atelier_ForestLight.vim | 346 + .../colors/Atelier_HeathDark.vim | 346 + .../colors/Atelier_HeathLight.vim | 346 + .../colors/Atelier_LakesideDark.vim | 346 + .../colors/Atelier_LakesideLight.vim | 346 + .../colors/Atelier_PlateauDark.vim | 346 + .../colors/Atelier_PlateauLight.vim | 346 + .../colors/Atelier_SavannaDark.vim | 346 + .../colors/Atelier_SavannaLight.vim | 346 + .../colors/Atelier_SeasideDark.vim | 346 + .../colors/Atelier_SeasideLight.vim | 346 + .../colors/Atelier_SulphurpoolDark.vim | 346 + .../colors/Atelier_SulphurpoolLight.vim | 346 + .../start/vim-colorschemes/colors/Benokai.vim | 114 + .../start/vim-colorschemes/colors/Black.vim | 16 + .../vim-colorschemes/colors/BlackSea.vim | 37 + .../start/vim-colorschemes/colors/Blue2.vim | 16 + .../start/vim-colorschemes/colors/C64.vim | 176 + .../vim-colorschemes/colors/CandyPaper.vim | 285 + .../vim-colorschemes/colors/Chasing_Logic.vim | 107 + .../colors/ChocolateLiquor.vim | 36 + .../colors/ChocolatePapaya.vim | 52 + .../vim-colorschemes/colors/CodeFactoryv3.vim | 266 + .../start/vim-colorschemes/colors/Dark.vim | 63 + .../start/vim-colorschemes/colors/Dark2.vim | 91 + .../vim-colorschemes/colors/DarkDefault.vim | 16 + .../start/vim-colorschemes/colors/DevC++.vim | 32 + .../vim-colorschemes/colors/Dev_Delight.vim | 48 + .../start/vim-colorschemes/colors/Dim.vim | 84 + .../start/vim-colorschemes/colors/Dim2.vim | 97 + .../start/vim-colorschemes/colors/DimBlue.vim | 9 + .../vim-colorschemes/colors/DimGreen.vim | 9 + .../vim-colorschemes/colors/DimGreens.vim | 65 + .../start/vim-colorschemes/colors/DimGrey.vim | 11 + .../start/vim-colorschemes/colors/DimRed.vim | 9 + .../vim-colorschemes/colors/DimSlate.vim | 9 + .../start/vim-colorschemes/colors/Green.vim | 9 + .../start/vim-colorschemes/colors/Light.vim | 152 + .../vim-colorschemes/colors/LightDefault.vim | 21 + .../colors/LightDefaultGrey.vim | 9 + .../vim-colorschemes/colors/LightTan.vim | 10 + .../vim-colorschemes/colors/LightYellow.vim | 10 + .../start/vim-colorschemes/colors/Monokai.vim | 108 + .../vim-colorschemes/colors/MountainDew.vim | 120 + .../vim-colorschemes/colors/OceanicNext.vim | 268 + .../colors/OceanicNextLight.vim | 268 + .../vim-colorschemes/colors/PapayaWhip.vim | 31 + .../vim-colorschemes/colors/PaperColor.vim | 2047 + .../vim-colorschemes/colors/PerfectDark.vim | 108 + .../start/vim-colorschemes/colors/Red.vim | 12 + .../vim-colorschemes/colors/Revolution.vim | 278 + .../colors/SerialExperimentsLain.vim | 101 + .../start/vim-colorschemes/colors/Slate.vim | 11 + .../start/vim-colorschemes/colors/Spink.vim | 220 + .../vim-colorschemes/colors/SweetCandy.vim | 100 + .../start/vim-colorschemes/colors/VIvid.vim | 122 + .../start/vim-colorschemes/colors/White2.vim | 10 + .../start/vim-colorschemes/colors/abbott.vim | 156 + .../start/vim-colorschemes/colors/abra.vim | 79 + .../start/vim-colorschemes/colors/abyss.vim | 138 + .../start/vim-colorschemes/colors/adam.vim | 48 + .../start/vim-colorschemes/colors/adaryn.vim | 72 + .../start/vim-colorschemes/colors/adobe.vim | 194 + .../start/vim-colorschemes/colors/adrian.vim | 97 + .../vim-colorschemes/colors/advantage.vim | 69 + .../vim-colorschemes/colors/adventurous.vim | 125 + .../start/vim-colorschemes/colors/af.vim | 99 + .../vim-colorschemes/colors/afterglow.vim | 538 + .../vim-colorschemes/colors/aiseered.vim | 37 + .../start/vim-colorschemes/colors/alduin.vim | 316 + .../start/vim-colorschemes/colors/ancient.vim | 53 + .../vim-colorschemes/colors/anderson.vim | 231 + .../start/vim-colorschemes/colors/angr.vim | 154 + .../vim-colorschemes/colors/anotherdark.vim | 108 + .../vim-colorschemes/colors/ansi_blows.vim | 197 + .../start/vim-colorschemes/colors/antares.vim | 573 + .../vim-colorschemes/colors/apprentice.vim | 253 + .../start/vim-colorschemes/colors/aqua.vim | 44 + .../vim-colorschemes/colors/aquamarine.vim | 75 + .../start/vim-colorschemes/colors/arcadia.vim | 371 + .../start/vim-colorschemes/colors/archery.vim | 396 + .../vim-colorschemes/colors/argonaut.vim | 102 + .../start/vim-colorschemes/colors/ashen.vim | 34 + .../vim-colorschemes/colors/asmanian2.vim | 56 + .../colors/asmanian_blood.vim | 42 + .../start/vim-colorschemes/colors/asmdev.vim | 105 + .../start/vim-colorschemes/colors/asmdev2.vim | 111 + .../vim-colorschemes/colors/astronaut.vim | 164 + .../vim-colorschemes/colors/asu1dark.vim | 59 + .../start/vim-colorschemes/colors/atom.vim | 71 + .../start/vim-colorschemes/colors/aurora.vim | 91 + .../vim-colorschemes/colors/automation.vim | 59 + .../start/vim-colorschemes/colors/autumn.vim | 88 + .../vim-colorschemes/colors/autumnleaf.vim | 154 + .../start/vim-colorschemes/colors/ayu.vim | 269 + .../vim-colorschemes/colors/babymate256.vim | 109 + .../start/vim-colorschemes/colors/badwolf.vim | 650 + .../start/vim-colorschemes/colors/bandit.vim | 292 + .../start/vim-colorschemes/colors/base.vim | 117 + .../colors/base16-ateliercave.vim | 313 + .../colors/base16-atelierdune.vim | 313 + .../colors/base16-atelierestuary.vim | 313 + .../colors/base16-atelierforest.vim | 313 + .../colors/base16-atelierheath.vim | 313 + .../colors/base16-atelierlakeside.vim | 313 + .../colors/base16-atelierplateau.vim | 313 + .../colors/base16-ateliersavanna.vim | 313 + .../colors/base16-atelierseaside.vim | 313 + .../colors/base16-ateliersulphurpool.vim | 313 + .../colors/base16-railscasts.vim | 285 + .../vim-colorschemes/colors/basic-dark.vim | 429 + .../vim-colorschemes/colors/basic-light.vim | 399 + .../start/vim-colorschemes/colors/basic.vim | 47 + .../start/vim-colorschemes/colors/bayQua.vim | 161 + .../start/vim-colorschemes/colors/baycomb.vim | 319 + .../start/vim-colorschemes/colors/bclear.vim | 69 + .../vim-colorschemes/colors/beachcomber.vim | 64 + .../vim-colorschemes/colors/beauty256.vim | 79 + .../start/vim-colorschemes/colors/beekai.vim | 52 + .../start/vim-colorschemes/colors/behelit.vim | 204 + .../vim-colorschemes/colors/benlight.vim | 103 + .../start/vim-colorschemes/colors/bensday.vim | 60 + .../start/vim-colorschemes/colors/billw.vim | 103 + .../start/vim-colorschemes/colors/biogoo.vim | 121 + .../colors/birds-of-paradise.vim | 107 + .../vim-colorschemes/colors/bitterjug.vim | 73 + .../vim-colorschemes/colors/black_angus.vim | 115 + .../vim-colorschemes/colors/blackbeauty.vim | 66 + .../vim-colorschemes/colors/blackboard.vim | 106 + .../vim-colorschemes/colors/blackdust.vim | 62 + .../vim-colorschemes/colors/blacklight.vim | 49 + .../vim-colorschemes/colors/blaquemagick.vim | 64 + .../start/vim-colorschemes/colors/blazer.vim | 83 + .../start/vim-colorschemes/colors/blink.vim | 79 + .../start/vim-colorschemes/colors/blue.vim | 41 + .../vim-colorschemes/colors/bluechia.vim | 104 + .../vim-colorschemes/colors/bluedrake.vim | 475 + .../vim-colorschemes/colors/bluegreen.vim | 52 + .../start/vim-colorschemes/colors/bluenes.vim | 102 + .../vim-colorschemes/colors/blueprint.vim | 60 + .../start/vim-colorschemes/colors/blues.vim | 55 + .../vim-colorschemes/colors/blueshift.vim | 86 + .../start/vim-colorschemes/colors/bluez.vim | 145 + .../vim-colorschemes/colors/blugrine.vim | 42 + .../start/vim-colorschemes/colors/bluish.vim | 38 + .../vim-colorschemes/colors/bmichaelsen.vim | 55 + .../start/vim-colorschemes/colors/boa.vim | 302 + .../start/vim-colorschemes/colors/bocau.vim | 187 + .../start/vim-colorschemes/colors/bog.vim | 87 + .../vim-colorschemes/colors/boltzmann.vim | 133 + .../start/vim-colorschemes/colors/borland.vim | 60 + .../start/vim-colorschemes/colors/breeze.vim | 70 + .../start/vim-colorschemes/colors/breezy.vim | 199 + .../vim-colorschemes/colors/brighton.vim | 106 + .../vim-colorschemes/colors/briofita.vim | 2662 + .../start/vim-colorschemes/colors/broduo.vim | 46 + .../vim-colorschemes/colors/brogrammer.vim | 115 + .../vim-colorschemes/colors/brookstream.vim | 83 + .../start/vim-colorschemes/colors/brown.vim | 32 + .../colors/bubblegum-256-dark.vim | 160 + .../colors/bubblegum-256-light.vim | 160 + .../vim-colorschemes/colors/bubblegum.vim | 260 + .../start/vim-colorschemes/colors/buddy.vim | 100 + .../vim-colorschemes/colors/burnttoast256.vim | 121 + .../vim-colorschemes/colors/busierbee.vim | 60 + .../start/vim-colorschemes/colors/busybee.vim | 60 + .../vim-colorschemes/colors/buttercream.vim | 59 + .../start/vim-colorschemes/colors/bvemu.vim | 367 + .../start/vim-colorschemes/colors/bw.vim | 55 + .../start/vim-colorschemes/colors/c.vim | 32 + .../start/vim-colorschemes/colors/c16gui.vim | 121 + .../start/vim-colorschemes/colors/cabin.vim | 95 + .../start/vim-colorschemes/colors/cake.vim | 103 + .../start/vim-colorschemes/colors/cake16.vim | 115 + .../colors/calmar256-dark.vim | 198 + .../colors/calmar256-light.vim | 247 + .../start/vim-colorschemes/colors/camo.vim | 76 + .../vim-colorschemes/colors/campfire.vim | 57 + .../start/vim-colorschemes/colors/candy.vim | 78 + .../vim-colorschemes/colors/candycode.vim | 174 + .../vim-colorschemes/colors/candyman.vim | 426 + .../start/vim-colorschemes/colors/caramel.vim | 67 + .../start/vim-colorschemes/colors/carrot.vim | 88 + .../vim-colorschemes/colors/carvedwood.vim | 118 + .../colors/carvedwoodcool.vim | 116 + .../vim-colorschemes/colors/cascadia.vim | 90 + .../vim-colorschemes/colors/celtics_away.vim | 103 + .../start/vim-colorschemes/colors/cgpro.vim | 57 + .../vim-colorschemes/colors/chalkboard.vim | 117 + .../colors/chance-of-storm.vim | 155 + .../vim-colorschemes/colors/charged-256.vim | 18 + .../start/vim-colorschemes/colors/charon.vim | 62 + .../vim-colorschemes/colors/chela_light.vim | 110 + .../vim-colorschemes/colors/cherryblossom.vim | 236 + .../vim-colorschemes/colors/chlordane.vim | 79 + .../vim-colorschemes/colors/chocolate.vim | 71 + .../start/vim-colorschemes/colors/chroma.vim | 208 + .../vim-colorschemes/colors/chrysoprase.vim | 53 + .../start/vim-colorschemes/colors/clarity.vim | 52 + .../vim-colorschemes/colors/cleanphp.vim | 81 + .../vim-colorschemes/colors/cleanroom.vim | 106 + .../vim-colorschemes/colors/clearance.vim | 175 + .../start/vim-colorschemes/colors/cloudy.vim | 49 + .../start/vim-colorschemes/colors/clue.vim | 62 + .../start/vim-colorschemes/colors/cobalt.vim | 101 + .../start/vim-colorschemes/colors/cobalt2.vim | 726 + .../vim-colorschemes/colors/cobaltish.vim | 96 + .../start/vim-colorschemes/colors/coda.vim | 323 + .../colors/codeblocks_dark.vim | 139 + .../vim-colorschemes/colors/codeburn.vim | 203 + .../vim-colorschemes/colors/codedark.vim | 257 + .../vim-colorschemes/colors/codeschool.vim | 108 + .../start/vim-colorschemes/colors/coffee.vim | 231 + .../vim-colorschemes/colors/coldgreen.vim | 56 + .../start/vim-colorschemes/colors/colorer.vim | 79 + .../vim-colorschemes/colors/colorful.vim | 133 + .../vim-colorschemes/colors/colorful256.vim | 88 + .../colors/colorsbox-faff.vim | 1159 + .../colors/colorsbox-greenish.vim | 1159 + .../colors/colorsbox-material.vim | 1159 + .../colors/colorsbox-stblue.vim | 1159 + .../colors/colorsbox-stbright.vim | 1159 + .../colors/colorsbox-steighties.vim | 1159 + .../colors/colorsbox-stnight.vim | 1159 + .../vim-colorschemes/colors/colorzone.vim | 168 + .../vim-colorschemes/colors/contrastneed.vim | 819 + .../vim-colorschemes/colors/contrasty.vim | 232 + .../start/vim-colorschemes/colors/cool.vim | 82 + .../start/vim-colorschemes/colors/corn.vim | 72 + .../vim-colorschemes/colors/corporation.vim | 99 + .../start/vim-colorschemes/colors/crayon.vim | 361 + .../start/vim-colorschemes/colors/crt.vim | 322 + .../vim-colorschemes/colors/crunchbang.vim | 326 + .../vim-colorschemes/colors/cthulhian.vim | 41 + .../start/vim-colorschemes/colors/custom.vim | 91 + .../vim-colorschemes/colors/cyberpunk.vim | 136 + .../start/vim-colorschemes/colors/d8g_01.vim | 32 + .../start/vim-colorschemes/colors/d8g_02.vim | 32 + .../start/vim-colorschemes/colors/d8g_03.vim | 31 + .../start/vim-colorschemes/colors/d8g_04.vim | 31 + .../start/vim-colorschemes/colors/dante.vim | 83 + .../vim-colorschemes/colors/dark-ruby.vim | 294 + .../vim-colorschemes/colors/darkBlue.vim | 91 + .../start/vim-colorschemes/colors/darkZ.vim | 91 + .../vim-colorschemes/colors/darkblack.vim | 62 + .../vim-colorschemes/colors/darkblue.vim | 62 + .../vim-colorschemes/colors/darkblue2.vim | 105 + .../vim-colorschemes/colors/darkbone.vim | 102 + .../vim-colorschemes/colors/darkburn.vim | 300 + .../vim-colorschemes/colors/darkdevel.vim | 228 + .../start/vim-colorschemes/colors/darkdot.vim | 97 + .../vim-colorschemes/colors/darkeclipse.vim | 102 + .../vim-colorschemes/colors/darker-robin.vim | 87 + .../vim-colorschemes/colors/darkerdesert.vim | 45 + .../vim-colorschemes/colors/darkglass.vim | 230 + .../vim-colorschemes/colors/darkocean.vim | 52 + .../vim-colorschemes/colors/darkrobot.vim | 67 + .../vim-colorschemes/colors/darkslategray.vim | 117 + .../vim-colorschemes/colors/darkspectrum.vim | 130 + .../vim-colorschemes/colors/darktango.vim | 75 + .../start/vim-colorschemes/colors/darkzen.vim | 23 + .../start/vim-colorschemes/colors/darth.vim | 195 + .../start/vim-colorschemes/colors/dawn.vim | 78 + .../vim-colorschemes/colors/deep-space.vim | 187 + .../start/vim-colorschemes/colors/deepsea.vim | 206 + .../start/vim-colorschemes/colors/default.vim | 23 + .../start/vim-colorschemes/colors/delek.vim | 57 + .../start/vim-colorschemes/colors/delphi.vim | 23 + .../start/vim-colorschemes/colors/denim.vim | 141 + .../vim-colorschemes/colors/derefined.vim | 101 + .../vim-colorschemes/colors/desert256v2.vim | 362 + .../vim-colorschemes/colors/desertEx.vim | 65 + .../vim-colorschemes/colors/desertedocean.vim | 110 + .../colors/desertedoceanburnt.vim | 113 + .../vim-colorschemes/colors/desertink.vim | 374 + .../vim-colorschemes/colors/despacio.vim | 362 + .../vim-colorschemes/colors/detailed.vim | 905 + .../start/vim-colorschemes/colors/deus.vim | 1176 + .../colors/devbox-dark-256.vim | 143 + .../vim-colorschemes/colors/deveiate.vim | 90 + .../vim-colorschemes/colors/developer.vim | 67 + .../start/vim-colorschemes/colors/diokai.vim | 56 + .../vim-colorschemes/colors/disciple.vim | 211 + .../start/vim-colorschemes/colors/distill.vim | 207 + .../vim-colorschemes/colors/distinguished.vim | 181 + .../start/vim-colorschemes/colors/django.vim | 59 + .../start/vim-colorschemes/colors/donbass.vim | 89 + .../vim-colorschemes/colors/donttouchme.vim | 116 + .../vim-colorschemes/colors/doorhinge.vim | 99 + .../start/vim-colorschemes/colors/doriath.vim | 56 + .../start/vim-colorschemes/colors/dracula.vim | 308 + .../vim-colorschemes/colors/dracula_bold.vim | 313 + .../start/vim-colorschemes/colors/dual.vim | 231 + .../start/vim-colorschemes/colors/dull.vim | 91 + .../vim-colorschemes/colors/duotone-dark.vim | 330 + .../colors/duotone-darkcave.vim | 330 + .../colors/duotone-darkdesert.vim | 330 + .../colors/duotone-darkearth.vim | 330 + .../colors/duotone-darkforest.vim | 330 + .../colors/duotone-darkheath.vim | 330 + .../colors/duotone-darklake.vim | 330 + .../colors/duotone-darkmeadow.vim | 330 + .../colors/duotone-darkpark.vim | 330 + .../colors/duotone-darkpool.vim | 330 + .../colors/duotone-darksea.vim | 330 + .../colors/duotone-darkspace.vim | 330 + .../start/vim-colorschemes/colors/dusk.vim | 71 + .../start/vim-colorschemes/colors/dw_blue.vim | 66 + .../start/vim-colorschemes/colors/dw_cyan.vim | 66 + .../vim-colorschemes/colors/dw_green.vim | 66 + .../vim-colorschemes/colors/dw_orange.vim | 66 + .../vim-colorschemes/colors/dw_purple.vim | 66 + .../start/vim-colorschemes/colors/dw_red.vim | 66 + .../vim-colorschemes/colors/dw_yellow.vim | 66 + .../start/vim-colorschemes/colors/dzo.vim | 173 + .../vim-colorschemes/colors/earendel.vim | 163 + .../start/vim-colorschemes/colors/earth.vim | 69 + .../vim-colorschemes/colors/earthburn.vim | 201 + .../start/vim-colorschemes/colors/eclipse.vim | 92 + .../vim-colorschemes/colors/eclm_wombat.vim | 56 + .../vim-colorschemes/colors/ecostation.vim | 65 + .../vim-colorschemes/colors/editplus.vim | 207 + .../start/vim-colorschemes/colors/edo_sea.vim | 69 + .../start/vim-colorschemes/colors/ego.vim | 116 + .../start/vim-colorschemes/colors/eink.vim | 189 + .../vim-colorschemes/colors/ekinivim.vim | 53 + .../start/vim-colorschemes/colors/ekvoli.vim | 105 + .../start/vim-colorschemes/colors/elda.vim | 183 + .../start/vim-colorschemes/colors/eldar.vim | 292 + .../start/vim-colorschemes/colors/elflord.vim | 50 + .../start/vim-colorschemes/colors/elise.vim | 182 + .../start/vim-colorschemes/colors/elisex.vim | 183 + .../start/vim-colorschemes/colors/elrodeo.vim | 657 + .../start/vim-colorschemes/colors/elrond.vim | 147 + .../start/vim-colorschemes/colors/emacs.vim | 63 + .../start/vim-colorschemes/colors/enigma.vim | 233 + .../start/vim-colorschemes/colors/enzyme.vim | 69 + .../start/vim-colorschemes/colors/erez.vim | 77 + .../start/vim-colorschemes/colors/eva.vim | 171 + .../vim-colorschemes/colors/eva01-LCL.vim | 171 + .../start/vim-colorschemes/colors/eva01.vim | 171 + .../start/vim-colorschemes/colors/evening.vim | 827 + .../vim-colorschemes/colors/evening1.vim | 57 + .../start/vim-colorschemes/colors/evokai.vim | 313 + .../vim-colorschemes/colors/evolution.vim | 147 + .../vim-colorschemes/colors/fahrenheit.vim | 197 + .../vim-colorschemes/colors/fairyfloss.vim | 159 + .../start/vim-colorschemes/colors/falcon.vim | 286 + .../start/vim-colorschemes/colors/far.vim | 68 + .../start/vim-colorschemes/colors/felipec.vim | 86 + .../start/vim-colorschemes/colors/feral.vim | 104 + .../colors/fight-in-the-shade.vim | 246 + .../vim-colorschemes/colors/fine_blue.vim | 79 + .../vim-colorschemes/colors/firewatch.vim | 138 + .../vim-colorschemes/colors/flatcolor.vim | 335 + .../vim-colorschemes/colors/flatland.vim | 107 + .../vim-colorschemes/colors/flatlandia.vim | 166 + .../colors/flattened_dark.vim | 325 + .../colors/flattened_light.vim | 314 + .../vim-colorschemes/colors/flattown.vim | 127 + .../start/vim-colorschemes/colors/flattr.vim | 100 + .../start/vim-colorschemes/colors/flatui.vim | 278 + .../vim-colorschemes/colors/fnaqevan.vim | 67 + .../start/vim-colorschemes/colors/fog.vim | 170 + .../start/vim-colorschemes/colors/fokus.vim | 168 + .../start/vim-colorschemes/colors/forneus.vim | 119 + .../start/vim-colorschemes/colors/foursee.vim | 82 + .../start/vim-colorschemes/colors/freya.vim | 79 + .../start/vim-colorschemes/colors/frood.vim | 60 + .../start/vim-colorschemes/colors/frozen.vim | 51 + .../start/vim-colorschemes/colors/fruidle.vim | 74 + .../start/vim-colorschemes/colors/fruit.vim | 69 + .../start/vim-colorschemes/colors/fruity.vim | 147 + .../start/vim-colorschemes/colors/fu.vim | 127 + .../start/vim-colorschemes/colors/fx.vim | 405 + .../start/vim-colorschemes/colors/garden.vim | 97 + .../vim-colorschemes/colors/gardener.vim | 271 + .../vim-colorschemes/colors/gemcolors.vim | 87 + .../colors/genericdc-light.vim | 98 + .../vim-colorschemes/colors/genericdc.vim | 98 + .../vim-colorschemes/colors/gentooish.vim | 163 + .../start/vim-colorschemes/colors/getafe.vim | 196 + .../vim-colorschemes/colors/getfresh.vim | 145 + .../vim-colorschemes/colors/ghostbuster.vim | 671 + .../start/vim-colorschemes/colors/github.vim | 116 + .../start/vim-colorschemes/colors/gobo.vim | 27 + .../start/vim-colorschemes/colors/golded.vim | 113 + .../start/vim-colorschemes/colors/golden.vim | 70 + .../vim-colorschemes/colors/goldenrod.vim | 104 + .../vim-colorschemes/colors/goodwolf.vim | 513 + .../start/vim-colorschemes/colors/google.vim | 105 + .../start/vim-colorschemes/colors/gor.vim | 47 + .../start/vim-colorschemes/colors/gotham.vim | 269 + .../vim-colorschemes/colors/gotham256.vim | 266 + .../start/vim-colorschemes/colors/gothic.vim | 45 + .../start/vim-colorschemes/colors/grape.vim | 59 + .../start/vim-colorschemes/colors/gravity.vim | 88 + .../vim-colorschemes/colors/grayorange.vim | 96 + .../start/vim-colorschemes/colors/graywh.vim | 204 + .../start/vim-colorschemes/colors/grb256.vim | 32 + .../vim-colorschemes/colors/greenisgood.vim | 252 - .../start/vim-colorschemes/colors/greens.vim | 55 + .../vim-colorschemes/colors/greenvision.vim | 72 + .../vim-colorschemes/colors/greenwint.vim | 124 + .../start/vim-colorschemes/colors/grey2.vim | 153 + .../vim-colorschemes/colors/greyblue.vim | 75 + .../vim-colorschemes/colors/greygull.vim | 315 + .../start/vim-colorschemes/colors/grishin.vim | 75 + .../start/vim-colorschemes/colors/gruvbox.vim | 1393 + .../start/vim-colorschemes/colors/gryffin.vim | 1305 + .../vim-colorschemes/colors/guardian.vim | 103 + .../vim-colorschemes/colors/guepardo.vim | 123 + .../start/vim-colorschemes/colors/h80.vim | 44 + .../vim-colorschemes/colors/habiLight.vim | 138 + .../vim-colorschemes/colors/happy_hacking.vim | 359 + .../vim-colorschemes/colors/harlequin.vim | 330 + .../vim-colorschemes/colors/heliotrope.vim | 58 + .../start/vim-colorschemes/colors/hemisu.vim | 215 + .../start/vim-colorschemes/colors/herald.vim | 385 + .../colors/heroku-terminal.vim | 363 + .../start/vim-colorschemes/colors/heroku.vim | 355 + .../colors/herokudoc-gvim.vim | 90 + .../vim-colorschemes/colors/herokudoc.vim | 301 + .../start/vim-colorschemes/colors/hhazure.vim | 83 + .../start/vim-colorschemes/colors/hhdblue.vim | 233 + .../start/vim-colorschemes/colors/hhdcyan.vim | 233 + .../start/vim-colorschemes/colors/hhdgray.vim | 233 + .../vim-colorschemes/colors/hhdgreen.vim | 233 + .../vim-colorschemes/colors/hhdmagenta.vim | 233 + .../start/vim-colorschemes/colors/hhdred.vim | 234 + .../vim-colorschemes/colors/hhdyellow.vim | 235 + .../vim-colorschemes/colors/hhorange.vim | 82 + .../start/vim-colorschemes/colors/hhpink.vim | 85 + .../vim-colorschemes/colors/hhspring.vim | 83 + .../start/vim-colorschemes/colors/hhteal.vim | 83 + .../vim-colorschemes/colors/hhviolet.vim | 83 + .../colors/highlighter_term.vim | 122 + .../colors/highlighter_term_bright.vim | 123 + .../vim-colorschemes/colors/highwayman.vim | 339 + .../start/vim-colorschemes/colors/hilal.vim | 145 + .../start/vim-colorschemes/colors/holokai.vim | 196 + .../start/vim-colorschemes/colors/hornet.vim | 62 + .../colors/horseradish256.vim | 329 + .../start/vim-colorschemes/colors/hotpot.vim | 220 + .../start/vim-colorschemes/colors/hual.vim | 146 + .../vim-colorschemes/colors/hybrid-light.vim | 328 + .../start/vim-colorschemes/colors/hybrid.vim | 453 + .../colors/hybrid_material.vim | 462 + .../colors/hybrid_reverse.vim | 462 + .../vim-colorschemes/colors/hydrangea.vim | 100 + .../vim-colorschemes/colors/iangenzo.vim | 312 + .../start/vim-colorschemes/colors/ibmedit.vim | 60 + .../start/vim-colorschemes/colors/icansee.vim | 61 + .../start/vim-colorschemes/colors/iceberg.vim | 176 + .../vim-colorschemes/colors/immortals.vim | 247 + .../start/vim-colorschemes/colors/impact.vim | 66 + .../start/vim-colorschemes/colors/impactG.vim | 68 + .../vim-colorschemes/colors/impactjs.vim | 34 + .../vim-colorschemes/colors/industrial.vim | 80 + .../vim-colorschemes/colors/industry.vim | 40 + .../start/vim-colorschemes/colors/ingretu.vim | 73 + .../start/vim-colorschemes/colors/inkpot.vim | 224 + .../start/vim-colorschemes/colors/inori.vim | 218 + .../vim-colorschemes/colors/ir_black.vim | 212 + .../start/vim-colorschemes/colors/ironman.vim | 133 + .../vim-colorschemes/colors/itg_flat.vim | 44 + .../colors/itg_flat_transparent.vim | 45 + .../start/vim-colorschemes/colors/itsasoa.vim | 104 + .../start/vim-colorschemes/colors/jaime.vim | 55 + .../start/vim-colorschemes/colors/jammy.vim | 111 + .../start/vim-colorschemes/colors/janah.vim | 143 + .../vim-colorschemes/colors/japanesque.vim | 138 + .../vim-colorschemes/colors/jelleybeans.vim | 425 + .../vim-colorschemes/colors/jellybeans.vim | 687 + .../vim-colorschemes/colors/jellygrass.vim | 276 + .../start/vim-colorschemes/colors/jellyx.vim | 253 + .../start/vim-colorschemes/colors/jhdark.vim | 71 + .../start/vim-colorschemes/colors/jhlight.vim | 80 + .../start/vim-colorschemes/colors/jiks.vim | 190 + .../vim-colorschemes/colors/jitterbug.vim | 80 + .../vim-colorschemes/colors/kalahari.vim | 181 + .../start/vim-colorschemes/colors/kalisi.vim | 621 + .../start/vim-colorschemes/colors/kalt.vim | 213 + .../start/vim-colorschemes/colors/kaltex.vim | 213 + .../start/vim-colorschemes/colors/kate.vim | 59 + .../start/vim-colorschemes/colors/kellys.vim | 271 + .../start/vim-colorschemes/colors/khaki.vim | 178 + .../vim-colorschemes/colors/kib_darktango.vim | 171 + .../vim-colorschemes/colors/kib_plastic.vim | 188 + .../vim-colorschemes/colors/kings-away.vim | 103 + .../start/vim-colorschemes/colors/kiss.vim | 147 + .../start/vim-colorschemes/colors/kkruby.vim | 454 + .../start/vim-colorschemes/colors/koehler.vim | 64 + .../start/vim-colorschemes/colors/kolor.vim | 283 + .../start/vim-colorschemes/colors/kruby.vim | 86 + .../start/vim-colorschemes/colors/kyle.vim | 61 + .../vim-colorschemes/colors/laederon.vim | 655 + .../vim-colorschemes/colors/lakers_away.vim | 105 + .../vim-colorschemes/colors/landscape.vim | 162 + .../start/vim-colorschemes/colors/lanox.vim | 158 + .../vim-colorschemes/colors/lanzarotta.vim | 68 + .../vim-colorschemes/colors/lapis256.vim | 68 + .../start/vim-colorschemes/colors/last256.vim | 390 + .../vim-colorschemes/colors/late_evening.vim | 148 + .../start/vim-colorschemes/colors/lazarus.vim | 23 + .../vim-colorschemes/colors/legiblelight.vim | 362 + .../vim-colorschemes/colors/leglight2.vim | 204 + .../start/vim-colorschemes/colors/leo.vim | 191 + .../start/vim-colorschemes/colors/less.vim | 54 + .../start/vim-colorschemes/colors/lettuce.vim | 215 + .../start/vim-colorschemes/colors/leya.vim | 231 + .../vim-colorschemes/colors/lightcolors.vim | 80 + .../vim-colorschemes/colors/lightning.vim | 243 + .../start/vim-colorschemes/colors/lilac.vim | 75 + .../vim-colorschemes/colors/lilydjwg_dark.vim | 92 + .../colors/lilydjwg_green.vim | 92 + .../vim-colorschemes/colors/lilypink.vim | 82 + .../vim-colorschemes/colors/lingodirector.vim | 44 + .../vim-colorschemes/colors/liquidcarbon.vim | 133 + .../vim-colorschemes/colors/literal_tango.vim | 183 + .../start/vim-colorschemes/colors/lizard.vim | 55 + .../vim-colorschemes/colors/lizard256.vim | 303 + .../vim-colorschemes/colors/lodestone.vim | 423 + .../start/vim-colorschemes/colors/loogica.vim | 44 + .../start/vim-colorschemes/colors/louver.vim | 154 + .../start/vim-colorschemes/colors/lucid.vim | 385 + .../start/vim-colorschemes/colors/lucius.vim | 617 + .../start/vim-colorschemes/colors/luinnar.vim | 102 + .../vim-colorschemes/colors/lumberjack.vim | 134 + .../vim-colorschemes/colors/luna-term.vim | 208 + .../start/vim-colorschemes/colors/luna.vim | 255 + .../start/vim-colorschemes/colors/lxvc.vim | 348 + .../start/vim-colorschemes/colors/lyla.vim | 91 + .../vim-colorschemes/colors/mac_classic.vim | 226 + .../vim-colorschemes/colors/macvim-light.vim | 68 + .../vim-colorschemes/colors/made_of_code.vim | 103 + .../vim-colorschemes/colors/madeofcode.vim | 147 + .../vim-colorschemes/colors/magellan.vim | 54 + .../start/vim-colorschemes/colors/magicwb.vim | 60 + .../start/vim-colorschemes/colors/mango.vim | 135 + .../vim-colorschemes/colors/manuscript.vim | 96 + .../start/vim-colorschemes/colors/manxome.vim | 47 + .../start/vim-colorschemes/colors/marklar.vim | 287 + .../vim-colorschemes/colors/maroloccio.vim | 598 + .../vim-colorschemes/colors/maroloccio2.vim | 82 + .../vim-colorschemes/colors/maroloccio3.vim | 91 + .../start/vim-colorschemes/colors/mars.vim | 142 + .../colors/martin_krischik.vim | 397 + .../colors/material-theme.vim | 334 + .../vim-colorschemes/colors/material.vim | 106 + .../vim-colorschemes/colors/materialbox.vim | 1214 + .../vim-colorschemes/colors/materialtheme.vim | 90 + .../start/vim-colorschemes/colors/matrix.vim | 97 + .../start/vim-colorschemes/colors/maui.vim | 112 + .../vim-colorschemes/colors/mayansmoke.vim | 343 + .../start/vim-colorschemes/colors/mdark.vim | 305 + .../start/vim-colorschemes/colors/mellow.vim | 41 + .../start/vim-colorschemes/colors/messy.vim | 97 + .../start/vim-colorschemes/colors/meta5.vim | 92 + .../vim-colorschemes/colors/metacosm.vim | 136 + .../vim-colorschemes/colors/midnight.vim | 102 + .../start/vim-colorschemes/colors/miko.vim | 40 + .../start/vim-colorschemes/colors/minimal.vim | 51 + .../vim-colorschemes/colors/minimalist.vim | 16 +- .../start/vim-colorschemes/colors/mint.vim | 77 + .../start/vim-colorschemes/colors/mizore.vim | 103 + .../start/vim-colorschemes/colors/mod8.vim | 237 + .../vim-colorschemes/colors/mod_tcsoft.vim | 68 + .../vim-colorschemes/colors/mohammad.vim | 56 + .../start/vim-colorschemes/colors/mojave.vim | 74 + .../start/vim-colorschemes/colors/molokai.vim | 276 + .../vim-colorschemes/colors/molokai_dark.vim | 249 + .../start/vim-colorschemes/colors/monoacc.vim | 126 + .../vim-colorschemes/colors/monochrome.vim | 74 + .../vim-colorschemes/colors/monokai-chris.vim | 107 + .../colors/monokai-phoenix.vim | 281 + .../vim-colorschemes/colors/monokain.vim | 214 + .../start/vim-colorschemes/colors/montz.vim | 26 + .../start/vim-colorschemes/colors/moody.vim | 97 + .../start/vim-colorschemes/colors/moonfly.vim | 827 - .../vim-colorschemes/colors/moonshine.vim | 146 + .../colors/moonshine_lowcontrast.vim | 145 + .../colors/moonshine_minimal.vim | 145 + .../vim-colorschemes/colors/mophiaDark.vim | 85 + .../vim-colorschemes/colors/mophiaSmoke.vim | 91 + .../start/vim-colorschemes/colors/mopkai.vim | 257 + .../start/vim-colorschemes/colors/more.vim | 60 + .../start/vim-colorschemes/colors/moria.vim | 251 + .../vim-colorschemes/colors/moriarty.vim | 352 + .../start/vim-colorschemes/colors/morning.vim | 54 + .../start/vim-colorschemes/colors/moss.vim | 243 + .../start/vim-colorschemes/colors/motus.vim | 66 + .../vim-colorschemes/colors/mourning.vim | 161 + .../start/vim-colorschemes/colors/mrkn256.vim | 370 + .../start/vim-colorschemes/colors/mrpink.vim | 52 + .../start/vim-colorschemes/colors/mud.vim | 50 + .../start/vim-colorschemes/colors/muon.vim | 95 + .../start/vim-colorschemes/colors/murphy.vim | 41 + .../vim-colorschemes/colors/mushroom.vim | 76 + .../start/vim-colorschemes/colors/mustang.vim | 65 + .../start/vim-colorschemes/colors/mythos.vim | 155 + .../start/vim-colorschemes/colors/native.vim | 55 + .../start/vim-colorschemes/colors/nature.vim | 36 + .../vim-colorschemes/colors/navajo-night.vim | 119 + .../start/vim-colorschemes/colors/navajo.vim | 65 + .../start/vim-colorschemes/colors/nazca.vim | 252 + .../start/vim-colorschemes/colors/nedit.vim | 26 + .../start/vim-colorschemes/colors/nedit2.vim | 29 + .../vim-colorschemes/colors/nefertiti.vim | 269 + .../start/vim-colorschemes/colors/neodark.vim | 371 + .../start/vim-colorschemes/colors/neon.vim | 70 + .../vim-colorschemes/colors/neonwave.vim | 132 + .../vim-colorschemes/colors/nerv-ous.vim | 60 + .../start/vim-colorschemes/colors/nes.vim | 95 + .../vim-colorschemes/colors/nets-away.vim | 103 + .../vim-colorschemes/colors/neuromancer.vim | 277 + .../start/vim-colorschemes/colors/neutron.vim | 79 + .../colors/neverland-darker.vim | 208 + .../vim-colorschemes/colors/neverland.vim | 217 + .../colors/neverland2-darker.vim | 212 + .../vim-colorschemes/colors/neverland2.vim | 209 + .../vim-colorschemes/colors/neverness.vim | 141 + .../start/vim-colorschemes/colors/nevfn.vim | 79 + .../colors/new-railscasts.vim | 229 + .../vim-colorschemes/colors/newspaper.vim | 147 + .../vim-colorschemes/colors/newsprint.vim | 175 + .../vim-colorschemes/colors/nicotine.vim | 34 + .../start/vim-colorschemes/colors/night.vim | 79 + .../vim-colorschemes/colors/nightVision.vim | 52 + .../vim-colorschemes/colors/night_vision.vim | 47 + .../vim-colorschemes/colors/nightflight.vim | 74 + .../vim-colorschemes/colors/nightflight2.vim | 47 + .../vim-colorschemes/colors/nightshade.vim | 76 + .../colors/nightshade_print.vim | 75 + .../vim-colorschemes/colors/nightshimmer.vim | 116 + .../vim-colorschemes/colors/nightsky.vim | 147 + .../vim-colorschemes/colors/nightwish.vim | 59 + .../vim-colorschemes/colors/no_quarter.vim | 135 + .../start/vim-colorschemes/colors/noclown.vim | 179 + .../vim-colorschemes/colors/nocturne.vim | 122 + .../vim-colorschemes/colors/nofrils-acme.vim | 189 + .../vim-colorschemes/colors/nofrils-dark.vim | 189 + .../vim-colorschemes/colors/nofrils-light.vim | 189 + .../vim-colorschemes/colors/nofrils-sepia.vim | 189 + .../start/vim-colorschemes/colors/nord.vim | 686 + .../start/vim-colorschemes/colors/nordisk.vim | 208 + .../vim-colorschemes/colors/northland.vim | 149 + .../vim-colorschemes/colors/northpole.vim | 124 + .../vim-colorschemes/colors/northsky.vim | 217 + .../vim-colorschemes/colors/norwaytoday.vim | 97 + .../start/vim-colorschemes/colors/nour.vim | 165 + .../start/vim-colorschemes/colors/nuvola.vim | 107 + .../vim-colorschemes/colors/obsidian.vim | 341 + .../vim-colorschemes/colors/obsidian2.vim | 74 + .../vim-colorschemes/colors/oceanblack.vim | 115 + .../vim-colorschemes/colors/oceanblack256.vim | 125 + .../vim-colorschemes/colors/oceandeep.vim | 140 + .../vim-colorschemes/colors/oceanlight.vim | 105 + .../start/vim-colorschemes/colors/odyssey.vim | 358 - .../start/vim-colorschemes/colors/off.vim | 202 + .../start/vim-colorschemes/colors/olive.vim | 119 + .../start/vim-colorschemes/colors/onedark.vim | 532 + .../start/vim-colorschemes/colors/orange.vim | 94 + .../vim-colorschemes/colors/osx_like.vim | 69 + .../start/vim-colorschemes/colors/otaku.vim | 216 + .../start/vim-colorschemes/colors/oxeded.vim | 105 + .../start/vim-colorschemes/colors/pablo.vim | 26 + .../start/vim-colorschemes/colors/pacific.vim | 66 + .../vim-colorschemes/colors/paintbox.vim | 96 + .../vim-colorschemes/colors/paramount.vim | 206 + .../start/vim-colorschemes/colors/parsec.vim | 680 + .../vim-colorschemes/colors/peachpuff.vim | 59 + .../start/vim-colorschemes/colors/peaksea.vim | 624 + .../start/vim-colorschemes/colors/pencil.vim | 388 + .../vim-colorschemes/colors/penultimate.vim | 199 + .../start/vim-colorschemes/colors/peppers.vim | 62 + .../start/vim-colorschemes/colors/perfect.vim | 143 + .../start/vim-colorschemes/colors/petrel.vim | 326 + .../vim-colorschemes/colors/pf_earth.vim | 186 + .../start/vim-colorschemes/colors/phd.vim | 134 + .../start/vim-colorschemes/colors/phoenix.vim | 439 + .../vim-colorschemes/colors/phphaxor.vim | 173 + .../start/vim-colorschemes/colors/phpx.vim | 166 + .../start/vim-colorschemes/colors/pink.vim | 168 + .../vim-colorschemes/colors/pixelmuerto.vim | 254 + .../vim-colorschemes/colors/plasticine.vim | 115 + .../vim-colorschemes/colors/playroom.vim | 39 + .../vim-colorschemes/colors/pleasant.vim | 37 + .../start/vim-colorschemes/colors/potts.vim | 53 + .../start/vim-colorschemes/colors/predawn.vim | 110 + .../start/vim-colorschemes/colors/preto.vim | 238 + .../start/vim-colorschemes/colors/pride.vim | 180 + .../vim-colorschemes/colors/primaries.vim | 64 + .../start/vim-colorschemes/colors/primary.vim | 198 + .../vim-colorschemes/colors/print_bw.vim | 65 + .../start/vim-colorschemes/colors/prmths.vim | 78 + .../vim-colorschemes/colors/professional.vim | 62 + .../start/vim-colorschemes/colors/proton.vim | 63 + .../vim-colorschemes/colors/ps_color.vim | 472 + .../start/vim-colorschemes/colors/pspad.vim | 37 + .../vim-colorschemes/colors/pt_black.vim | 181 + .../start/vim-colorschemes/colors/putty.vim | 82 + .../start/vim-colorschemes/colors/pw.vim | 209 + .../vim-colorschemes/colors/py-darcula.vim | 115 + .../start/vim-colorschemes/colors/pyte.vim | 94 + .../start/vim-colorschemes/colors/python.vim | 104 + .../vim-colorschemes/colors/quagmire.vim | 112 + .../start/vim-colorschemes/colors/quantum.vim | 251 + .../colors/radicalgoodspeed.vim | 209 + .../start/vim-colorschemes/colors/raggi.vim | 108 + .../vim-colorschemes/colors/railscasts.vim | 148 + .../colors/rainbow_autumn.vim | 69 + .../colors/rainbow_fine_blue.vim | 71 + .../vim-colorschemes/colors/rainbow_fruit.vim | 69 + .../vim-colorschemes/colors/rainbow_night.vim | 70 + .../vim-colorschemes/colors/rainbow_sea.vim | 69 + .../vim-colorschemes/colors/rakr-light.vim | 386 + .../start/vim-colorschemes/colors/random.vim | 42 + .../vim-colorschemes/colors/rastafari.vim | 153 + .../start/vim-colorschemes/colors/rcg_gui.vim | 26 + .../vim-colorschemes/colors/rcg_term.vim | 26 + .../colors/rdark-terminal.vim | 132 + .../start/vim-colorschemes/colors/rdark.vim | 159 + .../vim-colorschemes/colors/redblack.vim | 62 + .../vim-colorschemes/colors/redstring.vim | 26 + .../vim-colorschemes/colors/refactor.vim | 85 + .../vim-colorschemes/colors/relaxedgreen.vim | 112 + .../vim-colorschemes/colors/reliable.vim | 126 + .../vim-colorschemes/colors/reloaded.vim | 70 + .../vim-colorschemes/colors/revolutions.vim | 75 + .../vim-colorschemes/colors/robinhood.vim | 103 + .../vim-colorschemes/colors/rockets-away.vim | 103 + .../start/vim-colorschemes/colors/ron.vim | 43 + .../vim-colorschemes/colors/rootwater.vim | 98 + .../start/vim-colorschemes/colors/sadek1.vim | 100 + .../start/vim-colorschemes/colors/sand.vim | 30 + .../vim-colorschemes/colors/sandydune.vim | 166 + .../start/vim-colorschemes/colors/satori.vim | 54 + .../start/vim-colorschemes/colors/saturn.vim | 440 + .../vim-colorschemes/colors/scheakur.vim | 130 + .../start/vim-colorschemes/colors/scite.vim | 48 + .../start/vim-colorschemes/colors/scooby.vim | 165 + .../start/vim-colorschemes/colors/seagull.vim | 315 + .../start/vim-colorschemes/colors/sean.vim | 83 + .../vim-colorschemes/colors/seashell.vim | 55 + .../start/vim-colorschemes/colors/seattle.vim | 401 + .../vim-colorschemes/colors/selenitic.vim | 38 + .../start/vim-colorschemes/colors/seoul.vim | 63 + .../colors/seoul256-light.vim | 76 + .../vim-colorschemes/colors/seoul256.vim | 435 + .../start/vim-colorschemes/colors/seti.vim | 113 + .../vim-colorschemes/colors/settlemyer.vim | 53 + .../colors/sexy-railscasts.vim | 102 + .../start/vim-colorschemes/colors/sf.vim | 76 + .../colors/shades-of-teal.vim | 86 + .../vim-colorschemes/colors/shadesofamber.vim | 114 + .../start/vim-colorschemes/colors/shine.vim | 60 + .../vim-colorschemes/colors/shiny-white.vim | 97 + .../vim-colorschemes/colors/shobogenzo.vim | 98 + .../vim-colorschemes/colors/sialoquent.vim | 188 + .../start/vim-colorschemes/colors/sienna.vim | 150 + .../start/vim-colorschemes/colors/sierra.vim | 375 + .../start/vim-colorschemes/colors/sift.vim | 167 + .../start/vim-colorschemes/colors/silent.vim | 122 + .../vim-colorschemes/colors/simple256.vim | 279 + .../vim-colorschemes/colors/simple_b.vim | 64 + .../vim-colorschemes/colors/simple_dark.vim | 50 + .../colors/simpleandfriendly.vim | 65 + .../vim-colorschemes/colors/simplewhite.vim | 154 + .../start/vim-colorschemes/colors/simplon.vim | 132 + .../colors/skittles_autumn.vim | 99 + .../colors/skittles_berry.vim | 94 + .../vim-colorschemes/colors/skittles_dark.vim | 127 + .../start/vim-colorschemes/colors/sky.vim | 130 + .../start/vim-colorschemes/colors/slate2.vim | 82 + .../vim-colorschemes/colors/smarties.vim | 503 + .../start/vim-colorschemes/colors/smp.vim | 64 + .../start/vim-colorschemes/colors/smpl.vim | 214 + .../start/vim-colorschemes/colors/smyck.vim | 94 + .../start/vim-colorschemes/colors/soda.vim | 106 + .../vim-colorschemes/colors/softblue.vim | 45 + .../vim-colorschemes/colors/softbluev2.vim | 93 + .../vim-colorschemes/colors/softlight.vim | 85 + .../vim-colorschemes/colors/sol-term.vim | 221 + .../start/vim-colorschemes/colors/sol.vim | 349 + .../vim-colorschemes/colors/solarized.vim | 1117 + .../colors/solarized8_dark.vim | 355 + .../colors/solarized8_dark_flat.vim | 353 + .../colors/solarized8_dark_high.vim | 355 + .../colors/solarized8_dark_low.vim | 355 + .../colors/solarized8_light.vim | 367 + .../colors/solarized8_light_flat.vim | 365 + .../colors/solarized8_light_high.vim | 367 + .../colors/solarized8_light_low.vim | 367 + .../start/vim-colorschemes/colors/sole.vim | 28 + .../vim-colorschemes/colors/sonofobsidian.vim | 43 + .../start/vim-colorschemes/colors/sonoma.vim | 156 + .../vim-colorschemes/colors/sorcerer.vim | 208 + .../start/vim-colorschemes/colors/soruby.vim | 80 + .../start/vim-colorschemes/colors/soso.vim | 67 + .../vim-colorschemes/colors/sourcerer.vim | 216 + .../colors/southernlights.vim | 93 + .../vim-colorschemes/colors/southwest-fog.vim | 157 + .../colors/space-vim-dark.vim | 458 + .../vim-colorschemes/colors/spacegray.vim | 159 + .../colors/spacemacs-theme.vim | 342 + .../start/vim-colorschemes/colors/spartan.vim | 245 + .../start/vim-colorschemes/colors/spectro.vim | 207 + .../vim-colorschemes/colors/spiderhawk.vim | 22 + .../vim-colorschemes/colors/spring-night.vim | 201 + .../start/vim-colorschemes/colors/spring.vim | 71 + .../vim-colorschemes/colors/sprinkles.vim | 222 + .../vim-colorschemes/colors/spurs_away.vim | 103 + .../vim-colorschemes/colors/srcery-drk.vim | 820 + .../start/vim-colorschemes/colors/srcery.vim | 819 + .../vim-colorschemes/colors/stackoverflow.vim | 185 + .../start/vim-colorschemes/colors/stefan.vim | 40 + .../vim-colorschemes/colors/stereokai.vim | 146 + .../vim-colorschemes/colors/stingray.vim | 66 + .../colors/stonewashed-256.vim | 59 + .../colors/stonewashed-dark-256.vim | 60 + .../colors/stonewashed-dark-gui.vim | 63 + .../colors/stonewashed-gui.vim | 61 + .../vim-colorschemes/colors/stormpetrel.vim | 326 + .../start/vim-colorschemes/colors/strange.vim | 102 + .../vim-colorschemes/colors/strawimodo.vim | 120 + .../vim-colorschemes/colors/summerfruit.vim | 87 + .../colors/summerfruit256.vim | 322 + .../vim-colorschemes/colors/sunburst.vim | 103 + .../vim-colorschemes/colors/surveyor.vim | 51 + .../vim-colorschemes/colors/swamplight.vim | 219 + .../start/vim-colorschemes/colors/sweater.vim | 71 + .../start/vim-colorschemes/colors/symfony.vim | 115 + .../start/vim-colorschemes/colors/synic.vim | 87 + .../vim-colorschemes/colors/synthwave.vim | 482 + .../start/vim-colorschemes/colors/tabula.vim | 620 + .../vim-colorschemes/colors/tango-morning.vim | 70 + .../start/vim-colorschemes/colors/tango.vim | 84 + .../start/vim-colorschemes/colors/tango2.vim | 62 + .../start/vim-colorschemes/colors/tangoX.vim | 81 + .../vim-colorschemes/colors/tangoshady.vim | 76 + .../start/vim-colorschemes/colors/taqua.vim | 84 + .../start/vim-colorschemes/colors/tatami.vim | 230 + .../start/vim-colorschemes/colors/tayra.vim | 72 + .../start/vim-colorschemes/colors/tchaba.vim | 107 + .../start/vim-colorschemes/colors/tchaba2.vim | 98 + .../start/vim-colorschemes/colors/tcsoft.vim | 83 + .../start/vim-colorschemes/colors/telstar.vim | 71 + .../start/vim-colorschemes/colors/tender.vim | 249 + .../vim-colorschemes/colors/termschool.vim | 133 + .../start/vim-colorschemes/colors/tesla.vim | 114 + .../colors/tetragrammaton.vim | 148 + .../vim-colorschemes/colors/textmate16.vim | 46 + .../vim-colorschemes/colors/thegoodluck.vim | 58 + .../vim-colorschemes/colors/thermopylae.vim | 215 + .../vim-colorschemes/colors/thestars.vim | 78 + .../start/vim-colorschemes/colors/thor.vim | 219 + .../vim-colorschemes/colors/thornbird.vim | 108 + .../start/vim-colorschemes/colors/tibet.vim | 101 + .../start/vim-colorschemes/colors/tidy.vim | 65 + .../colors/tigrana-256-dark.vim | 161 + .../colors/tigrana-256-light.vim | 162 + .../vim-colorschemes/colors/tir_black.vim | 130 + .../vim-colorschemes/colors/tolerable.vim | 43 + .../vim-colorschemes/colors/tomatosoup.vim | 80 + .../vim-colorschemes/colors/tony_light.vim | 49 + .../vim-colorschemes/colors/toothpik.vim | 51 + .../start/vim-colorschemes/colors/torte.vim | 51 + .../vim-colorschemes/colors/transparent.vim | 120 + .../vim-colorschemes/colors/triplejelly.vim | 629 + .../vim-colorschemes/colors/trivial256.vim | 42 + .../start/vim-colorschemes/colors/trogdor.vim | 43 + .../vim-colorschemes/colors/tropikos.vim | 112 + .../colors/true-monochrome.vim | 85 + .../start/vim-colorschemes/colors/turbo.vim | 87 + .../start/vim-colorschemes/colors/turtles.vim | 375 + .../vim-colorschemes/colors/tutticolori.vim | 47 + .../vim-colorschemes/colors/twilight.vim | 114 + .../vim-colorschemes/colors/twilight256.vim | 300 + .../start/vim-colorschemes/colors/twitchy.vim | 102 + .../vim-colorschemes/colors/two-firewatch.vim | 692 + .../vim-colorschemes/colors/two2tango.vim | 104 + .../start/vim-colorschemes/colors/ubaryd.vim | 677 + .../start/vim-colorschemes/colors/ubloh.vim | 49 + .../vim-colorschemes/colors/umber-green.vim | 89 + .../vim-colorschemes/colors/understated.vim | 58 + .../colors/underwater-mod.vim | 150 + .../vim-colorschemes/colors/underwater.vim | 66 + .../start/vim-colorschemes/colors/unicon.vim | 191 + .../start/vim-colorschemes/colors/up.vim | 190 + .../vim-colorschemes/colors/valloric.vim | 192 + .../vim-colorschemes/colors/vanzan_color.vim | 118 + .../start/vim-colorschemes/colors/vc.vim | 24 + .../start/vim-colorschemes/colors/vcbc.vim | 31 + .../vim-colorschemes/colors/vertLaiton.vim | 85 + .../vim-colorschemes/colors/vexorian.vim | 42 + .../vim-colorschemes/colors/vibrantink.vim | 68 + .../start/vim-colorschemes/colors/vice.vim | 164 + .../start/vim-colorschemes/colors/vilight.vim | 106 + .../vim-colorschemes/colors/vim-material.vim | 128 + .../vim-colorschemes/colors/vimbrains.vim | 363 + .../vim-colorschemes/colors/vimbrant.vim | 531 + .../start/vim-colorschemes/colors/vimicks.vim | 82 + .../vim-colorschemes/colors/visualstudio.vim | 92 + .../vim-colorschemes/colors/vividchalk.vim | 191 + .../start/vim-colorschemes/colors/vj.vim | 379 + .../start/vim-colorschemes/colors/void.vim | 111 + .../start/vim-colorschemes/colors/vorange.vim | 350 + .../start/vim-colorschemes/colors/vydark.vim | 85 + .../start/vim-colorschemes/colors/vylight.vim | 80 + .../start/vim-colorschemes/colors/wargrey.vim | 257 + .../vim-colorschemes/colors/warm_grey.vim | 101 + .../vim-colorschemes/colors/warriors-away.vim | 103 + .../vim-colorschemes/colors/wasabi256.vim | 335 + .../vim-colorschemes/colors/watermark.vim | 174 + .../vim-colorschemes/colors/wellsokai.vim | 127 + .../start/vim-colorschemes/colors/welpe.vim | 561 + .../start/vim-colorschemes/colors/white.vim | 62 + .../vim-colorschemes/colors/whitebox.vim | 86 + .../vim-colorschemes/colors/whitedust.vim | 62 + .../start/vim-colorschemes/colors/widower.vim | 43 + .../vim-colorschemes/colors/wikipedia.vim | 40 + .../vim-colorschemes/colors/win9xblueback.vim | 79 + .../start/vim-colorschemes/colors/winter.vim | 87 + .../start/vim-colorschemes/colors/winterd.vim | 110 + .../vim-colorschemes/colors/wintersday.vim | 60 + .../start/vim-colorschemes/colors/woju.vim | 74 + .../vim-colorschemes/colors/wolfpack.vim | 121 + .../start/vim-colorschemes/colors/wombat.vim | 3 + .../vim-colorschemes/colors/wombat256.vim | 3 +- .../vim-colorschemes/colors/wombat256dave.vim | 98 + .../vim-colorschemes/colors/wombat256i.vim | 307 + .../vim-colorschemes/colors/wombat256mod.vim | 96 + .../start/vim-colorschemes/colors/wood.vim | 39 + .../start/vim-colorschemes/colors/wuye.vim | 82 + .../start/vim-colorschemes/colors/wwdc16.vim | 156 + .../start/vim-colorschemes/colors/wwdc17.vim | 303 + .../vim-colorschemes/colors/xcode-default.vim | 110 + .../start/vim-colorschemes/colors/xcode.vim | 272 + .../start/vim-colorschemes/colors/xedit.vim | 32 + .../start/vim-colorschemes/colors/xemacs.vim | 46 + .../start/vim-colorschemes/colors/xian.vim | 50 + .../vim-colorschemes/colors/xmaslights.vim | 34 + .../vim-colorschemes/colors/xoria256.vim | 142 + .../start/vim-colorschemes/colors/xterm16.vim | 811 + .../start/vim-colorschemes/colors/yeller.vim | 165 + .../start/vim-colorschemes/colors/yuejiu.vim | 153 + .../start/vim-colorschemes/colors/zazen.vim | 173 + .../start/vim-colorschemes/colors/zellner.vim | 54 + .../start/vim-colorschemes/colors/zen.vim | 23 + .../start/vim-colorschemes/colors/zenburn.vim | 522 +- .../vim-colorschemes/colors/zenesque.vim | 384 + .../start/vim-colorschemes/colors/zephyr.vim | 204 + .../start/vim-colorschemes/colors/zmrok.vim | 59 + .../start/vim-colorschemes/colors/znake.vim | 410 + .../start/vim-colorschemes/scripts/README | 2 + .../start/vim-colorschemes/scripts/toremove | 20 + .../start/vim-colorschemes/scripts/toremove2 | 29 + .../start/vim-conflict-marker/.gitattributes | 1 + .../.github/workflows/ci.yml | 53 + .../start/vim-conflict-marker/.gitignore | 1 + .vim/pack/plugins/start/vim-copilot | 1 + .vim/pack/plugins/start/vim-copilot-chat | 1 + .vim/pack/plugins/start/vim-diffchar/LICENSE | 2 +- .../pack/plugins/start/vim-diffchar/README.md | 35 +- .../start/vim-diffchar/autoload/diffchar.vim | 1276 +- .vim/pack/plugins/start/vim-diffchar/demo.gif | Bin 536634 -> 0 bytes .../start/vim-diffchar/doc/diffchar.txt | 175 +- .../plugins/start/vim-diffchar/example1.png | Bin 7490 -> 8159 bytes .../plugins/start/vim-diffchar/example2.png | Bin 8175 -> 9584 bytes .../start/vim-diffchar/plugin/diffchar.vim | 73 +- .vim/pack/plugins/start/vim-fileline/PKGBUILD | 24 + .../pack/plugins/start/vim-fileline/README.md | 58 - .../start/vim-fileline/plugin/file_line.vim | 77 - .../plugins/start/vim-fugitive/.gitattributes | 2 + .../start/vim-fugitive/.github/FUNDING.yml | 2 + .../plugins/start/vim-fugitive/.gitignore | 1 + .../start/vim-fugitive/autoload/fugitive.vim | 57 +- .../start/vim-fugitive/doc/fugitive.txt | 13 +- .../vim-gitgutter/.github/issue_template.md | 4 + .../plugins/start/vim-gitgutter/.gitignore | 5 + .../plugins/start/vim-gitgutter/README.mkd | 15 +- .../vim-gitgutter/autoload/gitgutter.vim | 7 +- .../autoload/gitgutter/debug.vim | 9 - .../vim-gitgutter/autoload/gitgutter/diff.vim | 29 +- .../vim-gitgutter/autoload/gitgutter/hunk.vim | 7 +- .../autoload/gitgutter/utility.vim | 11 +- .../start/vim-gitgutter/doc/gitgutter.txt | 48 +- .../start/vim-gitgutter/plugin/gitgutter.vim | 29 +- .../plugins/start/vim-gnupg/.gitattributes | 2 + .vim/pack/plugins/start/vim-gnupg/.gitignore | 3 + .vim/pack/plugins/start/vim-gnupg/README.md | 96 + .../start/vim-gnupg/autoload/gnupg.vim | 1236 + .../plugins/start/vim-gnupg/doc/gnupg.txt | 125 + .../plugins/start/vim-gnupg/plugin/gnupg.vim | 1416 +- .vim/pack/plugins/start/vim-kotlin | 1 + .vim/pack/plugins/start/vim-ledger-x | 1 + .../plugins/start/vim-ledger/.editorconfig | 20 + .../start/vim-ledger/.github/FUNDING.yml | 1 + .../.github/workflows/reviewdog.yml | 13 + .../vim-ledger/.github/workflows/vader.yml | 42 + .../vim-ledger/.github/workflows/vint.yml | 17 + .vim/pack/plugins/start/vim-ledger/.gitignore | 1 + .../plugins/start/vim-ledger/.vintrc.yaml | 5 + .vim/pack/plugins/start/vim-ledger/COPYING | 339 - .vim/pack/plugins/start/vim-ledger/Justfile | 46 + .../start/vim-ledger/LICENSES/0BSD.txt | 5 + .../start/vim-ledger/LICENSES/CC0-1.0.txt | 121 + .../vim-ledger/LICENSES/GPL-2.0-or-later.txt | 117 + .vim/pack/plugins/start/vim-ledger/README.md | 320 + .vim/pack/plugins/start/vim-ledger/README.mkd | 128 - .vim/pack/plugins/start/vim-ledger/REUSE.toml | 22 + .../start/vim-ledger/autoload/ledger.vim | 653 +- .../start/vim-ledger/compiler/ledger.vim | 58 +- .../plugins/start/vim-ledger/doc/ledger.txt | 236 +- .../start/vim-ledger/ftdetect/ledger.vim | 18 +- .../start/vim-ledger/ftplugin/ledger.vim | 524 +- .../start/vim-ledger/indent/ledger.vim | 34 +- .../plugins/start/vim-ledger/spec/align.vader | 31 + .../start/vim-ledger/spec/commands.vader | 8 + .../vim-ledger/spec/hledger-cheatsheet.ledger | 95 + .../start/vim-ledger/spec/ledger.ledger | 3 + .../start/vim-ledger/spec/reconcile.vader | 78 + .../start/vim-ledger/spec/syntax.vader | 41 + .../start/vim-ledger/syntax/ledger.vim | 160 +- .../vim-ledger/test/vim-ledger-test.journal | 29 + .../start/vim-luakit/ftdetect/luakit.vim | 2 + .../start/vim-luakit/ftplugin/luakit.vim | 69 + .../start/vim-luakit/indent/luakit.vim | 10 + .../start/vim-luakit/syntax/luakit.vim | 33 + .../start/vim-markdown/CONTRIBUTING.md | 58 - .vim/pack/plugins/start/vim-markdown/Gemfile | 6 + .../plugins/start/vim-markdown/Gemfile.lock | 34 + .vim/pack/plugins/start/vim-markdown/LICENSE | 20 + .vim/pack/plugins/start/vim-markdown/Makefile | 88 - .../pack/plugins/start/vim-markdown/README.md | 606 +- .../vim-markdown/after/ftplugin/markdown.vim | 211 - .../start/vim-markdown/autoload/markdown.vim | 528 + .../start/vim-markdown/dict/emoticons.dict | 868 + .../start/vim-markdown/doc/vim-markdown.txt | 691 - .../start/vim-markdown/ftdetect/markdown.vim | 9 +- .../start/vim-markdown/ftplugin/markdown.vim | 1082 +- .../images/vim_markdown_edit_code_block.gif | Bin 0 -> 716091 bytes .../images/vim_markdown_rendering.png | Bin 0 -> 122367 bytes .../vim_markdown_rendering_comparison_1.png | Bin 0 -> 121465 bytes .../vim_markdown_rendering_comparison_2.png | Bin 0 -> 119464 bytes .../start/vim-markdown/indent/markdown.vim | 75 - .../start/vim-markdown/registry/markdown.yaml | 9 - .../vim-markdown/spec/autoformatting_spec.rb | 47 + .../spec/change_header_level_spec.rb | 31 + .../spec/change_list_item_spec.rb | 34 + .../vim-markdown/spec/features/autolinks.md | 28 + .../spec/features/autolinks.md.html | 59 + .../vim-markdown/spec/features/blockquotes.md | 22 + .../spec/features/blockquotes.md.html | 54 + .../spec/features/blockquotes_nested.md | 16 + .../spec/features/blockquotes_nested.md.html | 48 + .../vim-markdown/spec/features/codeblocks.md | 76 + .../spec/features/codeblocks.md.html | 108 + .../spec/features/combined_emphasis.md | 8 + .../spec/features/combined_emphasis.md.html | 40 + .../spec/features/contained_emphasis.md | 12 + .../spec/features/contained_emphasis.md.html | 47 + .../vim-markdown/spec/features/headers_atx.md | 35 + .../spec/features/headers_atx.md.html | 68 + .../spec/features/headers_setext.md | 24 + .../spec/features/headers_setext.md.html | 56 + .../spec/features/horizontal_rules.md | 30 + .../vim-markdown/spec/features/inline_html.md | 29 + .../spec/features/inline_html.md.html | 62 + .../spec/features/inline_links.md | 61 + .../spec/features/inline_links.md.html | 96 + .../spec/features/inline_references.md | 52 + .../spec/features/inline_references.md.html | 86 + .../vim-markdown/spec/features/jekyll.md | 32 + .../vim-markdown/spec/features/jekyll.md.html | 64 + .../spec/features/kramdown/headers_with_id.md | 21 + .../features/kramdown/headers_with_id.md.html | 54 + .../start/vim-markdown/spec/features/lists.md | 99 + .../vim-markdown/spec/features/lists.md.html | 134 + .../features/lists_with_anchored_elements.md | 63 + .../lists_with_anchored_elements.md.html | 95 + .../spec/features/lists_with_codeblocks.md | 53 + .../features/lists_with_codeblocks.md.html | 85 + .../features/lists_with_fenced_codeblocks.md | 54 + .../lists_with_fenced_codeblocks.md.html | 86 + .../spec/features/lists_with_lists.md | 21 + .../spec/features/lists_with_lists.md.html | 52 + .../spec/features/lists_with_tables.md | 36 + .../spec/features/lists_with_tables.md.html | 68 + .../spec/features/lists_with_tasks.md | 29 + .../spec/features/lists_with_tasks.md.html | 61 + .../features/original_syntax_description.md | 896 + .../spec/features/strikethrough.md | 30 + .../spec/features/strikethrough.md.html | 66 + .../spec/features/strong_emphasis.md | 57 + .../spec/features/strong_emphasis.md.html | 91 + .../vim-markdown/spec/features/tables.md | 105 + .../vim-markdown/spec/features/tables.md.html | 141 + .../spec/features/weak_emphasis.md | 57 + .../spec/features/weak_emphasis.md.html | 91 + .../vim-markdown/spec/github_syntax_spec.rb | 48 + .../vim-markdown/spec/kramdown_syntax_spec.rb | 26 + .../start/vim-markdown/spec/spec_helper.rb | 40 + .../start/vim-markdown/spec/support/vim.rb | 16 + .../start/vim-markdown/syntax/markdown.vim | 1090 +- .../vim-markdown/syntax/markdown_jekyll.vim | 30 + .../plugins/start/vim-markdown/test/README.md | 5 - .../start/vim-markdown/test/folding-toc.vader | 179 - .../start/vim-markdown/test/folding.vader | 53 - .../start/vim-markdown/test/ge_test.md | 1 - .../vim-markdown/test/header-decrease.vader | 116 - .../test/indent-new-list-item.vader | 15 - .../plugins/start/vim-markdown/test/indent.md | 26 - .../start/vim-markdown/test/indent.vader | 73 - .../start/vim-markdown/test/insert-toc.vader | 147 - .../plugins/start/vim-markdown/test/map.vader | 153 - .../vim-markdown/test/python-folding.vader | 84 - .../start/vim-markdown/test/run-tests.sh | 16 - .../start/vim-markdown/test/setextoatx.vader | 48 - .../vim-markdown/test/strikethrough.vader | 41 - .../vim-markdown/test/syntax-singleline.vader | 158 - .../plugins/start/vim-markdown/test/syntax.md | 89 - .../start/vim-markdown/test/syntax.vader | 1528 - .../vim-markdown/test/table-format.vader | 85 - .../start/vim-markdown/test/toc-autofit.vader | 53 - .../plugins/start/vim-markdown/test/toc.vader | 181 - .../plugins/start/vim-markdown/test/vimrc | 31 - .vim/pack/plugins/start/vim-snipmate/README | 28 + .vim/pack/plugins/start/vim-snipmate/doc/tags | 33 - .../start/vim-snipmate/snippets/_.snippets | 28 - .../vim-snipmate/snippets/autoit.snippets | 66 + .../start/vim-snipmate/snippets/c.snippets | 2 +- .../start/vim-snipmate/snippets/mako.snippets | 54 + .../start/vim-snipmate/snippets/objc.snippets | 184 + .../start/vim-snipmate/snippets/sh.snippets | 15 +- .../start/vim-snipmate/snippets/zsh.snippets | 58 + .vim/pack/plugins/start/vim-spotdiff/LICENSE | 2 +- .../start/vim-spotdiff/autoload/diffutil.vim | 264 + .../start/vim-spotdiff/autoload/spotdiff.vim | 587 +- .../start/vim-spotdiff/doc/spotdiff.txt | 43 +- .../start/vim-spotdiff/plugin/spotdiff.vim | 44 +- .../pack/plugins/start/vim-tabular/.gitignore | 1 + .vim/pack/plugins/start/vim-tagbar-markdown | 1 + .../plugins/start/vim-tagbar/.gitattributes | 4 + .../start/vim-tagbar/.github/FUNDING.yml | 2 + .../vim-tagbar/.github/workflows/check.yml | 30 + .../.github/workflows/reviewdog.yml | 13 + .../vim-tagbar/.github/workflows/vint.yml | 17 + .vim/pack/plugins/start/vim-tagbar/.gitignore | 1 + .vim/pack/plugins/start/vim-tagbar/.info | 2 + .../plugins/start/vim-tagbar/.vintrc.yaml | 5 + .vim/pack/plugins/start/vim-tagbar/LICENSE | 82 + .vim/pack/plugins/start/vim-tagbar/README.md | 100 + .../start/vim-tagbar/autoload/tagbar.vim | 1013 +- .../autoload/tagbar/prototypes/basetag.vim | 17 +- .../autoload/tagbar/prototypes/fileinfo.vim | 10 + .../autoload/tagbar/prototypes/normaltag.vim | 81 +- .../autoload/tagbar/prototypes/pseudotag.vim | 9 +- .../autoload/tagbar/prototypes/typeinfo.vim | 3 +- .../vim-tagbar/autoload/tagbar/sorting.vim | 6 + .../autoload/tagbar/types/ctags.vim | 16 + .../autoload/tagbar/types/uctags.vim | 359 +- .../plugins/start/vim-tagbar/doc/tagbar.txt | 791 +- .vim/pack/plugins/start/vim-tagbar/doc/tags | 62 - .../start/vim-tagbar/plugin/tagbar.vim | 73 +- .../start/vim-tagbar/syntax/tagbar.vim | 10 +- .../start/vim-traces/autoload/traces.vim | 6 +- .vim/pack/plugins/start/vim-undoquit | 1 + .../plugins/start/vim-undotree/.gitignore | 1 + .vim/pack/plugins/start/vim-undotree/LICENSE | 2 +- .../start/vim-undotree/autoload/undotree.vim | 141 +- .../start/vim-undotree/doc/undotree.txt | 68 +- .../start/vim-undotree/plugin/undotree.vim | 29 + .vim/vimrc | 2 +- 1240 files changed, 189747 insertions(+), 315946 deletions(-) delete mode 100644 .vim/pack/plugins/opt/vim-copilot/LICENSE.md delete mode 100644 .vim/pack/plugins/opt/vim-copilot/README.md delete mode 100644 .vim/pack/plugins/opt/vim-copilot/SECURITY.md delete mode 100644 .vim/pack/plugins/opt/vim-copilot/autoload/copilot.vim delete mode 100644 .vim/pack/plugins/opt/vim-copilot/autoload/copilot/client.vim delete mode 100644 .vim/pack/plugins/opt/vim-copilot/autoload/copilot/handlers.vim delete mode 100644 .vim/pack/plugins/opt/vim-copilot/autoload/copilot/job.vim delete mode 100644 .vim/pack/plugins/opt/vim-copilot/autoload/copilot/logger.vim delete mode 100644 .vim/pack/plugins/opt/vim-copilot/autoload/copilot/panel.vim delete mode 100644 .vim/pack/plugins/opt/vim-copilot/autoload/copilot/util.vim delete mode 100644 .vim/pack/plugins/opt/vim-copilot/autoload/copilot/version.vim delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/compiled/darwin/arm64/kerberos.node delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/compiled/darwin/x64/kerberos.node delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/compiled/linux/arm64/kerberos.node delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/compiled/linux/x64/kerberos.node delete mode 100644 .vim/pack/plugins/opt/vim-copilot/dist/compiled/win32/x64/kerberos.node delete mode 100644 .vim/pack/plugins/opt/vim-copilot/dist/crypt32.node delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/language-server.js delete mode 100644 .vim/pack/plugins/opt/vim-copilot/dist/language-server.js.map delete mode 100644 .vim/pack/plugins/opt/vim-copilot/dist/resources/cl100k_base.tiktoken.noindex delete mode 100644 .vim/pack/plugins/opt/vim-copilot/dist/resources/o200k_base.tiktoken.noindex delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/tree-sitter-go.wasm delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/tree-sitter-javascript.wasm delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/tree-sitter-python.wasm delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/tree-sitter-ruby.wasm delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/tree-sitter-tsx.wasm delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/tree-sitter-typescript.wasm delete mode 100755 .vim/pack/plugins/opt/vim-copilot/dist/tree-sitter.wasm delete mode 100644 .vim/pack/plugins/opt/vim-copilot/doc/copilot.txt delete mode 100644 .vim/pack/plugins/opt/vim-copilot/lua/_copilot.lua delete mode 100644 .vim/pack/plugins/opt/vim-copilot/plugin/copilot.vim delete mode 100644 .vim/pack/plugins/opt/vim-copilot/syntax/copilot.vim delete mode 100644 .vim/pack/plugins/opt/vim-copilot/syntax/copilotlog.vim create mode 100644 .vim/pack/plugins/start/update-plugins.sh create mode 160000 .vim/pack/plugins/start/vim-ale create mode 160000 .vim/pack/plugins/start/vim-awesome-colorschemes create mode 100644 .vim/pack/plugins/start/vim-bufferline/.gitattributes create mode 100644 .vim/pack/plugins/start/vim-bufferline/.gitignore delete mode 100644 .vim/pack/plugins/start/vim-bufferline/autoload/bufferline.vim delete mode 100644 .vim/pack/plugins/start/vim-bufferline/autoload/bufferline/algos/fixed_position.vim delete mode 100644 .vim/pack/plugins/start/vim-bufferline/doc/bufferline.txt create mode 100644 .vim/pack/plugins/start/vim-bufferline/doc/buftabline.txt delete mode 100644 .vim/pack/plugins/start/vim-bufferline/img/bufferline-command.png delete mode 100644 .vim/pack/plugins/start/vim-bufferline/img/bufferline-status.png delete mode 100644 .vim/pack/plugins/start/vim-bufferline/plugin/bufferline.vim create mode 100644 .vim/pack/plugins/start/vim-bufferline/plugin/buftabline.vim create mode 160000 .vim/pack/plugins/start/vim-clap create mode 100644 .vim/pack/plugins/start/vim-colorschemes/.gitignore create mode 100644 .vim/pack/plugins/start/vim-colorschemes/README.md create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/0x7A69_dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/1989.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/256-grayvim.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/256-jungle.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/256_noir.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/3dglasses.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_CaveDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_CaveLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_DuneDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_DuneLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_EstuaryDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_EstuaryLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_ForestDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_ForestLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_HeathDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_HeathLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_LakesideDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_LakesideLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_PlateauDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_PlateauLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_SavannaDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_SavannaLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_SeasideDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_SeasideLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_SulphurpoolDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Atelier_SulphurpoolLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Benokai.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Black.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/BlackSea.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Blue2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/C64.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/CandyPaper.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Chasing_Logic.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ChocolateLiquor.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ChocolatePapaya.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/CodeFactoryv3.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Dark2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/DarkDefault.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/DevC++.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Dev_Delight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Dim.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Dim2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/DimBlue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/DimGreen.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/DimGreens.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/DimGrey.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/DimRed.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/DimSlate.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Green.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/LightDefault.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/LightDefaultGrey.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/LightTan.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/LightYellow.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Monokai.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/MountainDew.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/OceanicNext.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/OceanicNextLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/PapayaWhip.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/PaperColor.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/PerfectDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Red.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Revolution.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/SerialExperimentsLain.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Slate.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/Spink.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/SweetCandy.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/VIvid.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/White2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/abbott.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/abra.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/abyss.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/adam.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/adaryn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/adobe.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/adrian.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/advantage.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/adventurous.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/af.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/afterglow.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/aiseered.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/alduin.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ancient.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/anderson.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/angr.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/anotherdark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ansi_blows.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/antares.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/apprentice.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/aqua.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/aquamarine.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/arcadia.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/archery.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/argonaut.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ashen.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/asmanian2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/asmanian_blood.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/asmdev.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/asmdev2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/astronaut.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/asu1dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/atom.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/aurora.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/automation.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/autumn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/autumnleaf.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ayu.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/babymate256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/badwolf.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bandit.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base16-ateliercave.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base16-atelierdune.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base16-atelierestuary.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base16-atelierforest.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base16-atelierheath.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base16-atelierlakeside.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base16-atelierplateau.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base16-ateliersavanna.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base16-atelierseaside.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base16-ateliersulphurpool.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/base16-railscasts.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/basic-dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/basic-light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/basic.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bayQua.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/baycomb.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bclear.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/beachcomber.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/beauty256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/beekai.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/behelit.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/benlight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bensday.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/billw.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/biogoo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/birds-of-paradise.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bitterjug.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/black_angus.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blackbeauty.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blackboard.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blackdust.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blacklight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blaquemagick.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blazer.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blink.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bluechia.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bluedrake.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bluegreen.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bluenes.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blueprint.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blues.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blueshift.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bluez.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/blugrine.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bluish.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bmichaelsen.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/boa.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bocau.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bog.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/boltzmann.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/borland.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/breeze.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/breezy.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/brighton.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/briofita.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/broduo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/brogrammer.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/brookstream.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/brown.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bubblegum-256-dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bubblegum-256-light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bubblegum.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/buddy.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/burnttoast256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/busierbee.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/busybee.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/buttercream.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bvemu.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/bw.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/c.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/c16gui.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cabin.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cake.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cake16.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/calmar256-dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/calmar256-light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/camo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/campfire.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/candy.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/candycode.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/candyman.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/caramel.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/carrot.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/carvedwood.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/carvedwoodcool.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cascadia.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/celtics_away.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cgpro.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/chalkboard.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/chance-of-storm.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/charged-256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/charon.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/chela_light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cherryblossom.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/chlordane.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/chocolate.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/chroma.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/chrysoprase.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/clarity.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cleanphp.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cleanroom.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/clearance.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cloudy.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/clue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cobalt.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cobalt2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cobaltish.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/coda.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/codeblocks_dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/codeburn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/codedark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/codeschool.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/coffee.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/coldgreen.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/colorer.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/colorful.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/colorful256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/colorsbox-faff.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/colorsbox-greenish.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/colorsbox-material.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/colorsbox-stblue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/colorsbox-stbright.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/colorsbox-steighties.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/colorsbox-stnight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/colorzone.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/contrastneed.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/contrasty.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cool.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/corn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/corporation.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/crayon.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/crt.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/crunchbang.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cthulhian.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/custom.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/cyberpunk.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/d8g_01.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/d8g_02.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/d8g_03.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/d8g_04.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dante.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dark-ruby.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkBlue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkZ.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkblack.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkblue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkblue2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkbone.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkburn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkdevel.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkdot.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkeclipse.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darker-robin.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkerdesert.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkglass.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkocean.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkrobot.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkslategray.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkspectrum.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darktango.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darkzen.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/darth.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dawn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/deep-space.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/deepsea.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/default.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/delek.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/delphi.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/denim.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/derefined.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/desert256v2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/desertEx.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/desertedocean.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/desertedoceanburnt.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/desertink.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/despacio.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/detailed.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/deus.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/devbox-dark-256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/deveiate.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/developer.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/diokai.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/disciple.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/distill.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/distinguished.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/django.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/donbass.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/donttouchme.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/doorhinge.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/doriath.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dracula.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dracula_bold.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dual.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dull.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-darkcave.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-darkdesert.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-darkearth.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-darkforest.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-darkheath.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-darklake.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-darkmeadow.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-darkpark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-darkpool.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-darksea.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/duotone-darkspace.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dusk.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dw_blue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dw_cyan.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dw_green.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dw_orange.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dw_purple.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dw_red.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dw_yellow.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/dzo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/earendel.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/earth.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/earthburn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/eclipse.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/eclm_wombat.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ecostation.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/editplus.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/edo_sea.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ego.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/eink.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ekinivim.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ekvoli.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/elda.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/eldar.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/elflord.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/elise.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/elisex.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/elrodeo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/elrond.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/emacs.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/enigma.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/enzyme.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/erez.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/eva.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/eva01-LCL.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/eva01.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/evening.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/evening1.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/evokai.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/evolution.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fahrenheit.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fairyfloss.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/falcon.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/far.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/felipec.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/feral.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fight-in-the-shade.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fine_blue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/firewatch.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/flatcolor.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/flatland.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/flatlandia.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/flattened_dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/flattened_light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/flattown.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/flattr.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/flatui.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fnaqevan.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fog.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fokus.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/forneus.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/foursee.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/freya.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/frood.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/frozen.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fruidle.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fruit.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fruity.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fu.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/fx.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/garden.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/gardener.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/gemcolors.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/genericdc-light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/genericdc.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/gentooish.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/getafe.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/getfresh.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ghostbuster.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/github.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/gobo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/golded.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/golden.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/goldenrod.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/goodwolf.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/google.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/gor.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/gotham.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/gotham256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/gothic.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/grape.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/gravity.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/grayorange.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/graywh.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/grb256.vim delete mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/greenisgood.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/greens.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/greenvision.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/greenwint.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/grey2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/greyblue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/greygull.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/grishin.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/gruvbox.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/gryffin.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/guardian.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/guepardo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/h80.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/habiLight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/happy_hacking.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/harlequin.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/heliotrope.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hemisu.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/herald.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/heroku-terminal.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/heroku.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/herokudoc-gvim.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/herokudoc.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhazure.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhdblue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhdcyan.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhdgray.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhdgreen.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhdmagenta.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhdred.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhdyellow.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhorange.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhpink.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhspring.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhteal.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hhviolet.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/highlighter_term.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/highlighter_term_bright.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/highwayman.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hilal.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/holokai.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hornet.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/horseradish256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hotpot.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hual.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hybrid-light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hybrid.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hybrid_material.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hybrid_reverse.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/hydrangea.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/iangenzo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ibmedit.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/icansee.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/iceberg.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/immortals.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/impact.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/impactG.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/impactjs.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/industrial.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/industry.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ingretu.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/inkpot.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/inori.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ir_black.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ironman.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/itg_flat.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/itg_flat_transparent.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/itsasoa.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/jaime.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/jammy.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/janah.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/japanesque.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/jelleybeans.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/jellybeans.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/jellygrass.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/jellyx.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/jhdark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/jhlight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/jiks.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/jitterbug.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kalahari.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kalisi.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kalt.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kaltex.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kate.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kellys.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/khaki.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kib_darktango.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kib_plastic.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kings-away.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kiss.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kkruby.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/koehler.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kolor.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kruby.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/kyle.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/laederon.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lakers_away.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/landscape.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lanox.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lanzarotta.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lapis256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/last256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/late_evening.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lazarus.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/legiblelight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/leglight2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/leo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/less.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lettuce.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/leya.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lightcolors.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lightning.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lilac.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lilydjwg_dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lilydjwg_green.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lilypink.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lingodirector.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/liquidcarbon.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/literal_tango.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lizard.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lizard256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lodestone.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/loogica.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/louver.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lucid.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lucius.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/luinnar.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lumberjack.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/luna-term.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/luna.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lxvc.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/lyla.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mac_classic.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/macvim-light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/made_of_code.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/madeofcode.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/magellan.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/magicwb.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mango.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/manuscript.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/manxome.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/marklar.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/maroloccio.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/maroloccio2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/maroloccio3.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mars.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/martin_krischik.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/material-theme.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/material.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/materialbox.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/materialtheme.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/matrix.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/maui.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mayansmoke.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mdark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mellow.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/messy.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/meta5.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/metacosm.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/midnight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/miko.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/minimal.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mint.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mizore.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mod8.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mod_tcsoft.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mohammad.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mojave.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/molokai.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/molokai_dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/monoacc.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/monochrome.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/monokai-chris.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/monokai-phoenix.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/monokain.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/montz.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/moody.vim delete mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/moonfly.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/moonshine.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/moonshine_lowcontrast.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/moonshine_minimal.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mophiaDark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mophiaSmoke.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mopkai.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/more.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/moria.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/moriarty.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/morning.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/moss.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/motus.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mourning.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mrkn256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mrpink.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mud.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/muon.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/murphy.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mushroom.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mustang.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/mythos.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/native.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nature.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/navajo-night.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/navajo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nazca.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nedit.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nedit2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nefertiti.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/neodark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/neon.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/neonwave.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nerv-ous.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nes.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nets-away.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/neuromancer.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/neutron.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/neverland-darker.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/neverland.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/neverland2-darker.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/neverland2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/neverness.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nevfn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/new-railscasts.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/newspaper.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/newsprint.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nicotine.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/night.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nightVision.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/night_vision.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nightflight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nightflight2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nightshade.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nightshade_print.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nightshimmer.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nightsky.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nightwish.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/no_quarter.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/noclown.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nocturne.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nofrils-acme.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nofrils-dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nofrils-light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nofrils-sepia.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nord.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nordisk.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/northland.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/northpole.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/northsky.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/norwaytoday.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nour.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/nuvola.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/obsidian.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/obsidian2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/oceanblack.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/oceanblack256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/oceandeep.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/oceanlight.vim delete mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/odyssey.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/off.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/olive.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/onedark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/orange.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/osx_like.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/otaku.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/oxeded.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pablo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pacific.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/paintbox.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/paramount.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/parsec.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/peachpuff.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/peaksea.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pencil.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/penultimate.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/peppers.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/perfect.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/petrel.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pf_earth.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/phd.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/phoenix.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/phphaxor.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/phpx.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pink.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pixelmuerto.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/plasticine.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/playroom.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pleasant.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/potts.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/predawn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/preto.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pride.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/primaries.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/primary.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/print_bw.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/prmths.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/professional.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/proton.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ps_color.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pspad.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pt_black.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/putty.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pw.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/py-darcula.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/pyte.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/python.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/quagmire.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/quantum.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/radicalgoodspeed.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/raggi.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/railscasts.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rainbow_autumn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rainbow_fine_blue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rainbow_fruit.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rainbow_night.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rainbow_sea.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rakr-light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/random.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rastafari.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rcg_gui.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rcg_term.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rdark-terminal.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rdark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/redblack.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/redstring.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/refactor.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/relaxedgreen.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/reliable.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/reloaded.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/revolutions.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/robinhood.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rockets-away.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ron.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/rootwater.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sadek1.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sand.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sandydune.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/satori.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/saturn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/scheakur.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/scite.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/scooby.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/seagull.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sean.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/seashell.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/seattle.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/selenitic.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/seoul.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/seoul256-light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/seoul256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/seti.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/settlemyer.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sexy-railscasts.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sf.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/shades-of-teal.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/shadesofamber.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/shine.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/shiny-white.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/shobogenzo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sialoquent.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sienna.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sierra.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sift.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/silent.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/simple256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/simple_b.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/simple_dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/simpleandfriendly.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/simplewhite.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/simplon.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/skittles_autumn.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/skittles_berry.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/skittles_dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sky.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/slate2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/smarties.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/smp.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/smpl.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/smyck.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/soda.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/softblue.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/softbluev2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/softlight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sol-term.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sol.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/solarized.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/solarized8_dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/solarized8_dark_flat.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/solarized8_dark_high.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/solarized8_dark_low.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/solarized8_light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/solarized8_light_flat.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/solarized8_light_high.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/solarized8_light_low.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sole.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sonofobsidian.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sonoma.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sorcerer.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/soruby.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/soso.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sourcerer.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/southernlights.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/southwest-fog.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/space-vim-dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/spacegray.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/spacemacs-theme.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/spartan.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/spectro.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/spiderhawk.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/spring-night.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/spring.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sprinkles.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/spurs_away.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/srcery-drk.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/srcery.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/stackoverflow.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/stefan.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/stereokai.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/stingray.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/stonewashed-256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/stonewashed-dark-256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/stonewashed-dark-gui.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/stonewashed-gui.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/stormpetrel.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/strange.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/strawimodo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/summerfruit.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/summerfruit256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sunburst.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/surveyor.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/swamplight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/sweater.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/symfony.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/synic.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/synthwave.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tabula.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tango-morning.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tango.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tango2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tangoX.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tangoshady.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/taqua.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tatami.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tayra.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tchaba.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tchaba2.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tcsoft.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/telstar.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tender.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/termschool.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tesla.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tetragrammaton.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/textmate16.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/thegoodluck.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/thermopylae.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/thestars.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/thor.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/thornbird.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tibet.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tidy.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tigrana-256-dark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tigrana-256-light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tir_black.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tolerable.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tomatosoup.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tony_light.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/toothpik.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/torte.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/transparent.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/triplejelly.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/trivial256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/trogdor.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tropikos.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/true-monochrome.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/turbo.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/turtles.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/tutticolori.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/twilight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/twilight256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/twitchy.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/two-firewatch.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/two2tango.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ubaryd.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/ubloh.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/umber-green.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/understated.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/underwater-mod.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/underwater.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/unicon.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/up.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/valloric.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vanzan_color.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vc.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vcbc.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vertLaiton.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vexorian.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vibrantink.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vice.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vilight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vim-material.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vimbrains.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vimbrant.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vimicks.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/visualstudio.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vividchalk.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vj.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/void.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vorange.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vydark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/vylight.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wargrey.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/warm_grey.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/warriors-away.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wasabi256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/watermark.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wellsokai.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/welpe.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/white.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/whitebox.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/whitedust.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/widower.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wikipedia.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/win9xblueback.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/winter.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/winterd.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wintersday.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/woju.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wolfpack.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wombat256dave.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wombat256i.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wombat256mod.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wood.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wuye.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wwdc16.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/wwdc17.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/xcode-default.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/xcode.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/xedit.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/xemacs.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/xian.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/xmaslights.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/xoria256.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/xterm16.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/yeller.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/yuejiu.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/zazen.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/zellner.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/zen.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/zenesque.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/zephyr.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/zmrok.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/colors/znake.vim create mode 100644 .vim/pack/plugins/start/vim-colorschemes/scripts/README create mode 100755 .vim/pack/plugins/start/vim-colorschemes/scripts/toremove create mode 100755 .vim/pack/plugins/start/vim-colorschemes/scripts/toremove2 create mode 100644 .vim/pack/plugins/start/vim-conflict-marker/.gitattributes create mode 100644 .vim/pack/plugins/start/vim-conflict-marker/.github/workflows/ci.yml create mode 100644 .vim/pack/plugins/start/vim-conflict-marker/.gitignore create mode 160000 .vim/pack/plugins/start/vim-copilot create mode 160000 .vim/pack/plugins/start/vim-copilot-chat delete mode 100644 .vim/pack/plugins/start/vim-diffchar/demo.gif create mode 100644 .vim/pack/plugins/start/vim-fileline/PKGBUILD delete mode 100644 .vim/pack/plugins/start/vim-fileline/README.md delete mode 100644 .vim/pack/plugins/start/vim-fileline/plugin/file_line.vim create mode 100644 .vim/pack/plugins/start/vim-fugitive/.gitattributes create mode 100644 .vim/pack/plugins/start/vim-fugitive/.github/FUNDING.yml create mode 100644 .vim/pack/plugins/start/vim-fugitive/.gitignore create mode 100644 .vim/pack/plugins/start/vim-gitgutter/.github/issue_template.md create mode 100644 .vim/pack/plugins/start/vim-gitgutter/.gitignore create mode 100644 .vim/pack/plugins/start/vim-gnupg/.gitattributes create mode 100644 .vim/pack/plugins/start/vim-gnupg/.gitignore create mode 100644 .vim/pack/plugins/start/vim-gnupg/README.md create mode 100644 .vim/pack/plugins/start/vim-gnupg/autoload/gnupg.vim create mode 100644 .vim/pack/plugins/start/vim-gnupg/doc/gnupg.txt create mode 160000 .vim/pack/plugins/start/vim-kotlin create mode 160000 .vim/pack/plugins/start/vim-ledger-x create mode 100644 .vim/pack/plugins/start/vim-ledger/.editorconfig create mode 100644 .vim/pack/plugins/start/vim-ledger/.github/FUNDING.yml create mode 100644 .vim/pack/plugins/start/vim-ledger/.github/workflows/reviewdog.yml create mode 100644 .vim/pack/plugins/start/vim-ledger/.github/workflows/vader.yml create mode 100644 .vim/pack/plugins/start/vim-ledger/.github/workflows/vint.yml create mode 100644 .vim/pack/plugins/start/vim-ledger/.gitignore create mode 100644 .vim/pack/plugins/start/vim-ledger/.vintrc.yaml delete mode 100644 .vim/pack/plugins/start/vim-ledger/COPYING create mode 100644 .vim/pack/plugins/start/vim-ledger/Justfile create mode 100644 .vim/pack/plugins/start/vim-ledger/LICENSES/0BSD.txt create mode 100644 .vim/pack/plugins/start/vim-ledger/LICENSES/CC0-1.0.txt create mode 100644 .vim/pack/plugins/start/vim-ledger/LICENSES/GPL-2.0-or-later.txt create mode 100644 .vim/pack/plugins/start/vim-ledger/README.md delete mode 100644 .vim/pack/plugins/start/vim-ledger/README.mkd create mode 100644 .vim/pack/plugins/start/vim-ledger/REUSE.toml create mode 100644 .vim/pack/plugins/start/vim-ledger/spec/align.vader create mode 100644 .vim/pack/plugins/start/vim-ledger/spec/commands.vader create mode 100644 .vim/pack/plugins/start/vim-ledger/spec/hledger-cheatsheet.ledger create mode 100644 .vim/pack/plugins/start/vim-ledger/spec/ledger.ledger create mode 100644 .vim/pack/plugins/start/vim-ledger/spec/reconcile.vader create mode 100644 .vim/pack/plugins/start/vim-ledger/spec/syntax.vader create mode 100644 .vim/pack/plugins/start/vim-ledger/test/vim-ledger-test.journal create mode 100644 .vim/pack/plugins/start/vim-luakit/ftdetect/luakit.vim create mode 100644 .vim/pack/plugins/start/vim-luakit/ftplugin/luakit.vim create mode 100644 .vim/pack/plugins/start/vim-luakit/indent/luakit.vim create mode 100644 .vim/pack/plugins/start/vim-luakit/syntax/luakit.vim delete mode 100644 .vim/pack/plugins/start/vim-markdown/CONTRIBUTING.md create mode 100644 .vim/pack/plugins/start/vim-markdown/Gemfile create mode 100644 .vim/pack/plugins/start/vim-markdown/Gemfile.lock create mode 100644 .vim/pack/plugins/start/vim-markdown/LICENSE delete mode 100644 .vim/pack/plugins/start/vim-markdown/Makefile delete mode 100644 .vim/pack/plugins/start/vim-markdown/after/ftplugin/markdown.vim create mode 100644 .vim/pack/plugins/start/vim-markdown/autoload/markdown.vim create mode 100644 .vim/pack/plugins/start/vim-markdown/dict/emoticons.dict delete mode 100644 .vim/pack/plugins/start/vim-markdown/doc/vim-markdown.txt create mode 100644 .vim/pack/plugins/start/vim-markdown/images/vim_markdown_edit_code_block.gif create mode 100644 .vim/pack/plugins/start/vim-markdown/images/vim_markdown_rendering.png create mode 100644 .vim/pack/plugins/start/vim-markdown/images/vim_markdown_rendering_comparison_1.png create mode 100644 .vim/pack/plugins/start/vim-markdown/images/vim_markdown_rendering_comparison_2.png delete mode 100755 .vim/pack/plugins/start/vim-markdown/indent/markdown.vim delete mode 100644 .vim/pack/plugins/start/vim-markdown/registry/markdown.yaml create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/autoformatting_spec.rb create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/change_header_level_spec.rb create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/change_list_item_spec.rb create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/autolinks.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/autolinks.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/blockquotes.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/blockquotes.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/blockquotes_nested.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/blockquotes_nested.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/codeblocks.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/codeblocks.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/combined_emphasis.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/combined_emphasis.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/contained_emphasis.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/contained_emphasis.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/headers_atx.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/headers_atx.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/headers_setext.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/headers_setext.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/horizontal_rules.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/inline_html.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/inline_html.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/inline_links.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/inline_links.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/inline_references.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/inline_references.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/jekyll.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/jekyll.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/kramdown/headers_with_id.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/kramdown/headers_with_id.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_anchored_elements.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_anchored_elements.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_codeblocks.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_codeblocks.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_fenced_codeblocks.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_fenced_codeblocks.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_lists.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_lists.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tables.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tables.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tasks.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tasks.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/original_syntax_description.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/strikethrough.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/strikethrough.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/strong_emphasis.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/strong_emphasis.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/tables.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/tables.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/weak_emphasis.md create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/features/weak_emphasis.md.html create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/github_syntax_spec.rb create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/kramdown_syntax_spec.rb create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/spec_helper.rb create mode 100644 .vim/pack/plugins/start/vim-markdown/spec/support/vim.rb create mode 100644 .vim/pack/plugins/start/vim-markdown/syntax/markdown_jekyll.vim delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/README.md delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/folding-toc.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/folding.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/ge_test.md delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/header-decrease.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/indent-new-list-item.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/indent.md delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/indent.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/insert-toc.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/map.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/python-folding.vader delete mode 100755 .vim/pack/plugins/start/vim-markdown/test/run-tests.sh delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/setextoatx.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/strikethrough.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/syntax-singleline.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/syntax.md delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/syntax.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/table-format.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/toc-autofit.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/toc.vader delete mode 100644 .vim/pack/plugins/start/vim-markdown/test/vimrc create mode 100644 .vim/pack/plugins/start/vim-snipmate/README delete mode 100644 .vim/pack/plugins/start/vim-snipmate/doc/tags create mode 100644 .vim/pack/plugins/start/vim-snipmate/snippets/autoit.snippets create mode 100644 .vim/pack/plugins/start/vim-snipmate/snippets/mako.snippets create mode 100644 .vim/pack/plugins/start/vim-snipmate/snippets/objc.snippets create mode 100644 .vim/pack/plugins/start/vim-snipmate/snippets/zsh.snippets create mode 100644 .vim/pack/plugins/start/vim-spotdiff/autoload/diffutil.vim create mode 100644 .vim/pack/plugins/start/vim-tabular/.gitignore create mode 160000 .vim/pack/plugins/start/vim-tagbar-markdown create mode 100644 .vim/pack/plugins/start/vim-tagbar/.gitattributes create mode 100644 .vim/pack/plugins/start/vim-tagbar/.github/FUNDING.yml create mode 100644 .vim/pack/plugins/start/vim-tagbar/.github/workflows/check.yml create mode 100644 .vim/pack/plugins/start/vim-tagbar/.github/workflows/reviewdog.yml create mode 100644 .vim/pack/plugins/start/vim-tagbar/.github/workflows/vint.yml create mode 100644 .vim/pack/plugins/start/vim-tagbar/.gitignore create mode 100644 .vim/pack/plugins/start/vim-tagbar/.info create mode 100644 .vim/pack/plugins/start/vim-tagbar/.vintrc.yaml create mode 100644 .vim/pack/plugins/start/vim-tagbar/LICENSE create mode 100644 .vim/pack/plugins/start/vim-tagbar/README.md delete mode 100644 .vim/pack/plugins/start/vim-tagbar/doc/tags create mode 160000 .vim/pack/plugins/start/vim-undoquit create mode 100644 .vim/pack/plugins/start/vim-undotree/.gitignore diff --git a/.Xdefaults b/.Xdefaults index ed37de3..7319a27 100644 --- a/.Xdefaults +++ b/.Xdefaults @@ -1,7 +1,6 @@ ! -- CURSOR --! -!Xcursor.size: 32 -Xcursor.size: 64 -Xcursor.theme: Adwaida +Xcursor.size: 48 +Xcursor.theme: Adwaita xterm.cursorTheme: ! -- XFT -- ! diff --git a/.vim/pack/plugins/opt/vim-copilot/LICENSE.md b/.vim/pack/plugins/opt/vim-copilot/LICENSE.md deleted file mode 100644 index f0e80c9..0000000 --- a/.vim/pack/plugins/opt/vim-copilot/LICENSE.md +++ /dev/null @@ -1,4 +0,0 @@ -GitHub Copilot is offered under the [GitHub Terms of -Service](https://docs.github.com/en/site-policy/github-terms/github-terms-for-additional-products-and-features#github-copilot). - -Copyright (C) 2023 GitHub, Inc. - All Rights Reserved. diff --git a/.vim/pack/plugins/opt/vim-copilot/README.md b/.vim/pack/plugins/opt/vim-copilot/README.md deleted file mode 100644 index c6b8dae..0000000 --- a/.vim/pack/plugins/opt/vim-copilot/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# GitHub Copilot for Vim and Neovim - -GitHub Copilot uses OpenAI Codex to suggest code and entire functions in -real-time right from your editor. Trained on billions of lines of public -code, GitHub Copilot turns natural language prompts including comments and -method names into coding suggestions across dozens of languages. - -Copilot.vim is a Vim/Neovim plugin for GitHub Copilot. - -To learn more, visit -[https://github.com/features/copilot](https://github.com/features/copilot). - -## Subscription - -GitHub Copilot requires a subscription. It is free for verified students and -maintainers of popular open source projects on GitHub. - -GitHub Copilot is subject to the [GitHub Additional Product -Terms](https://docs.github.com/en/site-policy/github-terms/github-terms-for-additional-products-and-features). - -## Getting started - -1. Install [Neovim][] or the latest patch of [Vim][] (9.0.0185 or newer). - -2. Install [Node.js][]. - -3. Install `github/copilot.vim` using vim-plug, packer.nvim, or any other - plugin manager. Or to install manually, run one of the following - commands: - - * Vim, Linux/macOS: - - git clone https://github.com/github/copilot.vim.git \ - ~/.vim/pack/github/start/copilot.vim - - * Neovim, Linux/macOS: - - git clone https://github.com/github/copilot.vim.git \ - ~/.config/nvim/pack/github/start/copilot.vim - - * Vim, Windows (PowerShell command): - - git clone https://github.com/github/copilot.vim.git ` - $HOME/vimfiles/pack/github/start/copilot.vim - - * Neovim, Windows (PowerShell command): - - git clone https://github.com/github/copilot.vim.git ` - $HOME/AppData/Local/nvim/pack/github/start/copilot.vim - -4. Start Vim/Neovim and invoke `:Copilot setup`. - -[Node.js]: https://nodejs.org/en/download/ -[Neovim]: https://github.com/neovim/neovim/releases/latest -[Vim]: https://github.com/vim/vim - -Suggestions are displayed inline and can be accepted by pressing the tab key. -See `:help copilot` for more information. - -## Troubleshooting - -We’d love to get your help in making GitHub Copilot better! If you have -feedback or encounter any problems, please reach out on our [Feedback -forum](https://github.com/orgs/community/discussions/categories/copilot). diff --git a/.vim/pack/plugins/opt/vim-copilot/SECURITY.md b/.vim/pack/plugins/opt/vim-copilot/SECURITY.md deleted file mode 100644 index 7b59e86..0000000 --- a/.vim/pack/plugins/opt/vim-copilot/SECURITY.md +++ /dev/null @@ -1,4 +0,0 @@ -If you discover a security issue in this repo, please submit it through the -[GitHub Security Bug Bounty](https://hackerone.com/github). - -Thanks for helping make GitHub Copilot safe for everyone. diff --git a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot.vim b/.vim/pack/plugins/opt/vim-copilot/autoload/copilot.vim deleted file mode 100644 index 5016a03..0000000 --- a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot.vim +++ /dev/null @@ -1,860 +0,0 @@ -scriptencoding utf-8 - -let s:has_nvim_ghost_text = has('nvim-0.7') && exists('*nvim_buf_get_mark') -let s:vim_minimum_version = '9.0.0185' -let s:has_vim_ghost_text = has('patch-' . s:vim_minimum_version) && has('textprop') -let s:has_ghost_text = s:has_nvim_ghost_text || s:has_vim_ghost_text - -let s:hlgroup = 'CopilotSuggestion' -let s:annot_hlgroup = 'CopilotAnnotation' - -if s:has_vim_ghost_text && empty(prop_type_get(s:hlgroup)) - call prop_type_add(s:hlgroup, {'highlight': s:hlgroup}) -endif -if s:has_vim_ghost_text && empty(prop_type_get(s:annot_hlgroup)) - call prop_type_add(s:annot_hlgroup, {'highlight': s:annot_hlgroup}) -endif - -function! s:Echo(msg) abort - if has('nvim') && &cmdheight == 0 - call v:lua.vim.notify(a:msg, v:null, {'title': 'GitHub Copilot'}) - else - echo a:msg - endif -endfunction - -function! s:EditorConfiguration() abort - let filetypes = copy(s:filetype_defaults) - if type(get(g:, 'copilot_filetypes')) == v:t_dict - call extend(filetypes, g:copilot_filetypes) - endif - return { - \ 'enableAutoCompletions': empty(get(g:, 'copilot_enabled', 1)) ? v:false : v:true, - \ 'disabledLanguages': map(sort(keys(filter(filetypes, { k, v -> empty(v) }))), { _, v -> {'languageId': v}}), - \ } -endfunction - -function! copilot#Init(...) abort - call copilot#util#Defer({ -> exists('s:client') || s:Start() }) -endfunction - -function! s:Running() abort - return exists('s:client.job') || exists('s:client.client_id') -endfunction - -function! s:Start() abort - if s:Running() || exists('s:client.startup_error') - return - endif - let s:client = copilot#client#New({'editorConfiguration' : s:EditorConfiguration()}) -endfunction - -function! s:Stop() abort - if exists('s:client') - let client = remove(s:, 'client') - call client.Close() - endif -endfunction - -function! copilot#Client() abort - call s:Start() - return s:client -endfunction - -function! copilot#RunningClient() abort - if s:Running() - return s:client - else - return v:null - endif -endfunction - -if has('nvim-0.7') && !has(luaeval('vim.version().api_prerelease') ? 'nvim-0.8.1' : 'nvim-0.8.0') - let s:editor_warning = 'Neovim 0.7 support is deprecated and will be dropped in a future release of copilot.vim.' -endif -if has('vim_starting') && exists('s:editor_warning') - call copilot#logger#Warn(s:editor_warning) -endif -function! s:EditorVersionWarning() abort - if exists('s:editor_warning') - echohl WarningMsg - echo 'Warning: ' . s:editor_warning - echohl None - endif -endfunction - -function! copilot#Request(method, params, ...) abort - let client = copilot#Client() - return call(client.Request, [a:method, a:params] + a:000) -endfunction - -function! copilot#Call(method, params, ...) abort - let client = copilot#Client() - return call(client.Call, [a:method, a:params] + a:000) -endfunction - -function! copilot#Notify(method, params, ...) abort - let client = copilot#Client() - return call(client.Notify, [a:method, a:params] + a:000) -endfunction - -function! copilot#NvimNs() abort - return nvim_create_namespace('github-copilot') -endfunction - -function! copilot#Clear() abort - if exists('g:_copilot_timer') - call timer_stop(remove(g:, '_copilot_timer')) - endif - if exists('b:_copilot') - call copilot#client#Cancel(get(b:_copilot, 'first', {})) - call copilot#client#Cancel(get(b:_copilot, 'cycling', {})) - endif - call s:UpdatePreview() - unlet! b:_copilot - return '' -endfunction - -function! copilot#Dismiss() abort - call copilot#Clear() - call s:UpdatePreview() - return '' -endfunction - -let s:filetype_defaults = { - \ 'gitcommit': 0, - \ 'gitrebase': 0, - \ 'hgcommit': 0, - \ 'svn': 0, - \ 'cvs': 0, - \ '.': 0} - -function! s:BufferDisabled() abort - if &buftype =~# '^\%(help\|prompt\|quickfix\|terminal\)$' - return 5 - endif - if exists('b:copilot_disabled') - return empty(b:copilot_disabled) ? 0 : 3 - endif - if exists('b:copilot_enabled') - return empty(b:copilot_enabled) ? 4 : 0 - endif - let short = empty(&l:filetype) ? '.' : split(&l:filetype, '\.', 1)[0] - let config = {} - if type(get(g:, 'copilot_filetypes')) == v:t_dict - let config = g:copilot_filetypes - endif - if has_key(config, &l:filetype) - return empty(config[&l:filetype]) - elseif has_key(config, short) - return empty(config[short]) - elseif has_key(config, '*') - return empty(config['*']) - else - return get(s:filetype_defaults, short, 1) == 0 ? 2 : 0 - endif -endfunction - -function! copilot#Enabled() abort - return get(g:, 'copilot_enabled', 1) - \ && empty(s:BufferDisabled()) -endfunction - -let s:inline_invoked = 1 -let s:inline_automatic = 2 - -function! copilot#Complete(...) abort - if exists('g:_copilot_timer') - call timer_stop(remove(g:, '_copilot_timer')) - endif - let target = [bufnr(''), getbufvar('', 'changedtick'), line('.'), col('.')] - if !exists('b:_copilot.target') || b:_copilot.target !=# target - if exists('b:_copilot.first') - call copilot#client#Cancel(b:_copilot.first) - endif - if exists('b:_copilot.cycling') - call copilot#client#Cancel(b:_copilot.cycling) - endif - let params = { - \ 'textDocument': {'uri': bufnr('')}, - \ 'position': copilot#util#AppendPosition(), - \ 'formattingOptions': {'insertSpaces': &expandtab ? v:true : v:false, 'tabSize': shiftwidth()}, - \ 'context': {'triggerKind': s:inline_automatic}} - let b:_copilot = { - \ 'target': target, - \ 'params': params, - \ 'first': copilot#Request('textDocument/inlineCompletion', params)} - let g:_copilot_last = b:_copilot - endif - let completion = b:_copilot.first - if !a:0 - return completion.Await() - else - call copilot#client#Result(completion, function(a:1, [b:_copilot])) - if a:0 > 1 - call copilot#client#Error(completion, function(a:2, [b:_copilot])) - endif - endif -endfunction - -function! s:HideDuringCompletion() abort - return get(g:, 'copilot_hide_during_completion', 1) -endfunction - -function! s:SuggestionTextWithAdjustments() abort - let empty = ['', 0, 0, {}] - try - if mode() !~# '^[iR]' || (s:HideDuringCompletion() && pumvisible()) || !exists('b:_copilot.suggestions') - return empty - endif - let choice = get(b:_copilot.suggestions, b:_copilot.choice, {}) - if !has_key(choice, 'range') || choice.range.start.line != line('.') - 1 || type(choice.insertText) !=# v:t_string - return empty - endif - let line = getline('.') - let offset = col('.') - 1 - let choice_text = strpart(line, 0, copilot#util#UTF16ToByteIdx(line, choice.range.start.character)) . substitute(choice.insertText, "\n*$", '', '') - let typed = strpart(line, 0, offset) - let end_offset = copilot#util#UTF16ToByteIdx(line, choice.range.end.character) - if end_offset < 0 - let end_offset = len(line) - endif - let delete = strpart(line, offset, end_offset - offset) - if typed =~# '^\s*$' - let leading = matchstr(choice_text, '^\s\+') - let unindented = strpart(choice_text, len(leading)) - if strpart(typed, 0, len(leading)) == leading && unindented !=# delete - return [unindented, len(typed) - len(leading), strchars(delete), choice] - endif - elseif typed ==# strpart(choice_text, 0, offset) - return [strpart(choice_text, offset), 0, strchars(delete), choice] - endif - catch - call copilot#logger#Exception() - endtry - return empty -endfunction - - -function! s:Advance(count, context, ...) abort - if a:context isnot# get(b:, '_copilot', {}) - return - endif - let a:context.choice += a:count - if a:context.choice < 0 - let a:context.choice += len(a:context.suggestions) - endif - let a:context.choice %= len(a:context.suggestions) - call s:UpdatePreview() -endfunction - -function! s:GetSuggestionsCyclingCallback(context, result) abort - let callbacks = remove(a:context, 'cycling_callbacks') - let seen = {} - for suggestion in a:context.suggestions - let seen[suggestion.insertText] = 1 - endfor - for suggestion in get(a:result, 'items', []) - if !has_key(seen, suggestion.insertText) - call add(a:context.suggestions, suggestion) - let seen[suggestion.insertText] = 1 - endif - endfor - for Callback in callbacks - call Callback(a:context) - endfor -endfunction - -function! s:GetSuggestionsCycling(callback) abort - if exists('b:_copilot.cycling_callbacks') - call add(b:_copilot.cycling_callbacks, a:callback) - elseif exists('b:_copilot.cycling') - call a:callback(b:_copilot) - elseif exists('b:_copilot.suggestions') - let params = deepcopy(b:_copilot.first.params) - let params.context.triggerKind = s:inline_invoked - let b:_copilot.cycling_callbacks = [a:callback] - let b:_copilot.cycling = copilot#Request('textDocument/inlineCompletion', - \ params, - \ function('s:GetSuggestionsCyclingCallback', [b:_copilot]), - \ function('s:GetSuggestionsCyclingCallback', [b:_copilot]), - \ ) - call s:UpdatePreview() - endif - return '' -endfunction - -function! copilot#Next() abort - return s:GetSuggestionsCycling(function('s:Advance', [1])) -endfunction - -function! copilot#Previous() abort - return s:GetSuggestionsCycling(function('s:Advance', [-1])) -endfunction - -function! copilot#GetDisplayedSuggestion() abort - let [text, outdent, delete, item] = s:SuggestionTextWithAdjustments() - - return { - \ 'item': item, - \ 'text': text, - \ 'outdentSize': outdent, - \ 'deleteSize': delete} -endfunction - -function! s:ClearPreview() abort - if s:has_nvim_ghost_text - call nvim_buf_del_extmark(0, copilot#NvimNs(), 1) - elseif s:has_vim_ghost_text - call prop_remove({'type': s:hlgroup, 'all': v:true}) - call prop_remove({'type': s:annot_hlgroup, 'all': v:true}) - endif -endfunction - -function! s:UpdatePreview() abort - try - let [text, outdent, delete, item] = s:SuggestionTextWithAdjustments() - let text = split(text, "\r\n\\=\\|\n", 1) - if empty(text[-1]) - call remove(text, -1) - endif - if empty(text) || !s:has_ghost_text - return s:ClearPreview() - endif - if exists('b:_copilot.cycling_callbacks') - let annot = '(1/…)' - elseif exists('b:_copilot.cycling') - let annot = '(' . (b:_copilot.choice + 1) . '/' . len(b:_copilot.suggestions) . ')' - else - let annot = '' - endif - call s:ClearPreview() - if s:has_nvim_ghost_text - let data = {'id': 1} - let data.virt_text_pos = 'overlay' - let append = strpart(getline('.'), col('.') - 1 + delete) - let data.virt_text = [[text[0] . append . repeat(' ', delete - len(text[0])), s:hlgroup]] - if len(text) > 1 - let data.virt_lines = map(text[1:-1], { _, l -> [[l, s:hlgroup]] }) - if !empty(annot) - let data.virt_lines[-1] += [[' '], [annot, s:annot_hlgroup]] - endif - elseif len(annot) - let data.virt_text += [[' '], [annot, s:annot_hlgroup]] - endif - let data.hl_mode = 'combine' - call nvim_buf_set_extmark(0, copilot#NvimNs(), line('.')-1, col('.')-1, data) - elseif s:has_vim_ghost_text - let new_suffix = text[0] - let current_suffix = getline('.')[col('.') - 1 :] - let inset = '' - while delete > 0 && !empty(new_suffix) - let last_char = matchstr(new_suffix, '.$') - let new_suffix = matchstr(new_suffix, '^.\{-\}\ze.$') - if last_char ==# matchstr(current_suffix, '.$') - if !empty(inset) - call prop_add(line('.'), col('.') + len(current_suffix), {'type': s:hlgroup, 'text': inset}) - let inset = '' - endif - let current_suffix = matchstr(current_suffix, '^.\{-\}\ze.$') - let delete -= 1 - else - let inset = last_char . inset - endif - endwhile - if !empty(new_suffix . inset) - call prop_add(line('.'), col('.'), {'type': s:hlgroup, 'text': new_suffix . inset}) - endif - for line in text[1:] - call prop_add(line('.'), 0, {'type': s:hlgroup, 'text_align': 'below', 'text': line}) - endfor - if !empty(annot) - call prop_add(line('.'), col('$'), {'type': s:annot_hlgroup, 'text': ' ' . annot}) - endif - endif - call copilot#Notify('textDocument/didShowCompletion', {'item': item}) - catch - return copilot#logger#Exception() - endtry -endfunction - -function! s:HandleTriggerResult(state, result) abort - let a:state.suggestions = type(a:result) == type([]) ? a:result : get(empty(a:result) ? {} : a:result, 'items', []) - let a:state.choice = 0 - if get(b:, '_copilot') is# a:state - call s:UpdatePreview() - endif -endfunction - -function! s:HandleTriggerError(state, result) abort - let a:state.suggestions = [] - let a:state.choice = 0 - let a:state.error = a:result - if get(b:, '_copilot') is# a:state - call s:UpdatePreview() - endif -endfunction - -function! copilot#Suggest() abort - if !s:Running() - return '' - endif - try - call copilot#Complete(function('s:HandleTriggerResult'), function('s:HandleTriggerError')) - catch - call copilot#logger#Exception() - endtry - return '' -endfunction - -function! s:Trigger(bufnr, timer) abort - let timer = get(g:, '_copilot_timer', -1) - if a:bufnr !=# bufnr('') || a:timer isnot# timer || mode() !=# 'i' - return - endif - unlet! g:_copilot_timer - return copilot#Suggest() -endfunction - -function! copilot#Schedule() abort - if !s:has_ghost_text || !s:Running() || !copilot#Enabled() - call copilot#Clear() - return - endif - call s:UpdatePreview() - let delay = get(g:, 'copilot_idle_delay', 45) - call timer_stop(get(g:, '_copilot_timer', -1)) - let g:_copilot_timer = timer_start(delay, function('s:Trigger', [bufnr('')])) -endfunction - -function! s:Attach(bufnr, ...) abort - try - return copilot#Client().Attach(a:bufnr) - catch - call copilot#logger#Exception() - endtry -endfunction - -function! copilot#OnFileType() abort - if empty(s:BufferDisabled()) && &l:modifiable && &l:buflisted - call copilot#util#Defer(function('s:Attach'), bufnr('')) - endif -endfunction - -function! s:Focus(bufnr, ...) abort - if s:Running() && copilot#Client().IsAttached(a:bufnr) - call copilot#Client().Notify('textDocument/didFocus', {'textDocument': {'uri': copilot#Client().Attach(a:bufnr).uri}}) - endif -endfunction - -function! copilot#OnBufEnter() abort - let bufnr = bufnr('') - call copilot#util#Defer(function('s:Focus'), bufnr) -endfunction - -function! copilot#OnInsertLeavePre() abort - call copilot#Clear() - call s:ClearPreview() -endfunction - -function! copilot#OnInsertEnter() abort - return copilot#Schedule() -endfunction - -function! copilot#OnCompleteChanged() abort - if s:HideDuringCompletion() - return copilot#Clear() - else - return copilot#Schedule() - endif -endfunction - -function! copilot#OnCursorMovedI() abort - return copilot#Schedule() -endfunction - -function! copilot#OnBufUnload() abort -endfunction - -function! copilot#OnVimLeavePre() abort -endfunction - -function! copilot#TextQueuedForInsertion() abort - try - return remove(s:, 'suggestion_text') - catch - return '' - endtry -endfunction - -function! copilot#Accept(...) abort - let s = copilot#GetDisplayedSuggestion() - if !empty(s.text) - unlet! b:_copilot - let text = '' - if a:0 > 1 - let text = substitute(matchstr(s.text, "\n*" . '\%(' . a:2 .'\)'), "\n*$", '', '') - endif - if empty(text) - let text = s.text - endif - if text ==# s.text && has_key(s.item, 'command') - call copilot#Request('workspace/executeCommand', s.item.command) - else - let line_text = strpart(getline('.'), 0, col('.') - 1) . text - call copilot#Notify('textDocument/didPartiallyAcceptCompletion', { - \ 'item': s.item, - \ 'acceptedLength': copilot#util#UTF16Width(line_text) - s.item.range.start.character}) - endif - call s:ClearPreview() - let s:suggestion_text = text - let recall = text =~# "\n" ? "\\=" : "\\=" - return repeat("\\", s.outdentSize) . repeat("\", s.deleteSize) . - \ recall . "copilot#TextQueuedForInsertion()\" . (a:0 > 1 ? '' : "\") - endif - let default = get(g:, 'copilot_tab_fallback', pumvisible() ? "\" : "\t") - if !a:0 - return default - elseif type(a:1) == v:t_string - return a:1 - elseif type(a:1) == v:t_func - try - return call(a:1, []) - catch - return default - endtry - else - return default - endif -endfunction - -function! copilot#AcceptWord(...) abort - return copilot#Accept(a:0 ? a:1 : '', '\%(\k\@!.\)*\k*') -endfunction - -function! copilot#AcceptLine(...) abort - return copilot#Accept(a:0 ? a:1 : "\r", "[^\n]\\+") -endfunction - -function! s:BrowserCallback(into, code) abort - let a:into.code = a:code -endfunction - -function! copilot#Browser() abort - if type(get(g:, 'copilot_browser')) == v:t_list - let cmd = copy(g:copilot_browser) - elseif type(get(g:, 'open_command')) == v:t_list - let cmd = copy(g:open_command) - elseif has('win32') - let cmd = ['rundll32', 'url.dll,FileProtocolHandler'] - elseif has('mac') - let cmd = ['open'] - elseif executable('wslview') - return ['wslview'] - elseif executable('xdg-open') - return ['xdg-open'] - else - return [] - endif - if executable(get(cmd, 0, '')) - return cmd - else - return [] - endif -endfunction - -let s:commands = {} - -function! s:EnabledStatusMessage() abort - let buf_disabled = s:BufferDisabled() - if !s:has_ghost_text - if has('nvim') - return "Neovim 0.6 required to support ghost text" - else - return "Vim " . s:vim_minimum_version . " required to support ghost text" - endif - elseif !get(g:, 'copilot_enabled', 1) - return 'Disabled globally by :Copilot disable' - elseif buf_disabled is# 5 - return 'Disabled for current buffer by buftype=' . &buftype - elseif buf_disabled is# 4 - return 'Disabled for current buffer by b:copilot_enabled' - elseif buf_disabled is# 3 - return 'Disabled for current buffer by b:copilot_disabled' - elseif buf_disabled is# 2 - return 'Disabled for filetype=' . &filetype . ' by internal default' - elseif buf_disabled - return 'Disabled for filetype=' . &filetype . ' by g:copilot_filetypes' - elseif !copilot#Enabled() - return 'BUG: Something is wrong with enabling/disabling' - else - return '' - endif -endfunction - -function! s:VerifySetup() abort - let error = copilot#Client().StartupError() - if !empty(error) - echo 'Copilot: ' . error - return - endif - - let status = copilot#Call('checkStatus', {}) - - if !has_key(status, 'user') - echo 'Copilot: Not authenticated. Invoke :Copilot setup' - return - endif - - if status.status ==# 'NoTelemetryConsent' - echo 'Copilot: Telemetry terms not accepted. Invoke :Copilot setup' - return - endif - - if status.status ==# 'NotAuthorized' - echo "Copilot: You don't have access to GitHub Copilot. Sign up by visiting https://github.com/settings/copilot" - return - endif - - return 1 -endfunction - -function! s:commands.status(opts) abort - if !s:VerifySetup() - return - endif - - if exists('s:client.status.status') && s:client.status.status =~# 'Warning\|Error' - echo 'Copilot: ' . s:client.status.status - if !empty(get(s:client.status, 'message', '')) - echon ': ' . s:client.status.message - endif - return - endif - - let status = s:EnabledStatusMessage() - if !empty(status) - echo 'Copilot: ' . status - return - endif - - echo 'Copilot: Ready' - call s:EditorVersionWarning() -endfunction - -function! s:commands.signout(opts) abort - let status = copilot#Call('checkStatus', {'options': {'localChecksOnly': v:true}}) - if has_key(status, 'user') - echo 'Copilot: Signed out as GitHub user ' . status.user - else - echo 'Copilot: Not signed in' - endif - call copilot#Call('signOut', {}) -endfunction - -function! s:commands.setup(opts) abort - let startup_error = copilot#Client().StartupError() - if !empty(startup_error) - echo 'Copilot: ' . startup_error - return - endif - - let browser = copilot#Browser() - - let status = copilot#Call('checkStatus', {}) - if has_key(status, 'user') - let data = {'status': 'AlreadySignedIn', 'user': status.user} - else - let data = copilot#Call('signInInitiate', {}) - endif - - if has_key(data, 'verificationUri') - let uri = data.verificationUri - if has('clipboard') - try - let @+ = data.userCode - catch - endtry - try - let @* = data.userCode - catch - endtry - endif - let codemsg = "First copy your one-time code: " . data.userCode . "\n" - try - if len(&mouse) - let mouse = &mouse - set mouse= - endif - if get(a:opts, 'bang') - call s:Echo(codemsg . "In your browser, visit " . uri) - elseif len(browser) - call input(codemsg . "Press ENTER to open GitHub in your browser\n") - let status = {} - call copilot#job#Stream(browser + [uri], v:null, v:null, function('s:BrowserCallback', [status])) - let time = reltime() - while empty(status) && reltimefloat(reltime(time)) < 5 - sleep 10m - endwhile - if get(status, 'code', browser[0] !=# 'xdg-open') != 0 - call s:Echo("Failed to open browser. Visit " . uri) - else - call s:Echo("Opened " . uri) - endif - else - call s:Echo(codemsg . "Could not find browser. Visit " . uri) - endif - call s:Echo("Waiting (could take up to 10 seconds)") - let request = copilot#Request('signInConfirm', {'userCode': data.userCode}).Wait() - finally - if exists('mouse') - let &mouse = mouse - endif - endtry - if request.status ==# 'error' - return 'echoerr ' . string('Copilot: Authentication failure: ' . request.error.message) - else - let status = request.result - endif - elseif get(data, 'status', '') isnot# 'AlreadySignedIn' - return 'echoerr ' . string('Copilot: Something went wrong') - endif - - let user = get(status, 'user', '') - - echo 'Copilot: Authenticated as GitHub user ' . user -endfunction - -let s:commands.auth = s:commands.setup -let s:commands.signin = s:commands.setup - -function! s:commands.help(opts) abort - return a:opts.mods . ' help ' . (len(a:opts.arg) ? ':Copilot_' . a:opts.arg : 'copilot') -endfunction - -function! s:commands.version(opts) abort - echo 'copilot.vim ' .copilot#client#EditorPluginInfo().version - let editorInfo = copilot#client#EditorInfo() - echo editorInfo.name . ' ' . editorInfo.version - if s:Running() - let versions = s:client.Request('getVersion', {}) - if exists('s:client.serverInfo.version') - echo s:client.serverInfo.name . ' ' . s:client.serverInfo.version - else - echo 'GitHub Copilot Language Server ' . versions.Await().version - endif - if exists('s:client.node_version') - echo 'Node.js ' . s:client.node_version - else - echo 'Node.js ' . substitute(get(versions.Await(), 'runtimeVersion', '?'), '^node/', '', 'g') - endif - else - echo 'Not running' - if exists('s:client.node_version') - echo 'Node.js ' . s:client.node_version - endif - endif - if has('win32') - echo 'Windows' - elseif has('macunix') - echo 'macOS' - elseif !has('unix') - echo 'Unknown OS' - elseif isdirectory('/sys/kernel') - echo 'Linux' - else - echo 'UNIX' - endif - call s:EditorVersionWarning() -endfunction - -function! s:UpdateEditorConfiguration() abort - try - if s:Running() - call copilot#Notify('notifyChangeConfiguration', {'settings': s:EditorConfiguration()}) - endif - catch - call copilot#logger#Exception() - endtry -endfunction - -let s:feedback_url = 'https://github.com/orgs/community/discussions/categories/copilot' -function! s:commands.feedback(opts) abort - echo s:feedback_url - let browser = copilot#Browser() - if len(browser) - call copilot#job#Stream(browser + [s:feedback_url], v:null, v:null, v:null) - endif -endfunction - -function! s:commands.restart(opts) abort - call s:Stop() - echo 'Copilot: Restarting language server' - call s:Start() -endfunction - -function! s:commands.disable(opts) abort - let g:copilot_enabled = 0 - call s:UpdateEditorConfiguration() -endfunction - -function! s:commands.enable(opts) abort - let g:copilot_enabled = 1 - call s:UpdateEditorConfiguration() -endfunction - -function! s:commands.panel(opts) abort - if s:VerifySetup() - return copilot#panel#Open(a:opts) - endif -endfunction - -function! s:commands.log(opts) abort - return a:opts.mods . ' split +$ copilot:///log' -endfunction - -function! copilot#CommandComplete(arg, lead, pos) abort - let args = matchstr(strpart(a:lead, 0, a:pos), 'C\%[opilot][! ] *\zs.*') - if args !~# ' ' - return sort(filter(map(keys(s:commands), { k, v -> tr(v, '_', '-') }), - \ { k, v -> strpart(v, 0, len(a:arg)) ==# a:arg })) - else - return [] - endif -endfunction - -function! copilot#Command(line1, line2, range, bang, mods, arg) abort - let cmd = matchstr(a:arg, '^\%(\\.\|\S\)\+') - let arg = matchstr(a:arg, '\s\zs\S.*') - if !empty(cmd) && !has_key(s:commands, tr(cmd, '-', '_')) - return 'echoerr ' . string('Copilot: unknown command ' . string(cmd)) - endif - try - if empty(cmd) - if !s:Running() - let cmd = 'restart' - else - try - let opts = copilot#Call('checkStatus', {'options': {'localChecksOnly': v:true}}) - if opts.status !=# 'OK' && opts.status !=# 'MaybeOK' - let cmd = 'setup' - else - let cmd = 'panel' - endif - catch - call copilot#logger#Exception() - let cmd = 'log' - endtry - endif - endif - let opts = {'line1': a:line1, 'line2': a:line2, 'range': a:range, 'bang': a:bang, 'mods': a:mods, 'arg': arg} - let retval = s:commands[tr(cmd, '-', '_')](opts) - if type(retval) == v:t_string - return retval - else - return '' - endif - catch /^Copilot:/ - return 'echoerr ' . string(v:exception) - endtry -endfunction diff --git a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/client.vim b/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/client.vim deleted file mode 100644 index c811062..0000000 --- a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/client.vim +++ /dev/null @@ -1,764 +0,0 @@ -scriptencoding utf-8 - -let s:plugin_version = copilot#version#String() - -let s:error_canceled = {'code': -32800, 'message': 'Canceled'} -let s:error_exit = {'code': -32097, 'message': 'Process exited'} -let s:error_connection_inactive = {'code': -32096, 'message': 'Connection inactive'} - -let s:root = expand(':h:h:h') - -if !exists('s:instances') - let s:instances = {} -endif - -" allow sourcing this file to reload the Lua file too -if has('nvim') - lua package.loaded._copilot = nil -endif - -function! s:Warn(msg) abort - if !empty(get(g:, 'copilot_no_startup_warnings')) - return - endif - echohl WarningMsg - echomsg 'Copilot: ' . a:msg - echohl NONE -endfunction - -function! s:VimClose() dict abort - if !has_key(self, 'job') - return - endif - let job = self.job - if has_key(self, 'kill') - call job_stop(job, 'kill') - call copilot#logger#Warn('Process forcefully terminated') - return - endif - let self.kill = v:true - let self.shutdown = self.Request('shutdown', {}, function(self.Notify, ['exit'])) - call timer_start(2000, { _ -> job_stop(job, 'kill') }) - call copilot#logger#Debug('Process shutdown initiated') -endfunction - -function! s:LogSend(request, line) abort - return '--> ' . a:line -endfunction - -function! s:RejectRequest(request, error) abort - if a:request.status !=# 'running' - return - endif - let a:request.waiting = {} - call remove(a:request, 'resolve') - let reject = remove(a:request, 'reject') - let a:request.status = 'error' - let a:request.error = deepcopy(a:error) - for Cb in reject - let a:request.waiting[timer_start(0, function('s:Callback', [a:request, 'error', Cb]))] = 1 - endfor - if index([s:error_canceled.code, s:error_connection_inactive.code], a:error.code) != -1 - return - endif - let msg = 'Method ' . a:request.method . ' errored with E' . a:error.code . ': ' . json_encode(a:error.message) - if empty(reject) - call copilot#logger#Error(msg) - else - call copilot#logger#Debug(msg) - endif -endfunction - -function! s:AfterInitialized(fn, ...) dict abort - call add(self.after_initialized, function(a:fn, a:000)) -endfunction - -function! s:Send(instance, request) abort - if !has_key(a:instance, 'job') - return v:false - endif - try - call ch_sendexpr(a:instance.job, a:request) - return v:true - catch /^Vim\%((\a\+)\)\=:E906:/ - let a:instance.kill = v:true - let job = remove(a:instance, 'job') - call job_stop(job) - call timer_start(2000, { _ -> job_stop(job, 'kill') }) - call copilot#logger#Warn('Terminating process after failed write') - return v:false - catch /^Vim\%((\a\+)\)\=:E631:/ - return v:false - endtry -endfunction - -function! s:VimNotify(method, params) dict abort - let request = {'method': a:method, 'params': a:params} - call self.AfterInitialized(function('s:Send', [self, request])) -endfunction - -function! s:RequestWait() dict abort - while self.status ==# 'running' - sleep 1m - endwhile - while !empty(get(self, 'waiting', {})) - sleep 1m - endwhile - return self -endfunction - -function! s:RequestAwait() dict abort - call self.Wait() - if has_key(self, 'result') - return self.result - endif - throw 'Copilot:E' . self.error.code . ': ' . self.error.message -endfunction - -function! s:RequestClient() dict abort - return get(s:instances, self.client_id, v:null) -endfunction - -if !exists('s:id') - let s:id = 0 -endif -if !exists('s:progress_token_id') - let s:progress_token_id = 0 -endif - -function! s:SetUpRequest(instance, id, method, params, progress, ...) abort - let request = { - \ 'client_id': a:instance.id, - \ 'id': a:id, - \ 'method': a:method, - \ 'params': a:params, - \ 'Client': function('s:RequestClient'), - \ 'Wait': function('s:RequestWait'), - \ 'Await': function('s:RequestAwait'), - \ 'Cancel': function('s:RequestCancel'), - \ 'resolve': [], - \ 'reject': [], - \ 'progress': a:progress, - \ 'status': 'running'} - let args = a:000[2:-1] - if len(args) - if !empty(a:1) - call add(request.resolve, { v -> call(a:1, [v] + args)}) - endif - if !empty(a:2) - call add(request.reject, { v -> call(a:2, [v] + args)}) - endif - return request - endif - if a:0 && !empty(a:1) - call add(request.resolve, a:1) - endif - if a:0 > 1 && !empty(a:2) - call add(request.reject, a:2) - endif - return request -endfunction - -function! s:UrlEncode(str) abort - return substitute(iconv(a:str, 'latin1', 'utf-8'),'[^A-Za-z0-9._~!$&''()*+,;=:@/-]','\="%".printf("%02X",char2nr(submatch(0)))','g') -endfunction - -let s:slash = exists('+shellslash') ? '\' : '/' -function! s:UriFromBufnr(bufnr) abort - let absolute = tr(bufname(a:bufnr), s:slash, '/') - if absolute !~# '^\a\+:\|^/\|^$' && getbufvar(a:bufnr, 'buftype') =~# '^\%(nowrite\)\=$' - let absolute = substitute(tr(getcwd(), s:slash, '/'), '/\=$', '/', '') . absolute - endif - return s:UriFromPath(absolute) -endfunction - -function! s:UriFromPath(absolute) abort - let absolute = a:absolute - if has('win32') && absolute =~# '^\a://\@!' - return 'file:///' . strpart(absolute, 0, 2) . s:UrlEncode(strpart(absolute, 2)) - elseif absolute =~# '^/' - return 'file://' . s:UrlEncode(absolute) - elseif absolute =~# '^\a[[:alnum:].+-]*:\|^$' - return absolute - else - return '' - endif -endfunction - -function! s:BufferText(bufnr) abort - return join(getbufline(a:bufnr, 1, '$'), "\n") . "\n" -endfunction - -let s:valid_request_key = '^\%(id\|method\|params\)$' -function! s:SendRequest(instance, request, ...) abort - if !has_key(a:instance, 'job') || get(a:instance, 'shutdown', a:request) isnot# a:request - return s:RejectRequest(a:request, s:error_connection_inactive) - endif - let json = filter(copy(a:request), 'v:key =~# s:valid_request_key') - if empty(s:Send(a:instance, json)) && has_key(a:request, 'id') && has_key(a:instance.requests, a:request.id) - call s:RejectRequest(remove(a:instance.requests, a:request.id), {'code': -32099, 'message': 'Write failed'}) - endif -endfunction - -function! s:RegisterWorkspaceFolderForBuffer(instance, buf) abort - let root = getbufvar(a:buf, 'workspace_folder') - if type(root) != v:t_string - return - endif - let root = s:UriFromPath(substitute(root, '[\/]$', '', '')) - if empty(root) || has_key(a:instance.workspaceFolders, root) - return - endif - let a:instance.workspaceFolders[root] = v:true - call a:instance.Notify('workspace/didChangeWorkspaceFolders', {'event': {'added': [{'uri': root, 'name': fnamemodify(root, ':t')}], 'removed': []}}) -endfunction - -function! s:PreprocessParams(instance, params) abort - let bufnr = v:null - for doc in filter([get(a:params, 'textDocument', {})], 'type(get(v:val, "uri", "")) == v:t_number') - let bufnr = doc.uri - call s:RegisterWorkspaceFolderForBuffer(a:instance, bufnr) - call extend(doc, a:instance.Attach(bufnr)) - endfor - let progress_tokens = [] - for key in keys(a:params) - if key =~# 'Token$' && type(a:params[key]) == v:t_func - let s:progress_token_id += 1 - let a:instance.progress[s:progress_token_id] = a:params[key] - call add(progress_tokens, s:progress_token_id) - let a:params[key] = s:progress_token_id - endif - endfor - return [bufnr, progress_tokens] -endfunction - -function! s:VimAttach(bufnr) dict abort - if !bufloaded(a:bufnr) - return {'uri': '', 'version': 0} - endif - let bufnr = a:bufnr - let doc = { - \ 'uri': s:UriFromBufnr(bufnr), - \ 'version': getbufvar(bufnr, 'changedtick', 0), - \ 'languageId': getbufvar(bufnr, '&filetype'), - \ } - if has_key(self.open_buffers, bufnr) && ( - \ self.open_buffers[bufnr].uri !=# doc.uri || - \ self.open_buffers[bufnr].languageId !=# doc.languageId) - call self.Notify('textDocument/didClose', {'textDocument': {'uri': self.open_buffers[bufnr].uri}}) - call remove(self.open_buffers, bufnr) - endif - if !has_key(self.open_buffers, bufnr) - call self.Notify('textDocument/didOpen', {'textDocument': extend({'text': s:BufferText(bufnr)}, doc)}) - let self.open_buffers[bufnr] = doc - else - call self.Notify('textDocument/didChange', { - \ 'textDocument': {'uri': doc.uri, 'version': doc.version}, - \ 'contentChanges': [{'text': s:BufferText(bufnr)}]}) - let self.open_buffers[bufnr].version = doc.version - endif - return doc -endfunction - -function! s:VimIsAttached(bufnr) dict abort - return bufloaded(a:bufnr) && has_key(self.open_buffers, a:bufnr) ? v:true : v:false -endfunction - -function! s:VimRequest(method, params, ...) dict abort - let s:id += 1 - let params = deepcopy(a:params) - let [_, progress] = s:PreprocessParams(self, params) - let request = call('s:SetUpRequest', [self, s:id, a:method, params, progress] + a:000) - call self.AfterInitialized(function('s:SendRequest', [self, request])) - let self.requests[s:id] = request - return request -endfunction - -function! s:Call(method, params, ...) dict abort - let request = call(self.Request, [a:method, a:params] + a:000) - if a:0 - return request - endif - return request.Await() -endfunction - -function! s:Cancel(request) dict abort - if has_key(self.requests, get(a:request, 'id', '')) - call self.Notify('$/cancelRequest', {'id': a:request.id}) - call s:RejectRequest(remove(self.requests, a:request.id), s:error_canceled) - endif -endfunction - -function! s:RequestCancel() dict abort - let instance = self.Client() - if !empty(instance) - call instance.Cancel(self) - elseif get(self, 'status', '') ==# 'running' - call s:RejectRequest(self, s:error_canceled) - endif - return self -endfunction - -function! s:DispatchMessage(instance, method, handler, id, params, ...) abort - try - let response = {'result': call(a:handler, [a:params, a:instance])} - if response.result is# 0 - let response.result = v:null - endif - catch - call copilot#logger#Exception('lsp.request.' . a:method) - let response = {'error': {'code': -32000, 'message': v:exception}} - endtry - if a:id isnot# v:null - call s:Send(a:instance, extend({'id': a:id}, response)) - endif - if !has_key(s:notifications, a:method) - return response - endif -endfunction - -function! s:OnMessage(instance, body, ...) abort - if !has_key(a:body, 'method') - return s:OnResponse(a:instance, a:body) - endif - let request = a:body - let id = get(request, 'id', v:null) - let params = get(request, 'params', v:null) - if has_key(a:instance.methods, request.method) - return s:DispatchMessage(a:instance, request.method, a:instance.methods[request.method], id, params) - elseif id isnot# v:null - call s:Send(a:instance, {"id": id, "error": {"code": -32700, "message": "Method not found: " . request.method}}) - call copilot#logger#Debug('Unexpected request ' . request.method . ' called with ' . json_encode(params)) - elseif request.method !~# '^\$/' - call copilot#logger#Debug('Unexpected notification ' . request.method . ' called with ' . json_encode(params)) - endif -endfunction - -function! s:OnResponse(instance, response, ...) abort - let response = a:response - let id = get(a:response, 'id', v:null) - if !has_key(a:instance.requests, id) - return - endif - let request = remove(a:instance.requests, id) - for progress_token in request.progress - if has_key(a:instance.progress, progress_token) - call remove(a:instance.progress, progress_token) - endif - endfor - if request.status !=# 'running' - return - endif - if has_key(response, 'result') - let request.waiting = {} - let resolve = remove(request, 'resolve') - call remove(request, 'reject') - let request.status = 'success' - let request.result = response.result - for Cb in resolve - let request.waiting[timer_start(0, function('s:Callback', [request, 'result', Cb]))] = 1 - endfor - else - call s:RejectRequest(request, response.error) - endif -endfunction - -function! s:OnErr(instance, ch, line, ...) abort - if !has_key(a:instance, 'serverInfo') - call copilot#logger#Bare('<-! ' . a:line) - endif -endfunction - -function! s:OnExit(instance, code, ...) abort - let a:instance.exit_status = a:code - if has_key(a:instance, 'job') - call remove(a:instance, 'job') - endif - if has_key(a:instance, 'client_id') - call remove(a:instance, 'client_id') - endif - let message = 'Process exited with status ' . a:code - if a:code >= 18 && a:code < 100 - let message = 'Node.js too old. ' . - \ (get(a:instance.node, 0, 'node') ==# 'node' ? 'Upgrade' : 'Change g:copilot_node_command') . - \ ' to ' . a:code . '.x or newer' - endif - if !has_key(a:instance, 'serverInfo') && !has_key(a:instance, 'startup_error') - let a:instance.startup_error = message - endif - for id in sort(keys(a:instance.requests), { a, b -> +a > +b }) - call s:RejectRequest(remove(a:instance.requests, id), s:error_exit) - endfor - if has_key(a:instance, 'after_initialized') - let a:instance.AfterInitialized = function('copilot#util#Defer') - for Fn in remove(a:instance, 'after_initialized') - call copilot#util#Defer(Fn) - endfor - endif - call copilot#util#Defer({ -> get(s:instances, a:instance.id) is# a:instance ? remove(s:instances, a:instance.id) : {} }) - if a:code == 0 - call copilot#logger#Info(message) - else - call copilot#logger#Warn(message) - if !has_key(a:instance, 'kill') - call copilot#util#Defer(function('s:Warn'), message) - endif - endif -endfunction - -function! copilot#client#LspInit(id, initialize_result) abort - if !has_key(s:instances, a:id) - return - endif - call s:PostInit(a:initialize_result, s:instances[a:id]) -endfunction - -function! copilot#client#LspExit(id, code, signal) abort - if !has_key(s:instances, a:id) - return - endif - let instance = remove(s:instances, a:id) - call s:OnExit(instance, a:code) -endfunction - -function! copilot#client#LspResponse(id, opts, ...) abort - if !has_key(s:instances, a:id) - return - endif - call s:OnResponse(s:instances[a:id], a:opts) -endfunction - -function! s:NvimAttach(bufnr) dict abort - if !bufloaded(a:bufnr) - return {'uri': '', 'version': 0} - endif - call luaeval('pcall(vim.lsp.buf_attach_client, _A[1], _A[2])', [a:bufnr, self.id]) - return luaeval('{uri = vim.uri_from_bufnr(_A), version = vim.lsp.util.buf_versions[_A]}', a:bufnr) -endfunction - -function! s:NvimIsAttached(bufnr) dict abort - return bufloaded(a:bufnr) ? luaeval('vim.lsp.buf_is_attached(_A[1], _A[2])', [a:bufnr, self.id]) : v:false -endfunction - -function! s:NvimRequest(method, params, ...) dict abort - let params = deepcopy(a:params) - let [bufnr, progress] = s:PreprocessParams(self, params) - let request = call('s:SetUpRequest', [self, v:null, a:method, params, progress] + a:000) - call self.AfterInitialized(function('s:NvimDoRequest', [self, request, bufnr])) - return request -endfunction - -function! s:NvimDoRequest(client, request, bufnr) abort - let request = a:request - if has_key(a:client, 'client_id') && !has_key(a:client, 'kill') - let request.id = eval("v:lua.require'_copilot'.lsp_request(a:client.id, a:request.method, a:request.params, a:bufnr)") - endif - if request.id isnot# v:null - let a:client.requests[request.id] = request - else - if has_key(a:client, 'client_id') - call copilot#client#LspExit(a:client.client_id, -1, -1) - endif - call copilot#util#Defer(function('s:RejectRequest'), request, s:error_connection_inactive) - endif - return request -endfunction - -function! s:NvimClose() dict abort - if !has_key(self, 'client_id') - return - endif - let self.kill = v:true - return luaeval('vim.lsp.get_client_by_id(_A).stop()', self.client_id) -endfunction - -function! s:NvimNotify(method, params) dict abort - call self.AfterInitialized(function('s:NvimDoNotify', [self.client_id, a:method, a:params])) -endfunction - -function! s:NvimDoNotify(client_id, method, params) abort - return eval("v:lua.require'_copilot'.rpc_notify(a:client_id, a:method, a:params)") -endfunction - -function! copilot#client#LspHandle(id, request) abort - if !has_key(s:instances, a:id) - return - endif - return s:OnMessage(s:instances[a:id], a:request) -endfunction - -let s:script_name = 'dist/language-server.js' -function! s:Command() abort - if !has('nvim-0.7') && v:version < 900 - return [[], [], 'Vim version too old'] - endif - let script = get(g:, 'copilot_command', '') - if type(script) == type('') - let script = [expand(script)] - endif - if empty(script) || !filereadable(script[0]) - let script = [s:root . '/' . s:script_name] - if !filereadable(script[0]) - return [[], [], 'Could not find ' . s:script_name . ' (bad install?)'] - endif - elseif script[0] !~# '\.js$' - return [[], script + ['--stdio'], ''] - endif - let node = get(g:, 'copilot_node_command', '') - if empty(node) - let node = ['node'] - elseif type(node) == type('') - let node = [expand(node)] - endif - if !executable(get(node, 0, '')) - if get(node, 0, '') ==# 'node' - return [[], [], 'Node.js not found in PATH'] - else - return [[], [], 'Node.js executable `' . get(node, 0, '') . "' not found"] - endif - endif - return [node, script + ['--stdio'], ''] -endfunction - -function! s:UrlDecode(str) abort - return substitute(a:str, '%\(\x\x\)', '\=iconv(nr2char("0x".submatch(1)), "utf-8", "latin1")', 'g') -endfunction - -function! copilot#client#EditorInfo() abort - if !exists('s:editor_version') - if has('nvim') - let s:editor_version = matchstr(execute('version'), 'NVIM v\zs[^[:space:]]\+') - else - let s:editor_version = (v:version / 100) . '.' . (v:version % 100) . (exists('v:versionlong') ? printf('.%04d', v:versionlong % 10000) : '') - endif - endif - return {'name': has('nvim') ? 'Neovim': 'Vim', 'version': s:editor_version} -endfunction - -function! copilot#client#EditorPluginInfo() abort - return {'name': 'copilot.vim', 'version': s:plugin_version} -endfunction - -function! copilot#client#Settings() abort - let settings = { - \ 'http': { - \ 'proxy': get(g:, 'copilot_proxy', v:null), - \ 'proxyStrictSSL': get(g:, 'copilot_proxy_strict_ssl', v:null)}, - \ 'github-enterprise': {'uri': get(g:, 'copilot_auth_provider_url', v:null)}, - \ } - if type(settings.http.proxy) ==# v:t_string && settings.http.proxy =~# '^[^/]\+$' - let settings.http.proxy = 'http://' . settings.http.proxy - endif - if type(get(g:, 'copilot_settings')) == v:t_dict - call extend(settings, g:copilot_settings) - endif - return settings -endfunction - -function! s:PostInit(result, instance) abort - let a:instance.serverInfo = get(a:result, 'serverInfo', {}) - if !has_key(a:instance, 'node_version') && has_key(a:result.serverInfo, 'nodeVersion') - let a:instance.node_version = a:result.serverInfo.nodeVersion - endif - let a:instance.AfterInitialized = function('copilot#util#Defer') - for Fn in remove(a:instance, 'after_initialized') - call copilot#util#Defer(Fn) - endfor -endfunction - -function! s:InitializeResult(result, instance) abort - call s:Send(a:instance, {'method': 'initialized', 'params': {}}) - call s:PostInit(a:result, a:instance) -endfunction - -function! s:InitializeError(error, instance) abort - if !has_key(a:instance, 'startup_error') - let a:instance.startup_error = 'Unexpected error E' . a:error.code . ' initializing language server: ' . a:error.message - call a:instance.Close() - endif -endfunction - -function! s:StartupError() dict abort - while (has_key(self, 'job') || has_key(self, 'client_id')) && !has_key(self, 'startup_error') && !has_key(self, 'serverInfo') - sleep 10m - endwhile - if has_key(self, 'serverInfo') - return '' - else - return get(self, 'startup_error', 'Something unexpected went wrong spawning the language server') - endif -endfunction - -function! s:StatusNotification(params, instance) abort - let a:instance.status = a:params -endfunction - -function! s:Nop(...) abort - return v:null -endfunction - -function! s:False(...) abort - return v:false -endfunction - -function! s:Progress(params, instance) abort - if has_key(a:instance.progress, a:params.token) - call a:instance.progress[a:params.token](a:params.value) - endif -endfunction - -let s:notifications = { - \ '$/progress': function('s:Progress'), - \ 'featureFlagsNotification': function('s:Nop'), - \ 'statusNotification': function('s:StatusNotification'), - \ 'window/logMessage': function('copilot#handlers#window_logMessage'), - \ } - -let s:vim_handlers = { - \ 'window/showMessageRequest': function('copilot#handlers#window_showMessageRequest'), - \ 'window/showDocument': function('copilot#handlers#window_showDocument'), - \ } - -let s:vim_capabilities = { - \ 'workspace': {'workspaceFolders': v:true}, - \ 'window': {'showDocument': {'support': v:true}}, - \ } - -function! copilot#client#New(...) abort - let opts = a:0 ? a:1 : {} - let instance = {'requests': {}, - \ 'progress': {}, - \ 'workspaceFolders': {}, - \ 'after_initialized': [], - \ 'status': {'status': 'Starting', 'message': ''}, - \ 'AfterInitialized': function('s:AfterInitialized'), - \ 'Close': function('s:Nop'), - \ 'Notify': function('s:False'), - \ 'Request': function('s:VimRequest'), - \ 'Attach': function('s:Nop'), - \ 'IsAttached': function('s:False'), - \ 'Call': function('s:Call'), - \ 'Cancel': function('s:Cancel'), - \ 'StartupError': function('s:StartupError'), - \ } - let instance.methods = copy(s:notifications) - let [node, argv, command_error] = s:Command() - if !empty(command_error) - let instance.id = -1 - let instance.startup_error = command_error - call copilot#logger#Error(command_error) - return instance - endif - let instance.node = node - let command = node + argv - let opts = {} - let opts.initializationOptions = { - \ 'editorInfo': copilot#client#EditorInfo(), - \ 'editorPluginInfo': copilot#client#EditorPluginInfo(), - \ } - let opts.workspaceFolders = [] - let settings = extend(copilot#client#Settings(), get(opts, 'editorConfiguration', {})) - if type(get(g:, 'copilot_workspace_folders')) == v:t_list - for folder in g:copilot_workspace_folders - if type(folder) == v:t_string && !empty(folder) && folder !~# '\*\*\|^/$' - for path in glob(folder . '/', 0, 1) - let uri = s:UriFromPath(substitute(path, '[\/]*$', '', '')) - call add(opts.workspaceFolders, {'uri': uri, 'name': fnamemodify(uri, ':t')}) - endfor - elseif type(folder) == v:t_dict && has_key(v:t_dict, 'uri') && !empty(folder.uri) && has_key(folder, 'name') - call add(opts.workspaceFolders, folder) - endif - endfor - endif - for folder in opts.workspaceFolders - let instance.workspaceFolders[folder.uri] = v:true - endfor - if has('nvim') - call extend(instance, { - \ 'Close': function('s:NvimClose'), - \ 'Notify': function('s:NvimNotify'), - \ 'Request': function('s:NvimRequest'), - \ 'Attach': function('s:NvimAttach'), - \ 'IsAttached': function('s:NvimIsAttached'), - \ }) - let instance.client_id = eval("v:lua.require'_copilot'.lsp_start_client(command, keys(instance.methods), opts, settings)") - let instance.id = instance.client_id - else - call extend(instance, { - \ 'Close': function('s:VimClose'), - \ 'Notify': function('s:VimNotify'), - \ 'Attach': function('s:VimAttach'), - \ 'IsAttached': function('s:VimIsAttached'), - \ }) - let state = {'headers': {}, 'mode': 'headers', 'buffer': ''} - let instance.open_buffers = {} - let instance.methods = extend(s:vim_handlers, instance.methods) - let instance.job = job_start(command, { - \ 'cwd': copilot#job#Cwd(), - \ 'noblock': 1, - \ 'stoponexit': '', - \ 'in_mode': 'lsp', - \ 'out_mode': 'lsp', - \ 'out_cb': { j, d -> copilot#util#Defer(function('s:OnMessage'), instance, d) }, - \ 'err_cb': function('s:OnErr', [instance]), - \ 'exit_cb': { j, d -> copilot#util#Defer(function('s:OnExit'), instance, d) }, - \ }) - let instance.id = job_info(instance.job).process - let opts.capabilities = s:vim_capabilities - let opts.processId = getpid() - let request = instance.Request('initialize', opts, function('s:InitializeResult'), function('s:InitializeError'), instance) - call call(remove(instance.after_initialized, 0), []) - call instance.Notify('workspace/didChangeConfiguration', {'settings': settings}) - endif - let s:instances[instance.id] = instance - return instance -endfunction - -function! copilot#client#Cancel(request) abort - if type(a:request) == type({}) && has_key(a:request, 'Cancel') - call a:request.Cancel() - endif -endfunction - -function! s:Callback(request, type, callback, timer) abort - call remove(a:request.waiting, a:timer) - if has_key(a:request, a:type) - call a:callback(a:request[a:type]) - endif -endfunction - -function! copilot#client#Result(request, callback) abort - if has_key(a:request, 'resolve') - call add(a:request.resolve, a:callback) - elseif has_key(a:request, 'result') - let a:request.waiting[timer_start(0, function('s:Callback', [a:request, 'result', a:callback]))] = 1 - endif -endfunction - -function! copilot#client#Error(request, callback) abort - if has_key(a:request, 'reject') - call add(a:request.reject, a:callback) - elseif has_key(a:request, 'error') - let a:request.waiting[timer_start(0, function('s:Callback', [a:request, 'error', a:callback]))] = 1 - endif -endfunction - -function! s:CloseBuffer(bufnr) abort - for instance in values(s:instances) - try - if has_key(instance, 'job') && has_key(instance.open_buffers, a:bufnr) - let buffer = remove(instance.open_buffers, a:bufnr) - call instance.Notify('textDocument/didClose', {'textDocument': {'uri': buffer.uri}}) - endif - catch - call copilot#logger#Exception() - endtry - endfor -endfunction - -augroup copilot_close - autocmd! - if !has('nvim') - autocmd BufUnload * call s:CloseBuffer(+expand('')) - endif -augroup END diff --git a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/handlers.vim b/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/handlers.vim deleted file mode 100644 index a73186f..0000000 --- a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/handlers.vim +++ /dev/null @@ -1,31 +0,0 @@ -function! copilot#handlers#window_logMessage(params, ...) abort - call copilot#logger#Raw(get(a:params, 'type', 6), get(a:params, 'message', '')) -endfunction - -function! copilot#handlers#window_showMessageRequest(params, ...) abort - let choice = inputlist([a:params.message . "\n\nRequest Actions:"] + - \ map(copy(get(a:params, 'actions', [])), { i, v -> (i + 1) . '. ' . v.title})) - return choice > 0 ? get(a:params.actions, choice - 1, v:null) : v:null -endfunction - -function! s:BrowserCallback(into, code) abort - let a:into.code = a:code -endfunction - -function! copilot#handlers#window_showDocument(params, ...) abort - echo a:params.uri - if empty(get(a:params, 'external')) - return {'success': v:false} - endif - let browser = copilot#Browser() - if empty(browser) - return {'success': v:false} - endif - let status = {} - call copilot#job#Stream(browser + [a:params.uri], v:null, v:null, function('s:BrowserCallback', [status])) - let time = reltime() - while empty(status) && reltimefloat(reltime(time)) < 1 - sleep 10m - endwhile - return {'success': get(status, 'code') ? v:false : v:true} -endfunction diff --git a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/job.vim b/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/job.vim deleted file mode 100644 index 39904a8..0000000 --- a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/job.vim +++ /dev/null @@ -1,106 +0,0 @@ -scriptencoding utf-8 - -function! copilot#job#Nop(...) abort -endfunction - -function! s:Jobs(job_or_jobs) abort - let jobs = type(a:job_or_jobs) == v:t_list ? copy(a:job_or_jobs) : [a:job_or_jobs] - call map(jobs, { k, v -> type(v) == v:t_dict ? get(v, 'job', '') : v }) - call filter(jobs, { k, v -> type(v) !=# type('') }) - return jobs -endfunction - -let s:job_stop = exists('*job_stop') ? 'job_stop' : 'jobstop' -function! copilot#job#Stop(job) abort - for job in s:Jobs(a:job) - call call(s:job_stop, [job]) - endfor - return copilot#job#Wait(a:job) -endfunction - -let s:sleep = has('patch-8.2.2366') ? 'sleep! 1m' : 'sleep 1m' -function! copilot#job#Wait(jobs) abort - let jobs = s:Jobs(a:jobs) - if exists('*jobwait') - call jobwait(jobs) - else - for job in jobs - while ch_status(job) !=# 'closed' || job_status(job) ==# 'run' - exe s:sleep - endwhile - endfor - endif - return a:jobs -endfunction - -function! s:VimExitCallback(result, exit_cb, job, data) abort - let a:result.exit_status = a:data - if !has_key(a:result, 'closed') - return - endif - call remove(a:result, 'closed') - call a:exit_cb(a:result.exit_status) -endfunction - -function! s:VimCloseCallback(result, exit_cb, job) abort - if !has_key(a:result, 'exit_status') - let a:result.closed = v:true - return - endif - call a:exit_cb(a:result.exit_status) -endfunction - -function! s:NvimCallback(cb, job, data, type) dict abort - let self[a:type][0] .= remove(a:data, 0) - call extend(self[a:type], a:data) - while len(self[a:type]) > 1 - call a:cb(substitute(remove(self[a:type], 0), "\r$", '', '')) - endwhile -endfunction - -function! s:NvimExitCallback(out_cb, err_cb, exit_cb, job, data, type) dict abort - if len(self.stderr[0]) - call a:err_cb(substitute(self.stderr[0], "\r$", '', '')) - endif - call a:exit_cb(a:data) -endfunction - -function! copilot#job#Cwd() abort - let home = expand("~") - if !isdirectory(home) && isdirectory($VIM) - return $VIM - endif - return home -endfunction - -function! copilot#job#Stream(argv, out_cb, err_cb, ...) abort - let exit_status = [] - let ExitCb = function(a:0 && !empty(a:1) ? a:1 : { e -> add(exit_status, e) }, a:000[2:-1]) - let OutCb = function(empty(a:out_cb) ? 'copilot#job#Nop' : a:out_cb, a:000[2:-1]) - let ErrCb = function(empty(a:err_cb) ? 'copilot#job#Nop' : a:err_cb, a:000[2:-1]) - let state = {'headers': {}, 'mode': 'headers', 'buffer': ''} - if exists('*job_start') - let result = {} - let job = job_start(a:argv, { - \ 'cwd': copilot#job#Cwd(), - \ 'out_mode': 'raw', - \ 'out_cb': { j, d -> OutCb(d) }, - \ 'err_cb': { j, d -> ErrCb(d) }, - \ 'exit_cb': function('s:VimExitCallback', [result, ExitCb]), - \ 'close_cb': function('s:VimCloseCallback', [result, ExitCb]), - \ }) - else - let jopts = { - \ 'cwd': copilot#job#Cwd(), - \ 'stderr': [''], - \ 'on_stdout': { j, d, t -> OutCb(join(d, "\n")) }, - \ 'on_stderr': function('s:NvimCallback', [ErrCb]), - \ 'on_exit': function('s:NvimExitCallback', [OutCb, ErrCb, ExitCb])} - let job = jobstart(a:argv, jopts) - endif - if a:0 - return job - endif - call copilot#job#Wait(job) - return exit_status[0] -endfunction diff --git a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/logger.vim b/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/logger.vim deleted file mode 100644 index 923a1c1..0000000 --- a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/logger.vim +++ /dev/null @@ -1,105 +0,0 @@ -if !exists('s:log_file') - let s:log_file = tempname() . '-copilot.log' - try - call writefile([], s:log_file) - catch - endtry -endif - -let s:logs = [] - -function! copilot#logger#BufReadCmd() abort - try - setlocal modifiable noreadonly - silent call deletebufline('', 1, '$') - if !empty(s:logs) - call setline(1, s:logs) - endif - finally - setlocal buftype=nofile bufhidden=wipe nobuflisted nomodified nomodifiable - endtry -endfunction - -let s:level_prefixes = ['', '[ERROR] ', '[WARN] ', '[INFO] ', '[DEBUG] ', '[DEBUG] '] - -function! copilot#logger#Raw(level, message) abort - let lines = type(a:message) == v:t_list ? copy(a:message) : split(a:message, "\n", 1) - let lines[0] = strftime('[%Y-%m-%d %H:%M:%S] ') . get(s:level_prefixes, a:level, '[UNKNOWN] ') . get(lines, 0, '') - try - if !filewritable(s:log_file) - return - endif - call map(lines, { k, L -> type(L) == v:t_func ? call(L, []) : L }) - call extend(s:logs, lines) - let overflow = len(s:logs) - get(g:, 'copilot_log_history', 10000) - if overflow > 0 - call remove(s:logs, 0, overflow - 1) - endif - let bufnr = bufnr('copilot:///log') - if bufnr > 0 && bufloaded(bufnr) - call setbufvar(bufnr, '&modifiable', 1) - call setbufline(bufnr, 1, s:logs) - call setbufvar(bufnr, '&modifiable', 0) - for winid in win_findbuf(bufnr) - if has('nvim') && winid != win_getid() - call nvim_win_set_cursor(winid, [len(s:logs), 0]) - endif - endfor - endif - catch - endtry -endfunction - -function! copilot#logger#Debug(...) abort - if empty(get(g:, 'copilot_debug')) - return - endif - call copilot#logger#Raw(4, a:000) -endfunction - -function! copilot#logger#Info(...) abort - call copilot#logger#Raw(3, a:000) -endfunction - -function! copilot#logger#Warn(...) abort - call copilot#logger#Raw(2, a:000) -endfunction - -function! copilot#logger#Error(...) abort - call copilot#logger#Raw(1, a:000) -endfunction - -function! copilot#logger#Bare(...) abort - call copilot#logger#Raw(0, a:000) -endfunction - -function! copilot#logger#Exception(...) abort - if !empty(v:exception) && v:exception !=# 'Vim:Interrupt' - call copilot#logger#Error('Exception: ' . v:exception . ' @ ' . v:throwpoint) - let client = copilot#RunningClient() - if !empty(client) - let [_, type, code, message; __] = matchlist(v:exception, '^\%(\(^[[:alnum:]_#]\+\)\%((\a\+)\)\=\%(\(:E-\=\d\+\)\)\=:\s*\)\=\(.*\)$') - let stacklines = [] - for frame in split(substitute(v:throwpoint, ', \S\+ \(\d\+\)$', '[\1]', ''), '\.\@\d\+_', '', ''), 'lineno': +fn_line[2]}) - elseif frame =~# ' Autocmds for "\*"$' - call add(stacklines, {'function': frame}) - elseif frame =~# ' Autocmds for ".*"$' - call add(stacklines, {'function': substitute(frame, ' for ".*"$', ' for "[redacted]"', '')}) - else - call add(stacklines, {'function': '[redacted]'}) - endif - endfor - return client.Request('telemetry/exception', { - \ 'transaction': a:0 ? a:1 : '', - \ 'platform': 'other', - \ 'exception_detail': [{ - \ 'type': type . code, - \ 'value': message, - \ 'stacktrace': stacklines}] - \ }, v:null, function('copilot#util#Nop')) - endif - endif -endfunction diff --git a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/panel.vim b/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/panel.vim deleted file mode 100644 index 4e25237..0000000 --- a/.vim/pack/plugins/opt/vim-copilot/autoload/copilot/panel.vim +++ /dev/null @@ -1,167 +0,0 @@ -scriptencoding utf-8 - -if !exists('s:panel_id') - let s:panel_id = 0 -endif - -let s:separator = repeat('─', 72) - -function! s:Render(state) abort - let bufnr = bufnr('^' . a:state.panel . '$') - let state = a:state - if !bufloaded(bufnr) - return - endif - let sorted = a:state.items - if !empty(get(a:state, 'error')) - let lines = ['Error: ' . a:state.error.message] - let sorted = [] - elseif get(a:state, 'percentage') == 100 - let lines = ['Synthesized ' . (len(sorted) == 1 ? '1 completion' : len(sorted) . ' completions')] - else - let lines = [substitute('Synthesizing ' . matchstr(get(a:state, 'message', ''), '\d\+\%(/\d\+\)\=') . ' completions', ' \+', ' ', 'g')] - endif - if len(sorted) - call add(lines, 'Press on a completion to accept') - endif - let leads = {} - for item in sorted - let insert = split(item.insertText, "\r\n\\=\\|\n", 1) - let insert[0] = strpart(a:state.line, 0, copilot#util#UTF16ToByteIdx(a:state.line, item.range.start.character)) . insert[0] - let lines += [s:separator] + insert - if !has_key(leads, string(item.range.start)) - let match = insert[0 : a:state.position.line - item.range.start.line] - let match[-1] = strpart(match[-1], 0, copilot#util#UTF16ToByteIdx(match[-1], a:state.position.character)) - call map(match, { k, v -> escape(v, '][^$.*\~') }) - let leads[string(item.range.start)] = join(match, '\n') - endif - endfor - try - call setbufvar(bufnr, '&modifiable', 1) - call setbufvar(bufnr, '&readonly', 0) - call setbufline(bufnr, 1, lines) - finally - call setbufvar(bufnr, '&modifiable', 0) - endtry - call clearmatches() - call matchadd('CopilotSuggestion', '\C^' . s:separator . '\n\zs\%(' . join(sort(values(leads), { a, b -> len(b) - len(a) }), '\|') . '\)', 10, 4) -endfunction - -function! s:PartialResult(state, value) abort - let items = type(a:value) == v:t_list ? a:value : a:value.items - call extend(a:state.items, items) - call s:Render(a:state) -endfunction - -function! s:WorkDone(state, value) abort - if has_key(a:value, 'message') - let a:state.message = a:value.message - endif - if has_key(a:value, 'percentage') - let a:state.percentage = a:value.percentage - call s:Render(a:state) - endif -endfunction - -function! copilot#panel#Accept(...) abort - let state = get(b:, 'copilot_panel', {}) - if empty(state.items) - return '' - endif - if !has_key(state, 'bufnr') || !bufloaded(get(state, 'bufnr', -1)) - return "echoerr 'Buffer was closed'" - endif - let at = a:0 ? a:1 : line('.') - let index = 0 - for lnum in range(1, at) - if getline(lnum) ==# s:separator - let index += 1 - endif - endfor - if index > 0 && index <= len(state.items) - let item = state.items[index - 1] - let lnum = item.range.start.line + 1 - if getbufline(state.bufnr, lnum) !=# [state.line] - return 'echoerr "Buffer has changed since synthesizing completion"' - endif - let lines = split(item.insertText, "\n", 1) - let old_first = getbufline(state.bufnr, item.range.start.line + 1)[0] - let lines[0] = strpart(old_first, 0, copilot#util#UTF16ToByteIdx(old_first, item.range.start.character)) . lines[0] - let old_last = getbufline(state.bufnr, item.range.end.line + 1)[0] - let lines[-1] .= strpart(old_last, copilot#util#UTF16ToByteIdx(old_last, item.range.end.character)) - call deletebufline(state.bufnr, item.range.start.line + 1, item.range.end.line + 1) - call appendbufline(state.bufnr, item.range.start.line, lines) - call copilot#Request('workspace/executeCommand', item.command) - bwipeout - let win = bufwinnr(state.bufnr) - if win > 0 - exe win . 'wincmd w' - exe item.range.start.line + len(lines) - if state.was_insert - startinsert! - else - normal! $ - endif - endif - endif - return '' -endfunction - -function! s:Initialize(state) abort - let &l:filetype = 'copilot' . (empty(a:state.filetype) ? '' : '.' . a:state.filetype) - let &l:tabstop = a:state.tabstop - nmap + + +
+
+URL like http://google.com gets auto linked
+
+URL may contain punctuation http://example.com/foo,bar,baz
+
+URL may be preceded by punctuation !http://example.com/foo,bar,baz so the exclamation point is not part of the URL
+
+URL are terminated by punctuation so http://example.com/foo, the comma is not part of the URL
+
+URL may contain parenthesis http://example.com/(foo)?foo[1]=bar&foo[2]=baz
+
+URL may be surrounded by parenthesis (http://example.com/foo) but parenthesis are not part of the URL
+
+URL may terminate with parenthesis http://example.com/foo()
+
+URL may be surrounded by parenthesis (http://example.com/foo()) but the surrounding parenthesis are not part of the URL
+
+Email addresses bill@microsoft.com get auto linked
+
+Path are supported /clean/code/that/works but they must be preceded by a non work because this /is a path and this/is not a path
+
+Pull requests and issues are linked #42
+  could be preceded by symbols \#42
+  could not be preceded by letters a#42 or numbers 3#42
+
+Reference to other users are linked @gabrielelana
+  could be preceded by symbols \@gabrielelana
+  could not be preceded by letters a@gabrielelana or numbers 3@gabrielelana
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes.md b/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes.md new file mode 100644 index 0000000..40be558 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes.md @@ -0,0 +1,22 @@ +> This is a blockquote + + > This is a blockquote even if the angle bracket is not at the beginning of the line + +> This is a single +> blockquote even if it +> spans a few lines + +> This is a single +blockquote, you can put the angle bracket +jnly at the first line of the paragraph and +the all the paragraph is a blockquote + +This is not a blockquote because it's another paragraph + +> +This is not a blockquote because the first line, the line with the angle bracket, must not be empty + +> +This is a blockquote because the first line, the line with the angle bracket, is not empty, in this case contains a single space + +And again, this is not a blockquote because is another paragraph diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes.md.html new file mode 100644 index 0000000..4d910ad --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes.md.html @@ -0,0 +1,54 @@ + + + + +~/code/vim-markdown/spec/features/blockquotes.md.html + + + + + + + + + + +
+> This is a blockquote
+
+ > This is a blockquote even if the angle bracket is not at the beginning of the line
+
+> This is a single
+> blockquote even if it
+> spans a few lines
+
+> This is a single
+blockquote, you can put the angle bracket
+jnly at the first line of the paragraph and
+the all the paragraph is a blockquote
+
+This is not a blockquote because it's another paragraph
+
+>
+This is not a blockquote because the first line, the line with the angle bracket, must not be empty
+
+> 
+This is a blockquote because the first line, the line with the angle bracket, is not empty, in this case contains a single space
+
+And again, this is not a blockquote because is another paragraph
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes_nested.md b/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes_nested.md new file mode 100644 index 0000000..e9891df --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes_nested.md @@ -0,0 +1,16 @@ +> First level blockquote +> > Second level blockquote +>> Second level blockquote +> > > Third level blockquote +>>> Third level blockquote + +> # Nested elements problem +> Nested elements inside blockquotes and other elements could be very problematic +> +> ## A conscious choice +> I chose to not highlight nested elements because: +> * things could get really nasty in the syntax definition +> * the end result could get confusing for the user (ex. No difference in the highlight between an headline inside and outside a blockquote) +> +> ## An alternative solution +> MdEditBlock will open the next level of the Blockquote block under cursor in a scratch buffer with a markdown syntax highlight diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes_nested.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes_nested.md.html new file mode 100644 index 0000000..98142a9 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/blockquotes_nested.md.html @@ -0,0 +1,48 @@ + + + + +~/code/vim-markdown/spec/features/blockquotes_nested.md.html + + + + + + + + + + +
+> First level blockquote
+> > Second level blockquote
+>> Second level blockquote
+> > > Third level blockquote
+>>> Third level blockquote
+
+> # Nested elements problem
+> Nested elements inside blockquotes and other elements could be very problematic
+>
+> ## A conscious choice
+> I chose to not highlight nested elements because:
+> * things could get really nasty in the syntax definition
+> * the end result could get confusing for the user (ex. No difference in the highlight between an headline inside and outside a blockquote)
+>
+> ## An alternative solution
+> MdEditBlock will open the next level of the Blockquote block under cursor in a scratch buffer with a markdown syntax highlight
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/codeblocks.md b/.vim/pack/plugins/start/vim-markdown/spec/features/codeblocks.md new file mode 100644 index 0000000..6fa5cc5 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/codeblocks.md @@ -0,0 +1,76 @@ +This is inline `code` with a single back tick + +This is inline ``code`` with double back ticks + +This is inline ```code``` with triple back ticks. This is not standard Markdown but Github supports it and so do we. Actually Github allows an arbitrary number of backs ticks around inline `````codeblocks````` the only constraint is that they should be ```even```` the remainder, in this case the last back tick, should not be highlighted + +The following is a generic block code with a triple tick +``` +code +``` + +The following is a fenced block code with a triple tick +```js +var foo = 'bar' +``` + +A fenced code block must have at least 3 back ticks in the start delimiter but could have more +````````ruby +foo = 'bar' if foo.empty? +``` + +A fenced code block must have at least 3 back ticks in the end delimiter but could have more +```ruby +foo = 'bar' if foo.empty? +```````` + +A fenced code block could have at most 3 leading spaces in the start delimiter + ```ruby +foo = 'bar' if foo.empty? +``` + +A fenced code block could have at most 3 leading spaces in the end delimiter +```ruby +foo = 'bar' if foo.empty? + ``` + +A fenced code block could have at most 3 leading spaces in the start and in the end delimiter + ```ruby +foo = 'bar' if foo.empty? + ``` + + + this is a code block because it's indented with 4 spaces + this should be a continuation + +This line separates two blocks + + this is a code block because it's indented with a \t + this should be a continuation + + +The following is not standard Markdown, officially it's not the Github Flavored Markdown either, it's inspired by the Kramdown Flavored Markdown. Even if not documented Github supports it and so do we + +~~~ruby +foo = 'bar' if foo.empty? +~~~ + +~~~~~~~~ruby +foo = 'bar' if foo.empty? +~~~ + +~~~ruby +foo = 'bar' if foo.empty? +~~~~~~~~ + + ~~~ruby +foo = 'bar' if foo.empty? +~~~ + +~~~ruby +foo = 'bar' if foo.empty? + ~~~ + + ~~~ruby +foo = 'bar' if foo.empty? + ~~~ diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/codeblocks.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/codeblocks.md.html new file mode 100644 index 0000000..6df48ca --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/codeblocks.md.html @@ -0,0 +1,108 @@ + + + + +~/code/vim-markdown/spec/features/codeblocks.md.html + + + + + + + + + + +
+This is inline `code` with a single back tick
+
+This is inline ``code`` with double back ticks
+
+This is inline ```code``` with triple back ticks. This is not standard Markdown but Github supports it and so do we. Actually Github allows an arbitrary number of backs ticks around inline `````codeblocks````` the only constraint is that they should be ```even```` the remainder, in this case the last back tick, should not be highlighted
+
+The following is a generic block code with a triple tick
+```
+code
+```
+
+The following is a fenced block code with a triple tick
+```js
+var foo = 'bar'
+```
+
+A fenced code block must have at least 3 back ticks in the start delimiter but could have more
+````````ruby
+foo = 'bar' if foo.empty?
+```
+
+A fenced code block must have at least 3 back ticks in the end delimiter but could have more
+```ruby
+foo = 'bar' if foo.empty?
+````````
+
+A fenced code block could have at most 3 leading spaces in the start delimiter
+   ```ruby
+foo = 'bar' if foo.empty?
+```
+
+A fenced code block could have at most 3 leading spaces in the end delimiter
+```ruby
+foo = 'bar' if foo.empty?
+   ```
+
+A fenced code block could have at most 3 leading spaces in the start and in the end delimiter
+  ```ruby
+foo = 'bar' if foo.empty?
+ ```
+
+
+    this is a code block because it's indented with 4 spaces
+    this should be a continuation
+
+This line separates two blocks
+
+  this is a code block because it's indented with a \t
+  this should be a continuation
+
+
+The following is not standard Markdown, officially it's not the Github Flavored Markdown either, it's inspired by the Kramdown Flavored Markdown. Even if not documented Github supports it and so do we
+
+~~~ruby
+foo = 'bar' if foo.empty?
+~~~
+
+~~~~~~~~ruby
+foo = 'bar' if foo.empty?
+~~~
+
+~~~ruby
+foo = 'bar' if foo.empty?
+~~~~~~~~
+
+   ~~~ruby
+foo = 'bar' if foo.empty?
+~~~
+
+~~~ruby
+foo = 'bar' if foo.empty?
+   ~~~
+
+  ~~~ruby
+foo = 'bar' if foo.empty?
+ ~~~
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/combined_emphasis.md b/.vim/pack/plugins/start/vim-markdown/spec/features/combined_emphasis.md new file mode 100644 index 0000000..f3597de --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/combined_emphasis.md @@ -0,0 +1,8 @@ + +___foo___ must be both highlighted as italic and bold + +***foo*** must be both highlighted as italic and bold + +**_foo_** must be both highlighted as italic and bold + +__*foo*__ must be both highlighted as italic and bold diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/combined_emphasis.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/combined_emphasis.md.html new file mode 100644 index 0000000..5f63558 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/combined_emphasis.md.html @@ -0,0 +1,40 @@ + + + + +~/code/vim-markdown/spec/features/combined_emphasis.md.html + + + + + + + + + + +
+
+___foo___ must be both highlighted as italic and bold
+
+***foo*** must be both highlighted as italic and bold
+
+**_foo_** must be both highlighted as italic and bold
+
+__*foo*__ must be both highlighted as italic and bold
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/contained_emphasis.md b/.vim/pack/plugins/start/vim-markdown/spec/features/contained_emphasis.md new file mode 100644 index 0000000..c7af054 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/contained_emphasis.md @@ -0,0 +1,12 @@ + +# This is an header that _contains_ *weak* highlighed elements + +# This is an header that __contains__ **strong** highlighed elements + +## This is an header that __*contains*__ **_strong_** emphasis elements + +This is also an header that _contains_ *weak* highlighed elements +================================================================= + +This is an header that __contains__ **strong** highlighed elements +------------------------------------------------------------------ diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/contained_emphasis.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/contained_emphasis.md.html new file mode 100644 index 0000000..cf28ec4 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/contained_emphasis.md.html @@ -0,0 +1,47 @@ + + + + +~/code/vim-markdown/spec/features/contained_emphasis.md.html + + + + + + + + + + +
+
+# This is an header that _contains_ *weak* highlighed elements
+
+# This is an header that __contains__ **strong** highlighed elements
+
+## This is an header that __*contains*__ **_strong_** emphasis elements
+
+This is also an header that _contains_ *weak* highlighed elements
+=================================================================
+
+This is an header that __contains__ **strong** highlighed elements
+------------------------------------------------------------------
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/headers_atx.md b/.vim/pack/plugins/start/vim-markdown/spec/features/headers_atx.md new file mode 100644 index 0000000..a6b4427 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/headers_atx.md @@ -0,0 +1,35 @@ +# One + +## Two + +### Three + +#### Four + +##### Five + +###### Six + +# One with closing hash # + +## Two with closing hash # + +### Three with closing hash # + +#### Four with closing hash # + +##### Five with closing hash # + +###### Six with closing hash # + +# Can have multiple closing hashes ##### + +# An hash in the middle # have no special meaning + + # This should not be an header because the hash should be the first character in the line + +This is # not an header, this is a normal paragraph and the hash must not be considered a delimiter + +####### Seven hashes is an `H6` that begins with an hash character for Dingus but for Github those are seven hashes, an header must have a mandatory space before any character + +######This is not an header on Github because it lacks the mandatory white space between the hashes (delimiter) and the first character of the header diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/headers_atx.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/headers_atx.md.html new file mode 100644 index 0000000..bb4ed5b --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/headers_atx.md.html @@ -0,0 +1,68 @@ + + + + +~/code/vim-markdown/spec/features/headers_atx.md.html + + + + + + + + + + +
+# One
+
+## Two
+
+### Three
+
+#### Four
+
+##### Five
+
+###### Six
+
+# One with closing hash #
+
+## Two with closing hash #
+
+### Three with closing hash #
+
+#### Four with closing hash #
+
+##### Five with closing hash #
+
+###### Six with closing hash #
+
+# Can have multiple closing hashes #####
+
+# An hash in the middle # have no special meaning
+
+ # This should not be an header because the hash should be the first character in the line
+
+This is # not an header, this is a normal paragraph and the hash must not be considered a delimiter
+
+####### Seven hashes is an `H6` that begins with an hash character for Dingus but for Github those are seven hashes, an header must have a mandatory space before any character
+
+######This is not an header on Github because it lacks the mandatory white space between the hashes (delimiter) and the first character of the header
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/headers_setext.md b/.vim/pack/plugins/start/vim-markdown/spec/features/headers_setext.md new file mode 100644 index 0000000..a814808 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/headers_setext.md @@ -0,0 +1,24 @@ +H1 Header +========= + +H2 Header +--------- + +H1 Header, underline could be of any length += + +H2 Header, underline could be of any length +- + +H1 Header, underline could be of any length +================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================= + +H2 Header, underline could be of any length +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +This is not an header because the underline must begin at the beginnning of the line + = + +This is not an header because the underline must begin at the beginnning of the line +.= + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/headers_setext.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/headers_setext.md.html new file mode 100644 index 0000000..7a0d1fd --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/headers_setext.md.html @@ -0,0 +1,56 @@ + + + + +~/code/vim-markdown/spec/features/headers_setext.md.html + + + + + + + + + + +
+H1 Header
+=========
+
+H2 Header
+---------
+
+H1 Header, underline could be of any length
+=
+
+H2 Header, underline could be of any length
+-
+
+H1 Header, underline could be of any length
+=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
+
+H2 Header, underline could be of any length
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+This is not an header because the underline must begin at the beginnning of the line
+ =
+
+This is not an header because the underline must begin at the beginnning of the line
+.=
+
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/horizontal_rules.md b/.vim/pack/plugins/start/vim-markdown/spec/features/horizontal_rules.md new file mode 100644 index 0000000..6c1bcbd --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/horizontal_rules.md @@ -0,0 +1,30 @@ +The following are all horizontal rules + +*** + +--- + +___ + +********************* + +--------------------- + +_____________________ + + +- - - + +_ _ _ + + * * * + + - - - + + +Now a special case + +--- +The line before is an horizontal rule +This is however is a title +--- diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/inline_html.md b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_html.md new file mode 100644 index 0000000..dd23fac --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_html.md @@ -0,0 +1,29 @@ +
+ This is a block of html +
+ + + + + + + +
+ +This is normal text + +* XML element in a list item + +# XML element in an header + +
+XML/HTML could not contain *everything* + + Like code blocks + +* Or +* List +* Items +
diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/inline_html.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_html.md.html new file mode 100644 index 0000000..4d09c70 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_html.md.html @@ -0,0 +1,62 @@ + + + + +~/code/vim-markdown/spec/features/inline_html.md.html + + + + + + + + + + +
+<div>
+  This is a <span>block</span> of html
+</div>
+
+<!--
+  This is a comment
+-->
+
+<a href="http://example.com" title="This is an empty element" />
+
+<a href="http://example.com"/>
+
+<br />
+
+This is normal text
+
+* XML <i>element</i> in a list item
+
+# XML <i>element</i> in an header
+
+<div id="container">
+XML/HTML could not contain *everything*
+
+    Like code blocks
+
+* Or
+* List
+* Items
+</div>
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/inline_links.md b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_links.md new file mode 100644 index 0000000..e5e3de7 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_links.md @@ -0,0 +1,61 @@ +Link [link](http://example.com) + +Link with title [link](http://example.com "Title") + +Link with title surrounded by single quotes [link](http://example.com 'Title') + +Link to a relative path [link](/about) + +Link to an anchor [link](#about) + +Link to an image ![image](path/to/image.png) + +Link with escaped parenthesis in URL [link](/url\(test\) "Title") + +Link with unescaped parenthesis in URL [link](/url(test) "Title") + +The following is not a link because it's escaped \[link](http://example.com) the URL must be auto linked anyway but the rounded parenthesis must not be highlighted + +Link with escaped closed square bracket in text [text \] link](http://example.com) + +Link with inline element in text [this **is** a link](http://example.com) + +Link with newline in text [text +link](http://inline.com) + +Link with multiple newline in text [this +is +text +in +link](http://inline.com) + +Link with spaces between text and URL it's ok [link] (http://example.com) + +Link with newline between text and URL it's ok [link] +(http://example.com) + +Link with newline between URL and title it's ok [link](http://example.com +"Title") + +# This is [link](http://github.com) in a title + +[Link](http://example.com) at beginning of the line. Bug: this was considered as link definition + + +--- +The following are not valid links + + +No more than one newline between text and URL [link] + +(http://example.com) + + +No more that one newline in text [text + +link](http://example.com) + + +No more that one newline between URL and title [link](http://example.com + +"Title") diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/inline_links.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_links.md.html new file mode 100644 index 0000000..ef9b196 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_links.md.html @@ -0,0 +1,96 @@ + + + + +~/code/vim-markdown/spec/features/inline_links.md.html + + + + + + + + + + +
+Link [link](http://example.com)
+
+Link with title [link](http://example.com "Title")
+
+Link with title surrounded by single quotes [link](http://example.com 'Title')
+
+Link to a relative path [link](/about)
+
+Link to an anchor [link](#about)
+
+Link to an image ![image](path/to/image.png)
+
+Link with escaped parenthesis in URL [link](/url\(test\) "Title")
+
+Link with unescaped parenthesis in URL [link](/url(test) "Title")
+
+The following is not a link because it's escaped \[link](http://example.com) the URL must be auto linked anyway but the rounded parenthesis must not be highlighted
+
+Link with escaped closed square bracket in text [text \] link](http://example.com)
+
+Link with inline element in text [this **is** a link](http://example.com)
+
+Link with newline in text [text
+link](http://inline.com)
+
+Link with multiple newline in text [this
+is
+text
+in
+link](http://inline.com)
+
+Link with spaces between text and URL it's ok [link]     (http://example.com)
+
+Link with newline between text and URL it's ok [link]
+(http://example.com)
+
+Link with newline between URL and title it's ok [link](http://example.com
+"Title")
+
+# This is [link](http://github.com) in a title
+
+[Link](http://example.com) at beginning of the line. Bug: this was considered as link definition
+
+
+---
+The following are not valid links
+
+
+No more than one newline between text and URL [link]
+
+(http://example.com)
+
+
+No more that one newline in text [text
+
+link](http://example.com)
+
+
+No more that one newline between URL and title [link](http://example.com
+
+"Title")
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/inline_references.md b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_references.md new file mode 100644 index 0000000..60ca407 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_references.md @@ -0,0 +1,52 @@ +Reference [bar] [1] + +Reference [bar][1] + +Reference [bar] +[1] + +[1]: /url/ "Title" + + +With [embedded [brackets]][b] +With quoted [embedded \[brackets\]][b] +With quoted [embedded \[ brackets][b] +With quoted [embedded \] brackets][b] + +[b]: /url/ + +Indented [once][] times +Indented [twice][] times +Indented [thrice][] times +Indented [four][] times must not a reference, must be a code block + + [once]: /url + [twice]: /url + [thrice]: /url + [four]: /url + +With [angle brackets][] +And [without][] + +[angle brackets]: "Angle Brackets" +[without]: http://example.com/ "Without angle brackets." + +With [line +breaks][] + +[line breaks]: http://example.com "Yes this works" + +--- +The following should be supported but they are not... In GFM and Kramdown link references could omit the second pair of square brackets, with a programming language is possible to check if something between square brackets has a related link definition an so to be interpreted as link reference but here it would be impossible + +[short ref] + +[short +ref] + +[short ref]: http://example.com "No more hanging empty bracket!" + +[a ref] + +[a ref]: http://example.com + "Title on next line." diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/inline_references.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_references.md.html new file mode 100644 index 0000000..3e0c6be --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/inline_references.md.html @@ -0,0 +1,86 @@ + + + + +~/code/vim-markdown/spec/features/inline_references.md.html + + + + + + + + + + +
+Reference [bar] [1]
+
+Reference [bar][1]
+
+Reference [bar]
+[1]
+
+[1]: /url/ "Title"
+
+
+With [embedded [brackets]][b]
+With quoted [embedded \[brackets\]][b]
+With quoted [embedded \[ brackets][b]
+With quoted [embedded \] brackets][b]
+
+[b]: /url/
+
+Indented [once][] times
+Indented [twice][] times
+Indented [thrice][] times
+Indented [four][] times must not a reference, must be a code block
+
+ [once]: /url
+  [twice]: /url
+   [thrice]: /url
+    [four]: /url
+
+With [angle brackets][]
+And [without][]
+
+[angle brackets]: <http://example.com/> "Angle Brackets"
+[without]: http://example.com/ "Without angle brackets."
+
+With [line
+breaks][]
+
+[line breaks]: http://example.com "Yes this works"
+
+---
+The following should be supported but they are not... In GFM and Kramdown link references could omit the second pair of square brackets, with a programming language is possible to check if something between square brackets has a related link definition an so to be interpreted as link reference but here it would be impossible
+
+[short ref]
+
+[short
+ref]
+
+[short ref]: http://example.com "No more hanging empty bracket!"
+
+[a ref]
+
+[a ref]: http://example.com
+    "Title on next line."
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/jekyll.md b/.vim/pack/plugins/start/vim-markdown/spec/features/jekyll.md new file mode 100644 index 0000000..f38db57 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/jekyll.md @@ -0,0 +1,32 @@ +--- +layout: post +title: Blogging Like a Hacker +--- + +{% include footer.html %} + +This is a Jekyll output tag {{ post.title }} + +The following are Jekyll output tag with escape + +{{ "{{" }} {{ "{%" }} {{ "}}" }} {{ "%}" }} + +{{ "{%" }} this %} + +{{ "{{" }} this }} + +{{ "{{" }} {{ '"{%"' }} }} this %} + +{{ "{{" }} {{ '"{{"' }} }} this }} + +{% comment %} +This is a comment +{% endcomment %} + +{% raw %} +This is a raw +{% endraw %} + +{% highlight ruby %} +puts "This is some ruby code ;-)" +{% endhighlight %} diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/jekyll.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/jekyll.md.html new file mode 100644 index 0000000..9581e5b --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/jekyll.md.html @@ -0,0 +1,64 @@ + + + + +~/code/vim-markdown/spec/features/jekyll.md.html + + + + + + + + + + +
+---
+layout: post
+title: Blogging Like a Hacker
+---
+
+{% include footer.html %}
+
+This is a Jekyll output tag {{ post.title }}
+
+The following are Jekyll output tag with escape
+
+{{ "{{" }} {{ "{%" }} {{ "}}" }} {{ "%}" }}
+
+{{ "{%" }} this %}
+
+{{ "{{" }} this }}
+
+{{ "{{" }} {{ '"{%"' }} }} this %}
+
+{{ "{{" }} {{ '"{{"' }} }} this }}
+
+{% comment %}
+This is a comment
+{% endcomment %}
+
+{% raw %}
+This is a raw
+{% endraw %}
+
+{% highlight ruby %}
+puts "This is some ruby code ;-)"
+{% endhighlight %}
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/kramdown/headers_with_id.md b/.vim/pack/plugins/start/vim-markdown/spec/features/kramdown/headers_with_id.md new file mode 100644 index 0000000..c102eac --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/kramdown/headers_with_id.md @@ -0,0 +1,21 @@ +Hello {#id-1} +----- + +Hello {#id-2} +===== + +# Header With Identifier {#id-3} + +# Header With Trailing Hashes and Identifier # {#id-4} + +# Trailing Hashes could be as many as you want ####### {#id-5} + +# Header With Hashes # In Text and Identifier {#id-6} + +The following should a level 1 header with a `#` character for content + +## + +The following should a level 2 header with a `#` character for content + +### diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/kramdown/headers_with_id.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/kramdown/headers_with_id.md.html new file mode 100644 index 0000000..70171ad --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/kramdown/headers_with_id.md.html @@ -0,0 +1,54 @@ + + + + +~/code/vim-markdown/spec/features/kramdown/headers_with_id.md.html + + + + + + + + + + +
+Hello        {#id-1}
+-----
+
+Hello        {#id-2}
+=====
+
+# Header With Identifier {#id-3}
+
+# Header With Trailing Hashes and Identifier # {#id-4}
+
+# Trailing Hashes could be as many as you want ####### {#id-5}
+
+# Header With Hashes # In Text and Identifier {#id-6}
+
+The following should a level 1 header with a `#` character for content
+
+##
+
+The following should a level 2 header with a `#` character for content
+
+###
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists.md b/.vim/pack/plugins/start/vim-markdown/spec/features/lists.md new file mode 100644 index 0000000..0045b7a --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists.md @@ -0,0 +1,99 @@ +Stars + +* First item +* Second item +* Third item + + +Dashes + +- First item +- Second item +- Third item + + +Pluses + ++ First item ++ Second item ++ Third item + +Ordered + +1. First item +2. Second item +3. Third item + +10. Index with more than one digit item +11. Index with more than one digit item +12. Index with more than one digit item + +Nesting + +* First item first level + * Second item second level + * Third item third level + * Fourth item third level + 1. First item of the fourth level + 2. Second item of the fourth level + +List items on multiple lines + +* This is the first item in the list +this is still the first item even if it's the second line +* This is the second item in the list +this is still the second item even if it's the second line +this is still the second item even if it's the third line + +This is not part of the above list + + +List items on multiple lines aligned + +* This is the first item in the list + this is still the first item even if it's the second line +* This is the second item in the list + this is still the second item even if it's the second line + this is still the second item even if it's the third line + + This is still the second item even if it's separated with a newline + +This is not part of the above list + + +Leading space are not allowed, well technically they are… in Dingus (the official markdown engine) leading spaces (up to 3) are allowed in list items but I chose to not allow it because it could lead to nasty situations like the following + + * On Dingus this is a first level list item + * But this is a second level list item, even if its indentation it's lower than the line before… looking at the text don't tell me this is not confusing + +A single list delimiter followed by a newline is not a list item + +* + +A single list delimiter followed by a single space and a newline is a list item + +* + + +List with inline elements + +* List item _ending_ +with _emphasis_. + +* List item with **strong emphasis**. + +* List item with [a link](http://google.com). + +* List items can have *inline content + that spans multiple lines* + +*this is not a list item but a weak emphasis element beginning at the beginning of the line* + +* This is a list item that ends with an asterisk * + +Everything that immediately follows a list item is still part of the list item and a list item could not contain (at least for Github but not for the original Dingus interpreter) block elements like headers if not preceded by a new line + +* This is a list item +# This is not an header, is the continuation of the previous list item, an empty line is needed to terminate a list item + +# This is an header diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/lists.md.html new file mode 100644 index 0000000..f607097 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists.md.html @@ -0,0 +1,134 @@ + + + + +~/code/vim-markdown/spec/features/lists.md.html + + + + + + + + + + +
+Stars
+
+* First item
+* Second item
+* Third item
+
+
+Dashes
+
+- First item
+- Second item
+- Third item
+
+
+Pluses
+
++ First item
++ Second item
++ Third item
+
+Ordered
+
+1. First item
+2. Second item
+3. Third item
+
+10. Index with more than one digit item
+11. Index with more than one digit item
+12. Index with more than one digit item
+
+Nesting
+
+* First item first level
+  * Second item second level
+    * Third item third level
+    * Fourth item third level
+      1. First item of the fourth level
+      2. Second item of the fourth level
+
+List items on multiple lines
+
+* This is the first item in the list
+this is still the first item even if it's the second line
+* This is the second item in the list
+this is still the second item even if it's the second line
+this is still the second item even if it's the third line
+
+This is not part of the above list
+
+
+List items on multiple lines aligned
+
+* This is the first item in the list
+  this is still the first item even if it's the second line
+* This is the second item in the list
+  this is still the second item even if it's the second line
+  this is still the second item even if it's the third line
+
+  This is still the second item even if it's separated with a newline
+
+This is not part of the above list
+
+
+Leading space are not allowed, well technically they are… in Dingus (the official markdown engine) leading spaces (up to 3) are allowed in list items but I chose to not allow it because it could lead to nasty situations like the following
+
+  * On Dingus this is a first level list item
+ * But this is a second level list item, even if its indentation it's lower than the line before… looking at the text don't tell me this is not confusing
+
+A single list delimiter followed by a newline is not a list item
+
+*
+
+A single list delimiter followed by a single space and a newline is a list item
+
+*
+
+
+List with inline elements
+
+* List item _ending_
+with _emphasis_.
+
+* List item with **strong emphasis**.
+
+* List item with [a link](http://google.com).
+
+* List items can have *inline content
+  that spans multiple lines*
+
+*this is not a list item but a weak emphasis element beginning at the beginning of the line*
+
+* This is a list item that ends with an asterisk *
+
+Everything that immediately follows a list item is still part of the list item and a list item could not contain (at least for Github but not for the original Dingus interpreter) block elements like headers if not preceded by a new line
+
+* This is a list item
+# This is not an header, is the continuation of the previous list item, an empty line is needed to terminate a list item
+
+# This is an header
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_anchored_elements.md b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_anchored_elements.md new file mode 100644 index 0000000..36084c0 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_anchored_elements.md @@ -0,0 +1,63 @@ + +* First level, first item + + # Header 1 in Level 1 + + ## Header 2 in Level 1 + + ### Header 3 in Level 1 + + #### Header 4 in Level 1 + + ##### Header 5 in Level 1 + + ###### Header 6 in Level 1 + + Hello + === + + * Level 2 list item + + # Header 1 in Level 2 + + ## Header 2 in Level 2 + + ### Header 3 in Level 2 + + #### Header 4 in Level 1 + + ##### Header 5 in Level 1 + + ###### Header 6 in Level 1 + + +* First level, first item, the following it's a rule + + *** + * Second level, first item,, the following it's a rule + + *** + + * Third level, first item, the following it's not a rule because the preceding empty line it's mandatory + *** + + * Third level, second item, the following it's not a rule because it's anchored at the exact indentation + + *** + + +* First level, first item, the following it's blockquote + + > Blockquotes terminates with an empty line + + * Second level, first item,, the following it's a blockquote + + > Blockquotes terminates with an empty line + + * Third level, first item, the following it's not a blockquote because the preceding empty line it's mandatory + > Blockquotes terminates with an empty line + + * Third level, second item, the following it's not a rule because it's anchored at the exact indentation + + > Blockquotes terminates with an empty line + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_anchored_elements.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_anchored_elements.md.html new file mode 100644 index 0000000..8793a3a --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_anchored_elements.md.html @@ -0,0 +1,95 @@ + + + + +~/code/vim-markdown/spec/features/lists_with_anchored_elements.md.html + + + + + + + + + + +
+
+* First level, first item
+
+  # Header 1 in Level 1
+
+  ## Header 2 in Level 1
+
+  ### Header 3 in Level 1
+
+  #### Header 4 in Level 1
+
+  ##### Header 5 in Level 1
+
+  ###### Header 6 in Level 1
+
+  Hello
+  ===
+
+  * Level 2 list item
+
+    # Header 1 in Level 2
+
+    ## Header 2 in Level 2
+
+    ### Header 3 in Level 2
+
+  #### Header 4 in Level 1
+
+  ##### Header 5 in Level 1
+
+  ###### Header 6 in Level 1
+
+
+* First level, first item, the following it's a rule
+
+  ***
+  * Second level, first item,, the following it's a rule
+
+    ***
+
+    * Third level, first item, the following it's not a rule because the preceding empty line it's mandatory
+      ***
+
+    * Third level, second item, the following it's not a rule because it's anchored at the exact indentation
+
+        ***
+
+
+* First level, first item, the following it's blockquote
+
+  > Blockquotes terminates with an empty line
+
+  * Second level, first item,, the following it's a blockquote
+
+    > Blockquotes terminates with an empty line
+
+    * Third level, first item, the following it's not a blockquote because the preceding empty line it's mandatory
+      > Blockquotes terminates with an empty line
+
+    * Third level, second item, the following it's not a rule because it's anchored at the exact indentation
+
+        > Blockquotes terminates with an empty line
+
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_codeblocks.md b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_codeblocks.md new file mode 100644 index 0000000..f39081a --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_codeblocks.md @@ -0,0 +1,53 @@ + + * this is not an item list this is a code block because it has 4 leading spaces + +* First level, first item + + Code blocks not contained in list items must have at least 4 leading spaces. Code blocks contained in list items must have at least 8 leading spaces for the first level and additional 2 leading spaces per level + + This is a code block contained in a first level list item + + * Second level, first item + + This is not a code block, it could be because it has 8 leading spaces but it's not because it's contained in a second level list item, the following it's a code block because it has 10 leading spaces (8+2*(level-1)) + + This is a code block contained in a second level list item + + Now we are back to the first level item so the following code block could be indented with 8 leading spaces + + This is a code block contained in a first level list item + + * Second level, second item + * Third level, first item + + This is a code block contained in a third level list item because it has 12 leading spaces (8+2*(level-1)) + + * Second level, third item + This could be a code block because it has 10 leading spaces but it's not because it's not preceded by a mandatory blank line + + This is a code block because it has 10 leading spaces and it's preceded by a blank line + + + +* First level, third item + + This is a code block, not a surprise + + + This is a code block because two consecutive new lines terminates the list item so 4 leading spaces are enough for a code block + + +* First level, first item + First level, first item +* First level, second item + First level, second item + First level, second item + + First level, second item, a single blank line is not enough to terminate a list item + + So this is not a code block even with 6 leading spaces + + This is code block because 8 leading white spaces are needed as it's contained by a first level list item + + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_codeblocks.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_codeblocks.md.html new file mode 100644 index 0000000..124af40 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_codeblocks.md.html @@ -0,0 +1,85 @@ + + + + +~/code/vim-markdown/spec/features/lists_with_codeblocks.md.html + + + + + + + + + + +
+
+    * this is not an item list this is a code block because it has 4 leading spaces
+
+* First level, first item
+
+  Code blocks not contained in list items must have at least 4 leading spaces. Code blocks contained in list items must have at least 8 leading spaces for the first level and additional 2 leading spaces per level
+
+        This is a code block contained in a first level list item
+
+  * Second level, first item
+
+        This is not a code block, it could be because it has 8 leading spaces but it's not because it's contained in a second level list item, the following it's a code block because it has 10 leading spaces (8+2*(level-1))
+
+          This is a code block contained in a second level list item
+
+  Now we are back to the first level item so the following code block could be indented with 8 leading spaces
+
+        This is a code block contained in a first level list item
+
+  * Second level, second item
+    * Third level, first item
+
+            This is a code block contained in a third level list item because it has 12 leading spaces (8+2*(level-1))
+
+  * Second level, third item
+          This could be a code block because it has 10 leading spaces but it's not because it's not preceded by a mandatory blank line
+
+          This is a code block because it has 10 leading spaces and it's preceded by a blank line
+
+
+
+* First level, third item
+
+          This is a code block, not a surprise
+
+
+    This is a code block because two consecutive new lines terminates the list item so 4 leading spaces are enough for a code block
+
+
+* First level, first item
+  First level, first item
+* First level, second item
+  First level, second item
+  First level, second item
+
+  First level, second item, a single blank line is not enough to terminate a list item
+
+      So this is not a code block even with 6 leading spaces
+
+        This is code block because 8 leading white spaces are needed as it's contained by a first level list item
+
+
+
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_fenced_codeblocks.md b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_fenced_codeblocks.md new file mode 100644 index 0000000..107fbb0 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_fenced_codeblocks.md @@ -0,0 +1,54 @@ +```ruby +# This is a fenced code block +def ruby; end +``` + + ```ruby + # This is not a fenced code block but a code block + def ruby; end + ``` + +* First level, first item + First level, first item with `inline` element ``foo`` ``foo`` + + Still first level, first item, the following it's not a fenced code block but an inline code block + ```ruby + def ruby; end + ``` + + Still first level, first item, the following it's a fenced code block because it's preceded by an empty line + + ```ruby + def ruby; end + ``` + + +* First level, first item + * Second level, first item + * Third level, first item + * Fourth level, first item + + ```ruby + # This is a fenced code block and not a code block even it has 8 leading spaces because it's contained in a fourth level list item + def ruby; end + ``` + + +* First level, first item + + ```ruby + def ruby; end + ``` + + ```ruby + def ruby; end + ``` + + ```ruby + def ruby; end + ``` + + ```ruby + # This is not a fenced code block because it has 8 leading white spaces and so it's a code block + def ruby; end + ``` diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_fenced_codeblocks.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_fenced_codeblocks.md.html new file mode 100644 index 0000000..3790535 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_fenced_codeblocks.md.html @@ -0,0 +1,86 @@ + + + + +~/code/vim-markdown/spec/features/lists_with_fenced_codeblocks.md.html + + + + + + + + + + +
+```ruby
+# This is a fenced code block
+def ruby; end
+```
+
+    ```ruby
+    # This is not a fenced code block but a code block
+    def ruby; end
+    ```
+
+* First level, first item
+  First level, first item with `inline` element ``foo`` ``foo``
+
+  Still first level, first item, the following it's not a fenced code block but an inline code block
+  ```ruby
+  def ruby; end
+  ```
+
+  Still first level, first item, the following it's a fenced code block because it's preceded by an empty line
+
+  ```ruby
+  def ruby; end
+  ```
+
+
+* First level, first item
+  * Second level, first item
+    * Third level, first item
+      * Fourth level, first item
+
+        ```ruby
+        # This is a fenced code block and not a code block even it has 8 leading spaces because it's contained in a fourth level list item
+        def ruby; end
+        ```
+
+
+* First level, first item
+
+  ```ruby
+  def ruby; end
+  ```
+
+    ```ruby
+    def ruby; end
+    ```
+
+      ```ruby
+      def ruby; end
+      ```
+
+        ```ruby
+        # This is not a fenced code block because it has 8 leading white spaces and so it's a code block
+        def ruby; end
+        ```
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_lists.md b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_lists.md new file mode 100644 index 0000000..38b162a --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_lists.md @@ -0,0 +1,21 @@ +* First level, first item + * Second level, first item + * Third level, first item + still on the third level, first item + + Back to the second level, first item, yes, the indentation it's the same as the last non blank line but this it's preceded with a blank line so it's not considered a continuation of the list item but another element ans since it's less indented than the list item it's not contained in it but in it's parent + + Back to the first level, first item + * Second level, second item + + Still on the third level, first item because the indentation is right for the third level + +* First level, first item + * Second level, first item + * Third level, first item + * Fourth level, first item +this is still the fourth level, it's a continuation of the first line no matter what, a blank line it's needed to end the list item + + +* First level, first item + * A third level could not be contained in a first level, again this is technically supported but I choose to not allow it both for the sake of simplicity and to avoid confusing situation: this would be considered not a third level but a second level with leading spaces until a certain point, after that it's considered as a continuation of the first item… as I said, confusing better to stick to simple and consistent rules diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_lists.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_lists.md.html new file mode 100644 index 0000000..3bc3238 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_lists.md.html @@ -0,0 +1,52 @@ + + + + +~/code/vim-markdown/spec/features/lists_with_lists.md.html + + + + + + + + + + +
+* First level, first item
+  * Second level, first item
+    * Third level, first item
+    still on the third level, first item
+
+    Back to the second level, first item, yes, the indentation it's the same as the last non blank line but this it's preceded with a blank line so it's not considered a continuation of the list item but another element ans since it's less indented than the list item it's not contained in it but in it's parent
+
+  Back to the first level, first item
+  * Second level, second item
+
+    Still on the third level, first item because the indentation is right for the third level
+
+* First level, first item
+  * Second level, first item
+    * Third level, first item
+      * Fourth level, first item
+this is still the fourth level, it's a continuation of the first line no matter what, a blank line it's needed to end the list item
+
+
+* First level, first item
+    * A third level could not be contained in a first level, again this is technically supported but I choose to not allow it both for the sake of simplicity and to avoid confusing situation: this would be considered not a third level but a second level with leading spaces until a certain point, after that it's considered as a continuation of the first item… as I said, confusing better to stick to simple and consistent rules
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tables.md b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tables.md new file mode 100644 index 0000000..e761634 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tables.md @@ -0,0 +1,36 @@ +* First level, first item with table + + Header-1|Header-2 + ---|--- + Row-1-Column-1|Row-1-Column-2 + + * Second level, first item with table + + Header-1|Header-2 + ---|--- + Row-1-Column-1|Row-1-Column-2 + Row-2-Column-1|Row-2-Column-2 + Row-3-Column-1|Row-3-Column-2 + Row-4-Column-1|Row-4-Column-2 + + * Second level, second item with table, it's not a code block, tables could have as many leading spaces as wanted + + Header-1|Header-2 + ---|--- + Row-1-Column-1|Row-1-Column-2 + Row-2-Column-1|Row-2-Column-2 + Row-3-Column-1|Row-3-Column-2 + Row-4-Column-1|Row-4-Column-2 + + * Third level, first item + * Fourth level, first item + * Fifth level, first item + + The following it's a table in the third level list item + + Header-1|Header-2 + ---|--- + Row-1-Column-1|Row-1-Column-2 + + Header-1|Header-2 + ---|--- diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tables.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tables.md.html new file mode 100644 index 0000000..8619a3e --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tables.md.html @@ -0,0 +1,68 @@ + + + + +~/code/vim-markdown/spec/features/lists_with_tables.md.html + + + + + + + + + + +
+* First level, first item with table
+
+  Header-1|Header-2
+  ---|---
+  Row-1-Column-1|Row-1-Column-2
+
+  * Second level, first item with table
+
+      Header-1|Header-2
+      ---|---
+      Row-1-Column-1|Row-1-Column-2
+      Row-2-Column-1|Row-2-Column-2
+      Row-3-Column-1|Row-3-Column-2
+      Row-4-Column-1|Row-4-Column-2
+
+  * Second level, second item with table, it's not a code block, tables could have as many leading spaces as wanted
+
+                      Header-1|Header-2
+                      ---|---
+                      Row-1-Column-1|Row-1-Column-2
+                      Row-2-Column-1|Row-2-Column-2
+                      Row-3-Column-1|Row-3-Column-2
+                      Row-4-Column-1|Row-4-Column-2
+
+    * Third level, first item
+      * Fourth level, first item
+        * Fifth level, first item
+
+      The following it's a table in the third level list item
+
+      Header-1|Header-2
+      ---|---
+      Row-1-Column-1|Row-1-Column-2
+
+      Header-1|Header-2
+      ---|---
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tasks.md b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tasks.md new file mode 100644 index 0000000..89d94a1 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tasks.md @@ -0,0 +1,29 @@ +Stars +* [ ] First tasks item +* [x] Second tasks item +* [ ] Third tasks item + + +Dashes +- [x] First tasks item +- [ ] Second tasks item +- [x] Third tasks item + + +Pluses ++ [x] First tasks item ++ [x] Second tasks item ++ [ ] Third tasks item + + +Ordered +1. [ ] First tasks item +2. [x] Second tasks item +3. [x] Third tasks item + +* [] This is not a task list item because the space between the brackets is mandatory for a non completed task +* [*] This is not a task list item because the `x` is the only allowed character to mark a task as done +* [ ]This is not a task list item because the space after the brackets is mandatory +* [x]This is not a task list item because the space after the brackets is mandatory + +Aside from that task lists behaves in the same way as the simple lists diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tasks.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tasks.md.html new file mode 100644 index 0000000..abd7ad6 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/lists_with_tasks.md.html @@ -0,0 +1,61 @@ + + + + +~/code/vim-markdown/spec/features/lists_with_tasks.md.html + + + + + + + + + + +
+Stars
+* [ ] First tasks item
+* [x] Second tasks item
+* [ ] Third tasks item
+
+
+Dashes
+- [x] First tasks item
+- [ ] Second tasks item
+- [x] Third tasks item
+
+
+Pluses
++ [x] First tasks item
++ [x] Second tasks item
++ [ ] Third tasks item
+
+
+Ordered
+1. [ ] First tasks item
+2. [x] Second tasks item
+3. [x] Third tasks item
+
+* [] This is not a task list item because the space between the brackets is mandatory for a non completed task
+* [*] This is not a task list item because the `x` is the only allowed character to mark a task as done
+* [ ]This is not a task list item because the space after the brackets is mandatory
+* [x]This is not a task list item because the space after the brackets is mandatory
+
+Aside from that task lists behaves in the same way as the simple lists
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/original_syntax_description.md b/.vim/pack/plugins/start/vim-markdown/spec/features/original_syntax_description.md new file mode 100644 index 0000000..7de57f0 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/original_syntax_description.md @@ -0,0 +1,896 @@ +Markdown: Syntax +================ + + + + +* [Overview](#overview) + * [Philosophy](#philosophy) + * [Inline HTML](#html) + * [Automatic Escaping for Special Characters](#autoescape) +* [Block Elements](#block) + * [Paragraphs and Line Breaks](#p) + * [Headers](#header) + * [Blockquotes](#blockquote) + * [Lists](#list) + * [Code Blocks](#precode) + * [Horizontal Rules](#hr) +* [Span Elements](#span) + * [Links](#link) + * [Emphasis](#em) + * [Code](#code) + * [Images](#img) +* [Miscellaneous](#misc) + * [Backslash Escapes](#backslash) + * [Automatic Links](#autolink) + + +**Note:** This document is itself written using Markdown; you +can [see the source for it by adding '.text' to the URL][src]. + + [src]: /projects/markdown/syntax.text + +* * * + +

Overview

+ +

Philosophy

+ +Markdown is intended to be as easy-to-read and easy-to-write as is feasible. + +Readability, however, is emphasized above all else. A Markdown-formatted +document should be publishable as-is, as plain text, without looking +like it's been marked up with tags or formatting instructions. While +Markdown's syntax has been influenced by several existing text-to-HTML +filters -- including [Setext] [1], [atx] [2], [Textile] [3], [reStructuredText] [4], +[Grutatext] [5], and [EtText] [6] -- the single biggest source of +inspiration for Markdown's syntax is the format of plain text email. + + [1]: http://docutils.sourceforge.net/mirror/setext.html + [2]: http://www.aaronsw.com/2002/atx/ + [3]: http://textism.com/tools/textile/ + [4]: http://docutils.sourceforge.net/rst.html + [5]: http://www.triptico.com/software/grutatxt.html + [6]: http://ettext.taint.org/doc/ + +To this end, Markdown's syntax is comprised entirely of punctuation +characters, which punctuation characters have been carefully chosen so +as to look like what they mean. E.g., asterisks around a word actually +look like \*emphasis\*. Markdown lists look like, well, lists. Even +blockquotes look like quoted passages of text, assuming you've ever +used email. + + + +

Inline HTML

+ +Markdown's syntax is intended for one purpose: to be used as a +format for *writing* for the web. + +Markdown is not a replacement for HTML, or even close to it. Its +syntax is very small, corresponding only to a very small subset of +HTML tags. The idea is *not* to create a syntax that makes it easier +to insert HTML tags. In my opinion, HTML tags are already easy to +insert. The idea for Markdown is to make it easy to read, write, and +edit prose. HTML is a *publishing* format; Markdown is a *writing* +format. Thus, Markdown's formatting syntax only addresses issues that +can be conveyed in plain text. + +For any markup that is not covered by Markdown's syntax, you simply +use HTML itself. There's no need to preface it or delimit it to +indicate that you're switching from Markdown to HTML; you just use +the tags. + +The only restrictions are that block-level HTML elements -- e.g. `
`, +``, `
`, `

`, etc. -- must be separated from surrounding +content by blank lines, and the start and end tags of the block should +not be indented with tabs or spaces. Markdown is smart enough not +to add extra (unwanted) `

` tags around HTML block-level tags. + +For example, to add an HTML table to a Markdown article: + + This is a regular paragraph. + +

+ + + +
Foo
+ + This is another regular paragraph. + +Note that Markdown formatting syntax is not processed within block-level +HTML tags. E.g., you can't use Markdown-style `*emphasis*` inside an +HTML block. + +Span-level HTML tags -- e.g. ``, ``, or `` -- can be +used anywhere in a Markdown paragraph, list item, or header. If you +want, you can even use HTML tags instead of Markdown formatting; e.g. if +you'd prefer to use HTML `` or `` tags instead of Markdown's +link or image syntax, go right ahead. + +Unlike block-level HTML tags, Markdown syntax *is* processed within +span-level tags. + + +

Automatic Escaping for Special Characters

+ +In HTML, there are two characters that demand special treatment: `<` +and `&`. Left angle brackets are used to start tags; ampersands are +used to denote HTML entities. If you want to use them as literal +characters, you must escape them as entities, e.g. `<`, and +`&`. + +Ampersands in particular are bedeviling for web writers. If you want to +write about 'AT&T', you need to write '`AT&T`'. You even need to +escape ampersands within URLs. Thus, if you want to link to: + + http://images.google.com/images?num=30&q=larry+bird + +you need to encode the URL as: + + http://images.google.com/images?num=30&q=larry+bird + +in your anchor tag `href` attribute. Needless to say, this is easy to +forget, and is probably the single most common source of HTML validation +errors in otherwise well-marked-up web sites. + +Markdown allows you to use these characters naturally, taking care of +all the necessary escaping for you. If you use an ampersand as part of +an HTML entity, it remains unchanged; otherwise it will be translated +into `&`. + +So, if you want to include a copyright symbol in your article, you can write: + + © + +and Markdown will leave it alone. But if you write: + + AT&T + +Markdown will translate it to: + + AT&T + +Similarly, because Markdown supports [inline HTML](#html), if you use +angle brackets as delimiters for HTML tags, Markdown will treat them as +such. But if you write: + + 4 < 5 + +Markdown will translate it to: + + 4 < 5 + +However, inside Markdown code spans and blocks, angle brackets and +ampersands are *always* encoded automatically. This makes it easy to use +Markdown to write about HTML code. (As opposed to raw HTML, which is a +terrible format for writing about HTML syntax, because every single `<` +and `&` in your example code needs to be escaped.) + + +* * * + + +

Block Elements

+ + +

Paragraphs and Line Breaks

+ +A paragraph is simply one or more consecutive lines of text, separated +by one or more blank lines. (A blank line is any line that looks like a +blank line -- a line containing nothing but spaces or tabs is considered +blank.) Normal paragraphs should not be indented with spaces or tabs. + +The implication of the "one or more consecutive lines of text" rule is +that Markdown supports "hard-wrapped" text paragraphs. This differs +significantly from most other text-to-HTML formatters (including Movable +Type's "Convert Line Breaks" option) which translate every line break +character in a paragraph into a `
` tag. + +When you *do* want to insert a `
` break tag using Markdown, you +end a line with two or more spaces, then type return. + +Yes, this takes a tad more effort to create a `
`, but a simplistic +"every line break is a `
`" rule wouldn't work for Markdown. +Markdown's email-style [blockquoting][bq] and multi-paragraph [list items][l] +work best -- and look better -- when you format them with hard breaks. + + [bq]: #blockquote + [l]: #list + + + + + +Markdown supports two styles of headers, [Setext] [1] and [atx] [2]. + +Setext-style headers are "underlined" using equal signs (for first-level +headers) and dashes (for second-level headers). For example: + + This is an H1 + ============= + + This is an H2 + ------------- + +Any number of underlining `=`'s or `-`'s will work. + +Atx-style headers use 1-6 hash characters at the start of the line, +corresponding to header levels 1-6. For example: + + # This is an H1 + + ## This is an H2 + + ###### This is an H6 + +Optionally, you may "close" atx-style headers. This is purely +cosmetic -- you can use this if you think it looks better. The +closing hashes don't even need to match the number of hashes +used to open the header. (The number of opening hashes +determines the header level.) : + + # This is an H1 # + + ## This is an H2 ## + + ### This is an H3 ###### + + +

Blockquotes

+ +Markdown uses email-style `>` characters for blockquoting. If you're +familiar with quoting passages of text in an email message, then you +know how to create a blockquote in Markdown. It looks best if you hard +wrap the text and put a `>` before every line: + + > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, + > consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. + > Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. + > + > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse + > id sem consectetuer libero luctus adipiscing. + +Markdown allows you to be lazy and only put the `>` before the first +line of a hard-wrapped paragraph: + + > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, + consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. + Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. + + > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse + id sem consectetuer libero luctus adipiscing. + +Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by +adding additional levels of `>`: + + > This is the first level of quoting. + > + > > This is nested blockquote. + > + > Back to the first level. + +Blockquotes can contain other Markdown elements, including headers, lists, +and code blocks: + + > ## This is a header. + > + > 1. This is the first list item. + > 2. This is the second list item. + > + > Here's some example code: + > + > return shell_exec("echo $input | $markdown_script"); + +Any decent text editor should make email-style quoting easy. For +example, with BBEdit, you can make a selection and choose Increase +Quote Level from the Text menu. + + +

Lists

+ +Markdown supports ordered (numbered) and unordered (bulleted) lists. + +Unordered lists use asterisks, pluses, and hyphens -- interchangably +-- as list markers: + + * Red + * Green + * Blue + +is equivalent to: + + + Red + + Green + + Blue + +and: + + - Red + - Green + - Blue + +Ordered lists use numbers followed by periods: + + 1. Bird + 2. McHale + 3. Parish + +It's important to note that the actual numbers you use to mark the +list have no effect on the HTML output Markdown produces. The HTML +Markdown produces from the above list is: + +
    +
  1. Bird
  2. +
  3. McHale
  4. +
  5. Parish
  6. +
+ +If you instead wrote the list in Markdown like this: + + 1. Bird + 1. McHale + 1. Parish + +or even: + + 3. Bird + 1. McHale + 8. Parish + +you'd get the exact same HTML output. The point is, if you want to, +you can use ordinal numbers in your ordered Markdown lists, so that +the numbers in your source match the numbers in your published HTML. +But if you want to be lazy, you don't have to. + +If you do use lazy list numbering, however, you should still start the +list with the number 1. At some point in the future, Markdown may support +starting ordered lists at an arbitrary number. + +List markers typically start at the left margin, but may be indented by +up to three spaces. List markers must be followed by one or more spaces +or a tab. + +To make lists look nice, you can wrap items with hanging indents: + + * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. + Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, + viverra nec, fringilla in, laoreet vitae, risus. + * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. + Suspendisse id sem consectetuer libero luctus adipiscing. + +But if you want to be lazy, you don't have to: + + * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. + Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, + viverra nec, fringilla in, laoreet vitae, risus. + * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. + Suspendisse id sem consectetuer libero luctus adipiscing. + +If list items are separated by blank lines, Markdown will wrap the +items in `

` tags in the HTML output. For example, this input: + + * Bird + * Magic + +will turn into: + +

    +
  • Bird
  • +
  • Magic
  • +
+ +But this: + + * Bird + + * Magic + +will turn into: + +
    +
  • Bird

  • +
  • Magic

  • +
+ +List items may consist of multiple paragraphs. Each subsequent +paragraph in a list item must be indented by either 4 spaces +or one tab: + + 1. This is a list item with two paragraphs. Lorem ipsum dolor + sit amet, consectetuer adipiscing elit. Aliquam hendrerit + mi posuere lectus. + + Vestibulum enim wisi, viverra nec, fringilla in, laoreet + vitae, risus. Donec sit amet nisl. Aliquam semper ipsum + sit amet velit. + + 2. Suspendisse id sem consectetuer libero luctus adipiscing. + +It looks nice if you indent every line of the subsequent +paragraphs, but here again, Markdown will allow you to be +lazy: + + * This is a list item with two paragraphs. + + This is the second paragraph in the list item. You're + only required to indent the first line. Lorem ipsum dolor + sit amet, consectetuer adipiscing elit. + + * Another item in the same list. + +To put a blockquote within a list item, the blockquote's `>` +delimiters need to be indented: + + * A list item with a blockquote: + + > This is a blockquote + > inside a list item. + +To put a code block within a list item, the code block needs +to be indented *twice* -- 8 spaces or two tabs: + + * A list item with a code block: + + + + +It's worth noting that it's possible to trigger an ordered list by +accident, by writing something like this: + + 1986. What a great season. + +In other words, a *number-period-space* sequence at the beginning of a +line. To avoid this, you can backslash-escape the period: + + 1986\. What a great season. + + + +

Code Blocks

+ +Pre-formatted code blocks are used for writing about programming or +markup source code. Rather than forming normal paragraphs, the lines +of a code block are interpreted literally. Markdown wraps a code block +in both `
` and `` tags.
+
+To produce a code block in Markdown, simply indent every line of the
+block by at least 4 spaces or 1 tab. For example, given this input:
+
+    This is a normal paragraph:
+
+        This is a code block.
+
+Markdown will generate:
+
+    

This is a normal paragraph:

+ +
This is a code block.
+    
+ +One level of indentation -- 4 spaces or 1 tab -- is removed from each +line of the code block. For example, this: + + Here is an example of AppleScript: + + tell application "Foo" + beep + end tell + +will turn into: + +

Here is an example of AppleScript:

+ +
tell application "Foo"
+        beep
+    end tell
+    
+ +A code block continues until it reaches a line that is not indented +(or the end of the article). + +Within a code block, ampersands (`&`) and angle brackets (`<` and `>`) +are automatically converted into HTML entities. This makes it very +easy to include example HTML source code using Markdown -- just paste +it and indent it, and Markdown will handle the hassle of encoding the +ampersands and angle brackets. For example, this: + + + +will turn into: + +
<div class="footer">
+        &copy; 2004 Foo Corporation
+    </div>
+    
+ +Regular Markdown syntax is not processed within code blocks. E.g., +asterisks are just literal asterisks within a code block. This means +it's also easy to use Markdown to write about Markdown's own syntax. + + + +

Horizontal Rules

+ +You can produce a horizontal rule tag (`
`) by placing three or +more hyphens, asterisks, or underscores on a line by themselves. If you +wish, you may use spaces between the hyphens or asterisks. Each of the +following lines will produce a horizontal rule: + + * * * + + *** + + ***** + + - - - + + --------------------------------------- + + +* * * + +

Span Elements

+ + + +Markdown supports two style of links: *inline* and *reference*. + +In both styles, the link text is delimited by [square brackets]. + +To create an inline link, use a set of regular parentheses immediately +after the link text's closing square bracket. Inside the parentheses, +put the URL where you want the link to point, along with an *optional* +title for the link, surrounded in quotes. For example: + + This is [an example](http://example.com/ "Title") inline link. + + [This link](http://example.net/) has no title attribute. + +Will produce: + +

This is + an example inline link.

+ +

This link has no + title attribute.

+ +If you're referring to a local resource on the same server, you can +use relative paths: + + See my [About](/about/) page for details. + +Reference-style links use a second set of square brackets, inside +which you place a label of your choosing to identify the link: + + This is [an example][id] reference-style link. + +You can optionally use a space to separate the sets of brackets: + + This is [an example] [id] reference-style link. + +Then, anywhere in the document, you define your link label like this, +on a line by itself: + + [id]: http://example.com/ "Optional Title Here" + +That is: + +* Square brackets containing the link identifier (optionally + indented from the left margin using up to three spaces); +* followed by a colon; +* followed by one or more spaces (or tabs); +* followed by the URL for the link; +* optionally followed by a title attribute for the link, enclosed + in double or single quotes, or enclosed in parentheses. + +The following three link definitions are equivalent: + + [foo]: http://example.com/ "Optional Title Here" + [foo]: http://example.com/ 'Optional Title Here' + [foo]: http://example.com/ (Optional Title Here) + +**Note:** There is a known bug in Markdown.pl 1.0.1 which prevents +single quotes from being used to delimit link titles. + +The link URL may, optionally, be surrounded by angle brackets: + + [id]: "Optional Title Here" + +You can put the title attribute on the next line and use extra spaces +or tabs for padding, which tends to look better with longer URLs: + + [id]: http://example.com/longish/path/to/resource/here + "Optional Title Here" + +Link definitions are only used for creating links during Markdown +processing, and are stripped from your document in the HTML output. + +Link definition names may consist of letters, numbers, spaces, and +punctuation -- but they are *not* case sensitive. E.g. these two +links: + + [link text][a] + [link text][A] + +are equivalent. + +The *implicit link name* shortcut allows you to omit the name of the +link, in which case the link text itself is used as the name. +Just use an empty set of square brackets -- e.g., to link the word +"Google" to the google.com web site, you could simply write: + + [Google][] + +And then define the link: + + [Google]: http://google.com/ + +Because link names may contain spaces, this shortcut even works for +multiple words in the link text: + + Visit [Daring Fireball][] for more information. + +And then define the link: + + [Daring Fireball]: http://daringfireball.net/ + +Link definitions can be placed anywhere in your Markdown document. I +tend to put them immediately after each paragraph in which they're +used, but if you want, you can put them all at the end of your +document, sort of like footnotes. + +Here's an example of reference links in action: + + I get 10 times more traffic from [Google] [1] than from + [Yahoo] [2] or [MSN] [3]. + + [1]: http://google.com/ "Google" + [2]: http://search.yahoo.com/ "Yahoo Search" + [3]: http://search.msn.com/ "MSN Search" + +Using the implicit link name shortcut, you could instead write: + + I get 10 times more traffic from [Google][] than from + [Yahoo][] or [MSN][]. + + [google]: http://google.com/ "Google" + [yahoo]: http://search.yahoo.com/ "Yahoo Search" + [msn]: http://search.msn.com/ "MSN Search" + +Both of the above examples will produce the following HTML output: + +

I get 10 times more traffic from Google than from + Yahoo + or MSN.

+ +For comparison, here is the same paragraph written using +Markdown's inline link style: + + I get 10 times more traffic from [Google](http://google.com/ "Google") + than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or + [MSN](http://search.msn.com/ "MSN Search"). + +The point of reference-style links is not that they're easier to +write. The point is that with reference-style links, your document +source is vastly more readable. Compare the above examples: using +reference-style links, the paragraph itself is only 81 characters +long; with inline-style links, it's 176 characters; and as raw HTML, +it's 234 characters. In the raw HTML, there's more markup than there +is text. + +With Markdown's reference-style links, a source document much more +closely resembles the final output, as rendered in a browser. By +allowing you to move the markup-related metadata out of the paragraph, +you can add links without interrupting the narrative flow of your +prose. + + +

Emphasis

+ +Markdown treats asterisks (`*`) and underscores (`_`) as indicators of +emphasis. Text wrapped with one `*` or `_` will be wrapped with an +HTML `` tag; double `*`'s or `_`'s will be wrapped with an HTML +`` tag. E.g., this input: + + *single asterisks* + + _single underscores_ + + **double asterisks** + + __double underscores__ + +will produce: + + single asterisks + + single underscores + + double asterisks + + double underscores + +You can use whichever style you prefer; the lone restriction is that +the same character must be used to open and close an emphasis span. + +Emphasis can be used in the middle of a word: + + un*frigging*believable + +But if you surround an `*` or `_` with spaces, it'll be treated as a +literal asterisk or underscore. + +To produce a literal asterisk or underscore at a position where it +would otherwise be used as an emphasis delimiter, you can backslash +escape it: + + \*this text is surrounded by literal asterisks\* + + + +

Code

+ +To indicate a span of code, wrap it with backtick quotes (`` ` ``). +Unlike a pre-formatted code block, a code span indicates code within a +normal paragraph. For example: + + Use the `printf()` function. + +will produce: + +

Use the printf() function.

+ +To include a literal backtick character within a code span, you can use +multiple backticks as the opening and closing delimiters: + + ``There is a literal backtick (`) here.`` + +which will produce this: + +

There is a literal backtick (`) here.

+ +The backtick delimiters surrounding a code span may include spaces -- +one after the opening, one before the closing. This allows you to place +literal backtick characters at the beginning or end of a code span: + + A single backtick in a code span: `` ` `` + + A backtick-delimited string in a code span: `` `foo` `` + +will produce: + +

A single backtick in a code span: `

+ +

A backtick-delimited string in a code span: `foo`

+ +With a code span, ampersands and angle brackets are encoded as HTML +entities automatically, which makes it easy to include example HTML +tags. Markdown will turn this: + + Please don't use any `` tags. + +into: + +

Please don't use any <blink> tags.

+ +You can write this: + + `—` is the decimal-encoded equivalent of `—`. + +to produce: + +

&#8212; is the decimal-encoded + equivalent of &mdash;.

+ + + +

Images

+ +Admittedly, it's fairly difficult to devise a "natural" syntax for +placing images into a plain text document format. + +Markdown uses an image syntax that is intended to resemble the syntax +for links, allowing for two styles: *inline* and *reference*. + +Inline image syntax looks like this: + + ![Alt text](/path/to/img.jpg) + + ![Alt text](/path/to/img.jpg "Optional title") + +That is: + +* An exclamation mark: `!`; +* followed by a set of square brackets, containing the `alt` + attribute text for the image; +* followed by a set of parentheses, containing the URL or path to + the image, and an optional `title` attribute enclosed in double + or single quotes. + +Reference-style image syntax looks like this: + + ![Alt text][id] + +Where "id" is the name of a defined image reference. Image references +are defined using syntax identical to link references: + + [id]: url/to/image "Optional title attribute" + +As of this writing, Markdown has no syntax for specifying the +dimensions of an image; if this is important to you, you can simply +use regular HTML `` tags. + + +* * * + + +

Miscellaneous

+ + + +Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this: + + + +Markdown will turn this into: + + http://example.com/ + +Automatic links for email addresses work similarly, except that +Markdown will also perform a bit of randomized decimal and hex +entity-encoding to help obscure your address from address-harvesting +spambots. For example, Markdown will turn this: + + + +into something like this: + + address@exa + mple.com + +which will render in a browser as a clickable link to "address@example.com". + +(This sort of entity-encoding trick will indeed fool many, if not +most, address-harvesting bots, but it definitely won't fool all of +them. It's better than nothing, but an address published in this way +will probably eventually start receiving spam.) + + + +

Backslash Escapes

+ +Markdown allows you to use backslash escapes to generate literal +characters which would otherwise have special meaning in Markdown's +formatting syntax. For example, if you wanted to surround a word +with literal asterisks (instead of an HTML `` tag), you can use +backslashes before the asterisks, like this: + + \*literal asterisks\* + +Markdown provides backslash escapes for the following characters: + + \ backslash + ` backtick + * asterisk + _ underscore + {} curly braces + [] square brackets + () parentheses + # hash mark + + plus sign + - minus sign (hyphen) + . dot + ! exclamation mark diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/strikethrough.md b/.vim/pack/plugins/start/vim-markdown/spec/features/strikethrough.md new file mode 100644 index 0000000..ad8180e --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/strikethrough.md @@ -0,0 +1,30 @@ +~~one line strikethrough~~ + +~~multiple line +strike through~~ + +The end could not be escaped ~~this is striked\~~ + +There is no escape in the middle ~~this is \~~ striked~~ so the end is not striked + +The begin could be escaped \~~this is not striked~~ + +* this is a list ~~with a strikethrough~~ + +# this is a header ~~with a strikethrough~~ this is still part of the header + +~~strikethrough *could* __contain__ other http://google.it inline elements~~ + +~~ +could not begin +with a new line +this is not striked~~ + +~~ could not begin with a space this is not striked~~ + +~~could not end with a space, this is not striked ~~ + +~~could not end +with a newline +this is not striked +~~ diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/strikethrough.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/strikethrough.md.html new file mode 100644 index 0000000..ed8bfb0 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/strikethrough.md.html @@ -0,0 +1,66 @@ + + + + +~/code/vim-markdown/spec/features/strikethrough.md.html + + + + + + + + + + +
+~~one line strikethrough~~
+
+~~multiple line
+strike through~~
+
+The end could not be escaped ~~this is striked\~~
+
+There is no escape in the middle ~~this is \~~ striked~~ so the end is not striked
+
+The begin could be escaped \~~this is not striked~~
+
+* this is a list ~~with a strikethrough~~
+
+# this is a header ~~with a strikethrough~~ this is still part of the header
+
+~~strikethrough *could* __contain__ other http://google.it inline elements~~
+
+~~
+could not begin
+with a new line
+this is not striked~~
+
+~~ could not begin with a space this is not striked~~
+
+~~could not end with a space, this is not striked ~~
+
+~~could not end
+with a newline
+this is not striked
+~~
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/strong_emphasis.md b/.vim/pack/plugins/start/vim-markdown/spec/features/strong_emphasis.md new file mode 100644 index 0000000..1e3541b --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/strong_emphasis.md @@ -0,0 +1,57 @@ + +This is __strong__ emphasis + +This is also **strong** emphasis + +This is __multiple words__ strong emphasis + +This is also **multiple words** strong emphasis + +This is __ not valid __ + +**strong** emphasis could be the first word in the line + +__strong__ emphasis could be the first word in the line + +Strong **emphasis +could span** multiple lines + +Strong __emphasis +could span__ multiple lines + +Strong __emphasis `could` contain__ inline code + +Strong __emphasis *could* contain__ weak emphasis + +The following is not a strong emphasis __ +that span multiple lines +__ because the start delimiter must be followed by something (not the end of line) + +The following is not a strong emphasis ** +that span multiple lines +** because the start delimiter must be followed by something (not the end of line) + +The usage of alternate delimiters must be idempotent, so all __foo__ **foo** __**foo**__ **__foo__** must be "foo" highlighted as bold + +The same delimiter could not be used twice ****foo*** and ____foo____ must be normal + +__foo____bar__ must be "foo" highlighted as bold followed by "{UNDERSCORE}{UNDERSCORE}bar{UNDERSCORE}{UNDERSCORE}" highlighted as normal + +__foo__**bar** must be "foo" highlighted as bold followed by "bar" highlighted as bold + +__foo__b must be "foo" highlighted as bold followed by "b" highlighted as normal + +__foo__bar__baz__ must be "foo" highlighted as bold followed by "bar{UNDERSCORE}baz{UNDERSCORE}" highlighted as normal + +__foo__bar __baz__ must be "foo" and "baz" highlighted as bold and "bar" highlighted as normal + +Four underscore ____ or four asterisks **** must not be highlighted without something in between + +Spaces do not count for something so __ __ and ** ** must be normal + +FOO__BAR must not be normal + +FOO__BAR and BAR__FOO must be normal + +Unfortunately __FOO__BAR doesn't work but escaping \__FOO__BAR is always possible + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/strong_emphasis.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/strong_emphasis.md.html new file mode 100644 index 0000000..e265191 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/strong_emphasis.md.html @@ -0,0 +1,91 @@ + + + + +~/code/vim-markdown/spec/features/strong_emphasis.md.html + + + + + + + + + + +
+
+This is __strong__ emphasis
+
+This is also **strong** emphasis
+
+This is __multiple words__ strong emphasis
+
+This is also **multiple words** strong emphasis
+
+This is __ not valid __
+
+**strong** emphasis could be the first word in the line
+
+__strong__ emphasis could be the first word in the line
+
+Strong **emphasis
+could span** multiple lines
+
+Strong __emphasis
+could span__ multiple lines
+
+Strong __emphasis `could` contain__ inline code
+
+Strong __emphasis *could* contain__ weak emphasis
+
+The following is not a strong emphasis __
+that span multiple lines
+__ because the start delimiter must be followed by something (not the end of line)
+
+The following is not a strong emphasis **
+that span multiple lines
+** because the start delimiter must be followed by something (not the end of line)
+
+The usage of alternate delimiters must be idempotent, so all __foo__ **foo** __**foo**__ **__foo__** must be "foo" highlighted as bold
+
+The same delimiter could not be used twice ****foo*** and ____foo____ must be normal
+
+__foo____bar__ must be "foo" highlighted as bold followed by "{UNDERSCORE}{UNDERSCORE}bar{UNDERSCORE}{UNDERSCORE}" highlighted as normal
+
+__foo__**bar** must be "foo" highlighted as bold followed by "bar" highlighted as bold
+
+__foo__b must be "foo" highlighted as bold followed by "b" highlighted as normal
+
+__foo__bar__baz__ must be "foo" highlighted as bold followed by "bar{UNDERSCORE}baz{UNDERSCORE}" highlighted as normal
+
+__foo__bar __baz__ must be "foo" and "baz" highlighted as bold and "bar" highlighted as normal
+
+Four underscore ____ or four asterisks **** must not be highlighted without something in between
+
+Spaces do not count for something so __ __ and ** ** must be normal
+
+FOO__BAR must not be normal
+
+FOO__BAR and BAR__FOO must be normal
+
+Unfortunately __FOO__BAR doesn't work but escaping \__FOO__BAR is always possible
+
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/tables.md b/.vim/pack/plugins/start/vim-markdown/spec/features/tables.md new file mode 100644 index 0000000..3d6ac5c --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/tables.md @@ -0,0 +1,105 @@ +Tables with at least two columns at least must have pipes to separate columns + + Header-1|Header-2 + ---|--- + Row-1-Column-1|Row-1-Column-2 + + Header-1|Header-2 + ---|--- + Row-1-Column-1|Row-1-Column-2 + Row-2-Column-1|Row-2-Column-2 + + |Header-1|Header-2 + |---|--- + |Row-1-Column-1|Row-1-Column-2 + + Header-1|Header-2| + ---|---| + Row-1-Column-1|Row-1-Column-2| + + |Header-1|Header-2| + |---|---| + |Row-1-Column-1|Row-1-Column-2| + + +Between dashes and pipes spaces are allowed + + Header-1 | Header-2 + --- | --- + Row-1-Column-1 | Row-1-Column-2 + + +Tables with alignment hints (left, right and center) + + Header-1 | Header-2 + :--------------|:-------------- + Row-1-Column-1 | Row-1-Column-2 + + Header-1 | Header-2 + --------------:|--------------: + Row-1-Column-1 | Row-1-Column-2 + + Header-1 | Header-2 + :-------------:|:-------------: + Row-1-Column-1 | Row-1-Column-2 + + +Tables could contain inline elements + + www.example.com | Header-2 + --- | --- + ~~Row-1-Column-1~~ | *Row-1-Column-2* + + +Tables with single column at least should have a pipes on one side + + |Header-1 + |--- + |Row-1-Column-1 + + Header-1| + ---| + Row-1-Column-1| + + |Header-1| + |---| + |Row-1-Column-1| + + So this is not not a table with one column but some stings and a separator (it's not an header because it doesn't begin at the first column) + + Header-1 + --- + Row-1-Column-1 + + +Tables could have only headers + + Header-1|Header-2 + ---|--- + + +Surprisingly tables could have as many leading spaces as wanted, they never turn as code blocks + + Header-1|Header-2 + ---|--- + Row-1-Column-1|Row-1-Column-2 + + Header-1|Header-2 + ---|--- + Row-1-Column-1|Row-1-Column-2 + + +Tables should be preceded by an empty line, so the following is not a table + + Not an empty line + Header-1|Header-2 + ---|--- + Row-1-Column-1|Row-1-Column-2 + + +The separator between header and the rows should have at least 3 dashes, so the following is not a table + + Header-1|Header-2 + --|--- + Row-1-Column-1|Row-1-Column-2 + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/tables.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/tables.md.html new file mode 100644 index 0000000..6ad33a6 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/tables.md.html @@ -0,0 +1,141 @@ + + + + +~/code/vim-markdown/spec/features/tables.md.html + + + + + + + + + + +
+Tables with at least two columns at least must have pipes to separate columns
+
+  Header-1|Header-2
+  ---|---
+  Row-1-Column-1|Row-1-Column-2
+
+  Header-1|Header-2
+  ---|---
+  Row-1-Column-1|Row-1-Column-2
+  Row-2-Column-1|Row-2-Column-2
+
+  |Header-1|Header-2
+  |---|---
+  |Row-1-Column-1|Row-1-Column-2
+
+  Header-1|Header-2|
+  ---|---|
+  Row-1-Column-1|Row-1-Column-2|
+
+  |Header-1|Header-2|
+  |---|---|
+  |Row-1-Column-1|Row-1-Column-2|
+
+
+Between dashes and pipes spaces are allowed
+
+  Header-1       | Header-2
+    ---          | ---
+  Row-1-Column-1 | Row-1-Column-2
+
+
+Tables with alignment hints (left, right and center)
+
+  Header-1       | Header-2
+  :--------------|:--------------
+  Row-1-Column-1 | Row-1-Column-2
+
+  Header-1       | Header-2
+  --------------:|--------------:
+  Row-1-Column-1 | Row-1-Column-2
+
+  Header-1       | Header-2
+  :-------------:|:-------------:
+  Row-1-Column-1 | Row-1-Column-2
+
+
+Tables could contain inline elements
+
+  www.example.com | Header-2
+    ---          | ---
+  ~~Row-1-Column-1~~ | *Row-1-Column-2*
+
+
+Tables with single column at least should have a pipes on one side
+
+  |Header-1
+  |---
+  |Row-1-Column-1
+
+  Header-1|
+  ---|
+  Row-1-Column-1|
+
+  |Header-1|
+  |---|
+  |Row-1-Column-1|
+
+  So this is not not a table with one column but some stings and a separator (it's not an header because it doesn't begin at the first column)
+
+  Header-1
+  ---
+  Row-1-Column-1
+
+
+Tables could have only headers
+
+  Header-1|Header-2
+  ---|---
+
+
+Surprisingly tables could have as many leading spaces as wanted, they never turn as code blocks
+
+            Header-1|Header-2
+            ---|---
+            Row-1-Column-1|Row-1-Column-2
+
+      Header-1|Header-2
+  ---|---
+            Row-1-Column-1|Row-1-Column-2
+
+
+Tables should be preceded by an empty line, so the following is not a table
+
+  Not an empty line
+  Header-1|Header-2
+  ---|---
+  Row-1-Column-1|Row-1-Column-2
+
+
+The separator between header and the rows should have at least 3 dashes, so the following is not a table
+
+  Header-1|Header-2
+  --|---
+  Row-1-Column-1|Row-1-Column-2
+
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/weak_emphasis.md b/.vim/pack/plugins/start/vim-markdown/spec/features/weak_emphasis.md new file mode 100644 index 0000000..075c885 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/weak_emphasis.md @@ -0,0 +1,57 @@ + +This is _weak_ emphasis + +This is also *weak* emphasis + +This is _multiple words_ weak emphasis + +This is also *multiple words* weak emphasis + +This is _ not valid _ because the start delimiter must be followed by something (not a space) + +*weak* emphasis could be the first word in the line + +_weak_ emphasis could be the first word in the line + +Weak *emphasis +could span* multiple lines + +Weak _emphasis +could span_ multiple lines + +Weak _emphasis `could` contain_ inline code + +Weak _emphasis **could** contain_ strong emphasis + +The following is not a weak emphasis _ +that span multiple lines +_ because the start delimiter must be followed by something (not the end of line) + +The following is not a weak emphasis * +that span multiple +lines* because the start delimiter must be followed by something (not the end of line) + +The usage of alternate delimiters must be idempotent, so all _foo_ *foo* _*foo*_ *_foo_* must be "foo" highlighted as italic + +The same delimiter could not be used twice **foo** and __foo__ must not be highlighted as italic + +_foo__bar_ must be "foo" highlighted as italic followed by "{UNDERSCORE}bar{UNDERSCORE}" highlighted as normal + +_foo_*bar* must be "foo" highlighted as italic followed by "bar" highlighted as italic + +_foo_b must be "foo" highlighted as italic followed by "b" highlighted as normal + +_foo_bar_baz_ must be "foo" highlighted as italic followed by "bar{UNDERSCORE}baz{UNDERSCORE}" highlighted as normal + +_foo_bar _baz_ must be "foo" and "baz" highlighted as italic and "bar" highlighted as normal + +Two underscores __ or two asterisks ** must not be highlighted without something between them + +Spaces do not count for something so _ _ and * * must be normal + +FOO_BAR must be normal + +FOO_BAR and BAR_FOO must be normal + +Unfortunately _FOO_BAR doesn't work but escaping \_FOO_BAR is always possible + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/features/weak_emphasis.md.html b/.vim/pack/plugins/start/vim-markdown/spec/features/weak_emphasis.md.html new file mode 100644 index 0000000..ba74b88 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/features/weak_emphasis.md.html @@ -0,0 +1,91 @@ + + + + +~/code/vim-markdown/spec/features/weak_emphasis.md.html + + + + + + + + + + +
+
+This is _weak_ emphasis
+
+This is also *weak* emphasis
+
+This is _multiple words_ weak emphasis
+
+This is also *multiple words* weak emphasis
+
+This is _ not valid _ because the start delimiter must be followed by something (not a space)
+
+*weak* emphasis could be the first word in the line
+
+_weak_ emphasis could be the first word in the line
+
+Weak *emphasis
+could span* multiple lines
+
+Weak _emphasis
+could span_ multiple lines
+
+Weak _emphasis `could` contain_ inline code
+
+Weak _emphasis **could** contain_ strong emphasis
+
+The following is not a weak emphasis _
+that span multiple lines
+_ because the start delimiter must be followed by something (not the end of line)
+
+The following is not a weak emphasis *
+that span multiple
+lines* because the start delimiter must be followed by something (not the end of line)
+
+The usage of alternate delimiters must be idempotent, so all _foo_ *foo* _*foo*_ *_foo_* must be "foo" highlighted as italic
+
+The same delimiter could not be used twice **foo** and __foo__ must not be highlighted as italic
+
+_foo__bar_ must be "foo" highlighted as italic followed by "{UNDERSCORE}bar{UNDERSCORE}" highlighted as normal
+
+_foo_*bar* must be "foo" highlighted as italic followed by "bar" highlighted as italic
+
+_foo_b must be "foo" highlighted as italic followed by "b" highlighted as normal
+
+_foo_bar_baz_ must be "foo" highlighted as italic followed by "bar{UNDERSCORE}baz{UNDERSCORE}" highlighted as normal
+
+_foo_bar _baz_ must be "foo" and "baz" highlighted as italic and "bar" highlighted as normal
+
+Two underscores __ or two asterisks ** must not be highlighted without something between them
+
+Spaces do not count for something so _ _ and * * must be normal
+
+FOO_BAR must be normal
+
+FOO_BAR and BAR_FOO must be normal
+
+Unfortunately _FOO_BAR doesn't work but escaping \_FOO_BAR is always possible
+
+
+ + + diff --git a/.vim/pack/plugins/start/vim-markdown/spec/github_syntax_spec.rb b/.vim/pack/plugins/start/vim-markdown/spec/github_syntax_spec.rb new file mode 100644 index 0000000..1048948 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/github_syntax_spec.rb @@ -0,0 +1,48 @@ +require "nokogiri" +require_relative "spec_helper" + +features = [ + "jekyll", + "lists", + "lists_with_tasks", + "lists_with_lists", + "lists_with_tables", + "lists_with_codeblocks", + "lists_with_fenced_codeblocks", + "lists_with_anchored_elements", + "autolinks", + "blockquotes", + "blockquotes_nested", + "combined_emphasis", + "contained_emphasis", + "strikethrough", + "headers_atx", + "headers_setext", + "strong_emphasis", + "weak_emphasis", + "inline_html", + "inline_links", + "inline_references", + "codeblocks", + "tables" +] + +describe "github markdown syntax" do + let(:filename) {"syntax.html"} + + features.each do |feature| + source = File.expand_path("./features/#{feature}.md", File.dirname(__FILE__)) + master = source + ".html" + it "should support #{feature.gsub("_", " ")}" do + vim.command "let g:markdown_flavor=github" + vim.edit source + vim.command "TOhtml | w #{filename}" + if not File.exists?(master) or ENV["GENERATE_GOLDEN_MASTER"] + vim.command "w #{master}" + end + master_syntax = Nokogiri::HTML(IO.read(master)) + source_syntax = Nokogiri::HTML(IO.read(filename)) + expect(source_syntax.css("#vimCodeElement").first.to_s).to eq(master_syntax.css("#vimCodeElement").first.to_s) + end + end +end diff --git a/.vim/pack/plugins/start/vim-markdown/spec/kramdown_syntax_spec.rb b/.vim/pack/plugins/start/vim-markdown/spec/kramdown_syntax_spec.rb new file mode 100644 index 0000000..9621054 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/kramdown_syntax_spec.rb @@ -0,0 +1,26 @@ +require "nokogiri" +require_relative "spec_helper" + +features = [ + "kramdown/headers_with_id" +] + +describe "kramdown markdown syntax" do + let(:filename) {"syntax.html"} + + features.each do |feature| + source = File.expand_path("./features/#{feature}.md", File.dirname(__FILE__)) + master = source + ".html" + it "should support #{feature.split(/\//).last.gsub("_", " ")}" do + vim.command "let g:markdown_flavor='kramdown'" + vim.edit source + vim.command "TOhtml | w #{filename}" + if not File.exists?(master) or ENV["GENERATE_GOLDEN_MASTER"] + vim.command "w #{master}" + end + master_syntax = Nokogiri::HTML(IO.read(master)) + source_syntax = Nokogiri::HTML(IO.read(filename)) + expect(source_syntax.css("#vimCodeElement").first.to_s).to eq(master_syntax.css("#vimCodeElement").first.to_s) + end + end +end diff --git a/.vim/pack/plugins/start/vim-markdown/spec/spec_helper.rb b/.vim/pack/plugins/start/vim-markdown/spec/spec_helper.rb new file mode 100644 index 0000000..f2e06ac --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/spec_helper.rb @@ -0,0 +1,40 @@ +require "rspec" +require "vimrunner" +require "vimrunner/rspec" + +RSpec.configure do |config| + config.formatter = :documentation +end + +Vimrunner::RSpec.configure do |config| + plugin_path = File.expand_path("..", File.dirname(__FILE__)) + + config.reuse_server = false + config.start_vim do + vim = Vimrunner.start + vim.prepend_runtimepath(plugin_path) + vim.command "let g:markdown_include_jekyll_support = 1" + vim.command "set nospell" + vim.command "set nofoldenable" + vim + end +end + +RSpec.configure do |config| + require_relative "support/vim" + config.include Support::Vim + config.after(:each) do + if File.exists? source + File.delete source + end + end +end + +RSpec::Matchers.define :have_content do |expected| + match do |source| + File.read(source).match(expected) + end + failure_message_for_should do |source| + "expected file '#{source}' to match '#{expected}' but contains:\n'#{File.read(source)}'" + end +end diff --git a/.vim/pack/plugins/start/vim-markdown/spec/support/vim.rb b/.vim/pack/plugins/start/vim-markdown/spec/support/vim.rb new file mode 100644 index 0000000..d1c88d9 --- /dev/null +++ b/.vim/pack/plugins/start/vim-markdown/spec/support/vim.rb @@ -0,0 +1,16 @@ +require "tmpdir" + +module Support + module Vim + def source + File.join(Dir.tmpdir, filename) + end + + def given_content(string) + vim.edit source + vim.insert string + yield source + end + end +end + diff --git a/.vim/pack/plugins/start/vim-markdown/syntax/markdown.vim b/.vim/pack/plugins/start/vim-markdown/syntax/markdown.vim index 07ae0a8..85e9d53 100644 --- a/.vim/pack/plugins/start/vim-markdown/syntax/markdown.vim +++ b/.vim/pack/plugins/start/vim-markdown/syntax/markdown.vim @@ -1,187 +1,943 @@ " Vim syntax file -" Language: Markdown -" Maintainer: Ben Williams -" URL: http://plasticboy.com/markdown-vim-mode/ -" Remark: Uses HTML syntax file -" TODO: Handle stuff contained within stuff (e.g. headings within blockquotes) +" Language: Markdown +" Maintainer: Gabriele Lana +" Filenames: *.md - -" Read the HTML syntax to start with -if v:version < 600 - so :p:h/html.vim -else - runtime! syntax/html.vim - - if exists('b:current_syntax') - unlet b:current_syntax - endif -endif - -if v:version < 600 - syntax clear -elseif exists('b:current_syntax') +if exists("b:current_syntax") finish endif -" don't use standard HiLink, it will not work with included syntax files -if v:version < 508 - command! -nargs=+ HtmlHiLink hi link +if !exists('main_syntax') + let main_syntax = 'markdown' +endif + +if !exists('g:markdown_flavor') + let g:markdown_flavor = 'github' +endif + +if exists('g:markdown_enable_conceal') && g:markdown_enable_conceal + let b:markdown_concealends = 'concealends' + let b:markdown_conceal = 'conceal' + set conceallevel=2 + set concealcursor= else - command! -nargs=+ HtmlHiLink hi def link + let b:markdown_concealends = '' + let b:markdown_conceal = '' endif syn spell toplevel +syn sync fromstart syn case ignore -syn sync linebreaks=1 -let s:conceal = '' -let s:concealends = '' -let s:concealcode = '' -if has('conceal') && get(g:, 'vim_markdown_conceal', 1) - let s:conceal = ' conceal' - let s:concealends = ' concealends' -endif -if has('conceal') && get(g:, 'vim_markdown_conceal_code_blocks', 1) - let s:concealcode = ' concealends' + +" {{{ INLINE ELEMENTS + +syn cluster markdownInline contains= + \ markdownItalic,markdownBold,markdownBoldItalic,markdownStrike,markdownInlineCode, + \ markdownPullRequestLinkInText,markdownUrlLinkInText,markdownUserLinkInText, + \ markdownEmailLinkInText,markdownLinkContainer,markdownXmlComment, + \ markdownXmlElement,markdownXmlEmptyElement,markdownXmlEntities + +execute 'syn region markdownItalic matchgroup=markdownInlineDelimiter ' + \ . 'start="\%(\s\|_\|^\)\@<=\*\%(\s\|\*\|$\)\@!" end="\%(\s\|\*\)\@\?' +execute 'syn match markdownUrlLinkInText /' . b:markdown_syntax_url . '/ contains=@NoSpell display' + +syn match markdownPullRequestLinkInText /\%(\w\)\@/ contains=@NoSpell +syn match markdownXmlElement /\c<\([-A-Z0-9_$?!:,.]\+\)[^>]\{-}>\_.\{-}<\/\1>/ contains=@NoSpell +syn match markdownXmlEmptyElement /\c<\([-A-Z0-9_$?!:,.]\+\)\%(\s\+[^>]\{-}\/>\|\s*\/>\)/ contains=@NoSpell +syn match markdownXmlEntities /&#\?[0-9A-Za-z]\{1,8};/ contains=@NoSpell + +" }}} + + +" {{{ ANCHORED BLOCKS + +syn match markdownRule /^\s*\*\s*\*\s*\*[[:space:]*]*$/ display +syn match markdownRule /^\s*-\s*-\s*-[[:space:]-]*$/ display +syn match markdownRule /^\s*_\s*_\s*_[[:space:]_]*$/ display + +if g:markdown_flavor ==? 'github' + syn region markdownH1 matchgroup=markdownHeadingDelimiter start=/^#\%(\s\+\)\@=/ end=/#*\s*$/ display oneline contains=@markdownInline + syn region markdownH2 matchgroup=markdownHeadingDelimiter start=/^##\%(\s\+\)\@=/ end=/#*\s*$/ display oneline contains=@markdownInline + syn region markdownH3 matchgroup=markdownHeadingDelimiter start=/^###\%(\s\+\)\@=/ end=/#*\s*$/ display oneline contains=@markdownInline + syn region markdownH4 matchgroup=markdownHeadingDelimiter start=/^####\%(\s\+\)\@=/ end=/#*\s*$/ display oneline contains=@markdownInline + syn region markdownH5 matchgroup=markdownHeadingDelimiter start=/^#####\%(\s\+\)\@=/ end=/#*\s*$/ display oneline contains=@markdownInline + syn region markdownH6 matchgroup=markdownHeadingDelimiter start=/^######\%(\s\+\)\@=/ end=/#*\s*$/ display oneline contains=@markdownInline + + syn match markdownH1 /^.\+\n=\+$/ display contains=@markdownInline,markdownHeadingUnderline + syn match markdownH2 /^.\+\n-\+$/ display contains=@markdownInline,markdownHeadingUnderline + syn match markdownHeadingUnderline /^[=-]\+$/ display contained endif -" additions to HTML groups -if get(g:, 'vim_markdown_emphasis_multiline', 1) - let s:oneline = '' -else - let s:oneline = ' oneline' -endif -syn region mkdItalic matchgroup=mkdItalic start="\%(\*\|_\)" end="\%(\*\|_\)" -syn region mkdBold matchgroup=mkdBold start="\%(\*\*\|__\)" end="\%(\*\*\|__\)" -syn region mkdBoldItalic matchgroup=mkdBoldItalic start="\%(\*\*\*\|___\)" end="\%(\*\*\*\|___\)" -execute 'syn region htmlItalic matchgroup=mkdItalic start="\%(^\|\s\)\zs\*\ze[^\\\*\t ]\%(\%([^*]\|\\\*\|\n\)*[^\\\*\t ]\)\?\*\_W" end="[^\\\*\t ]\zs\*\ze\_W" keepend contains=@Spell' . s:oneline . s:concealends -execute 'syn region htmlItalic matchgroup=mkdItalic start="\%(^\|\s\)\zs_\ze[^\\_\t ]" end="[^\\_\t ]\zs_\ze\_W" keepend contains=@Spell' . s:oneline . s:concealends -execute 'syn region htmlBold matchgroup=mkdBold start="\%(^\|\s\)\zs\*\*\ze\S" end="\S\zs\*\*" keepend contains=@Spell' . s:oneline . s:concealends -execute 'syn region htmlBold matchgroup=mkdBold start="\%(^\|\s\)\zs__\ze\S" end="\S\zs__" keepend contains=@Spell' . s:oneline . s:concealends -execute 'syn region htmlBoldItalic matchgroup=mkdBoldItalic start="\%(^\|\s\)\zs\*\*\*\ze\S" end="\S\zs\*\*\*" keepend contains=@Spell' . s:oneline . s:concealends -execute 'syn region htmlBoldItalic matchgroup=mkdBoldItalic start="\%(^\|\s\)\zs___\ze\S" end="\S\zs___" keepend contains=@Spell' . s:oneline . s:concealends +if g:markdown_flavor ==? 'kramdown' + syn match markdownHeaderContainer /^#\{1,6}.\+$/ display transparent + \ contains=@markdownInline,markdownHeader,markdownHeaderId,markdownHeadingDelimiter + syn match markdownHeader /\%(^#\+\)\@<=\%([^#]\+\%(#\+\s*\%($\|{\)\)\@=\|[^{]\{-}\%({\)\@=\|#$\)/ -" [link](URL) | [link][id] | [link][] | ![image](URL) -syn region mkdFootnotes matchgroup=mkdDelimiter start="\[^" end="\]" -execute 'syn region mkdID matchgroup=mkdDelimiter start="\[" end="\]" contained oneline' . s:conceal -execute 'syn region mkdURL matchgroup=mkdDelimiter start="(" end=")" contained oneline' . s:conceal -execute 'syn region mkdLink matchgroup=mkdDelimiter start="\\\@ ]*>" end=">" - -" Link definitions: [id]: URL (Optional Title) -syn region mkdLinkDef matchgroup=mkdDelimiter start="^ \{,3}\zs\[\^\@!" end="]:" oneline nextgroup=mkdLinkDefTarget skipwhite -syn region mkdLinkDefTarget start="<\?\zs\S" excludenl end="\ze[>[:space:]\n]" contained nextgroup=mkdLinkTitle,mkdLinkDef skipwhite skipnl oneline -syn region mkdLinkTitle matchgroup=mkdDelimiter start=+"+ end=+"+ contained -syn region mkdLinkTitle matchgroup=mkdDelimiter start=+'+ end=+'+ contained -syn region mkdLinkTitle matchgroup=mkdDelimiter start=+(+ end=+)+ contained - -"HTML headings -syn region htmlH1 matchgroup=mkdHeading start="^\s*#" end="$" contains=@mkdHeadingContent,@Spell -syn region htmlH2 matchgroup=mkdHeading start="^\s*##" end="$" contains=@mkdHeadingContent,@Spell -syn region htmlH3 matchgroup=mkdHeading start="^\s*###" end="$" contains=@mkdHeadingContent,@Spell -syn region htmlH4 matchgroup=mkdHeading start="^\s*####" end="$" contains=@mkdHeadingContent,@Spell -syn region htmlH5 matchgroup=mkdHeading start="^\s*#####" end="$" contains=@mkdHeadingContent,@Spell -syn region htmlH6 matchgroup=mkdHeading start="^\s*######" end="$" contains=@mkdHeadingContent,@Spell -syn match htmlH1 /^.\+\n=\+$/ contains=@mkdHeadingContent,@Spell -syn match htmlH2 /^.\+\n-\+$/ contains=@mkdHeadingContent,@Spell - -"define Markdown groups -syn match mkdLineBreak / \+$/ -syn region mkdBlockquote start=/^\s*>/ end=/$/ contains=mkdLink,mkdInlineURL,mkdLineBreak,@Spell -execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/\(\([^\\]\|^\)\\\)\@]*\)\\\@" end="
"' . s:concealcode -execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start="]*\)\\\@" end=""' . s:concealcode -syn region mkdFootnote start="\[^" end="\]" -syn match mkdCode /^\s*\n\(\(\s\{8,}[^ ]\|\t\t\+[^\t]\).*\n\)\+/ -syn match mkdCode /\%^\(\(\s\{4,}[^ ]\|\t\+[^\t]\).*\n\)\+/ -syn match mkdCode /^\s*\n\(\(\s\{4,}[^ ]\|\t\+[^\t]\).*\n\)\+/ contained -syn match mkdListItem /^\s*\%([-*+]\|\d\+\.\)\ze\s\+/ contained nextgroup=mkdListItemCheckbox -syn match mkdListItemCheckbox /\[[xXoO ]\]\ze\s\+/ contained contains=mkdListItem -syn region mkdListItemLine start="^\s*\%([-*+]\|\d\+\.\)\s\+" end="$" oneline contains=@mkdNonListItem,mkdListItem,mkdListItemCheckbox,@Spell -syn region mkdNonListItemBlock start="\(\%^\(\s*\([-*+]\|\d\+\.\)\s\+\)\@!\|\n\(\_^\_$\|\s\{4,}[^ ]\|\t+[^\t]\)\@!\)" end="^\(\s*\([-*+]\|\d\+\.\)\s\+\)\@=" contains=@mkdNonListItem,@Spell -syn match mkdRule /^\s*\*\s\{0,1}\*\s\{0,1}\*\(\*\|\s\)*$/ -syn match mkdRule /^\s*-\s\{0,1}-\s\{0,1}-\(-\|\s\)*$/ -syn match mkdRule /^\s*_\s\{0,1}_\s\{0,1}_\(_\|\s\)*$/ - -" YAML frontmatter -if get(g:, 'vim_markdown_frontmatter', 0) - syn include @yamlTop syntax/yaml.vim - syn region Comment matchgroup=mkdDelimiter start="\%^---$" end="^\(---\|\.\.\.\)$" contains=@yamlTop keepend - unlet! b:current_syntax + syn match markdownHeaderId /{[^}]\+}\s*$/ display contained + syn match markdownHeadingDelimiter /#\+\%(.\+\)\@=/ display contained endif -if get(g:, 'vim_markdown_toml_frontmatter', 0) - try - syn include @tomlTop syntax/toml.vim - syn region Comment matchgroup=mkdDelimiter start="\%^+++$" end="^+++$" transparent contains=@tomlTop keepend - unlet! b:current_syntax - catch /E484/ - syn region Comment matchgroup=mkdDelimiter start="\%^+++$" end="^+++$" - endtry +execute 'syn match markdownLinkReference ' + \ . 'contains=@NoSpell ' + \ . 'display ' + \ . '/' + \ . '^\s\{,3}' + \ . b:markdown_syntax_square_brackets_block + \ . ':.*' + \ . '\%(\n\%\(\n\)\@!.*$\)*' + \ . '/' + +syn region markdownBlockquote start=/^\s*\%(>\s\?\)\+\%(.\)\@=/ end=/\n\n/ contains=markdownBlockquoteDelimiter,@NoSpell +syn match markdownBlockquoteDelimiter /^\s*\%(>\s\?\)\+/ contained + +syn region markdownFencedCodeBlock matchgroup=markdownCodeDelimiter start=/^\s\{,3}```\%(`*\).*$/ end=/^\s\{,3}```\%(`*\)\s*$/ contains=@NoSpell +syn region markdownFencedCodeBlock matchgroup=markdownCodeDelimiter start=/^\s\{,3}\~\~\~\%(\~*\).*$/ end=/^\s\{,3}\~\~\~\%(\~*\)\s*$/ contains=@NoSpell + +syn match markdownCodeBlock /\%(^\n\)\@<=\%(\%( \{4}\|\t\+\).*\n\)\+$/ contains=@NoSpell + +let s:markdown_table_header_rows_separator = '' + \ . '\%(' + \ . '\s*|\?\%(\s*[-:]-\{1,}[-:]\s*|\)\+\s*[-:]-\{1,}[-:]\s*|\?\s*' + \ . '\|' + \ . '\s*|\s*[-:]-\{1,}[-:]\s*|\s*' + \ . '\|' + \ . '\s*|\s*[-:]-\{1,}[-:]\s*' + \ . '\|' + \ . '\s*[-:]-\{1,}[-:]\s*|\s*' + \ . '\)' +execute 'syn match markdownTable ' + \ . 'transparent contains=markdownTableHeader,markdownTableDelimiter,@markdownInline ' + \ . '/' + \ . '^\s*\n' + \ . '\s*|\?\%([^|]\+|\)*[^|]\+|\?\s*\n' + \ . s:markdown_table_header_rows_separator . '\n' + \ . '\%(' + \ . '\s*|\?\%([^|]\+|\)*[^|]\+|\?\s*\n' + \ . '\)*' + \ . '$' + \ . '/' +syn match markdownTableDelimiter /|/ contained +execute 'syn match markdownTableDelimiter contained ' + \ . '/' . s:markdown_table_header_rows_separator . '/' +execute 'syn match markdownTableHeader contained contains=@markdownInline ' + \ . '/\%(|\?\s*\)\@<=[^|]\+\%(.*\n' . s:markdown_table_header_rows_separator . '\)\@=/' + +" }}} + + +" {{{ NESTED BLOCKS + +for s:level in range(1, 16) + let s:indented_as_content = '\%( \{' . (2*s:level) . '}\|\t\{' . (s:level) . '}\)' + let s:indented_as_container = '\%( \{' . (2*(s:level-1)) . '}\|\t\{' . (s:level-1) . '}\)' + let s:preceded_by_separator = '^\s*\n' + + execute 'syn region markdownListItemAtLevel' . (s:level) . ' ' + \ . 'matchgroup=markdownItemDelimiter ' + \ . (s:level > 1 ? 'contained ' : '') + \ . 'keepend ' + \ . 'contains=' + \ . 'markdownTableInListItemAtLevel' . (s:level) . ',' + \ . 'markdownCodeBlockInListItemAtLevel' . (s:level) . ',' + \ . 'markdownFencedCodeBlockInListItemAtLevel' . (s:level) . ',' + \ . 'markdownH1InListItemAtLevel' . (s:level) . ',' + \ . 'markdownH2InListItemAtLevel' . (s:level) . ',' + \ . 'markdownH3InListItemAtLevel' . (s:level) . ',' + \ . 'markdownH4InListItemAtLevel' . (s:level) . ',' + \ . 'markdownH5InListItemAtLevel' . (s:level) . ',' + \ . 'markdownH6InListItemAtLevel' . (s:level) . ',' + \ . 'markdownRuleInListItemAtLevel' . (s:level) . ',' + \ . 'markdownBlockquoteInListItemAtLevel' . (s:level) . ',' + \ . 'markdownListItemAtLevel' . (s:level+1) . ',' + \ . '@markdownInline ' + \ . 'start=/^' . (s:indented_as_container) . '\%([-*+]\|\d\+\.\)\%(\s\+\[[ x]\]\)\?\s\+/ ' + \ . 'end=' + \ . '/' + \ . '\n\%(\n\n\)\@=' + \ . '\|' + \ . '\n\%(' . (s:indented_as_container) . '\%([-*+]\|\d\+\.\)\s\+\)\@=' + \ . '\|' + \ . '\n\%(\n' . (s:indented_as_container) . '\S\)\@=' + \ . '/' + + " fenced code blocks could have leading spaces after the base level indentation + " so at least it must be indented as content but could be indented more + " there's no upper limit to the indentation because the following rule on + " code blocks is going to take care of that + " TL;DR: don't swap markdownFencedCodeBlockInListItemAtLevel* with + " markdownCodeBlockInListItemAtLevel* :-) + execute 'syn region markdownFencedCodeBlockInListItemAtLevel' . (s:level) . ' ' + \ . 'contained contains=@NoSpell ' + \ . 'matchgroup=markdownFencedCodeBlockInItemDelimiter ' + \ . 'start=' + \ . '/' + \ . (s:preceded_by_separator) + \ . '\z( \{' . (2*s:level) . ',}\|\t\{' . (s:level) . ',}\)*```\%(`*\).*$' + \ . '/ ' + \ . 'end=/^\z1```\%(`*\)\s*$/' + execute 'syn region markdownFencedCodeBlockInListItemAtLevel' . (s:level) . ' ' + \ . 'contained contains=@NoSpell ' + \ . 'matchgroup=markdownFencedCodeBlockInItemDelimiter ' + \ . 'start=' + \ . '/' + \ . (s:preceded_by_separator) + \ . '\z( \{' . (2*s:level) . ',}\|\t\{' . (s:level) . ',}\)*\~\~\~\%(\~*\).*$' + \ . '/ ' + \ . 'end=/^\z1\~\~\~\%(\~*\)\s*$/' + execute 'hi def link markdownFencedCodeBlockInListItemAtLevel' . (s:level) . ' String' + + execute 'syn match markdownCodeBlockInListItemAtLevel' . (s:level) . ' ' + \ . 'contained contains=@NoSpell ' + \ . '/' . (s:preceded_by_separator) . '\%(\%( \{' . (6+2*s:level) . ',}\|\t\{' . (1+s:level) . ',}\).*\n\?\)\+$/' + execute 'hi def link markdownCodeBlockInListItemAtLevel' . (s:level) . ' String' + + execute 'syn region markdownH1InListItemAtLevel' . (s:level) . ' ' + \ . 'contained display oneline ' + \ . 'matchgroup=markdownHeadingDelimiter ' + \ . 'contains=@markdownInline ' + \ . 'start=/' . (s:preceded_by_separator) . (s:indented_as_content) . '#\%(\s\+\)\@=/ ' + \ . 'end=/#*\s*$/' + execute 'syn region markdownH2InListItemAtLevel' . (s:level) . ' ' + \ . 'contained display oneline ' + \ . 'matchgroup=markdownHeadingDelimiter ' + \ . 'contains=@markdownInline ' + \ . 'start=/' . (s:preceded_by_separator) . (s:indented_as_content) . '##\%(\s\+\)\@=/ ' + \ . 'end=/#*\s*$/' + execute 'syn region markdownH3InListItemAtLevel' . (s:level) . ' ' + \ . 'contained display oneline ' + \ . 'matchgroup=markdownHeadingDelimiter ' + \ . 'contains=@markdownInline ' + \ . 'start=/' . (s:preceded_by_separator) . (s:indented_as_content) . '###\%(\s\+\)\@=/ ' + \ . 'end=/#*\s*$/' + execute 'syn region markdownH4InListItemAtLevel' . (s:level) . ' ' + \ . 'contained display oneline ' + \ . 'matchgroup=markdownHeadingDelimiter ' + \ . 'contains=@markdownInline ' + \ . 'start=/' . (s:preceded_by_separator) . (s:indented_as_content) . '####\%(\s\+\)\@=/ ' + \ . 'end=/#*\s*$/' + execute 'syn region markdownH5InListItemAtLevel' . (s:level) . ' ' + \ . 'contained display oneline ' + \ . 'matchgroup=markdownHeadingDelimiter ' + \ . 'contains=@markdownInline ' + \ . 'start=/' . (s:preceded_by_separator) . (s:indented_as_content) . '#####\%(\s\+\)\@=/ ' + \ . 'end=/#*\s*$/' + execute 'syn region markdownH6InListItemAtLevel' . (s:level) . ' ' + \ . 'contained display oneline ' + \ . 'matchgroup=markdownHeadingDelimiter ' + \ . 'contains=@markdownInline ' + \ . 'start=/' . (s:preceded_by_separator) . (s:indented_as_content) . '######\%(\s\+\)\@=/ ' + \ . 'end=/#*\s*$/' + execute 'hi def link markdownH1InListItemAtLevel' . (s:level) . ' Title' + execute 'hi def link markdownH2InListItemAtLevel' . (s:level) . ' Title' + execute 'hi def link markdownH3InListItemAtLevel' . (s:level) . ' Title' + execute 'hi def link markdownH4InListItemAtLevel' . (s:level) . ' Title' + execute 'hi def link markdownH5InListItemAtLevel' . (s:level) . ' Title' + execute 'hi def link markdownH6InListItemAtLevel' . (s:level) . ' Title' + + execute 'syn match markdownH1InListItemAtLevel' . (s:level) . ' ' + \ . 'display contained contains=@markdownInline,markdownHeadingDelimiterInListItemAtLevel'. (s:level) . ' ' + \ . '/' . (s:preceded_by_separator) . (s:indented_as_content) . '.\+\n' . (s:indented_as_content) . '=\+$/' + execute 'syn match markdownH1InListItemAtLevel' . (s:level) . ' ' + \ . 'display contained contains=@markdownInline,markdownHeadingDelimiterInListItemAtLevel'. (s:level) . ' ' + \ . '/' . (s:preceded_by_separator) . (s:indented_as_content) . '.\+\n' . (s:indented_as_content) . '-\+$/' + execute 'syn match markdownHeadingDelimiterInListItemAtLevel' . (s:level) . ' ' + \ . 'display contained ' + \ . '/^' . (s:indented_as_content) . '\%(-\+\|=\+\)$/' + execute 'hi def link markdownH1InListItemAtLevel' . (s:level) . ' Title' + execute 'hi def link markdownH2InListItemAtLevel' . (s:level) . ' Title' + execute 'hi def link markdownHeadingDelimiterInListItemAtLevel' . (s:level) . ' Special' + + execute 'syn match markdownRuleInListItemAtLevel' . (s:level) . ' ' + \ . '/' . (s:preceded_by_separator) . (s:indented_as_content) . '*\*\s*\*\s*\*[[:space:]*]*$/ display' + execute 'syn match markdownRuleInListItemAtLevel' . (s:level) . ' ' + \ . '/' . (s:preceded_by_separator) . (s:indented_as_content) . '-\s*-\s*-[[:space:]-]*$/ display' + execute 'syn match markdownRuleInListItemAtLevel' . (s:level) . ' ' + \ . '/' . (s:preceded_by_separator) . (s:indented_as_content) . '_\s*_\s*_[[:space:]_]*$/ display' + execute 'hi def link markdownRuleInListItemAtLevel' . (s:level) . ' Identifier' + + execute 'syn region markdownBlockquoteInListItemAtLevel' . (s:level) . ' ' + \ . 'contained ' + \ . 'contains=markdownBlockquoteDelimiterInListItemAtLevel' . (s:level) . ',@NoSpell ' + \ . 'start=/' . (s:preceded_by_separator) . (s:indented_as_content) . '\%(>\s\?\)\+\%(.\)\@=/ ' + \ . 'end=/\n\n/' + execute 'syn match markdownBlockquoteDelimiterInListItemAtLevel' . (s:level) . ' ' + \ . 'contained ' + \ . '/^' . (s:indented_as_content) . '\%(>\s\?\)\+/' + execute 'hi def link markdownBlockquoteInListItemAtLevel' . (s:level) . ' Comment' + execute 'hi def link markdownBlockquoteDelimiterInListItemAtLevel' . (s:level) . ' Delimiter' + + " " the only constraint here is that the table begins at least at the same + " " level as the list item's content, se we could reuse the previous syntactic + " " elements, we could do that because tables could have arbitrary indentation + execute 'syn match markdownTableInListItemAtLevel' . (s:level) . ' ' + \ . 'transparent contained contains=markdownTableHeader,markdownTableDelimiter,@markdownInline ' + \ . '/' + \ . '^\s*\n' + \ . (s:indented_as_content) . '\s*|\?\%([^|]\+|\)*[^|]\+|\?\s*\n' + \ . s:markdown_table_header_rows_separator . '\n' + \ . '\%(' + \ . '\s*|\?\%([^|]\+|\)*[^|]\+|\?\s*\n' + \ . '\)*' + \ . '$' + \ . '/' +endfor +hi def link markdownItemDelimiter Special +hi def link markdownFencedCodeBlockInItemDelimiter Special + +" }}} + + +" {{{ EMOTICONS + +syn keyword markdownEmoticonKeyword :bowtie: :smile: :laughing: :blush: :smiley: +syn keyword markdownEmoticonKeyword :bowtie: :smile: :laughing: :blush: :smiley: +syn keyword markdownEmoticonKeyword :relaxed: :smirk: :heart_eyes: :kissing_heart: :kissing_closed_eyes: +syn keyword markdownEmoticonKeyword :flushed: :relieved: :satisfied: :grin: :wink: +syn keyword markdownEmoticonKeyword :stuck_out_tongue_winking_eye: :stuck_out_tongue_closed_eyes: :grinning: :kissing: :kissing_smiling_eyes: +syn keyword markdownEmoticonKeyword :stuck_out_tongue: :sleeping: :worried: :frowning: :anguished: +syn keyword markdownEmoticonKeyword :open_mouth: :grimacing: :confused: :hushed: :expressionless: +syn keyword markdownEmoticonKeyword :unamused: :sweat_smile: :sweat: :disappointed_relieved: :weary: +syn keyword markdownEmoticonKeyword :pensive: :disappointed: :confounded: :fearful: :cold_sweat: +syn keyword markdownEmoticonKeyword :persevere: :cry: :sob: :joy: :astonished: +syn keyword markdownEmoticonKeyword :scream: :neckbeard: :tired_face: :angry: :rage: +syn keyword markdownEmoticonKeyword :triumph: :sleepy: :yum: :mask: :sunglasses: +syn keyword markdownEmoticonKeyword :dizzy_face: :imp: :smiling_imp: :neutral_face: :no_mouth: +syn keyword markdownEmoticonKeyword :innocent: :alien: :yellow_heart: :blue_heart: :purple_heart: +syn keyword markdownEmoticonKeyword :heart: :green_heart: :broken_heart: :heartbeat: :heartpulse: +syn keyword markdownEmoticonKeyword :two_hearts: :revolving_hearts: :cupid: :sparkling_heart: :sparkles: +syn keyword markdownEmoticonKeyword :star: :star2: :dizzy: :boom: :collision: +syn keyword markdownEmoticonKeyword :anger: :exclamation: :question: :grey_exclamation: :grey_question: +syn keyword markdownEmoticonKeyword :zzz: :dash: :sweat_drops: :notes: :musical_note: +syn keyword markdownEmoticonKeyword :fire: :hankey: :poop: :shit: :+1: +syn keyword markdownEmoticonKeyword :thumbsup: :-1: :thumbsdown: :ok_hand: :punch: +syn keyword markdownEmoticonKeyword :facepunch: :fist: :v: :wave: :hand: +syn keyword markdownEmoticonKeyword :raised_hand: :open_hands: :point_up: :point_down: :point_left: +syn keyword markdownEmoticonKeyword :point_right: :raised_hands: :pray: :point_up_2: :clap: +syn keyword markdownEmoticonKeyword :muscle: :metal: :fu: :walking: :runner: +syn keyword markdownEmoticonKeyword :running: :couple: :family: :two_men_holding_hands: :two_women_holding_hands: +syn keyword markdownEmoticonKeyword :dancer: :dancers: :ok_woman: :no_good: :information_desk_person: +syn keyword markdownEmoticonKeyword :raising_hand: :bride_with_veil: :person_with_pouting_face: :person_frowning: :bow: +syn keyword markdownEmoticonKeyword :couplekiss: :couple_with_heart: :massage: :haircut: :nail_care: +syn keyword markdownEmoticonKeyword :boy: :girl: :woman: :man: :baby: +syn keyword markdownEmoticonKeyword :older_woman: :older_man: :person_with_blond_hair: :man_with_gua_pi_mao: :man_with_turban: +syn keyword markdownEmoticonKeyword :construction_worker: :cop: :angel: :princess: :smiley_cat: +syn keyword markdownEmoticonKeyword :smile_cat: :heart_eyes_cat: :kissing_cat: :smirk_cat: :scream_cat: +syn keyword markdownEmoticonKeyword :crying_cat_face: :joy_cat: :pouting_cat: :japanese_ogre: :japanese_goblin: +syn keyword markdownEmoticonKeyword :see_no_evil: :hear_no_evil: :speak_no_evil: :guardsman: :skull: +syn keyword markdownEmoticonKeyword :feet: :lips: :kiss: :droplet: :ear: +syn keyword markdownEmoticonKeyword :eyes: :nose: :tongue: :love_letter: :bust_in_silhouette: +syn keyword markdownEmoticonKeyword :busts_in_silhouette: :speech_balloon: :thought_balloon: :feelsgood: :finnadie: +syn keyword markdownEmoticonKeyword :goberserk: :godmode: :hurtrealbad: :rage1: :rage2: +syn keyword markdownEmoticonKeyword :rage3: :rage4: :suspect: :trollface: :sunny: +syn keyword markdownEmoticonKeyword :umbrella: :cloud: :snowflake: :snowman: :zap: +syn keyword markdownEmoticonKeyword :cyclone: :foggy: :ocean: :cat: :dog: +syn keyword markdownEmoticonKeyword :mouse: :hamster: :rabbit: :wolf: :frog: +syn keyword markdownEmoticonKeyword :tiger: :koala: :bear: :pig: :pig_nose: +syn keyword markdownEmoticonKeyword :cow: :boar: :monkey_face: :monkey: :horse: +syn keyword markdownEmoticonKeyword :racehorse: :camel: :sheep: :elephant: :panda_face: +syn keyword markdownEmoticonKeyword :snake: :bird: :baby_chick: :hatched_chick: :hatching_chick: +syn keyword markdownEmoticonKeyword :chicken: :penguin: :turtle: :bug: :honeybee: +syn keyword markdownEmoticonKeyword :ant: :beetle: :snail: :octopus: :tropical_fish: +syn keyword markdownEmoticonKeyword :fish: :whale: :whale2: :dolphin: :cow2: +syn keyword markdownEmoticonKeyword :ram: :rat: :water_buffalo: :tiger2: :rabbit2: +syn keyword markdownEmoticonKeyword :dragon: :goat: :rooster: :dog2: :pig2: +syn keyword markdownEmoticonKeyword :mouse2: :ox: :dragon_face: :blowfish: :crocodile: +syn keyword markdownEmoticonKeyword :dromedary_camel: :leopard: :cat2: :poodle: :paw_prints: +syn keyword markdownEmoticonKeyword :bouquet: :cherry_blossom: :tulip: :four_leaf_clover: :rose: +syn keyword markdownEmoticonKeyword :sunflower: :hibiscus: :maple_leaf: :leaves: :fallen_leaf: +syn keyword markdownEmoticonKeyword :herb: :mushroom: :cactus: :palm_tree: :evergreen_tree: +syn keyword markdownEmoticonKeyword :deciduous_tree: :chestnut: :seedling: :blossom: :ear_of_rice: +syn keyword markdownEmoticonKeyword :shell: :globe_with_meridians: :sun_with_face: :full_moon_with_face: :new_moon_with_face: +syn keyword markdownEmoticonKeyword :new_moon: :waxing_crescent_moon: :first_quarter_moon: :waxing_gibbous_moon: :full_moon: +syn keyword markdownEmoticonKeyword :waning_gibbous_moon: :last_quarter_moon: :waning_crescent_moon: :last_quarter_moon_with_face: :first_quarter_moon_with_face: +syn keyword markdownEmoticonKeyword :moon: :earth_africa: :earth_americas: :earth_asia: :volcano: +syn keyword markdownEmoticonKeyword :milky_way: :partly_sunny: :octocat: :squirrel: :bamboo: +syn keyword markdownEmoticonKeyword :gift_heart: :dolls: :school_satchel: :mortar_board: :flags: +syn keyword markdownEmoticonKeyword :fireworks: :sparkler: :wind_chime: :rice_scene: :jack_o_lantern: +syn keyword markdownEmoticonKeyword :ghost: :santa: :christmas_tree: :gift: :bell: +syn keyword markdownEmoticonKeyword :no_bell: :tanabata_tree: :tada: :confetti_ball: :balloon: +syn keyword markdownEmoticonKeyword :crystal_ball: :cd: :dvd: :floppy_disk: :camera: +syn keyword markdownEmoticonKeyword :video_camera: :movie_camera: :computer: :tv: :iphone: +syn keyword markdownEmoticonKeyword :phone: :telephone: :telephone_receiver: :pager: :fax: +syn keyword markdownEmoticonKeyword :minidisc: :vhs: :sound: :speaker: :mute: +syn keyword markdownEmoticonKeyword :loudspeaker: :mega: :hourglass: :hourglass_flowing_sand: :alarm_clock: +syn keyword markdownEmoticonKeyword :watch: :radio: :satellite: :loop: :mag: +syn keyword markdownEmoticonKeyword :mag_right: :unlock: :lock: :lock_with_ink_pen: :closed_lock_with_key: +syn keyword markdownEmoticonKeyword :key: :bulb: :flashlight: :high_brightness: :low_brightness: +syn keyword markdownEmoticonKeyword :electric_plug: :battery: :calling: :email: :mailbox: +syn keyword markdownEmoticonKeyword :postbox: :bath: :bathtub: :shower: :toilet: +syn keyword markdownEmoticonKeyword :wrench: :nut_and_bolt: :hammer: :seat: :moneybag: +syn keyword markdownEmoticonKeyword :yen: :dollar: :pound: :euro: :credit_card: +syn keyword markdownEmoticonKeyword :money_with_wings: :e-mail: :inbox_tray: :outbox_tray: :envelope: +syn keyword markdownEmoticonKeyword :incoming_envelope: :postal_horn: :mailbox_closed: :mailbox_with_mail: :mailbox_with_no_mail: +syn keyword markdownEmoticonKeyword :door: :smoking: :bomb: :gun: :hocho: +syn keyword markdownEmoticonKeyword :pill: :syringe: :page_facing_up: :page_with_curl: :bookmark_tabs: +syn keyword markdownEmoticonKeyword :bar_chart: :chart_with_upwards_trend: :chart_with_downwards_trend: :scroll: :clipboard: +syn keyword markdownEmoticonKeyword :calendar: :date: :card_index: :file_folder: :open_file_folder: +syn keyword markdownEmoticonKeyword :scissors: :pushpin: :paperclip: :black_nib: :pencil2: +syn keyword markdownEmoticonKeyword :straight_ruler: :triangular_ruler: :closed_book: :green_book: :blue_book: +syn keyword markdownEmoticonKeyword :orange_book: :notebook: :notebook_with_decorative_cover: :ledger: :books: +syn keyword markdownEmoticonKeyword :bookmark: :name_badge: :microscope: :telescope: :newspaper: +syn keyword markdownEmoticonKeyword :football: :basketball: :soccer: :baseball: :tennis: +syn keyword markdownEmoticonKeyword :8ball: :rugby_football: :bowling: :golf: :mountain_bicyclist: +syn keyword markdownEmoticonKeyword :bicyclist: :horse_racing: :snowboarder: :swimmer: :surfer: +syn keyword markdownEmoticonKeyword :ski: :spades: :hearts: :clubs: :diamonds: +syn keyword markdownEmoticonKeyword :gem: :ring: :trophy: :musical_score: :musical_keyboard: +syn keyword markdownEmoticonKeyword :violin: :space_invader: :video_game: :black_joker: :flower_playing_cards: +syn keyword markdownEmoticonKeyword :game_die: :dart: :mahjong: :clapper: :memo: +syn keyword markdownEmoticonKeyword :pencil: :book: :art: :microphone: :headphones: +syn keyword markdownEmoticonKeyword :trumpet: :saxophone: :guitar: :shoe: :sandal: +syn keyword markdownEmoticonKeyword :high_heel: :lipstick: :boot: :shirt: :tshirt: +syn keyword markdownEmoticonKeyword :necktie: :womans_clothes: :dress: :running_shirt_with_sash: :jeans: +syn keyword markdownEmoticonKeyword :kimono: :bikini: :ribbon: :tophat: :crown: +syn keyword markdownEmoticonKeyword :womans_hat: :mans_shoe: :closed_umbrella: :briefcase: :handbag: +syn keyword markdownEmoticonKeyword :pouch: :purse: :eyeglasses: :fishing_pole_and_fish: :coffee: +syn keyword markdownEmoticonKeyword :tea: :sake: :baby_bottle: :beer: :beers: +syn keyword markdownEmoticonKeyword :cocktail: :tropical_drink: :wine_glass: :fork_and_knife: :pizza: +syn keyword markdownEmoticonKeyword :hamburger: :fries: :poultry_leg: :meat_on_bone: :spaghetti: +syn keyword markdownEmoticonKeyword :curry: :fried_shrimp: :bento: :sushi: :fish_cake: +syn keyword markdownEmoticonKeyword :rice_ball: :rice_cracker: :rice: :ramen: :stew: +syn keyword markdownEmoticonKeyword :oden: :dango: :egg: :bread: :doughnut: +syn keyword markdownEmoticonKeyword :custard: :icecream: :ice_cream: :shaved_ice: :birthday: +syn keyword markdownEmoticonKeyword :cake: :cookie: :chocolate_bar: :candy: :lollipop: +syn keyword markdownEmoticonKeyword :honey_pot: :apple: :green_apple: :tangerine: :lemon: +syn keyword markdownEmoticonKeyword :cherries: :grapes: :watermelon: :strawberry: :peach: +syn keyword markdownEmoticonKeyword :melon: :banana: :pear: :pineapple: :sweet_potato: +syn keyword markdownEmoticonKeyword :eggplant: :tomato: :corn: :house: :house_with_garden: +syn keyword markdownEmoticonKeyword :school: :office: :post_office: :hospital: :bank: +syn keyword markdownEmoticonKeyword :convenience_store: :love_hotel: :hotel: :wedding: :church: +syn keyword markdownEmoticonKeyword :department_store: :european_post_office: :city_sunrise: :city_sunset: :japanese_castle: +syn keyword markdownEmoticonKeyword :european_castle: :tent: :factory: :tokyo_tower: :japan: +syn keyword markdownEmoticonKeyword :mount_fuji: :sunrise_over_mountains: :sunrise: :stars: :statue_of_liberty: +syn keyword markdownEmoticonKeyword :bridge_at_night: :carousel_horse: :rainbow: :ferris_wheel: :fountain: +syn keyword markdownEmoticonKeyword :roller_coaster: :ship: :speedboat: :boat: :sailboat: +syn keyword markdownEmoticonKeyword :rowboat: :anchor: :rocket: :airplane: :helicopter: +syn keyword markdownEmoticonKeyword :steam_locomotive: :tram: :mountain_railway: :bike: :aerial_tramway: +syn keyword markdownEmoticonKeyword :suspension_railway: :mountain_cableway: :tractor: :blue_car: :oncoming_automobile: +syn keyword markdownEmoticonKeyword :car: :red_car: :taxi: :oncoming_taxi: :articulated_lorry: +syn keyword markdownEmoticonKeyword :bus: :oncoming_bus: :rotating_light: :police_car: :oncoming_police_car: +syn keyword markdownEmoticonKeyword :fire_engine: :ambulance: :minibus: :truck: :train: +syn keyword markdownEmoticonKeyword :station: :train2: :bullettrain_front: :bullettrain_side: :light_rail: +syn keyword markdownEmoticonKeyword :monorail: :railway_car: :trolleybus: :ticket: :fuelpump: +syn keyword markdownEmoticonKeyword :vertical_traffic_light: :traffic_light: :warning: :construction: :beginner: +syn keyword markdownEmoticonKeyword :atm: :slot_machine: :busstop: :barber: :hotsprings: +syn keyword markdownEmoticonKeyword :checkered_flag: :crossed_flags: :izakaya_lantern: :moyai: :circus_tent: +syn keyword markdownEmoticonKeyword :performing_arts: :round_pushpin: :triangular_flag_on_post: :jp: :kr: +syn keyword markdownEmoticonKeyword :cn: :us: :fr: :es: :it: +syn keyword markdownEmoticonKeyword :ru: :gb: :uk: :de: :one: +syn keyword markdownEmoticonKeyword :two: :three: :four: :five: :six: +syn keyword markdownEmoticonKeyword :seven: :eight: :nine: :keycap_ten: :1234: +syn keyword markdownEmoticonKeyword :zero: :hash: :symbols: :arrow_backward: :arrow_down: +syn keyword markdownEmoticonKeyword :arrow_forward: :arrow_left: :capital_abcd: :abcd: :abc: +syn keyword markdownEmoticonKeyword :arrow_lower_left: :arrow_lower_right: :arrow_right: :arrow_up: :arrow_upper_left: +syn keyword markdownEmoticonKeyword :arrow_upper_right: :arrow_double_down: :arrow_double_up: :arrow_down_small: :arrow_heading_down: +syn keyword markdownEmoticonKeyword :arrow_heading_up: :leftwards_arrow_with_hook: :arrow_right_hook: :left_right_arrow: :arrow_up_down: +syn keyword markdownEmoticonKeyword :arrow_up_small: :arrows_clockwise: :arrows_counterclockwise: :rewind: :fast_forward: +syn keyword markdownEmoticonKeyword :information_source: :ok: :twisted_rightwards_arrows: :repeat: :repeat_one: +syn keyword markdownEmoticonKeyword :new: :top: :up: :cool: :free: +syn keyword markdownEmoticonKeyword :ng: :cinema: :koko: :signal_strength: :u5272: +syn keyword markdownEmoticonKeyword :u5408: :u55b6: :u6307: :u6708: :u6709: +syn keyword markdownEmoticonKeyword :u6e80: :u7121: :u7533: :u7a7a: :u7981: +syn keyword markdownEmoticonKeyword :sa: :restroom: :mens: :womens: :baby_symbol: +syn keyword markdownEmoticonKeyword :no_smoking: :parking: :wheelchair: :metro: :baggage_claim: +syn keyword markdownEmoticonKeyword :accept: :wc: :potable_water: :put_litter_in_its_place: :secret: +syn keyword markdownEmoticonKeyword :congratulations: :m: :passport_control: :left_luggage: :customs: +syn keyword markdownEmoticonKeyword :ideograph_advantage: :cl: :sos: :id: :no_entry_sign: +syn keyword markdownEmoticonKeyword :underage: :no_mobile_phones: :do_not_litter: :non-potable_water: :no_bicycles: +syn keyword markdownEmoticonKeyword :no_pedestrians: :children_crossing: :no_entry: :eight_spoked_asterisk: :eight_pointed_black_star: +syn keyword markdownEmoticonKeyword :heart_decoration: :vs: :vibration_mode: :mobile_phone_off: :chart: +syn keyword markdownEmoticonKeyword :currency_exchange: :aries: :taurus: :gemini: :cancer: +syn keyword markdownEmoticonKeyword :leo: :virgo: :libra: :scorpius: :sagittarius: +syn keyword markdownEmoticonKeyword :capricorn: :aquarius: :pisces: :ophiuchus: :six_pointed_star: +syn keyword markdownEmoticonKeyword :negative_squared_cross_mark: :a: :b: :ab: :o2: +syn keyword markdownEmoticonKeyword :diamond_shape_with_a_dot_inside: :recycle: :end: :on: :soon: +syn keyword markdownEmoticonKeyword :clock1: :clock130: :clock10: :clock1030: :clock11: +syn keyword markdownEmoticonKeyword :clock1130: :clock12: :clock1230: :clock2: :clock230: +syn keyword markdownEmoticonKeyword :clock3: :clock330: :clock4: :clock430: :clock5: +syn keyword markdownEmoticonKeyword :clock530: :clock6: :clock630: :clock7: :clock730: +syn keyword markdownEmoticonKeyword :clock8: :clock830: :clock9: :clock930: :heavy_dollar_sign: +syn keyword markdownEmoticonKeyword :copyright: :registered: :tm: :x: :heavy_exclamation_mark: +syn keyword markdownEmoticonKeyword :bangbang: :interrobang: :o: :heavy_multiplication_x: :heavy_plus_sign: +syn keyword markdownEmoticonKeyword :heavy_minus_sign: :heavy_division_sign: :white_flower: :100: :heavy_check_mark: +syn keyword markdownEmoticonKeyword :ballot_box_with_check: :radio_button: :link: :curly_loop: :wavy_dash: +syn keyword markdownEmoticonKeyword :part_alternation_mark: :trident: :black_square: :white_square: :white_check_mark: +syn keyword markdownEmoticonKeyword :black_square_button: :white_square_button: :black_circle: :white_circle: :red_circle: +syn keyword markdownEmoticonKeyword :large_blue_circle: :large_blue_diamond: :large_orange_diamond: :small_blue_diamond: :small_orange_diamond: +syn keyword markdownEmoticonKeyword :small_red_triangle: :small_red_triangle_down: :shipit: :relaxed: :smirk: +syn keyword markdownEmoticonKeyword :heart_eyes: :kissing_heart: :kissing_closed_eyes: :flushed: :relieved: +syn keyword markdownEmoticonKeyword :satisfied: :grin: :wink: :stuck_out_tongue_winking_eye: :stuck_out_tongue_closed_eyes: +syn keyword markdownEmoticonKeyword :grinning: :kissing: :kissing_smiling_eyes: :stuck_out_tongue: :sleeping: +syn keyword markdownEmoticonKeyword :worried: :frowning: :anguished: :open_mouth: :grimacing: +syn keyword markdownEmoticonKeyword :confused: :hushed: :expressionless: :unamused: :sweat_smile: +syn keyword markdownEmoticonKeyword :sweat: :disappointed_relieved: :weary: :pensive: :disappointed: +syn keyword markdownEmoticonKeyword :confounded: :fearful: :cold_sweat: :persevere: :cry: +syn keyword markdownEmoticonKeyword :sob: :joy: :astonished: :scream: :neckbeard: +syn keyword markdownEmoticonKeyword :tired_face: :angry: :rage: :triumph: :sleepy: +syn keyword markdownEmoticonKeyword :yum: :mask: :sunglasses: :dizzy_face: :imp: +syn keyword markdownEmoticonKeyword :smiling_imp: :neutral_face: :no_mouth: :innocent: :alien: +syn keyword markdownEmoticonKeyword :yellow_heart: :blue_heart: :purple_heart: :heart: :green_heart: +syn keyword markdownEmoticonKeyword :broken_heart: :heartbeat: :heartpulse: :two_hearts: :revolving_hearts: +syn keyword markdownEmoticonKeyword :cupid: :sparkling_heart: :sparkles: :star: :star2: +syn keyword markdownEmoticonKeyword :dizzy: :boom: :collision: :anger: :exclamation: +syn keyword markdownEmoticonKeyword :question: :grey_exclamation: :grey_question: :zzz: :dash: +syn keyword markdownEmoticonKeyword :sweat_drops: :notes: :musical_note: :fire: :hankey: +syn keyword markdownEmoticonKeyword :poop: :shit: :+1: :thumbsup: :-1: +syn keyword markdownEmoticonKeyword :thumbsdown: :ok_hand: :punch: :facepunch: :fist: +syn keyword markdownEmoticonKeyword :v: :wave: :hand: :raised_hand: :open_hands: +syn keyword markdownEmoticonKeyword :point_up: :point_down: :point_left: :point_right: :raised_hands: +syn keyword markdownEmoticonKeyword :pray: :point_up_2: :clap: :muscle: :metal: +syn keyword markdownEmoticonKeyword :fu: :walking: :runner: :running: :couple: +syn keyword markdownEmoticonKeyword :family: :two_men_holding_hands: :two_women_holding_hands: :dancer: :dancers: +syn keyword markdownEmoticonKeyword :ok_woman: :no_good: :information_desk_person: :raising_hand: :bride_with_veil: +syn keyword markdownEmoticonKeyword :person_with_pouting_face: :person_frowning: :bow: :couplekiss: :couple_with_heart: +syn keyword markdownEmoticonKeyword :massage: :haircut: :nail_care: :boy: :girl: +syn keyword markdownEmoticonKeyword :woman: :man: :baby: :older_woman: :older_man: +syn keyword markdownEmoticonKeyword :person_with_blond_hair: :man_with_gua_pi_mao: :man_with_turban: :construction_worker: :cop: +syn keyword markdownEmoticonKeyword :angel: :princess: :smiley_cat: :smile_cat: :heart_eyes_cat: +syn keyword markdownEmoticonKeyword :kissing_cat: :smirk_cat: :scream_cat: :crying_cat_face: :joy_cat: +syn keyword markdownEmoticonKeyword :pouting_cat: :japanese_ogre: :japanese_goblin: :see_no_evil: :hear_no_evil: +syn keyword markdownEmoticonKeyword :speak_no_evil: :guardsman: :skull: :feet: :lips: +syn keyword markdownEmoticonKeyword :kiss: :droplet: :ear: :eyes: :nose: +syn keyword markdownEmoticonKeyword :tongue: :love_letter: :bust_in_silhouette: :busts_in_silhouette: :speech_balloon: +syn keyword markdownEmoticonKeyword :thought_balloon: :feelsgood: :finnadie: :goberserk: :godmode: +syn keyword markdownEmoticonKeyword :hurtrealbad: :rage1: :rage2: :rage3: :rage4: +syn keyword markdownEmoticonKeyword :suspect: :trollface: :sunny: :umbrella: :cloud: +syn keyword markdownEmoticonKeyword :snowflake: :snowman: :zap: :cyclone: :foggy: +syn keyword markdownEmoticonKeyword :ocean: :cat: :dog: :mouse: :hamster: +syn keyword markdownEmoticonKeyword :rabbit: :wolf: :frog: :tiger: :koala: +syn keyword markdownEmoticonKeyword :bear: :pig: :pig_nose: :cow: :boar: +syn keyword markdownEmoticonKeyword :monkey_face: :monkey: :horse: :racehorse: :camel: +syn keyword markdownEmoticonKeyword :sheep: :elephant: :panda_face: :snake: :bird: +syn keyword markdownEmoticonKeyword :baby_chick: :hatched_chick: :hatching_chick: :chicken: :penguin: +syn keyword markdownEmoticonKeyword :turtle: :bug: :honeybee: :ant: :beetle: +syn keyword markdownEmoticonKeyword :snail: :octopus: :tropical_fish: :fish: :whale: +syn keyword markdownEmoticonKeyword :whale2: :dolphin: :cow2: :ram: :rat: +syn keyword markdownEmoticonKeyword :water_buffalo: :tiger2: :rabbit2: :dragon: :goat: +syn keyword markdownEmoticonKeyword :rooster: :dog2: :pig2: :mouse2: :ox: +syn keyword markdownEmoticonKeyword :dragon_face: :blowfish: :crocodile: :dromedary_camel: :leopard: +syn keyword markdownEmoticonKeyword :cat2: :poodle: :paw_prints: :bouquet: :cherry_blossom: +syn keyword markdownEmoticonKeyword :tulip: :four_leaf_clover: :rose: :sunflower: :hibiscus: +syn keyword markdownEmoticonKeyword :maple_leaf: :leaves: :fallen_leaf: :herb: :mushroom: +syn keyword markdownEmoticonKeyword :cactus: :palm_tree: :evergreen_tree: :deciduous_tree: :chestnut: +syn keyword markdownEmoticonKeyword :seedling: :blossom: :ear_of_rice: :shell: :globe_with_meridians: +syn keyword markdownEmoticonKeyword :sun_with_face: :full_moon_with_face: :new_moon_with_face: :new_moon: :waxing_crescent_moon: +syn keyword markdownEmoticonKeyword :first_quarter_moon: :waxing_gibbous_moon: :full_moon: :waning_gibbous_moon: :last_quarter_moon: +syn keyword markdownEmoticonKeyword :waning_crescent_moon: :last_quarter_moon_with_face: :first_quarter_moon_with_face: :moon: :earth_africa: +syn keyword markdownEmoticonKeyword :earth_americas: :earth_asia: :volcano: :milky_way: :partly_sunny: +syn keyword markdownEmoticonKeyword :octocat: :squirrel: :bamboo: :gift_heart: :dolls: +syn keyword markdownEmoticonKeyword :school_satchel: :mortar_board: :flags: :fireworks: :sparkler: +syn keyword markdownEmoticonKeyword :wind_chime: :rice_scene: :jack_o_lantern: :ghost: :santa: +syn keyword markdownEmoticonKeyword :christmas_tree: :gift: :bell: :no_bell: :tanabata_tree: +syn keyword markdownEmoticonKeyword :tada: :confetti_ball: :balloon: :crystal_ball: :cd: +syn keyword markdownEmoticonKeyword :dvd: :floppy_disk: :camera: :video_camera: :movie_camera: +syn keyword markdownEmoticonKeyword :computer: :tv: :iphone: :phone: :telephone: +syn keyword markdownEmoticonKeyword :telephone_receiver: :pager: :fax: :minidisc: :vhs: +syn keyword markdownEmoticonKeyword :sound: :speaker: :mute: :loudspeaker: :mega: +syn keyword markdownEmoticonKeyword :hourglass: :hourglass_flowing_sand: :alarm_clock: :watch: :radio: +syn keyword markdownEmoticonKeyword :satellite: :loop: :mag: :mag_right: :unlock: +syn keyword markdownEmoticonKeyword :lock: :lock_with_ink_pen: :closed_lock_with_key: :key: :bulb: +syn keyword markdownEmoticonKeyword :flashlight: :high_brightness: :low_brightness: :electric_plug: :battery: +syn keyword markdownEmoticonKeyword :calling: :email: :mailbox: :postbox: :bath: +syn keyword markdownEmoticonKeyword :bathtub: :shower: :toilet: :wrench: :nut_and_bolt: +syn keyword markdownEmoticonKeyword :hammer: :seat: :moneybag: :yen: :dollar: +syn keyword markdownEmoticonKeyword :pound: :euro: :credit_card: :money_with_wings: :e-mail: +syn keyword markdownEmoticonKeyword :inbox_tray: :outbox_tray: :envelope: :incoming_envelope: :postal_horn: +syn keyword markdownEmoticonKeyword :mailbox_closed: :mailbox_with_mail: :mailbox_with_no_mail: :door: :smoking: +syn keyword markdownEmoticonKeyword :bomb: :gun: :hocho: :pill: :syringe: +syn keyword markdownEmoticonKeyword :page_facing_up: :page_with_curl: :bookmark_tabs: :bar_chart: :chart_with_upwards_trend: +syn keyword markdownEmoticonKeyword :chart_with_downwards_trend: :scroll: :clipboard: :calendar: :date: +syn keyword markdownEmoticonKeyword :card_index: :file_folder: :open_file_folder: :scissors: :pushpin: +syn keyword markdownEmoticonKeyword :paperclip: :black_nib: :pencil2: :straight_ruler: :triangular_ruler: +syn keyword markdownEmoticonKeyword :closed_book: :green_book: :blue_book: :orange_book: :notebook: +syn keyword markdownEmoticonKeyword :notebook_with_decorative_cover: :ledger: :books: :bookmark: :name_badge: +syn keyword markdownEmoticonKeyword :microscope: :telescope: :newspaper: :football: :basketball: +syn keyword markdownEmoticonKeyword :soccer: :baseball: :tennis: :8ball: :rugby_football: +syn keyword markdownEmoticonKeyword :bowling: :golf: :mountain_bicyclist: :bicyclist: :horse_racing: +syn keyword markdownEmoticonKeyword :snowboarder: :swimmer: :surfer: :ski: :spades: +syn keyword markdownEmoticonKeyword :hearts: :clubs: :diamonds: :gem: :ring: +syn keyword markdownEmoticonKeyword :trophy: :musical_score: :musical_keyboard: :violin: :space_invader: +syn keyword markdownEmoticonKeyword :video_game: :black_joker: :flower_playing_cards: :game_die: :dart: +syn keyword markdownEmoticonKeyword :mahjong: :clapper: :memo: :pencil: :book: +syn keyword markdownEmoticonKeyword :art: :microphone: :headphones: :trumpet: :saxophone: +syn keyword markdownEmoticonKeyword :guitar: :shoe: :sandal: :high_heel: :lipstick: +syn keyword markdownEmoticonKeyword :boot: :shirt: :tshirt: :necktie: :womans_clothes: +syn keyword markdownEmoticonKeyword :dress: :running_shirt_with_sash: :jeans: :kimono: :bikini: +syn keyword markdownEmoticonKeyword :ribbon: :tophat: :crown: :womans_hat: :mans_shoe: +syn keyword markdownEmoticonKeyword :closed_umbrella: :briefcase: :handbag: :pouch: :purse: +syn keyword markdownEmoticonKeyword :eyeglasses: :fishing_pole_and_fish: :coffee: :tea: :sake: +syn keyword markdownEmoticonKeyword :baby_bottle: :beer: :beers: :cocktail: :tropical_drink: +syn keyword markdownEmoticonKeyword :wine_glass: :fork_and_knife: :pizza: :hamburger: :fries: +syn keyword markdownEmoticonKeyword :poultry_leg: :meat_on_bone: :spaghetti: :curry: :fried_shrimp: +syn keyword markdownEmoticonKeyword :bento: :sushi: :fish_cake: :rice_ball: :rice_cracker: +syn keyword markdownEmoticonKeyword :rice: :ramen: :stew: :oden: :dango: +syn keyword markdownEmoticonKeyword :egg: :bread: :doughnut: :custard: :icecream: +syn keyword markdownEmoticonKeyword :ice_cream: :shaved_ice: :birthday: :cake: :cookie: +syn keyword markdownEmoticonKeyword :chocolate_bar: :candy: :lollipop: :honey_pot: :apple: +syn keyword markdownEmoticonKeyword :green_apple: :tangerine: :lemon: :cherries: :grapes: +syn keyword markdownEmoticonKeyword :watermelon: :strawberry: :peach: :melon: :banana: +syn keyword markdownEmoticonKeyword :pear: :pineapple: :sweet_potato: :eggplant: :tomato: +syn keyword markdownEmoticonKeyword :corn: :house: :house_with_garden: :school: :office: +syn keyword markdownEmoticonKeyword :post_office: :hospital: :bank: :convenience_store: :love_hotel: +syn keyword markdownEmoticonKeyword :hotel: :wedding: :church: :department_store: :european_post_office: +syn keyword markdownEmoticonKeyword :city_sunrise: :city_sunset: :japanese_castle: :european_castle: :tent: +syn keyword markdownEmoticonKeyword :factory: :tokyo_tower: :japan: :mount_fuji: :sunrise_over_mountains: +syn keyword markdownEmoticonKeyword :sunrise: :stars: :statue_of_liberty: :bridge_at_night: :carousel_horse: +syn keyword markdownEmoticonKeyword :rainbow: :ferris_wheel: :fountain: :roller_coaster: :ship: +syn keyword markdownEmoticonKeyword :speedboat: :boat: :sailboat: :rowboat: :anchor: +syn keyword markdownEmoticonKeyword :rocket: :airplane: :helicopter: :steam_locomotive: :tram: +syn keyword markdownEmoticonKeyword :mountain_railway: :bike: :aerial_tramway: :suspension_railway: :mountain_cableway: +syn keyword markdownEmoticonKeyword :tractor: :blue_car: :oncoming_automobile: :car: :red_car: +syn keyword markdownEmoticonKeyword :taxi: :oncoming_taxi: :articulated_lorry: :bus: :oncoming_bus: +syn keyword markdownEmoticonKeyword :rotating_light: :police_car: :oncoming_police_car: :fire_engine: :ambulance: +syn keyword markdownEmoticonKeyword :minibus: :truck: :train: :station: :train2: +syn keyword markdownEmoticonKeyword :bullettrain_front: :bullettrain_side: :light_rail: :monorail: :railway_car: +syn keyword markdownEmoticonKeyword :trolleybus: :ticket: :fuelpump: :vertical_traffic_light: :traffic_light: +syn keyword markdownEmoticonKeyword :warning: :construction: :beginner: :atm: :slot_machine: +syn keyword markdownEmoticonKeyword :busstop: :barber: :hotsprings: :checkered_flag: :crossed_flags: +syn keyword markdownEmoticonKeyword :izakaya_lantern: :moyai: :circus_tent: :performing_arts: :round_pushpin: +syn keyword markdownEmoticonKeyword :triangular_flag_on_post: :jp: :kr: :cn: :us: +syn keyword markdownEmoticonKeyword :fr: :es: :it: :ru: :gb: +syn keyword markdownEmoticonKeyword :uk: :de: :one: :two: :three: +syn keyword markdownEmoticonKeyword :four: :five: :six: :seven: :eight: +syn keyword markdownEmoticonKeyword :nine: :keycap_ten: :1234: :zero: :hash: +syn keyword markdownEmoticonKeyword :symbols: :arrow_backward: :arrow_down: :arrow_forward: :arrow_left: +syn keyword markdownEmoticonKeyword :capital_abcd: :abcd: :abc: :arrow_lower_left: :arrow_lower_right: +syn keyword markdownEmoticonKeyword :arrow_right: :arrow_up: :arrow_upper_left: :arrow_upper_right: :arrow_double_down: +syn keyword markdownEmoticonKeyword :arrow_double_up: :arrow_down_small: :arrow_heading_down: :arrow_heading_up: :leftwards_arrow_with_hook: +syn keyword markdownEmoticonKeyword :arrow_right_hook: :left_right_arrow: :arrow_up_down: :arrow_up_small: :arrows_clockwise: +syn keyword markdownEmoticonKeyword :arrows_counterclockwise: :rewind: :fast_forward: :information_source: :ok: +syn keyword markdownEmoticonKeyword :twisted_rightwards_arrows: :repeat: :repeat_one: :new: :top: +syn keyword markdownEmoticonKeyword :up: :cool: :free: :ng: :cinema: +syn keyword markdownEmoticonKeyword :koko: :signal_strength: :u5272: :u5408: :u55b6: +syn keyword markdownEmoticonKeyword :u6307: :u6708: :u6709: :u6e80: :u7121: +syn keyword markdownEmoticonKeyword :u7533: :u7a7a: :u7981: :sa: :restroom: +syn keyword markdownEmoticonKeyword :mens: :womens: :baby_symbol: :no_smoking: :parking: +syn keyword markdownEmoticonKeyword :wheelchair: :metro: :baggage_claim: :accept: :wc: +syn keyword markdownEmoticonKeyword :potable_water: :put_litter_in_its_place: :secret: :congratulations: :m: +syn keyword markdownEmoticonKeyword :passport_control: :left_luggage: :customs: :ideograph_advantage: :cl: +syn keyword markdownEmoticonKeyword :sos: :id: :no_entry_sign: :underage: :no_mobile_phones: +syn keyword markdownEmoticonKeyword :do_not_litter: :non-potable_water: :no_bicycles: :no_pedestrians: :children_crossing: +syn keyword markdownEmoticonKeyword :no_entry: :eight_spoked_asterisk: :eight_pointed_black_star: :heart_decoration: :vs: +syn keyword markdownEmoticonKeyword :vibration_mode: :mobile_phone_off: :chart: :currency_exchange: :aries: +syn keyword markdownEmoticonKeyword :taurus: :gemini: :cancer: :leo: :virgo: +syn keyword markdownEmoticonKeyword :libra: :scorpius: :sagittarius: :capricorn: :aquarius: +syn keyword markdownEmoticonKeyword :pisces: :ophiuchus: :six_pointed_star: :negative_squared_cross_mark: :a: +syn keyword markdownEmoticonKeyword :b: :ab: :o2: :diamond_shape_with_a_dot_inside: :recycle: +syn keyword markdownEmoticonKeyword :end: :on: :soon: :clock1: :clock130: +syn keyword markdownEmoticonKeyword :clock10: :clock1030: :clock11: :clock1130: :clock12: +syn keyword markdownEmoticonKeyword :clock1230: :clock2: :clock230: :clock3: :clock330: +syn keyword markdownEmoticonKeyword :clock4: :clock430: :clock5: :clock530: :clock6: +syn keyword markdownEmoticonKeyword :clock630: :clock7: :clock730: :clock8: :clock830: +syn keyword markdownEmoticonKeyword :clock9: :clock930: :heavy_dollar_sign: :copyright: :registered: +syn keyword markdownEmoticonKeyword :tm: :x: :heavy_exclamation_mark: :bangbang: :interrobang: +syn keyword markdownEmoticonKeyword :o: :heavy_multiplication_x: :heavy_plus_sign: :heavy_minus_sign: :heavy_division_sign: +syn keyword markdownEmoticonKeyword :white_flower: :100: :heavy_check_mark: :ballot_box_with_check: :radio_button: +syn keyword markdownEmoticonKeyword :link: :curly_loop: :wavy_dash: :part_alternation_mark: :trident: +syn keyword markdownEmoticonKeyword :black_square: :white_square: :white_check_mark: :black_square_button: :white_square_button: +syn keyword markdownEmoticonKeyword :black_circle: :white_circle: :red_circle: :large_blue_circle: :large_blue_diamond: +syn keyword markdownEmoticonKeyword :large_orange_diamond: :small_blue_diamond: :small_orange_diamond: :small_red_triangle: :small_red_triangle_down: +syn keyword markdownEmoticonKeyword :shipit: + +" }}} + + +" {{{ HIGHLIGHT DEFINITION + +hi def Italic term=italic cterm=italic gui=italic +hi def Bold term=bold cterm=bold gui=bold +hi def BoldItalic term=bold,italic cterm=bold,italic gui=bold,italic + +hi def link markdownItalic Italic +hi def link markdownBold Bold +hi def link markdownBoldItalic BoldItalic + +hi def link markdownPullRequestLinkInText Underlined +hi def link markdownUserLinkInText Underlined +hi def link markdownUrlLinkInText Underlined +hi def link markdownEmailLinkInText Underlined + +hi def link markdownLinkText Underlined +hi def link markdownLinkUrl Underlined +hi def link markdownLinkTitleSingleQuoted Bold +hi def link markdownLinkTitleDoubleQuoted Bold +hi def link markdownLinkUrlContainer Delimiter +hi def link markdownLinkTextContainer Delimiter +hi def link markdownLinkReference NonText + +hi def link markdownCodeDelimiter Delimiter +hi def link markdownInlineCode String +hi def link markdownFencedCodeBlock String +hi def link markdownCodeBlock String + +hi def link markdownTableDelimiter Delimiter +hi def link markdownTableHeader Bold + +hi def link markdownStrike NonText +hi def link markdownStrikeDelimiter Delimiter +hi def link markdownBlockquote Comment +hi def link markdownBlockquoteDelimiter Delimiter +hi def link markdownInlineDelimiter Delimiter +hi def link markdownListDelimiter Delimiter + +hi def link markdownHeaderId Delimiter +hi def link markdownHeadingDelimiter Delimiter +hi def link markdownHeadingUnderline Delimiter +hi def link markdownHeader Title +hi def link markdownH1 Title +hi def link markdownH2 Title +hi def link markdownH3 Title +hi def link markdownH4 Title +hi def link markdownH5 Title +hi def link markdownH6 Title + +hi def link markdownEmoticonKeyword Statement +hi def link markdownRule Identifier + +hi def link markdownXmlComment NonText +hi def link markdownXmlElement NonText +hi def link markdownXmlEmptyElement NonText +hi def link markdownXmlEntities Special + +" }}} + + +if !exists('g:markdown_include_jekyll_support') || g:markdown_include_jekyll_support + execute 'runtime! syntax/markdown_jekyll.vim' endif -if get(g:, 'vim_markdown_json_frontmatter', 0) - try - syn include @jsonTop syntax/json.vim - syn region Comment matchgroup=mkdDelimiter start="\%^{$" end="^}$" contains=@jsonTop keepend - unlet! b:current_syntax - catch /E484/ - syn region Comment matchgroup=mkdDelimiter start="\%^{$" end="^}$" - endtry +let b:current_syntax = "markdown" +if main_syntax ==# 'markdown' + unlet main_syntax endif - -if get(g:, 'vim_markdown_math', 0) - syn include @tex syntax/tex.vim - syn region mkdMath start="\\\@item2 - -Expect (auto insert * and indent level is same): - * item1 - * item2 - -Given markdown; - -Execute: - syntax off - -Do (insert enter at list end with syntax off): - i* item1\item2 - -Expect (auto insert * and indent level is same): - * item1 - * item2 - -Execute: - syntax on - -Given markdown; -``` -* item1 - -Do (insert after list items in code block): - jotext - -Expect (no autoindent in code block): - ``` - * item1 - text - -Given markdown; -* item1 - -a - -Do (insert enter after list): - jji\b - -Expect (no autoindent outside list): - * item1 - - - ba - -Given markdown; -- a - - # b - -Do (insert header after list): - jjwi# - -Expect (no indent header after list): - - a - - ## b - -Given markdown; -* item1 - -Do (new line from the first item of the list and add the second item): - o* item2 - -Expect (insert 4 spaces to the head of second item): - * item1 - * item2 diff --git a/.vim/pack/plugins/start/vim-markdown/test/insert-toc.vader b/.vim/pack/plugins/start/vim-markdown/test/insert-toc.vader deleted file mode 100644 index b8d669b..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/insert-toc.vader +++ /dev/null @@ -1,147 +0,0 @@ -Given markdown; -# a - -## Foo Level 2 - -### Foo Level 3 - -#### Foo Level 4 - -Bar Level 2 ------------ - -### Bar Level 3 - -Execute (InsertToc format): - :2 - :call append('.', '') - :InsertToc - -Expect (format): - # a - - * [Foo Level 2](#foo-level-2) - * [Foo Level 3](#foo-level-3) - * [Foo Level 4](#foo-level-4) - * [Bar Level 2](#bar-level-2) - * [Bar Level 3](#bar-level-3) - - ## Foo Level 2 - - ### Foo Level 3 - - #### Foo Level 4 - - Bar Level 2 - ----------- - - ### Bar Level 3 - -Given markdown; -# a - -## Foo Level 2 - -### Foo Level 3 - -#### Foo Level 4 - -Bar Level 2 ------------ - -### Bar Level 3 - -Execute (InsertToc only h2 headers): - :2 - :call append('.', '') - :InsertToc 2 - -Expect (only h2 headers): - # a - - * [Foo Level 2](#foo-level-2) - * [Bar Level 2](#bar-level-2) - - ## Foo Level 2 - - ### Foo Level 3 - - #### Foo Level 4 - - Bar Level 2 - ----------- - - ### Bar Level 3 - -Given markdown; -# a - -## Foo Level 2 - -### Foo Level 3 - -#### Foo Level 4 - -Bar Level 2 ------------ - -## Baz Level 2 - -## Foobar Level 2 - -## Foobaz Level 2 - -## Barfoo Level 2 - -## Barbaz Level 2 - -## Bazfoo Level 2 - -## Bazbar Level 2 - -## Foobarbaz Level 2 - -Execute (InsertNToc format, and up to h3 headers): - :2 - :call append('.', '') - :InsertNToc 3 - -Expect (format, and up to h3 headers): - # a - - 1. [Foo Level 2](#foo-level-2) - * [Foo Level 3](#foo-level-3) - 2. [Bar Level 2](#bar-level-2) - 3. [Baz Level 2](#baz-level-2) - 4. [Foobar Level 2](#foobar-level-2) - 5. [Foobaz Level 2](#foobaz-level-2) - 6. [Barfoo Level 2](#barfoo-level-2) - 7. [Barbaz Level 2](#barbaz-level-2) - 8. [Bazfoo Level 2](#bazfoo-level-2) - 9. [Bazbar Level 2](#bazbar-level-2) - 10. [Foobarbaz Level 2](#foobarbaz-level-2) - - ## Foo Level 2 - - ### Foo Level 3 - - #### Foo Level 4 - - Bar Level 2 - ----------- - - ## Baz Level 2 - - ## Foobar Level 2 - - ## Foobaz Level 2 - - ## Barfoo Level 2 - - ## Barbaz Level 2 - - ## Bazfoo Level 2 - - ## Bazbar Level 2 - - ## Foobarbaz Level 2 diff --git a/.vim/pack/plugins/start/vim-markdown/test/map.vader b/.vim/pack/plugins/start/vim-markdown/test/map.vader deleted file mode 100644 index 57fe619..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/map.vader +++ /dev/null @@ -1,153 +0,0 @@ -Given markdown; -a c - -Execute (gx autolink): - let b:url = 'http://b' - let b:line = getline(1) - let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'Markdown_GetUrlForPosition') - AssertEqual b:func(1, match(b:line, 'a') + 1), '' - AssertEqual b:func(1, match(b:line, '<') + 1), b:url - AssertEqual b:func(1, match(b:line, 'h') + 1), b:url - AssertEqual b:func(1, match(b:line, '>') + 1), b:url - AssertEqual b:func(1, match(b:line, 'c') + 1), '' - -Given markdown; -a http://b.bb c - -Execute (gx implicit autolink): - let b:url = 'http://b.bb' - let b:line = getline(1) - let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'Markdown_GetUrlForPosition') - AssertEqual b:func(1, match(b:line, 'a') + 1), '' - AssertEqual b:func(1, match(b:line, 'h') + 1), b:url - AssertEqual b:func(1, match(b:line, 'c') + 1), '' - -Given markdown; -[a]: http://b "c" - -Execute (gx link reference definition): - let b:url = 'http://b' - let b:line = getline(1) - let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'Markdown_GetUrlForPosition') - " TODO would be cool if all of the following gave the link. - AssertEqual b:func(1, match(b:line, 'a') + 1), '' - AssertEqual b:func(1, match(b:line, 'h') + 1), b:url - AssertEqual b:func(1, match(b:line, 'c') + 1), '' - -Given markdown; -a [b](c) d - -Execute (gx autolink): - let b:url = 'c' - let b:line = getline(1) - let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'Markdown_GetUrlForPosition') - AssertEqual b:func(1, match(b:line, 'a') + 1), '' - AssertEqual b:func(1, match(b:line, '[') + 1), b:url - AssertEqual b:func(1, match(b:line, 'b') + 1), b:url - AssertEqual b:func(1, match(b:line, ']') + 1), b:url - AssertEqual b:func(1, match(b:line, '(') + 1), b:url - AssertEqual b:func(1, match(b:line, 'c') + 1), b:url - AssertEqual b:func(1, match(b:line, ')') + 1), b:url - AssertEqual b:func(1, match(b:line, 'd') + 1), '' - -Given markdown; -[ge_test.md](ge_test.md) - -Execute (ge opens file): - normal ge - AssertEqual @%, 'ge_test.md' - AssertEqual getline(1), 'ge test' - -Given markdown; -[ge_test](ge_test) - -Execute (ge opens file without .md extensions): - let g:vim_markdown_no_extensions_in_markdown = 1 - normal ge - AssertEqual @%, 'ge_test.md' - AssertEqual getline(1), 'ge test' - unlet g:vim_markdown_no_extensions_in_markdown - -Given markdown; -[ge_test.md](ge_test.md) - -Execute (ge does not write before opening file): - normal ia - normal l - normal ge - AssertEqual @%, 'ge_test.md' - AssertEqual getline(1), 'ge test' - -Given markdown; -[ge_test.md](ge_test.md) - -Execute (ge auto-write before opening file): - let g:vim_markdown_autowrite = 1 - normal ia - normal l - AssertThrows normal ge - AssertEqual g:vader_exception, 'Vim(write):E382: Cannot write, ''buftype'' option is set' - unlet g:vim_markdown_autowrite - -Given markdown; -# a - -b - -# c - -d - -Execute (]] same level): - AssertEqual line('.'), 1 - normal ]] - AssertEqual line('.'), 5 - normal [[ - AssertEqual line('.'), 1 - -Given markdown; -# a - -b - -## c - -d - -Execute (]] different levels level): - AssertEqual line('.'), 1 - normal ]] - AssertEqual line('.'), 5 - normal [[ - AssertEqual line('.'), 1 - -Given markdown; -# a - -b - -## c - -d - -# e - -f - -Execute (][ different levels level): - AssertEqual line('.'), 1 - normal ][ - AssertEqual line('.'), 9 - normal [] - AssertEqual line('.'), 1 - -Given markdown; -# a - -b - -Execute (]h): - normal! 3G - AssertEqual line('.'), 3 - normal ]h - AssertEqual line('.'), 1 diff --git a/.vim/pack/plugins/start/vim-markdown/test/python-folding.vader b/.vim/pack/plugins/start/vim-markdown/test/python-folding.vader deleted file mode 100644 index 9196ea6..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/python-folding.vader +++ /dev/null @@ -1,84 +0,0 @@ -Before: - let g:vim_markdown_folding_style_pythonic = 1 - source ../after/ftplugin/markdown.vim - -After: - setlocal foldexpr=0 - setlocal foldmethod=manual - -Given markdown; -# Title - -## Chapter 1 - -``` -This is code block -# This is just a comment -``` - -## Chapter 2 - -foobar - -Execute (fold level # in code block): - AssertEqual foldlevel(1), 1, '# Title' - AssertEqual foldlevel(3), 2, '## Chapter 1' - AssertEqual foldlevel(7), 2, '# This is just a comment' - AssertEqual foldlevel(8), 2, '```' - AssertEqual foldlevel(10), 2, '## Chapter 2' - AssertEqual foldlevel(12), 2, 'foobar' - -Execute (fold text of chapters): - let b:width = winwidth(0) - let b:hyphen = repeat('-', b:width - 18 > 2 ? b:width - 18 : b:width - 9 > 0 ? 3 : 2) - AssertEqual foldtextresult(10), strpart('## Chapter 2', 0, b:width - 9) . ' ' . b:hyphen . ' 2' - -Given markdown; -Fold text 1 -=========== -Fold text 2 ------------ - -Execute (fold level ==, --): - AssertEqual foldlevel(2), 0, '==' - AssertEqual foldlevel(4), 1, '--' - -Execute (fold text of ==, --): - let b:width = winwidth(0) - let b:hyphen = repeat('-', b:width - 17 > 2 ? b:width - 17 : b:width - 9 > 0 ? 3 : 2) - AssertEqual foldtextresult(3), strpart('Fold text 2', 0, b:width - 9) . ' ' . b:hyphen . ' 1' - -Given markdown; -Headline - -foobar - -# Title - -Execute (fold any preamble): - AssertEqual foldlevel(1), 1, 'Headline' - AssertEqual foldlevel(3), 1, 'foobar' - AssertEqual foldlevel(5), 1, '# Title' - -Given markdown; ---- -layout: article -title: A test of the heading folding when there is YAML frontmatter -tags: markdown yaml vim-markdown ---- -body - -heading -------- - -Execute (fold level of yaml front matter): - let g:vim_markdown_frontmatter = 1 - source ../after/ftplugin/markdown.vim - AssertEqual foldlevel(1), 1, '---' - AssertEqual foldlevel(2), 1, 'layout: article' - AssertEqual foldlevel(4), 1, 'tags: markdown yaml vim-markdown' - AssertEqual foldlevel(5), 1, '---' - AssertEqual foldlevel(6), 1, 'body' - AssertEqual foldlevel(8), 1, 'heading' - AssertEqual foldlevel(9), 1, '-------' - unlet g:vim_markdown_frontmatter diff --git a/.vim/pack/plugins/start/vim-markdown/test/run-tests.sh b/.vim/pack/plugins/start/vim-markdown/test/run-tests.sh deleted file mode 100755 index 5c9db06..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/run-tests.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -# Exit on error. -set -e - -cd "$( dirname "${BASH_SOURCE[0]}" )" - -for dep in ../build/tabular ../build/vim-toml ../build/vim-json ../build/vader.vim; do - if [[ ! -d $dep ]]; then - echo "Missing dependency: $dep" - echo "You may just want to use 'make test'." - exit 1 - fi -done - -vim -Nu vimrc -c 'Vader! *' > /dev/null diff --git a/.vim/pack/plugins/start/vim-markdown/test/setextoatx.vader b/.vim/pack/plugins/start/vim-markdown/test/setextoatx.vader deleted file mode 100644 index a27938f..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/setextoatx.vader +++ /dev/null @@ -1,48 +0,0 @@ -Given markdown; -# a - -a -= - -## b - -b -- - -Execute (SetexToAtx): - :SetexToAtx - -Expect (convert setex-style headings to atx): - # a - - # a - - ## b - - ## b - -Given markdown; -a -= - -b -= - -c -- - -d -- - -Execute (SetexToAtx with range): - :1,8SetexToAtx - -Expect (only convert setex headings in original range): - # a - - # b - - ## c - - d - - diff --git a/.vim/pack/plugins/start/vim-markdown/test/strikethrough.vader b/.vim/pack/plugins/start/vim-markdown/test/strikethrough.vader deleted file mode 100644 index 4fe392a..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/strikethrough.vader +++ /dev/null @@ -1,41 +0,0 @@ -Before: - let g:vim_markdown_strikethrough = 1 - syn off | syn on - -After: - unlet! g:vim_markdown_strikethrough - -Given markdown; -a ~~b~~ c - -Execute (strikethrough): - AssertNotEqual SyntaxOf('a'), 'mkdStrike' - AssertEqual SyntaxOf('b'), 'mkdStrike' - AssertNotEqual SyntaxOf('c'), 'mkdStrike' - -Given markdown; -# ~~h1~~ -## ~~h2~~ -### ~~h3~~ -#### ~~h4~~ -##### ~~h5~~ -###### ~~h6~~ - -Execute (strikethrough in atx headings): - AssertEqual SyntaxOf('h1'), 'mkdStrike' - AssertEqual SyntaxOf('h2'), 'mkdStrike' - AssertEqual SyntaxOf('h3'), 'mkdStrike' - AssertEqual SyntaxOf('h4'), 'mkdStrike' - AssertEqual SyntaxOf('h5'), 'mkdStrike' - AssertEqual SyntaxOf('h6'), 'mkdStrike' - -Given markdown; -~~h1~~ -= - -~~h2~~ -- - -Execute (strikethrough in setext headings): - AssertEqual SyntaxOf('h1'), 'mkdStrike' - AssertEqual SyntaxOf('h2'), 'mkdStrike' diff --git a/.vim/pack/plugins/start/vim-markdown/test/syntax-singleline.vader b/.vim/pack/plugins/start/vim-markdown/test/syntax-singleline.vader deleted file mode 100644 index 9fde407..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/syntax-singleline.vader +++ /dev/null @@ -1,158 +0,0 @@ -Before: - let g:vim_markdown_emphasis_multiline = 0 - syn off | syn on - -After: - let g:vim_markdown_emphasis_multiline = 1 - syn off | syn on - -Given markdown; -a **b** c - -Execute (bold): - AssertNotEqual SyntaxOf('a'), 'htmlBold' - AssertEqual SyntaxOf('b'), 'htmlBold' - AssertNotEqual SyntaxOf('c'), 'htmlBold' - -Given markdown; -a __b__ c - -Execute (bold): - AssertNotEqual SyntaxOf('a'), 'htmlBold' - AssertEqual SyntaxOf('b'), 'htmlBold' - AssertNotEqual SyntaxOf('c'), 'htmlBold' - -Given markdown; -a *b* c - -Execute (italic): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - -Given markdown; -a _b_ c - -Execute (italic): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - -Given markdown; -_a_b_ - -Execute (italic text has underscores): - AssertEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - -Given markdown; -a \*b\* c - -Execute (not italic with escaped asterisks): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertNotEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - -Given markdown; -a \_b\_ c - -Execute (not italic with escaped underscores): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertNotEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - -Given markdown; -a _b\_c_ d - -Execute (italic with escaped underscores): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - AssertEqual SyntaxOf('c'), 'htmlItalic' - AssertNotEqual SyntaxOf('d'), 'htmlItalic' - -Given markdown; -a_b_c - -Execute (not italic underscores within text): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertNotEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - -Given markdown; -a *b\*c* d - -Execute (italic with escaped asterisks): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - AssertEqual SyntaxOf('c'), 'htmlItalic' - AssertNotEqual SyntaxOf('d'), 'htmlItalic' - -Given markdown; -a __b\_\_c__ d - -Execute (bold with escaped underscores): - AssertNotEqual SyntaxOf('a'), 'htmlBold' - AssertEqual SyntaxOf('b'), 'htmlBold' - AssertEqual SyntaxOf('c'), 'htmlBold' - AssertNotEqual SyntaxOf('d'), 'htmlBold' - -Given markdown; -_a b -c_ d - -Execute (italic with underscores in multiple lines): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertNotEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - AssertNotEqual SyntaxOf('d'), 'htmlItalic' - -Given markdown; -__a b -c__ d - -Execute (bold with underscores in multiple lines): - AssertNotEqual SyntaxOf('a'), 'htmlBold' - AssertNotEqual SyntaxOf('b'), 'htmlBold' - AssertNotEqual SyntaxOf('c'), 'htmlBold' - AssertNotEqual SyntaxOf('d'), 'htmlBold' - -Given markdown; -___a b -c___ d - -Execute (bold italic with underscores in multiple lines): - AssertNotEqual SyntaxOf('a'), 'htmlBoldItalic' - AssertNotEqual SyntaxOf('b'), 'htmlBoldItalic' - AssertNotEqual SyntaxOf('c'), 'htmlBoldItalic' - AssertNotEqual SyntaxOf('d'), 'htmlBoldItalic' - -Given markdown; -*a b -c* d - -Execute (italic with asterisks in multiple lines): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertNotEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - AssertNotEqual SyntaxOf('d'), 'htmlItalic' - -Given markdown; -**a b -c** d - -Execute (bold with asterisks in multiple lines): - AssertNotEqual SyntaxOf('a'), 'htmlBold' - AssertNotEqual SyntaxOf('b'), 'htmlBold' - AssertNotEqual SyntaxOf('c'), 'htmlBold' - AssertNotEqual SyntaxOf('d'), 'htmlBold' - -Given markdown; -***a b -c*** d - -Execute (bold italic with asterisks in multiple lines): - AssertNotEqual SyntaxOf('a'), 'htmlBoldItalic' - AssertNotEqual SyntaxOf('b'), 'htmlBoldItalic' - AssertNotEqual SyntaxOf('c'), 'htmlBoldItalic' - AssertNotEqual SyntaxOf('d'), 'htmlBoldItalic' - diff --git a/.vim/pack/plugins/start/vim-markdown/test/syntax.md b/.vim/pack/plugins/start/vim-markdown/test/syntax.md deleted file mode 100644 index 9c89e3f..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/syntax.md +++ /dev/null @@ -1,89 +0,0 @@ -# Fenced code living in an indented environment is correctly highlighted - -1. run this command to do this: - - ``` -some command - ``` - -2. Subsequent list items are correctly highlighted. - -Fenced code block with language: - -```ruby -def f - 0 -end -``` - -# Links - -[a](b "c") - -[a]() - -[good spell](a) - -[badd spell](a) - -[a](b "c") - -[a]( b -"c" ) - -a (`a`) b. Fix: - -Escaped: - -\[a](b) - -[a\]b](c) - -## Known failures - -Escape does not work: - -[a\](b) - -Should not be links because of whitespace: - -[a] (b) - -[a](a -b) - -[a](a b) - -# Reference links - -Single links: - -[a][b] - -[good spell][a] - -[badd spell][a] - -[a][] - -[a] [] - -[a][b] c [d][e] - -Reference link followed by inline link: - -[a] [b](c) - -## Known failures - -Should be shortcut reference links: - -[a] - -[a] b [c] - -Should be a single link: - -[a] [b] - -[a] b [c](d) diff --git a/.vim/pack/plugins/start/vim-markdown/test/syntax.vader b/.vim/pack/plugins/start/vim-markdown/test/syntax.vader deleted file mode 100644 index b111de0..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/syntax.vader +++ /dev/null @@ -1,1528 +0,0 @@ -Before: - unlet! b:mkd_known_filetypes - unlet! b:mkd_included_filetypes - unlet! g:vim_markdown_math - unlet! b:liquid_subtype - -Given markdown; -a **b** c - -Execute (bold): - AssertNotEqual SyntaxOf('a'), 'htmlBold' - AssertEqual SyntaxOf('b'), 'htmlBold' - AssertNotEqual SyntaxOf('c'), 'htmlBold' - -Given markdown; -a __b__ c - -Execute (bold): - AssertNotEqual SyntaxOf('a'), 'htmlBold' - AssertEqual SyntaxOf('b'), 'htmlBold' - AssertNotEqual SyntaxOf('c'), 'htmlBold' - -Given markdown; -a *b* c - -Execute (italic): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - -Given markdown; -a _b_ c - -Execute (italic): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - -Given markdown; -_a_b_ - -Execute (italic text has underscores): - AssertEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - -Given markdown; -a \*b\* c - -Execute (not italic with escaped asterisks): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertNotEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - -Given markdown; -a \_b\_ c - -Execute (not italic with escaped underscores): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertNotEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - -Given markdown; -a _b\_c_ d - -Execute (italic with escaped underscores): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - AssertEqual SyntaxOf('c'), 'htmlItalic' - AssertNotEqual SyntaxOf('d'), 'htmlItalic' - -Given markdown; -a_b_c - -Execute (not italic underscores within text): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertNotEqual SyntaxOf('b'), 'htmlItalic' - AssertNotEqual SyntaxOf('c'), 'htmlItalic' - -Given markdown; -a *b\*c* d - -Execute (italic with escaped asterisks): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - AssertEqual SyntaxOf('c'), 'htmlItalic' - AssertNotEqual SyntaxOf('d'), 'htmlItalic' - -Given markdown; -a __b\_\_c__ d - -Execute (bold with escaped underscores): - AssertNotEqual SyntaxOf('a'), 'htmlBold' - AssertEqual SyntaxOf('b'), 'htmlBold' - AssertEqual SyntaxOf('c'), 'htmlBold' - AssertNotEqual SyntaxOf('d'), 'htmlBold' - -Given markdown; -_a b -c_ d - -Execute (italic with underscores in multiple lines): - AssertEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - AssertEqual SyntaxOf('c'), 'htmlItalic' - AssertNotEqual SyntaxOf('d'), 'htmlItalic' - -Given markdown; -__a b -c__ d - -Execute (bold with underscores in multiple lines): - AssertEqual SyntaxOf('a'), 'htmlBold' - AssertEqual SyntaxOf('b'), 'htmlBold' - AssertEqual SyntaxOf('c'), 'htmlBold' - AssertNotEqual SyntaxOf('d'), 'htmlBold' - -Given markdown; -___a b -c___ d - -Execute (bold italic with underscores in multiple lines): - AssertEqual SyntaxOf('a'), 'htmlBoldItalic' - AssertEqual SyntaxOf('b'), 'htmlBoldItalic' - AssertEqual SyntaxOf('c'), 'htmlBoldItalic' - AssertNotEqual SyntaxOf('d'), 'htmlBoldItalic' - -Given markdown; -*a b -c* d - -Execute (italic with asterisks in multiple lines): - AssertEqual SyntaxOf('a'), 'htmlItalic' - AssertEqual SyntaxOf('b'), 'htmlItalic' - AssertEqual SyntaxOf('c'), 'htmlItalic' - AssertNotEqual SyntaxOf('d'), 'htmlItalic' - -Given markdown; -**a b -c** d - -Execute (bold with asterisks in multiple lines): - AssertEqual SyntaxOf('a'), 'htmlBold' - AssertEqual SyntaxOf('b'), 'htmlBold' - AssertEqual SyntaxOf('c'), 'htmlBold' - AssertNotEqual SyntaxOf('d'), 'htmlBold' - -Given markdown; -***a b -c*** d - -Execute (bold italic with asterisks in multiple lines): - AssertEqual SyntaxOf('a'), 'htmlBoldItalic' - AssertEqual SyntaxOf('b'), 'htmlBoldItalic' - AssertEqual SyntaxOf('c'), 'htmlBoldItalic' - AssertNotEqual SyntaxOf('d'), 'htmlBoldItalic' - -Given markdown; -*a - -Execute (not italic with an asterisk): - AssertNotEqual SyntaxOf('a'), 'htmlItalic' - -Given markdown; -[__](a) b - -Execute (not bold with double underscores): - AssertNotEqual SyntaxOf('_'), 'htmlBold' - AssertNotEqual SyntaxOf('a'), 'htmlBold' - AssertNotEqual SyntaxOf('b'), 'htmlBold' - -Given markdown; -_a_ - -Execute (conceal italic): - if has('conceal') - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 1 - setlocal conceallevel=0 - endif - -Execute (disable conceal): - if has('conceal') - let g:vim_markdown_conceal=0 - syn off | syn on - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 0 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 0 - - let g:vim_markdown_conceal=1 - syn off | syn on - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 1 - - setlocal conceallevel=0 - unlet g:vim_markdown_conceal - syn off | syn on - endif - -Given markdown; -*a* - -Execute (conceal italic): - if has('conceal') - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 1 - setlocal conceallevel=0 - endif - -Execute (disable conceal): - if has('conceal') - let g:vim_markdown_conceal=0 - syn off | syn on - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 0 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 0 - - let g:vim_markdown_conceal=1 - syn off | syn on - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 1 - - setlocal conceallevel=0 - unlet g:vim_markdown_conceal - syn off | syn on - endif - -Given markdown; -__a__ - -Execute (conceal bold): - if has('conceal') - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 1 - AssertEqual synconcealed(1, 3)[0], 0 - AssertEqual synconcealed(1, 4)[0], 1 - AssertEqual synconcealed(1, 5)[0], 1 - setlocal conceallevel=0 - endif - -Execute (disable conceal): - if has('conceal') - let g:vim_markdown_conceal=0 - syn off | syn on - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 0 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 0 - AssertEqual synconcealed(1, 4)[0], 0 - AssertEqual synconcealed(1, 5)[0], 0 - - let g:vim_markdown_conceal=1 - syn off | syn on - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 1 - AssertEqual synconcealed(1, 3)[0], 0 - AssertEqual synconcealed(1, 4)[0], 1 - AssertEqual synconcealed(1, 5)[0], 1 - - setlocal conceallevel=0 - unlet g:vim_markdown_conceal - syn off | syn on - endif - -Given markdown; -**a** - -Execute (conceal bold): - if has('conceal') - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 1 - AssertEqual synconcealed(1, 3)[0], 0 - AssertEqual synconcealed(1, 4)[0], 1 - AssertEqual synconcealed(1, 5)[0], 1 - setlocal conceallevel=0 - endif - -Execute (disable conceal): - if has('conceal') - let g:vim_markdown_conceal=0 - syn off | syn on - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 0 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 0 - AssertEqual synconcealed(1, 4)[0], 0 - AssertEqual synconcealed(1, 5)[0], 0 - - let g:vim_markdown_conceal=1 - syn off | syn on - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 1 - AssertEqual synconcealed(1, 3)[0], 0 - AssertEqual synconcealed(1, 4)[0], 1 - AssertEqual synconcealed(1, 5)[0], 1 - - setlocal conceallevel=0 - unlet g:vim_markdown_conceal - syn off | syn on - endif - -Given markdown; -___a___ - -Execute (conceal italic bold): - if has('conceal') - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 1 - AssertEqual synconcealed(1, 3)[0], 1 - AssertEqual synconcealed(1, 4)[0], 0 - AssertEqual synconcealed(1, 5)[0], 1 - AssertEqual synconcealed(1, 6)[0], 1 - AssertEqual synconcealed(1, 7)[0], 1 - setlocal conceallevel=0 - endif - -Execute (disable conceal): - if has('conceal') - let g:vim_markdown_conceal=0 - syn off | syn on - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 0 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 0 - AssertEqual synconcealed(1, 4)[0], 0 - AssertEqual synconcealed(1, 5)[0], 0 - AssertEqual synconcealed(1, 6)[0], 0 - AssertEqual synconcealed(1, 7)[0], 0 - - let g:vim_markdown_conceal=1 - syn off | syn on - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 1 - AssertEqual synconcealed(1, 3)[0], 1 - AssertEqual synconcealed(1, 4)[0], 0 - AssertEqual synconcealed(1, 5)[0], 1 - AssertEqual synconcealed(1, 6)[0], 1 - AssertEqual synconcealed(1, 7)[0], 1 - - setlocal conceallevel=0 - unlet g:vim_markdown_conceal - syn off | syn on - endif - -Given markdown; -***a*** - -Execute (conceal italic bold): - if has('conceal') - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 1 - AssertEqual synconcealed(1, 3)[0], 1 - AssertEqual synconcealed(1, 4)[0], 0 - AssertEqual synconcealed(1, 5)[0], 1 - AssertEqual synconcealed(1, 6)[0], 1 - AssertEqual synconcealed(1, 7)[0], 1 - setlocal conceallevel=0 - endif - -Execute (disable conceal): - if has('conceal') - let g:vim_markdown_conceal=0 - syn off | syn on - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 0 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 0 - AssertEqual synconcealed(1, 4)[0], 0 - AssertEqual synconcealed(1, 5)[0], 0 - AssertEqual synconcealed(1, 6)[0], 0 - AssertEqual synconcealed(1, 7)[0], 0 - - let g:vim_markdown_conceal=1 - syn off | syn on - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 1 - AssertEqual synconcealed(1, 3)[0], 1 - AssertEqual synconcealed(1, 4)[0], 0 - AssertEqual synconcealed(1, 5)[0], 1 - AssertEqual synconcealed(1, 6)[0], 1 - AssertEqual synconcealed(1, 7)[0], 1 - - setlocal conceallevel=0 - unlet g:vim_markdown_conceal - syn off | syn on - endif - -# Links - -Given markdown; -[a](b) - -Execute (link with title): - AssertEqual SyntaxOf('a'), 'mkdLink' - AssertEqual SyntaxOf('b'), 'mkdURL' - -Given markdown; -[a -b](c) - -Execute (link text with newline): - AssertEqual SyntaxOf('a'), 'mkdLink' - AssertEqual SyntaxOf('b'), 'mkdLink' - AssertEqual SyntaxOf('c'), 'mkdURL' - -Given markdown; -[a] b [c](d) - -Execute (link text with bracket sections): - AssertNotEqual SyntaxOf('a'), 'mkdLink' - AssertNotEqual SyntaxOf('b'), 'mkdLink' - AssertEqual SyntaxOf('c'), 'mkdLink' - AssertEqual SyntaxOf('d'), 'mkdURL' - -Given markdown; -[^a]: b - -Execute (footnote is not link): - AssertNotEqual SyntaxOf('a'), 'mkdLinkDef' - -Given markdown; -(a) - -(b) - -Execute (parenthesis not in link): - AssertNotEqual SyntaxOf('a'), 'mkdURL' - AssertNotEqual SyntaxOf('b'), 'mkdURL' - -Given markdown; -[a](b) c [d](e) - -Execute (multiple links on a line): - AssertNotEqual SyntaxOf('c'), 'mkdLink' - AssertNotEqual SyntaxOf('c'), 'mkdURL' - -Given markdown; -[a] (b) - -Execute (space is not allowed between link text and parenthesis): - AssertNotEqual SyntaxOf('a'), 'mkdLink' - AssertNotEqual SyntaxOf('b'), 'mkdURL' - -Given markdown; -[a](b) - -Execute (conceal link): - if has('conceal') - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 1 - AssertEqual synconcealed(1, 4)[0], 1 - AssertEqual synconcealed(1, 4)[0], 1 - AssertEqual synconcealed(1, 5)[0], 1 - AssertEqual synconcealed(1, 6)[0], 1 - setlocal conceallevel=0 - endif - -Execute (disable conceal): - if has('conceal') - let g:vim_markdown_conceal=0 - syn off | syn on - setlocal conceallevel=2 - AssertEqual synconcealed(1, 1)[0], 0 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 0 - AssertEqual synconcealed(1, 4)[0], 0 - AssertEqual synconcealed(1, 4)[0], 0 - AssertEqual synconcealed(1, 5)[0], 0 - AssertEqual synconcealed(1, 6)[0], 0 - - let g:vim_markdown_conceal=1 - syn off | syn on - AssertEqual synconcealed(1, 1)[0], 1 - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 1 - AssertEqual synconcealed(1, 4)[0], 1 - AssertEqual synconcealed(1, 4)[0], 1 - AssertEqual synconcealed(1, 5)[0], 1 - AssertEqual synconcealed(1, 6)[0], 1 - - setlocal conceallevel=0 - unlet g:vim_markdown_conceal - syn off | syn on - endif - -# Autolinks - -Given markdown; -a c - -Execute (autolink): - AssertNotEqual SyntaxOf('a'), 'mkdInlineURL' - AssertEqual SyntaxOf('<'), 'mkdDelimiter' - AssertEqual SyntaxOf('b'), 'mkdInlineURL' - AssertEqual SyntaxOf('>'), 'mkdDelimiter' - AssertNotEqual SyntaxOf('c'), 'mkdInlineURL' - -Given markdown; -http://12monkeys.foo - -Execute (autolink with domain starting with a number): - AssertEqual SyntaxOf('12monkeys'), 'mkdInlineURL' - -Given markdown; - - -Execute (autolink with scheme case is insensitive): - AssertEqual SyntaxOf('a'), 'mkdInlineURL' - -Given markdown; - - -Execute (autolink without scheme is not a link): - AssertNotEqual SyntaxOf('a'), 'mkdInlineURL' - -Given markdown; -< http://a > - - - -Execute (autolink with space is not a link): - AssertNotEqual SyntaxOf('a'), 'mkdInlineURL' - AssertNotEqual SyntaxOf('b'), 'mkdInlineURL' - AssertNotEqual SyntaxOf('c'), 'mkdInlineURL' - AssertNotEqual SyntaxOf('d'), 'mkdInlineURL' - AssertNotEqual SyntaxOf('e'), 'mkdInlineURL' - -Given markdown; -\ - -Execute (autolinks can be backslash escaped): - AssertNotEqual SyntaxOf('<'), 'mkdDelimiter' - -Given markdown; -a (http://b.bb) c - -Execute (autolink in parenthesis): - AssertNotEqual SyntaxOf('a'), 'mkdInlineURL' - AssertEqual SyntaxOf('('), 'mkdDelimiter' - AssertEqual SyntaxOf('b'), 'mkdInlineURL' - AssertEqual SyntaxOf(')'), 'mkdDelimiter' - AssertNotEqual SyntaxOf('c'), 'mkdInlineURL' - -Given markdown; -[![a](http://b)](http://c) - -Execute (autolink in link text): - AssertEqual SyntaxOf('!'), 'mkdDelimiter' - AssertEqual SyntaxOf('a'), 'mkdLink' - AssertEqual SyntaxOf('b'), 'mkdURL' - AssertEqual SyntaxOf('c'), 'mkdURL' - -Given markdown; -# [h1link](url) - -## [h2link](url) - -### [h3link](url) - -#### [h4link](url) - -##### [h5link](url) - -###### [h6link](url) - -[h1link_b](url) -=============== - -[h2link_b](url) ---------------- - -Execute (link in headers): - AssertEqual SyntaxOf('h1link'), 'mkdLink' - AssertEqual SyntaxOf('h2link'), 'mkdLink' - AssertEqual SyntaxOf('h3link'), 'mkdLink' - AssertEqual SyntaxOf('h4link'), 'mkdLink' - AssertEqual SyntaxOf('h5link'), 'mkdLink' - AssertEqual SyntaxOf('h6link'), 'mkdLink' - AssertEqual SyntaxOf('h1link_b'), 'mkdLink' - AssertEqual SyntaxOf('h2link_b'), 'mkdLink' - -Given markdown; -# http://h1link.foo - -## http://h2link.foo - -### http://h3link.foo - -#### http://h4link.foo - -##### http://h5link.foo - -###### http://h6link.foo - -http://h1link_b.foo -=================== - -http://h2link_b.foo -------------------- - -Execute (inline url in headers): - AssertEqual SyntaxOf('h1link'), 'mkdInlineURL' - AssertEqual SyntaxOf('h2link'), 'mkdInlineURL' - AssertEqual SyntaxOf('h3link'), 'mkdInlineURL' - AssertEqual SyntaxOf('h4link'), 'mkdInlineURL' - AssertEqual SyntaxOf('h5link'), 'mkdInlineURL' - AssertEqual SyntaxOf('h6link'), 'mkdInlineURL' - AssertEqual SyntaxOf('h1link_b'), 'mkdInlineURL' - AssertEqual SyntaxOf('h2link_b'), 'mkdInlineURL' - -Given markdown; -> [a](b) -> http://foo.bar - -Execute (link in blockquote): - AssertEqual SyntaxOf('a'), 'mkdLink' - AssertEqual SyntaxOf('foo'), 'mkdInlineURL' - -Given markdown; -[https://domain.tld](https://domain.com) not_a_link - -Execute (link with url title): - AssertEqual SyntaxOf('https://domain.tld'), 'mkdInlineURL' - AssertNotEqual SyntaxOf(']'), 'mkdInlineURL' - AssertEqual SyntaxOf('https://domain.com'), 'mkdURL' - AssertNotEqual SyntaxOf('not_a_link'), 'mkdInlineURL' - -# Code Blocks - -Given markdown; -~~~ -code -~~~ - -Execute (code blocks can be fenced with tildes): - AssertEqual SyntaxOf('c'), 'mkdCode' - -Given markdown; -~~~~ -code -~~~~~ - -Execute (code blocks can be fenced with tildes longer than 3): - AssertEqual SyntaxOf('c'), 'mkdCode' - -Given markdown; -```` -code -````` - -Execute (code blocks can be fenced with backticks longer than 3): - AssertEqual SyntaxOf('c'), 'mkdCode' - -Given markdown; -~~~ruby -code -~~~ - -Execute (code blocks can have a language specifier): - AssertEqual SyntaxOf('c'), 'mkdCode' - -Given markdown; -```c++ -code -``` - -text - -Execute (code blocks can be fenced with backticks and a language specifier): - AssertEqual SyntaxOf('code'), 'mkdCode' - AssertNotEqual SyntaxOf('text'), 'mkdCode' - -# Indent Code Blocks - -Given markdown; -a - - b - c - -Execute (indent code blocks): - AssertNotEqual SyntaxOf('a'), 'mkdCode' - AssertEqual SyntaxOf('b'), 'mkdCode' - AssertEqual SyntaxOf('c'), 'mkdCode' - -Given markdown; -# a - -b - - c - -Execute (indent code blocks after header): - AssertNotEqual SyntaxOf('a'), 'mkdCode' - AssertNotEqual SyntaxOf('b'), 'mkdCode' - AssertEqual SyntaxOf('c'), 'mkdCode' - -Given markdown; -- a - - b - - c - -Execute (indent code blocks after list): - AssertNotEqual SyntaxOf('a'), 'mkdCode' - AssertNotEqual SyntaxOf('b'), 'mkdCode' - AssertEqual SyntaxOf('c'), 'mkdCode' - -Given markdown; - a - b - -Execute (indent code block at beginning of file): - AssertEqual SyntaxOf('a'), 'mkdCode' - AssertEqual SyntaxOf('b'), 'mkdCode' - -Given markdown; -```c++ -#include -code -``` - -```ruby -def a -end -``` - -```ruby {linenos=table,hl_lines=[8,"15-17"],linenostart=199} -class b -end -``` - -Execute (fenced code block syntax with a language specifier): - let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') - call b:func(0) - AssertEqual SyntaxOf('include'), 'cInclude' - AssertEqual SyntaxOf('code'), 'mkdSnippetCPP' - AssertEqual SyntaxOf('def'), 'rubyDefine' - AssertEqual SyntaxOf('class'), 'rubyClass' - -Given markdown; -``` c++ -#include -code -``` - -``` vim -let g:a = 1 -``` - -``` ruby -def a -end -``` - -``` -ruby -class B -end -``` - -Execute (fenced code block syntax with a language specifier after whitespace): - let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') - call b:func(0) - AssertEqual SyntaxOf('include'), 'cInclude' - AssertEqual SyntaxOf('code'), 'mkdSnippetCPP' - AssertEqual SyntaxOf('g:a'), 'vimVar' - AssertEqual SyntaxOf('def'), 'rubyDefine' - AssertNotEqual SyntaxOf('class'), 'rubyClass' - -Given markdown; -```vim -let g:a = 1 -``` - -```viml -let g:b = 1 -``` - -Execute (fenced code block syntax with alias language specifier): - let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') - call b:func(0) - AssertEqual SyntaxOf('g:a'), 'vimVar' - AssertEqual SyntaxOf('g:b'), 'vimVar' - -Given markdown; -```csharp -var s = "foo"; -``` - -Execute (fenced code block languages setting): - let g:vim_markdown_fenced_languages = ['csharp=cs'] - source ../ftplugin/markdown.vim - let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') - call b:func(0) - AssertEqual SyntaxOf('foo'), 'csString' - unlet g:vim_markdown_fenced_languages - -Given markdown; -```vim -let g:a = 1 -``` - -Execute (fenced code block includes language syntax with reopening same buffer): - let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') - call b:func(0) - split - quit - edit - set filetype=markdown - execute "normal! i```vim\let g:a = 1\```" - call b:func(1) - AssertEqual SyntaxOf('g:a'), 'vimVar' - -Given markdown; -```a+b- -code -``` - -Execute (fenced code block syntax with an unknown language specifier): - let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') - call b:func(0) - AssertEqual SyntaxOf('code'), 'mkdSnippetA_B_' - -Given markdown; -``` -= -a -- -``` - -Execute (first = or - in fenced code block is not setex headers): - AssertEqual SyntaxOf('='), 'mkdCode' - AssertEqual SyntaxOf('-'), 'mkdCode' - -Given markdown; -``` {style=""} -a -``` - -Execute (fenced code block with extended info strings): - AssertEqual SyntaxOf('a'), 'mkdCode' - -Given liquid; -```vim -let g:a = 1 -``` - -Execute (fenced code block syntax in liquid file with markdown subtype): - let b:liquid_subtype = 'markdown' - let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') - call b:func(0) - AssertEqual SyntaxOf('g:a'), 'vimVar' - -# Code Blocks in pre and code tag - -Given markdown; -
-a
-
- -Execute (code block in pre tag): - AssertEqual SyntaxOf('a'), 'mkdCode' - -Given markdown; - -a - - -Execute (code block in code tag): - AssertEqual SyntaxOf('a'), 'mkdCode' - -Given markdown; -\ -a -\ - -Execute (not code block in escaped pre tag): - AssertNotEqual SyntaxOf('a'), 'mkdCode' - -Given markdown; -\ -a -\ - -Execute (not code block in escaped code tag): - AssertNotEqual SyntaxOf('a'), 'mkdCode' - -# Code quotes - -Given markdown; -`a` - -Execute (code in code quotes): - AssertEqual SyntaxOf('a'), 'mkdCode' - -Given markdown; -`a\` b `c\` d - -Execute (code quotes not escaped ending with backslash): - AssertEqual SyntaxOf('a\'), 'mkdCode' - AssertNotEqual SyntaxOf('b'), 'mkdCode' - AssertEqual SyntaxOf('c\'), 'mkdCode' - AssertNotEqual SyntaxOf('d'), 'mkdCode' - -Given markdown; -``a\`` b ``c`\`1`` d - -Execute (double code quotes not escaped ending with backslash): - AssertEqual SyntaxOf('a\'), 'mkdCode' - AssertNotEqual SyntaxOf('b'), 'mkdCode' - AssertEqual SyntaxOf('c`\\`1'), 'mkdCode' - AssertNotEqual SyntaxOf('d'), 'mkdCode' - -# Math - -Given markdown; -a $x$ b -c $$y$$ d -\$e\$ -\$\$f\$\$ - -Execute (math): - AssertNotEqual SyntaxOf('x')[0:2], 'tex' - AssertNotEqual SyntaxOf('y')[0:2], 'tex' - let g:vim_markdown_math=1 - syn off | syn on - AssertNotEqual SyntaxOf('a')[0:2], 'tex' - AssertNotEqual SyntaxOf('b')[0:2], 'tex' - AssertNotEqual SyntaxOf('c')[0:2], 'tex' - AssertNotEqual SyntaxOf('d')[0:2], 'tex' - AssertNotEqual SyntaxOf('e')[0:2], 'tex' - AssertNotEqual SyntaxOf('f')[0:2], 'tex' - AssertEqual SyntaxOf('x')[0:2], 'tex' - AssertEqual SyntaxOf('y')[0:2], 'tex' - let g:vim_markdown_math=0 - syn off | syn on - AssertNotEqual SyntaxOf('x')[0:2], 'tex' - AssertNotEqual SyntaxOf('y')[0:2], 'tex' - -Given markdown; -a - -$ -b -$ - -c - -Execute (multiline math): - let g:vim_markdown_math=1 - syn off | syn on - AssertNotEqual SyntaxOf('a')[0:2], 'tex' - AssertEqual SyntaxOf('b')[0:2], 'tex' - AssertNotEqual SyntaxOf('c')[0:2], 'tex' - -Given markdown; -$ \sqrt{a}{b} $ -$$ \frac{a}{b} $$ - -Execute (math tex highlighting): - let g:vim_markdown_math=0 - syn off | syn on - AssertNotEqual SyntaxOf('sqrt')[0:2], 'tex' - AssertNotEqual SyntaxOf('frac')[0:2], 'tex' - let g:vim_markdown_math=1 - syn off | syn on - AssertEqual SyntaxOf('sqrt')[0:2], 'tex' - AssertEqual SyntaxOf('frac')[0:2], 'tex' - -Given markdown; -$a b[$ c - -Execute (math ends with $): - let g:vim_markdown_math=1 - syn off | syn on - AssertEqual SyntaxOf('a')[0:2], 'tex' - AssertEqual SyntaxOf('b')[0:2], 'tex' - AssertNotEqual SyntaxOf('c')[0:2], 'tex' - -Given markdown; -$$a b[$$ c - -Execute (math ends with $$): - let g:vim_markdown_math=1 - syn off | syn on - AssertEqual SyntaxOf('a')[0:2], 'tex' - AssertEqual SyntaxOf('b')[0:2], 'tex' - AssertNotEqual SyntaxOf('c')[0:2], 'tex' - -Given markdown; -$(0 \leq 1)$ - -Execute (math conceal in $): - if has('conceal') - setlocal conceallevel=2 - let g:vim_markdown_math=1 - syn off | syn on - AssertEqual synconcealed(1, 1)[0], 1, '$' - AssertEqual synconcealed(1, 2)[0], 0 - AssertEqual synconcealed(1, 3)[0], 0 - AssertEqual synconcealed(1, 4)[0], 0 - AssertEqual synconcealed(1, 5)[0], 1, '\leq' - AssertEqual synconcealed(1, 6)[0], 1 - AssertEqual synconcealed(1, 7)[0], 1 - AssertEqual synconcealed(1, 8)[0], 1 - AssertEqual synconcealed(1, 9)[0], 0 - AssertEqual synconcealed(1, 10)[0], 0 - AssertEqual synconcealed(1, 11)[0], 0 - AssertEqual synconcealed(1, 12)[0], 1, '$' - setlocal conceallevel=0 - endif - -Given markdown; -$$ -\omega -0 \leq 1 -$$ - -Execute (math conceal in $$): - if has('conceal') - setlocal conceallevel=2 - let g:vim_markdown_math=1 - syn off | syn on - AssertEqual synconcealed(1, 1)[0], 1, '$$' - AssertEqual synconcealed(2, 1)[0], 1, '\omega' - AssertEqual synconcealed(3, 1)[0], 0, '0' - AssertEqual synconcealed(3, 3)[0], 1, '\leq' - AssertEqual synconcealed(3, 8)[0], 0, '1' - AssertEqual synconcealed(4, 1)[0], 1, '$$' - setlocal conceallevel=0 - endif - -# YAML frontmatter - -Given markdown; ---- -a: b ---- - -Execute (YAML frontmatter is controlled by the option): - AssertNotEqual SyntaxOf('a')[0:3], 'yaml' - let g:vim_markdown_frontmatter=1 - syn off | syn on - AssertEqual SyntaxOf('a')[0:3], 'yaml' - let g:vim_markdown_frontmatter=0 - syn off | syn on - AssertNotEqual SyntaxOf('a')[0:3], 'yaml' - -Given markdown; - ---- -a: b ---- - -Execute (YAML frontmatter only works if it's the first thing in the file): - let g:vim_markdown_frontmatter=1 - syn off | syn on - AssertNotEqual SyntaxOf('a')[0:3], 'yaml' - -Given markdown; ---- -a: b ---- - ---- - -Execute (rules are not mistaken by YAML frontmatter delimiters): - let g:vim_markdown_frontmatter=1 - syn off | syn on - AssertEqual SyntaxAt(5, 1), 'mkdRule' - unlet g:vim_markdown_frontmatter - -# TOML frontmatter - -Given markdown; -+++ -a = "b" -+++ - -Execute (TOML frontmatter is controlled by the option): - syn off | syn on - AssertNotEqual SyntaxOf('b'), 'tomlString' - let g:vim_markdown_toml_frontmatter=1 - syn off | syn on - AssertEqual SyntaxOf('b'), 'tomlString' - let g:vim_markdown_toml_frontmatter=0 - syn off | syn on - AssertNotEqual SyntaxOf('b'), 'tomlString' - -Given markdown; - -+++ -a = "b" -+++ - -Execute (TOML frontmatter only works if it's the first thing in the file): - let g:vim_markdown_toml_frontmatter=1 - syn off | syn on - AssertNotEqual SyntaxOf('b'), 'tomlString' - unlet g:vim_markdown_toml_frontmatter - -# JSON frontmatter - -Given markdown; -{ - "a": "b" -} - -Execute (JSON frontmatter is controlled by the option): - syn off | syn on - AssertNotEqual SyntaxOf('a'), 'jsonKeyword' - let g:vim_markdown_json_frontmatter=1 - syn off | syn on - AssertEqual SyntaxOf('a'), 'jsonKeyword' - let g:vim_markdown_json_frontmatter=0 - syn off | syn on - AssertNotEqual SyntaxOf('a'), 'jsonKeyword' - -Given markdown; - -{ - "a": "b" -} - -Execute (JSON frontmatter only works if it's the first thing in the file): - let g:vim_markdown_json_frontmatter=1 - syn off | syn on - AssertNotEqual SyntaxOf('a'), 'jsonKeyword' - unlet g:vim_markdown_json_frontmatter - -# Header - -Given markdown; -# #a -ccc - -## #b -ddd - -Execute (header title starts with #): - AssertEqual SyntaxOf('a'), 'htmlH1' - AssertEqual SyntaxOf('b'), 'htmlH2' - -Given markdown; -# h1 space - -#h1 nospace - -# h1 2 spaces - -# h1 trailing hash # - -## h2 space - -##h2 nospace - -## h2 trailing hash ## - -### h3 space - -###h3 nospace - -### h3 trailing hash ### - -#### h4 - -##### h5 - -###### h6 - -Execute (atx headers): - AssertEqual SyntaxOf(' h1 space'), 'htmlH1' - AssertEqual SyntaxOf('h1 nospace'), 'htmlH1' - AssertEqual SyntaxOf(' h1 2 spaces'), 'htmlH1' - AssertEqual SyntaxOf(' h1 trailing hash '), 'htmlH1' - AssertEqual SyntaxOf(' h2 space'), 'htmlH2' - AssertEqual SyntaxOf('h2 nospace'), 'htmlH2' - AssertEqual SyntaxOf(' h2 trailing hash '), 'htmlH2' - AssertEqual SyntaxOf(' h3 space'), 'htmlH3' - AssertEqual SyntaxOf('h3 nospace'), 'htmlH3' - AssertEqual SyntaxOf(' h3 trailing hash '), 'htmlH3' - AssertEqual SyntaxOf(' h4'), 'htmlH4' - AssertEqual SyntaxOf(' h5'), 'htmlH5' - AssertEqual SyntaxOf(' h6'), 'htmlH6' - -Given markdown; -# h1 before h2 - -## h2 between h1s - -# h1 after h2 - -Execute (atx headers relative positions): - AssertEqual SyntaxOf(' h1 before h2'), 'htmlH1' - AssertEqual SyntaxOf(' h2 between h1s'), 'htmlH2' - AssertEqual SyntaxOf(' h1 after h2'), 'htmlH1' - -Given markdown; -setex h1 -======== - -setex h2 --------- - -setex h1 single punctuation -= - -setex h1 punctuation longer than header -================================ - -Execute (setex headers): - AssertEqual SyntaxOf('setex h1'), 'htmlH1' - AssertEqual SyntaxOf('^========$'), 'htmlH1' - AssertEqual SyntaxOf('setex h2'), 'htmlH2' - AssertEqual SyntaxOf('--------'), 'htmlH2' - AssertEqual SyntaxOf('setex h1 single punctuation'), 'htmlH1' - AssertEqual SyntaxOf('^=$'), 'htmlH1' - AssertEqual SyntaxOf('setex h1 punctuation longer than header'), 'htmlH1' - AssertEqual SyntaxOf('^================================$'), 'htmlH1' - -Given markdown; -- not Setex -- because list - -Execute (prevent list vs Setex confusion): - AssertNotEqual SyntaxOf('- not Setex'), 'htmlH2' - AssertNotEqual SyntaxOf('- becuase list'), 'htmlH2' - -Given markdown; -setex h1 before atx -=================== - -## atx h2 - -### atx h3 - -# atx h1 - -setex h2 ------------------- - -### atx h3 2 - -Execute (mixed atx and setex headers): - AssertEqual SyntaxOf('setex h1 before atx'), 'htmlH1' - AssertEqual SyntaxOf('==================='), 'htmlH1' - AssertEqual SyntaxOf(' atx h2'), 'htmlH2' - AssertEqual SyntaxOf(' atx h3'), 'htmlH3' - AssertEqual SyntaxOf(' atx h1'), 'htmlH1' - AssertEqual SyntaxOf('setex h2'), 'htmlH2' - AssertEqual SyntaxOf('------------------'), 'htmlH2' - -# List - -Given markdown; -- a & b -1. c > d - -Execute (& and > are not marked as htmlError in lists): - AssertEqual SyntaxOf('-'), 'mkdListItem' - AssertEqual SyntaxOf('1.'), 'mkdListItem' - AssertNotEqual SyntaxOf('&'), 'htmlError' - AssertNotEqual SyntaxOf('>'), 'htmlError' - -Given markdown; -1. a -2. b - -Execute (list after line break): - AssertEqual SyntaxOf('1'), 'mkdListItem' - AssertEqual SyntaxOf('2'), 'mkdListItem' - -# HTML - -Given markdown; -a - -

b

- -- c - -Execute (HTML tag in text): - AssertEqual SyntaxOf('p'), 'htmlTagName' - AssertEqual SyntaxOf('

'), 'htmlTag' - AssertEqual SyntaxOf('

'), 'htmlEndTag' - AssertEqual SyntaxOf('span'), 'htmlTagName' - AssertEqual SyntaxOf(''), 'htmlTag' - AssertEqual SyntaxOf(''), 'htmlEndTag' - -Given markdown; -# _h1_ - -## _h2_ - -### _h3_ - -#### _h4_ - -##### _h5_ - -###### _h6_ - -Execute (underscore italic text in atx headings): - AssertEqual SyntaxOf('h1'), 'htmlItalic' - AssertEqual SyntaxOf('h2'), 'htmlItalic' - AssertEqual SyntaxOf('h3'), 'htmlItalic' - AssertEqual SyntaxOf('h4'), 'htmlItalic' - AssertEqual SyntaxOf('h5'), 'htmlItalic' - AssertEqual SyntaxOf('h6'), 'htmlItalic' - -Given markdown; -# *h1* - -## *h2* - -### *h3* - -#### *h4* - -##### *h5* - -###### *h6* - -Execute (asterisk italic text in atx headings): - AssertEqual SyntaxOf('h1'), 'htmlItalic' - AssertEqual SyntaxOf('h2'), 'htmlItalic' - AssertEqual SyntaxOf('h3'), 'htmlItalic' - AssertEqual SyntaxOf('h4'), 'htmlItalic' - AssertEqual SyntaxOf('h5'), 'htmlItalic' - AssertEqual SyntaxOf('h6'), 'htmlItalic' - -Given markdown; -_h1_ -= - -_h2_ -- - -Execute (underscore italic text in setext headings): - AssertEqual SyntaxOf('h1'), 'htmlItalic' - AssertEqual SyntaxOf('h2'), 'htmlItalic' - -Given markdown; -*h1* -= - -*h2* -- - -Execute (asterisk italic text in setext headings): - AssertEqual SyntaxOf('h1'), 'htmlItalic' - AssertEqual SyntaxOf('h2'), 'htmlItalic' - -Given markdown; -# __h1__ - -## __h2__ - -### __h3__ - -#### __h4__ - -##### __h5__ - -###### __h6__ - -Execute (underscore bold text in atx headings): - AssertEqual SyntaxOf('h1'), 'htmlBold' - AssertEqual SyntaxOf('h2'), 'htmlBold' - AssertEqual SyntaxOf('h3'), 'htmlBold' - AssertEqual SyntaxOf('h4'), 'htmlBold' - AssertEqual SyntaxOf('h5'), 'htmlBold' - AssertEqual SyntaxOf('h6'), 'htmlBold' - -Given markdown; -# **h1** - -## **h2** - -### **h3** - -#### **h4** - -##### **h5** - -###### **h6** - -Execute (asterisk bold text in atx headings): - AssertEqual SyntaxOf('h1'), 'htmlBold' - AssertEqual SyntaxOf('h2'), 'htmlBold' - AssertEqual SyntaxOf('h3'), 'htmlBold' - AssertEqual SyntaxOf('h4'), 'htmlBold' - AssertEqual SyntaxOf('h5'), 'htmlBold' - AssertEqual SyntaxOf('h6'), 'htmlBold' - -Given markdown; -__h1__ -= - -__h2__ -- - -Execute (underscore bold text in setext headings): - AssertEqual SyntaxOf('h1'), 'htmlBold' - AssertEqual SyntaxOf('h2'), 'htmlBold' - -Given markdown; -**h1** -= - -**h2** -- - -Execute (asterisk bold text in setext headings): - AssertEqual SyntaxOf('h1'), 'htmlBold' - AssertEqual SyntaxOf('h2'), 'htmlBold' - -Given markdown; -# ___h1___ - -## ___h2___ - -### ___h3___ - -#### ___h4___ - -##### ___h5___ - -###### ___h6___ - -Execute (underscore bold italic text in atx headings): - AssertEqual SyntaxOf('h1'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h2'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h3'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h4'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h5'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h6'), 'htmlBoldItalic' - -Given markdown; -# ***h1*** - -## ***h2*** - -### ***h3*** - -#### ***h4*** - -##### ***h5*** - -###### ***h6*** - -Execute (asterisk bold italic text in atx headings): - AssertEqual SyntaxOf('h1'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h2'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h3'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h4'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h5'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h6'), 'htmlBoldItalic' - -Given markdown; -___h1___ -= - -___h2___ -- - -Execute (underscore bold italic text in setext headings): - AssertEqual SyntaxOf('h1'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h2'), 'htmlBoldItalic' - -Given markdown; -***h1*** -= - -***h2*** -- - -Execute (asterisk bold italic text in setext headings): - AssertEqual SyntaxOf('h1'), 'htmlBoldItalic' - AssertEqual SyntaxOf('h2'), 'htmlBoldItalic' - -Given markdown; -# [^h1] - -## [^h2] - -### [^h3] - -#### [^h4] - -##### [^h5] - -###### [^h6] - -Execute (footnotes in atx headings): - AssertEqual SyntaxOf('h1'), 'mkdFootnotes' - AssertEqual SyntaxOf('h2'), 'mkdFootnotes' - AssertEqual SyntaxOf('h3'), 'mkdFootnotes' - AssertEqual SyntaxOf('h4'), 'mkdFootnotes' - AssertEqual SyntaxOf('h5'), 'mkdFootnotes' - AssertEqual SyntaxOf('h6'), 'mkdFootnotes' - -Given markdown; -[^h1] -= - -[^h2] -- - -Execute (footnotes in setext headings): - AssertEqual SyntaxOf('h1'), 'mkdFootnotes' - AssertEqual SyntaxOf('h2'), 'mkdFootnotes' diff --git a/.vim/pack/plugins/start/vim-markdown/test/table-format.vader b/.vim/pack/plugins/start/vim-markdown/test/table-format.vader deleted file mode 100644 index f7028cb..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/table-format.vader +++ /dev/null @@ -1,85 +0,0 @@ -Before: - let &gdefault = 1 - -After: - let &gdefault = 0 - -Given markdown; -| normal |no space| 2 spaces || -| - |-| --- || -| normal |no space| 2 spaces || - -Execute (format unformatted table): - TableFormat - -Expect (table is formatted): - | normal | no space | 2 spaces | | - |--------|----------|----------|--| - | normal | no space | 2 spaces | | - -Given markdown; -| a | b | -|---|---| -| c | d | - -Execute (format well formatted table): - TableFormat - -Expect (table is not modified): - | a | b | - |---|---| - | c | d | - -Given markdown (indented table); - | a | b | - |---|---| - | c | d | - -Execute (format well formatted, indented table): - TableFormat - -Expect (table is not modified): - | a | b | - |---|---| - | c | d | - -Given markdown; -| left |right| center || -| :- | --: |:---:|:| -| left |right| center || - -Execute (format table with colons): - TableFormat - -Expect (preserve colons to align text): - | left | right | center | | - |:-----|------:|:------:|:--| - | left | right | center | | - -Given markdown (indented table with colons); - | left |right| center || - | :- | --: |:---:|:| - | left |right| center || - -Execute (format indented table with colons): - TableFormat - -Expect (preserve colons to align text): - | left | right | center | | - |:-----|------:|:------:|:--| - | left | right | center | | - -Given markdown (borderless table); - left |right| center - :- | --: |:---: - left |right| center - -Execute (format borderless table): - let g:vim_markdown_borderless_table = 1 - TableFormat - unlet g:vim_markdown_borderless_table - -Expect (table with borders): - | left | right | center | - |:-----|------:|:------:| - | left | right | center | diff --git a/.vim/pack/plugins/start/vim-markdown/test/toc-autofit.vader b/.vim/pack/plugins/start/vim-markdown/test/toc-autofit.vader deleted file mode 100644 index 2678997..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/toc-autofit.vader +++ /dev/null @@ -1,53 +0,0 @@ -" Tests toc window auto-fit to longest header, but without exceeding half screen. - -Given markdown; -# chap 1 - -# chap 2 - -# chap 3 - -# chap 4 - -# chap 5 - -# chap 6 - -# chap 7 - -# chap 8 - -# chap 9 - -# chap 10 - -# chap 11 - -# chap 12 - -## chap 12.1 - -### chap 12.1.1 - -#### chap 12.1.1.1 - -##### chap 12.1.1.1.1 - -###### chap 12.1.1.1.1.1 - -# chap 13 - -Execute (toc window autofit width): - set number - let g:vim_markdown_toc_autofit = 1 - let line = '###### chap 12.1.1.1.1.1' - AssertEqual getline('33'), line - :Toc - let real_width = winwidth(0) - :lclose - let expected_width = len(line) + 2*5 + 1 + 3 - 7 - AssertEqual real_width, expected_width - set nonumber -" 2 spaces * 5 additional header levels + 1 space for first header + -" 3 spaces for line numbers - 7 chars ('###### ') that don't show up on the TOC - diff --git a/.vim/pack/plugins/start/vim-markdown/test/toc.vader b/.vim/pack/plugins/start/vim-markdown/test/toc.vader deleted file mode 100644 index 5126952..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/toc.vader +++ /dev/null @@ -1,181 +0,0 @@ -Given markdown; -# a - -Execute (Toc does not set nomodifiable on other files): - " Sanity check. - Assert &modifiable - - :Toc - :lclose - :edit a - - Assert &modifiable - -Given markdown; -header 1 -======== - -test - -header 2 --------- - -test - -### header 3 - -test - -Execute (Toc setex headers): - :Toc - -Expect (setex headers): - header 1 - header 2 - header 3 - -Given markdown; -# header 1 - -test - -## header 2 - -test - -### header 3 - -test - -Execute (Toc atx headers): - :Toc - -Expect (atx headers): - header 1 - header 2 - header 3 - -Given markdown; -ATX tests. - -# h1 space - -#h1 nospace - -# h1 2 spaces - -# h1 trailing hash # - -## h2 space - -##h2 nospace - -## h2 trailing hash ## - -### h3 space - -###h3 nospace - -### h3 trailing hash ### - -#### h4 - -##### h5 - -###### h6 - ---- - -Relative positions. - -# h1 before h2 - -## h2 between h1s - -# h1 after h2 - ---- - -Setex tests. - -setex h1 -======== - -setex h2 --------- - -setex h1 single punctuation -= - -setex h1 punctuation longer than header -================================ - -Prevent list vs Setex confusion: - -- not Setex -- because list - ---- - -Mixed tests. - -setex h1 before atx -=================== - -## atx h2 - -### atx h3 - -# atx h1 - -setex h2 ------------------- - -### atx h3 2 - -Execute (Toc multiple headers): - :Toc - -Expect (multiple headers): - h1 space - h1 nospace - h1 2 spaces - h1 trailing hash - h2 space - h2 nospace - h2 trailing hash - h3 space - h3 nospace - h3 trailing hash - h4 - h5 - h6 - h1 before h2 - h2 between h1s - h1 after h2 - setex h1 - setex h2 - setex h1 single punctuation - setex h1 punctuation longer than header - setex h1 before atx - atx h2 - atx h3 - atx h1 - setex h2 - atx h3 2 - -Execute: - :lclose - -Given markdown; -# header 1 - -## header 2 - -### header 3 - -Execute (Toc cursor on the current header): - normal! G - :Toc - AssertEqual line('.'), 3 - :lclose diff --git a/.vim/pack/plugins/start/vim-markdown/test/vimrc b/.vim/pack/plugins/start/vim-markdown/test/vimrc deleted file mode 100644 index 84a85b0..0000000 --- a/.vim/pack/plugins/start/vim-markdown/test/vimrc +++ /dev/null @@ -1,31 +0,0 @@ -set nocompatible - -let $LANG='en_US' - -filetype off -set runtimepath+=../ -set runtimepath+=../build/tabular/ -set runtimepath+=../build/vim-toml/ -set runtimepath+=../build/vim-json/ -set runtimepath+=../build/vader.vim/ -filetype on - -filetype plugin indent on -syntax enable - -function! Markdown_GetScriptID(fname) abort - let l:snlist = '' - redir => l:snlist - silent! scriptnames - redir END - let l:mx = '^\s*\(\d\+\):\s*\(.*\)$' - for l:line in split(l:snlist, "\n") - if stridx(substitute(l:line, '\\', '/', 'g'), a:fname) >= 0 - return substitute(l:line, l:mx, '\1', '') - endif - endfor -endfunction - -function! Markdown_GetFunc(fname, funcname) abort - return function('' . Markdown_GetScriptID(a:fname) . '_' . a:funcname) -endfunction diff --git a/.vim/pack/plugins/start/vim-snipmate/README b/.vim/pack/plugins/start/vim-snipmate/README new file mode 100644 index 0000000..943b24d --- /dev/null +++ b/.vim/pack/plugins/start/vim-snipmate/README @@ -0,0 +1,28 @@ +This is a mirror of http://www.vim.org/scripts/script.php?script_id=2540 + +snipMate.vim aims to be an unobtrusive, concise vim script that implements some of TextMate's snippets features in Vim. A snippet is a piece of often-typed text that you can insert into your document using a trigger word followed by a . + +For instance, in a C file using the default installation of snipMate.vim, if you type "for" in insert mode, it will expand a typical for loop in C: + + for (i = 0; i < count; i++) { + + } + +To go to the next item in the loop, simply over to it; if there is repeated code, such as the "i" variable in this example, you can simply start typing once it's highlighted and all the matches specified in the snippet will be updated. + +Requires Vim 7 or higher. +For a quick introduction, see this screencast: http://vimeo.com/3535418 +For more help see the documentation that comes with snipMate in ~/.vim/doc/snipMate.txt. + +snipMate.vim has the following features among others: + - The syntax of snippets is very similar to TextMate's, allowing easy conversion. + - The position of the snippet is kept transparently (i.e., it does not use marks/placeholders inserted into the buffer), allowing you to escape out of an incomplete snippet, something particularly useful in Vim. + - Variables in snippets are updated as-you-type. + - Snippets can have multiple matches. + - Snippets can be out of order. For instance, in a do...while loop, the condition can be added before the code. + +Bug reports, feature requests, etc. are welcome and can be emailed to me or submitted on the issue tracker: http://code.google.com/p/snipmate/issues/list + +If you would like to watch the development of this plugin, you can also follow it on github: http://github.com/msanders/snipmate.vim + +Enjoy! diff --git a/.vim/pack/plugins/start/vim-snipmate/doc/tags b/.vim/pack/plugins/start/vim-snipmate/doc/tags deleted file mode 100644 index b21f751..0000000 --- a/.vim/pack/plugins/start/vim-snipmate/doc/tags +++ /dev/null @@ -1,33 +0,0 @@ -'snippets' snipMate.txt /*'snippets'* -.snippet snipMate.txt /*.snippet* -.snippets snipMate.txt /*.snippets* -ExtractSnips() snipMate.txt /*ExtractSnips()* -ExtractSnipsFile() snipMate.txt /*ExtractSnipsFile()* -Filename() snipMate.txt /*Filename()* -ResetSnippets() snipMate.txt /*ResetSnippets()* -g:snippets_dir snipMate.txt /*g:snippets_dir* -g:snips_author snipMate.txt /*g:snips_author* -i_CTRL-R_ snipMate.txt /*i_CTRL-R_* -list-snippets snipMate.txt /*list-snippets* -multi_snip snipMate.txt /*multi_snip* -snipMate snipMate.txt /*snipMate* -snipMate-$# snipMate.txt /*snipMate-$#* -snipMate-${#:} snipMate.txt /*snipMate-${#:}* -snipMate-${#} snipMate.txt /*snipMate-${#}* -snipMate-author snipMate.txt /*snipMate-author* -snipMate-commands snipMate.txt /*snipMate-commands* -snipMate-contact snipMate.txt /*snipMate-contact* -snipMate-description snipMate.txt /*snipMate-description* -snipMate-disadvantages snipMate.txt /*snipMate-disadvantages* -snipMate-expandtab snipMate.txt /*snipMate-expandtab* -snipMate-features snipMate.txt /*snipMate-features* -snipMate-filename snipMate.txt /*snipMate-filename* -snipMate-indenting snipMate.txt /*snipMate-indenting* -snipMate-placeholders snipMate.txt /*snipMate-placeholders* -snipMate-remap snipMate.txt /*snipMate-remap* -snipMate-settings snipMate.txt /*snipMate-settings* -snipMate-usage snipMate.txt /*snipMate-usage* -snipMate.txt snipMate.txt /*snipMate.txt* -snippet snipMate.txt /*snippet* -snippet-syntax snipMate.txt /*snippet-syntax* -snippets snipMate.txt /*snippets* diff --git a/.vim/pack/plugins/start/vim-snipmate/snippets/_.snippets b/.vim/pack/plugins/start/vim-snipmate/snippets/_.snippets index 4abda48..c3925a5 100644 --- a/.vim/pack/plugins/start/vim-snipmate/snippets/_.snippets +++ b/.vim/pack/plugins/start/vim-snipmate/snippets/_.snippets @@ -5,31 +5,3 @@ snippet c) `&enc[:2] == "utf" ? "©" : "(c)"` Copyright `strftime("%Y")` ${1:`g:snips_author`}. All Rights Reserved.${2} snippet date `strftime("%Y-%m-%d")` -snippet mfg - Mit freundlichen Grüßen, - Stefan Hagen -snippet mailf - Sehr geehrte Frau ${1:Name}, - - ${2:Text} - - Mit freundlichen Grüßen, - Stefan Hagen -snippet mailh - Sehr geehrter Herr ${1:Name}, - - ${2:Text} - - Mit freundlichen Grüßen, - Stefan Hagen -snippet sig - -- - Stefan Hagen - T: +49 (0)176 64292517 - M: sh@codevoid.de -snippet je - `strftime("%A %d.%m.%d %H:%M")`: -snippet tel - 017664292517 -snippet worktel - 015162345601 diff --git a/.vim/pack/plugins/start/vim-snipmate/snippets/autoit.snippets b/.vim/pack/plugins/start/vim-snipmate/snippets/autoit.snippets new file mode 100644 index 0000000..690018c --- /dev/null +++ b/.vim/pack/plugins/start/vim-snipmate/snippets/autoit.snippets @@ -0,0 +1,66 @@ +snippet if + If ${1:condition} Then + ${2:; True code} + EndIf +snippet el + Else + ${1} +snippet elif + ElseIf ${1:condition} Then + ${2:; True code} +# If/Else block +snippet ifel + If ${1:condition} Then + ${2:; True code} + Else + ${3:; Else code} + EndIf +# If/ElseIf/Else block +snippet ifelif + If ${1:condition 1} Then + ${2:; True code} + ElseIf ${3:condition 2} Then + ${4:; True code} + Else + ${5:; Else code} + EndIf +# Switch block +snippet switch + Switch (${1:condition}) + Case {$2:case1}: + {$3:; Case 1 code} + Case Else: + {$4:; Else code} + EndSwitch +# Select block +snippet select + Select (${1:condition}) + Case {$2:case1}: + {$3:; Case 1 code} + Case Else: + {$4:; Else code} + EndSelect +# While loop +snippet while + While (${1:condition}) + ${2:; code...} + WEnd +# For loop +snippet for + For ${1:n} = ${3:1} to ${2:count} + ${4:; code...} + Next +# New Function +snippet func + Func ${1:fname}(${2:`indent('.') ? 'self' : ''`}): + ${4:Return} + EndFunc +# Message box +snippet msg + MsgBox(${3:MsgType}, ${1:"Title"}, ${2:"Message Text"}) +# Debug Message +snippet debug + MsgBox(0, "Debug", ${1:"Debug Message"}) +# Show Variable Debug Message +snippet showvar + MsgBox(0, "${1:VarName}", $1) diff --git a/.vim/pack/plugins/start/vim-snipmate/snippets/c.snippets b/.vim/pack/plugins/start/vim-snipmate/snippets/c.snippets index 654e889..89b81ba 100644 --- a/.vim/pack/plugins/start/vim-snipmate/snippets/c.snippets +++ b/.vim/pack/plugins/start/vim-snipmate/snippets/c.snippets @@ -1,6 +1,6 @@ # main() snippet main - int main(int argc, const * char argv[]) + int main(int argc, const char *argv[]) { ${1} return 0; diff --git a/.vim/pack/plugins/start/vim-snipmate/snippets/mako.snippets b/.vim/pack/plugins/start/vim-snipmate/snippets/mako.snippets new file mode 100644 index 0000000..2a0aef9 --- /dev/null +++ b/.vim/pack/plugins/start/vim-snipmate/snippets/mako.snippets @@ -0,0 +1,54 @@ +snippet def + <%def name="${1:name}"> + ${2:} + +snippet call + <%call expr="${1:name}"> + ${2:} + +snippet doc + <%doc> + ${1:} + +snippet text + <%text> + ${1:} + +snippet for + % for ${1:i} in ${2:iter}: + ${3:} + % endfor +snippet if if + % if ${1:condition}: + ${2:} + % endif +snippet if if/else + % if ${1:condition}: + ${2:} + % else: + ${3:} + % endif +snippet try + % try: + ${1:} + % except${2:}: + ${3:pass} + % endtry +snippet wh + % while ${1:}: + ${2:} + % endwhile +snippet $ + ${ ${1:} } +snippet <% + <% ${1:} %> +snippet +snippet inherit + <%inherit file="${1:filename}" /> +snippet include + <%include file="${1:filename}" /> +snippet namespace + <%namespace file="${1:name}" /> +snippet page + <%page args="${1:}" /> diff --git a/.vim/pack/plugins/start/vim-snipmate/snippets/objc.snippets b/.vim/pack/plugins/start/vim-snipmate/snippets/objc.snippets new file mode 100644 index 0000000..4749bb7 --- /dev/null +++ b/.vim/pack/plugins/start/vim-snipmate/snippets/objc.snippets @@ -0,0 +1,184 @@ +# #import <...> +snippet Imp + #import <${1:Cocoa/Cocoa.h}>${2} +# #import "..." +snippet imp + #import "${1:`Filename()`.h}"${2} +# @selector(...) +snippet sel + @selector(${1:method}:)${3} +# @"..." string +snippet s + @"${1}"${2} +# Object +snippet o + ${1:NSObject} *${2:foo} = [${3:$1 alloc}]${4};${5} +# NSLog(...) +snippet log + NSLog(@"${1:%@}"${2});${3} +# Class +snippet objc + @interface ${1:`Filename('', 'someClass')`} : ${2:NSObject} + { + } + @end + + @implementation $1 + ${3} + @end +# Class Interface +snippet int + @interface ${1:`Filename('', 'someClass')`} : ${2:NSObject} + {${3} + } + ${4} + @end +# Class Implementation +snippet impl + @implementation ${1:`Filename('', 'someClass')`} + ${2} + @end +snippet init + - (id)init + { + [super init]; + return self; + } +snippet ifself + if (self = [super init]) { + ${1:/* code */} + } + return self; +snippet ibo + IBOutlet ${1:NSSomeClass} *${2:$1};${3} +# Category +snippet cat + @interface ${1:NSObject} (${2:Category}) + @end + + @implementation $1 ($2) + ${3} + @end +# Category Interface +snippet cath + @interface ${1:NSObject} (${2:Category}) + ${3} + @end +# NSArray +snippet array + NSMutableArray *${1:array} = [NSMutable array];${2} +# NSDictionary +snippet dict + NSMutableDictionary *${1:dict} = [NSMutableDictionary dictionary];${2} +# NSBezierPath +snippet bez + NSBezierPath *${1:path} = [NSBezierPath bezierPath];${2} +# Method +snippet m + - (${1:id})${2:method} + { + ${3} + } +# Method declaration +snippet md + - (${1:id})${2:method};${3} +# IBAction declaration +snippet ibad + - (IBAction)${1:method}:(${2:id})sender;${3} +# IBAction method +snippet iba + - (IBAction)${1:method}:(${2:id})sender + { + ${3} + } +# awakeFromNib method +snippet wake + - (void)awakeFromNib + { + ${1} + } +# Class Method +snippet M + + (${1:id})${2:method} + {${3} + return nil; + } +# Sub-method (Call super) +snippet sm + - (${1:id})${2:method} + { + [super $2];${3} + return self; + } +# Method: Initialize +snippet I + + (void) initialize + { + [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWIthObjectsAndKeys: + ${1}@"value", @"key", + nil]]; + } +# Accessor Methods For: +# Object +snippet objacc + - (${1:id})${2:thing} + { + return $2; + } + + - (void)set$2:($1)${3:new$2} + { + [$3 retain]; + [$2 release]; + $2 = $3; + }${4} +# for (object in array) +snippet forin + for (${1:Class} *${2:some$1} in ${3:array}) { + ${4} + } +snippet forarray + unsigned int ${1:object}Count = [${2:array} count]; + + for (unsigned int index = 0; index < $1Count; index++) { + ${3:id} $1 = [$2 $1AtIndex:index]; + ${4} + } +# IBOutlet +# @property (Objective-C 2.0) +snippet prop + @property (${1:retain}) ${2:NSSomeClass} ${3:*$2};${4} +# @synthesize (Objective-C 2.0) +snippet syn + @synthesize ${1:property};${2} +# [[ alloc] init] +snippet alloc + [[${1:foo} alloc] init${2}];${3} +# retain +snippet ret + [${1:foo} retain];${2} +# release +snippet rel + [${1:foo} release]; + ${2:$1 = nil;} +# autorelease +snippet arel + [${1:foo} autorelease]; +# autorelease pool +snippet pool + NSAutoreleasePool *${1:pool} = [[NSAutoreleasePool alloc] init]; + ${2:/* code */} + [$1 drain]; +# Throw an exception +snippet except + NSException *${1:badness}; + $1 = [NSException exceptionWithName:@"${2:$1Name}" + reason:@"${3}" + userInfo:nil]; + [$1 raise]; +snippet prag + #pragma mark ${1:foo} +snippet cl + @class ${1:Foo};${2} +snippet color + [[NSColor ${1:blackColor}] set]; diff --git a/.vim/pack/plugins/start/vim-snipmate/snippets/sh.snippets b/.vim/pack/plugins/start/vim-snipmate/snippets/sh.snippets index 0ef01a2..f035126 100644 --- a/.vim/pack/plugins/start/vim-snipmate/snippets/sh.snippets +++ b/.vim/pack/plugins/start/vim-snipmate/snippets/sh.snippets @@ -1,6 +1,6 @@ -# #!/bin/sh +# #!/bin/bash snippet #! - #!/bin/sh + #!/bin/bash snippet if if [[ ${1:condition} ]]; then @@ -26,14 +26,3 @@ snippet case ${2:pattern}) ${3};; esac -snippet getopt - while getopts ao: name - do - case $name in - a) flag=1 ;; - o) oarg=$OPTARG ;; - ?) echo "Usage: ..."; exit 2 ;; - esac - done - shift $(($OPTIND - 1)) - echo "Non-option arguments: " "$@" diff --git a/.vim/pack/plugins/start/vim-snipmate/snippets/zsh.snippets b/.vim/pack/plugins/start/vim-snipmate/snippets/zsh.snippets new file mode 100644 index 0000000..7aee05b --- /dev/null +++ b/.vim/pack/plugins/start/vim-snipmate/snippets/zsh.snippets @@ -0,0 +1,58 @@ +# #!/bin/zsh +snippet #! + #!/bin/zsh + +snippet if + if ${1:condition}; then + ${2:# statements} + fi +snippet ife + if ${1:condition}; then + ${2:# statements} + else + ${3:# statements} + fi +snippet elif + elif ${1:condition} ; then + ${2:# statements} +snippet for + for (( ${2:i} = 0; $2 < ${1:count}; $2++ )); do + ${3:# statements} + done +snippet fore + for ${1:item} in ${2:list}; do + ${3:# statements} + done +snippet wh + while ${1:condition}; do + ${2:# statements} + done +snippet until + until ${1:condition}; do + ${2:# statements} + done +snippet repeat + repeat ${1:integer}; do + ${2:# statements} + done +snippet case + case ${1:word} in + ${2:pattern}) + ${3};; + esac +snippet select + select ${1:answer} in ${2:choices}; do + ${3:# statements} + done +snippet ( + ( ${1:#statements} ) +snippet { + { ${1:#statements} } +snippet [ + [[ ${1:test} ]] +snippet always + { ${1:try} } always { ${2:always} } +snippet fun + function ${1:name} (${2:args}) { + ${3:# body} + } diff --git a/.vim/pack/plugins/start/vim-spotdiff/LICENSE b/.vim/pack/plugins/start/vim-spotdiff/LICENSE index 78a3824..f901d37 100644 --- a/.vim/pack/plugins/start/vim-spotdiff/LICENSE +++ b/.vim/pack/plugins/start/vim-spotdiff/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014-2023 Rick Howe (Takumi Ohtani) +Copyright (c) 2014-2025 Rick Howe (Takumi Ohtani) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/.vim/pack/plugins/start/vim-spotdiff/autoload/diffutil.vim b/.vim/pack/plugins/start/vim-spotdiff/autoload/diffutil.vim new file mode 100644 index 0000000..7d65275 --- /dev/null +++ b/.vim/pack/plugins/start/vim-spotdiff/autoload/diffutil.vim @@ -0,0 +1,264 @@ +" diffunitsyntax: Highlight word or character based diff units in diff format +" +" Last Change: 2025/07/15 +" Version: 3.1 +" Author: Rick Howe (Takumi Ohtani) +" Copyright: (c) 2024-2025 Rick Howe +" License: MIT + +let s:save_cpo = &cpoptions +set cpo&vim + +let s:IndexCount = 1 + +function! diffutil#DiffOpt() abort + let op = #{} + for [ot, vn] in items(#{b: [['icase', ''], + \['iblank', 'ignore_blank_lines'], + \['iwhiteall', 'ignore_whitespace'], + \['iwhite', 'ignore_whitespace_change'], + \['iwhiteeol', 'ignore_whitespace_change_at_eol'], + \['indent-heuristic', 'indent_heuristic']], + \s: [['algorithm', '']], n: [['linematch', '']]}) + for [vo, no] in vn + if &diffopt =~ '\<' . vo . '\>' + if ot == 'b' + let op[vo] = v:true + else + let op[vo] = matchstr(&diffopt, vo . ':\zs\w\+\ze') + if ot == 'n' + let op[vo] = str2nr(op[vo]) + endif + endif + if has('nvim') && !empty(no) + let op[no] = op[vo] + unlet op[vo] + endif + endif + endfor + endfor + return op +endfunction + +if get(g:, 'BuiltinDiffFunc', 1) && + \(has('nvim') ? type(luaeval('vim.diff')) == v:t_func : + \exists('*diff') && has('patch-9.1.0099')) + +function! diffutil#DiffFunc(u1, u2, op) abort + let [n1, n2] = [len(a:u1), len(a:u2)] + if a:u1 ==# a:u2 | let ic = [] + elseif n1 == 0 | let ic = [[0, 0, 0, n2]] + elseif n2 == 0 | let ic = [[0, n1, 0, 0]] + else | let ic = s:BuiltinDiff(a:u1, a:u2, a:op) + endif + if s:IndexCount + return ic + else + let es = '' + let p1 = 0 + for [i1, c1, i2, c2] in ic + [[n1, 0, 0, 0]] + let es .= repeat('=', i1 - p1) . repeat('-', c1) . repeat('+', c2) + let p1 = i1 + c1 + endfor + return es + endif +endfunction + +if has('nvim') +function! s:BuiltinDiff(u1, u2, op) abort + let op = copy(a:op) + let [l1, l2] = [join(a:u1, "\n") . "\n", join(a:u2, "\n") . "\n"] + if has_key(op, 'icase') + let [l1, l2] = [tolower(l1), tolower(l2)] + unlet op['icase'] + endif + let op['result_type'] = 'indices' + return map(v:lua.vim.diff(l1, l2, op), + \'[v:val[0] - ((0 < v:val[1]) ? 1 : 0), v:val[1], + \v:val[2] - ((0 < v:val[3]) ? 1 : 0), v:val[3]]') +endfunction +else +function! s:BuiltinDiff(u1, u2, op) abort + let op = copy(a:op) + let op['output'] = 'indices' + return map(diff(a:u1, a:u2, op), + \'[v:val.from_idx, v:val.from_count, v:val.to_idx, v:val.to_count]') +endfunction +endif + +else " buitin or plugin + +function! diffutil#DiffFunc(u1, u2, op) abort + let [u1, u2] = [copy(a:u1), copy(a:u2)] + for uu in [u1, u2] + if has_key(a:op, 'icase') + call map(uu, 'tolower(v:val)') + endif + if has_key(a:op, 'iwhiteall') + call map(uu, 'substitute(v:val, "\\s\\+", "", "g")') + elseif has_key(a:op, 'iwhite') + call map(uu, 'substitute(v:val, "\\s\\+", " ", "g")') + call map(uu, 'substitute(v:val, "\\s\\+$", "", "")') + elseif has_key(a:op, 'iwhiteeol') + call map(uu, 'substitute(v:val, "\\s\\+$", "", "")') + endif + endfor + let es = s:PluginDiff(u1, u2, + \has_key(a:op, 'indent-heuristic') && a:op['indent-heuristic']) + if s:IndexCount + let ic = [] + let [i1, i2] = [0, 0] + for ed in split(es, '[-+]\+\zs', 1)[: -2] + let [ce, c1, c2] = map(['=', '-', '+'], 'count(ed, v:val)') + let [i1, i2] += [ce, ce] + let ic += [[i1, c1, i2, c2]] + let [i1, i2] += [c1, c2] + endfor + return ic + else + return es + endif +endfunction + +if has('vim9script') + +function! s:Vim9PluginDiff() abort +def! s:PluginDiff(u1: list, u2: list, ih: bool): string + const [eq, n1, n2] = ['=', len(u1), len(u2)] + var [e1, e2] = ['-', '+'] + if u1 ==# u2 | return repeat(eq, n1) + elseif n1 == 0 | return repeat(e2, n2) + elseif n2 == 0 | return repeat(e1, n1) + endif + const [N, M, v1, v2] = (n1 >= n2) ? [n1, n2, u1, u2] : [n2, n1, u2, u1] + if n1 < n2 | [e1, e2] = [e2, e1] | endif + const D = N - M + var fp = repeat([-1], M + N + 1) + var etree = [] + var p = -1 + while fp[D] != N + p += 1 + var epk = repeat([[]], p * 2 + D + 1) + for k in range(-p, D - 1, 1) + range(D + p, D, -1) + var x: number | var y: number + [y, epk[k]] = (fp[k - 1] + 1 > fp[k + 1]) ? + [fp[k - 1] + 1, [e1, [(k > D) ? p - 1 : p, k - 1]]] : + [fp[k + 1], [e2, [(k < D) ? p - 1 : p, k + 1]]] + x = y - k + while x < M && y < N && v2[x] ==# v1[y] + epk[k][0] ..= eq | [x, y] += [1, 1] + endwhile + fp[k] = y + endfor + etree += [epk] + endwhile + var k = D + var ses = '' + while 1 + ses = etree[p][k][0] .. ses + if [p, k] == [0, 0] | break | endif + [p, k] = etree[p][k][1] + endwhile + ses = ses[1 :] + return ih ? s:ReduceDiffHunk(u1, u2, ses) : ses +enddef + +def! s:ReduceDiffHunk(u1: list, u2: list, ses: string): string + # in ==++++/==----, if == units equal to last ++/-- units, swap their SESs + # (AB vs AxByAB : =+=+++ -> =++++= -> ++++==) + const [eq, e1, e2] = ['=', '-', '+'] + var [p1, p2] = [-1, -1] | var xes = '' | var ez = '' + for ed in reverse(split(ses, '[+-]\+\zs')) + var es = ed .. ez | ez = '' | const qe = count(es, eq) + if 0 < qe + const [q1, q2] = [count(es, e1), count(es, e2)] + const [uu, pp, qq] = (qe <= q1 && q2 == 0) ? [u1, p1, q1] : + (q1 == 0 && qe <= q2) ? [u2, p2, q2] : [[], 0, 0] + if !empty(uu) && uu[pp - qq - qe + 1 : pp - qq] ==# uu[pp - qe + 1 : pp] + ez = es[-qe :] .. es[qe : -qe - 1] | es = es[: qe - 1] + else + [p1, p2] -= [q1, q2] + endif + endif + [p1, p2] -= [qe, qe] + xes = es .. xes + endfor + xes = ez .. xes + return xes +enddef +endfunction +call s:Vim9PluginDiff() + +else " vim9script or vim8script + +function! s:PluginDiff(u1, u2, ih) abort + " An O(NP) Sequence Comparison Algorithm + let [u1, u2, eq, e1, e2] = [a:u1, a:u2, '=', '-', '+'] + let [n1, n2] = [len(u1), len(u2)] + if u1 ==# u2 | return repeat(eq, n1) + elseif n1 == 0 | return repeat(e2, n2) + elseif n2 == 0 | return repeat(e1, n1) + endif + let [N, M, u1, u2] = (n1 >= n2) ? [n1, n2, u1, u2] : [n2, n1, u2, u1] + if n1 < n2 | let [e1, e2] = [e2, e1] | endif + let D = N - M + let fp = repeat([-1], M + N + 1) + let etree = [] " [next edit, previous p, previous k] + let p = -1 + while fp[D] != N + let p += 1 + let epk = repeat([[]], p * 2 + D + 1) + for k in range(-p, D - 1, 1) + range(D + p, D, -1) + let [y, epk[k]] = (fp[k - 1] + 1 > fp[k + 1]) ? + \[fp[k - 1] + 1, [e1, [(k > D) ? p - 1 : p, k - 1]]] : + \[fp[k + 1], [e2, [(k < D) ? p - 1 : p, k + 1]]] + let x = y - k + while x < M && y < N && u2[x] ==# u1[y] + let epk[k][0] .= eq | let [x, y] += [1, 1] + endwhile + let fp[k] = y + endfor + let etree += [epk] + endwhile + let ses = '' + while 1 + let ses = etree[p][k][0] . ses + if [p, k] == [0, 0] | break | endif + let [p, k] = etree[p][k][1] + endwhile + let ses = ses[1 :] + return a:ih ? s:ReduceDiffHunk(a:u1, a:u2, ses) : ses +endfunction + +function! s:ReduceDiffHunk(u1, u2, ses) abort + " in ==++++/==----, if == units equal to last ++/-- units, swap their SESs + " (AB vs AxByAB : =+=+++ -> =++++= -> ++++==) + let [eq, e1, e2] = ['=', '-', '+'] + let [p1, p2] = [-1, -1] | let ses = '' | let ez = '' + for ed in reverse(split(a:ses, '[+-]\+\zs')) + let es = ed . ez | let ez = '' | let qe = count(es, eq) + if 0 < qe + let [q1, q2] = [count(es, e1), count(es, e2)] + let [uu, pp, qq] = (qe <= q1 && q2 == 0) ? [a:u1, p1, q1] : + \(q1 == 0 && qe <= q2) ? [a:u2, p2, q2] : [[], 0, 0] + if !empty(uu) && uu[pp - qq - qe + 1 : pp - qq] ==# uu[pp - qe + 1 : pp] + let ez = es[-qe :] . es[qe : -qe - 1] | let es = es[: qe - 1] + else + let [p1, p2] -= [q1, q2] + endif + endif + let [p1, p2] -= [qe, qe] + let ses = es . ses + endfor + let ses = ez . ses + return ses +endfunction + +endif " vim9script or vim8script + +endif " buitin or plugin + +let &cpoptions = s:save_cpo +unlet s:save_cpo + +" vim: ts=2 sw=0 sts=-1 et diff --git a/.vim/pack/plugins/start/vim-spotdiff/autoload/spotdiff.vim b/.vim/pack/plugins/start/vim-spotdiff/autoload/spotdiff.vim index b0d610b..e4e5f99 100644 --- a/.vim/pack/plugins/start/vim-spotdiff/autoload/spotdiff.vim +++ b/.vim/pack/plugins/start/vim-spotdiff/autoload/spotdiff.vim @@ -1,16 +1,16 @@ " spotdiff.vim : A range and area selectable :diffthis to compare partially " -" Last Change: 2024/06/23 -" Version: 5.2 +" Last Change: 2025/10/23 +" Version: 6.0 " Author: Rick Howe (Takumi Ohtani) -" Copyright: (c) 2014-2024 by Rick Howe +" Copyright: (c) 2014-2025 by Rick Howe " License: MIT let s:save_cpo = &cpoptions set cpo&vim " -------------------------------------- -" A Range of Lines SpotDiff +" a range of lines selectable spotdiff " -------------------------------------- let s:RSD = 'r_spotdiff' @@ -18,7 +18,7 @@ function! spotdiff#Diffthis(sl, el) abort let rn = !exists('t:RSDiff') ? 0 : len(t:RSDiff) if rn != len(filter(gettabinfo(tabpagenr())[0].windows, \'getwinvar(v:val, "&diff")')) - call s:EchoWarning('More/less diff mode windows exist in this tabpage!') + call s:EchoWarning('More/less diff mode windows exist in this tab page!') return elseif rn == 2 call s:EchoWarning('2 pairs of range already selected in this tab page!') @@ -37,7 +37,7 @@ function! spotdiff#Diffthis(sl, el) abort let [k, j] = has_key(t:RSDiff, 1) ? [2, 1] : [1, 2] if empty(t:RSDiff) || t:RSDiff[j].bnr != cb " diffthis on the 1st or the 2nd different buffer - let t:RSDiff[k] = {'wid': cw, 'bnr': cb, 'sel': [a:sl, a:el]} + let t:RSDiff[k] = #{wid: cw, bnr: cb, sel: [a:sl, a:el]} else " diffthis on the 2nd same buffer " save winfix options and set them in all non-RSDiff windows @@ -75,8 +75,8 @@ function! spotdiff#Diffthis(sl, el) abort \t:RSDiff[j].sel[0] <= a:sl) ? 'belowright' : 'aboveleft' call execute(ab . ' ' . (vt ? mw . 'vnew' : min([ch, mh]) . 'new')) call setline(1, tx) - let t:RSDiff[k] = {'wid': win_getid(), 'bnr': bufnr('%'), - \'sel': [1, a:el - a:sl + 1], 'cln': cw} + let t:RSDiff[k] = #{wid: win_getid(), bnr: bufnr('%'), + \sel: [1, a:el - a:sl + 1], cln: cw} endif call s:RS_ToggleDiffexpr(1) call execute('diffthis') @@ -189,49 +189,21 @@ function! s:RS_ToggleDiffexpr(on) abort endfunction function! spotdiff#Diffexpr() abort - for n in ['in', 'new'] | let f_{n} = readfile(v:fname_{n}) | endfor - if f_in == ['line1'] && f_new == ['line2'] - call writefile(['1c1'], v:fname_out) - return - endif - for [k, n] in [[1, 'in'], [2, 'new']] - let f_{n} = f_{n}[t:RSDiff[k].sel[0] - 1 : t:RSDiff[k].sel[1] - 1] - endfor - let do = split(&diffopt, ',') - for n in ['in', 'new'] - if index(do, 'icase') != -1 - call map(f_{n}, 'tolower(v:val)') - endif - if index(do, 'iwhiteall') != -1 - call map(f_{n}, 'substitute(v:val, "\\s\\+", "", "g")') - elseif index(do, 'iwhite') != -1 - call map(f_{n}, 'substitute(v:val, "\\s\\+", " ", "g")') - call map(f_{n}, 'substitute(v:val, "\\s\\+$", "", "")') - elseif index(do, 'iwhiteeol') != -1 - call map(f_{n}, 'substitute(v:val, "\\s\\+$", "", "")') - endif - endfor - let f_out = [] - let [l1, l2] = [1, 1] - for ed in split(s:Diff(f_in, f_new, - \index(do, 'indent-heuristic') != -1), '[+-]\+\zs', 1)[: -2] - let [qe, q1, q2] = map(['=', '-', '+'], 'count(ed, v:val)') - let [l1, l2] += [qe, qe] - let f_out += [((1 < q1) ? l1 . ',' : '') . (l1 + q1 - 1) . - \((q1 == 0) ? 'a' : (q2 == 0) ? 'd' : 'c') . - \((1 < q2) ? l2 . ',' : '') . (l2 + q2 - 1)] - let [l1, l2] += [q1, q2] - endfor - call filter(f_out, 'v:val[0] !~ "[<>-]"') - for n in range(len(f_out)) - let [se1, op, se2] = split(substitute(f_out[n], '[acd]', ' & ', '')) + let fn = #{0: [], 1: readfile(v:fname_in), 2: readfile(v:fname_new)} + if [fn.1, fn.2] == [['line1'], ['line2']] + let fn.0 += ['1c1'] + else for k in [1, 2] - let se{k} = substitute(se{k}, '\d\+', - \'\= submatch(0) + t:RSDiff[k].sel[0] - 1', 'g') + let fn[k] = fn[k][t:RSDiff[k].sel[0] - 1 : t:RSDiff[k].sel[1] - 1] endfor - let f_out[n] = se1 . op . se2 - endfor - call writefile(f_out, v:fname_out) + for [p1, q1, p2, q2] in diffutil#DiffFunc(fn.1, fn.2, diffutil#DiffOpt()) + let [p1, p2] += [t:RSDiff[1].sel[0], t:RSDiff[2].sel[0]] + let fn.0 += [((1 < q1) ? p1 . ',' : '') . (p1 + q1 - 1) . + \((q1 == 0) ? 'a' : (q2 == 0) ? 'd' : 'c') . + \((1 < q2) ? p2 . ',' : '') . (p2 + q2 - 1)] + endfor + endif + call writefile(fn.0, v:fname_out) endfunction function! s:RS_ClearDiff(key) abort @@ -250,22 +222,23 @@ endfunction function! s:RS_ToggleEvent(on) abort let tv = filter(map(range(1, tabpagenr('$')), \'gettabvar(v:val, "RSDiff")'), '!empty(v:val)') - let ac = ['augroup ' . s:RSD, 'autocmd!'] + let ac = [] if !empty(tv) for tb in tv for k in keys(tb) - let ac += ['autocmd WinClosed call s:RS_ClearDiff(' . k . ')'] + let bs = '' + let ac += [['WinClosed', bs, 's:RS_ClearDiff(' . k . ')']] if len(tb) == 2 - let ac += ['autocmd TextChanged,InsertLeave call s:RS_RedrawDiff(' . k . ')'] + let ac += [['TextChanged,InsertLeave', bs, + \'s:RS_RedrawDiff(' . k . ')']] endif endfor endfor - let ac += ['autocmd TabEnter * call s:RS_ToggleDiffexpr(-1)'] + let ac += [['TabEnter', '*', 's:RS_ToggleDiffexpr(-1)']] + call map(ac, 'join(["autocmd", v:val[0], v:val[1], "call", v:val[2]])') endif - let ac += ['augroup END'] - if empty(tv) | let ac += ['augroup! ' . s:RSD] | endif + let ac = ['augroup ' . s:RSD, 'autocmd!'] + ac + ['augroup END'] + + \(empty(ac) ? ['augroup! ' . s:RSD] : []) call execute(ac) endfunction @@ -273,68 +246,37 @@ function! s:RS_DrawClearSel(on, key) abort let rd = t:RSDiff[a:key] if a:on let hl = 'CursorColumn' - let ss = substitute(get(t:, 'DiffRangeView', - \get(g:, 'DiffRangeView', 's')), '[^cfsv]', '', 'g') - if ss =~ 's' - if has('signs') && - \empty(sign_getplaced(rd.bnr, {'group': '*'})[0].signs) - let rd.scl = getwinvar(rd.wid, '&signcolumn') - call setwinvar(rd.wid, '&signcolumn', 'no') - if empty(sign_getdefined(s:RSD)) - call sign_define(s:RSD, {'linehl': hl}) + if has('signs') && empty(sign_getplaced(rd.bnr, #{group: '*'})[0].signs) + let rd.scl = getwinvar(rd.wid, '&signcolumn') + call setwinvar(rd.wid, '&signcolumn', 'no') + if empty(sign_getdefined(s:RSD)) + call sign_define(s:RSD, #{linehl: hl}) + endif + for ln in range(rd.sel[0], rd.sel[-1]) + call sign_place(0, s:RSD, s:RSD, rd.bnr, #{lnum: ln}) + endfor + elseif has('textprop') + if empty(prop_type_get(s:RSD)) + call prop_type_add(s:RSD, #{highlight: hl}) + endif + let rd.txp = [] + for ln in range(rd.sel[0], rd.sel[-1]) + let ec = has('patch-9.0.1728') ? virtcol([ln, '$'], 0, rd.wid) : + \virtcol([ln, '$'], 0) + let rd.txp += [prop_add(ln, 1, #{type: s:RSD, bufnr: rd.bnr, + \end_col: ec})] + if has('patch-9.0.0067') + let rd.txp += [prop_add(ln, 0, #{type: s:RSD, bufnr: rd.bnr, + \text: repeat(' ', &columns - ec)})] endif - for ln in range(rd.sel[0], rd.sel[-1]) - call sign_place(0, s:RSD, s:RSD, rd.bnr, {'lnum': ln}) - endfor - else - let ss = substitute(ss, 's', '', 'g') - endif - endif - if ss =~ 'v' - let tx = '+' - if has('textprop') && has('patch-9.0.0121') - if empty(prop_type_get(s:RSD)) - call prop_type_add(s:RSD, {'highlight': hl}) - endif - let rd.vtx = [] - for ln in range(rd.sel[0], rd.sel[-1]) - let rd.vtx += [prop_add(ln, 1, {'type': s:RSD, 'bufnr': rd.bnr, - \'text': tx})] - let rd.vtx += [prop_add(ln, 0, {'type': s:RSD, 'bufnr': rd.bnr, - \'text': tx, 'text_align': 'right'})] - endfor - elseif exists('*nvim_buf_set_extmark') - let rd.vtx = {'ns': nvim_create_namespace(s:RSD), 'id': []} - for ln in range(rd.sel[0], rd.sel[-1]) - let rd.vtx.id += [nvim_buf_set_extmark(rd.bnr, rd.vtx.ns, ln - 1, 0, - \{'virt_text': [[tx, hl]], 'virt_text_win_col': -99})] - let rd.vtx.id += [nvim_buf_set_extmark(rd.bnr, rd.vtx.ns, ln - 1, 0, - \{'virt_text': [[tx, hl]], 'virt_text_pos': 'right_align'})] - endfor - else - let ss = substitute(ss, 'v', '', 'g') - endif - endif - if ss =~ 'c' - if has('conceal') - let rd.cid = s:Matchaddpos('Conceal', range(1, rd.sel[0] - 1) + - \range(rd.sel[-1] + 1, line('$')), -10, rd.wid) - else - let ss = substitute(ss, 'c', '', 'g') - endif - endif - if ss =~ 'f' - if has('folding') - let rd.fdm = getwinvar(rd.wid, '&foldmethod') - call setwinvar(rd.wid, '&foldmethod', 'manual') - call execute(['normal zE'] + - \((1 < rd.sel[0]) ? ['1,' . (rd.sel[0] - 1) . 'fold'] : []) + - \((rd.sel[-1] < line('$')) ? [(rd.sel[-1] + 1) . ',$fold'] : [])) - else - let ss = substitute(ss, 'f', '', 'g') - endif - endif - if empty(ss) + endfor + elseif has('nvim-0.7.0') + let rd.ext = #{ns: nvim_create_namespace(s:RSD), id: []} + for ln in range(rd.sel[0], rd.sel[-1]) + let rd.ext.id += [nvim_buf_set_extmark(rd.bnr, rd.ext.ns, ln - 1, 0, + \#{line_hl_group: hl})] + endfor + else let dc89 = !exists('g:loaded_diffchar') || \type(g:loaded_diffchar) != type(0.0) || g:loaded_diffchar >= 8.9 let rd.lid = s:Matchaddpos(hl, range(rd.sel[0], rd.sel[-1]), @@ -342,46 +284,37 @@ function! s:RS_DrawClearSel(on, key) abort endif else if has_key(rd, 'scl') - call sign_unplace(s:RSD, {'buffer': rd.bnr}) + call sign_unplace(s:RSD, #{buffer: rd.bnr}) if empty(filter(range(1, bufnr('$')), 'bufnr(v:val) != -1 && - \!empty(sign_getplaced(v:val, {"group": s:RSD})[0].signs)')) + \!empty(sign_getplaced(v:val, #{group: s:RSD})[0].signs)')) call sign_undefine(s:RSD) endif call setwinvar(rd.wid, '&signcolumn', rd.scl) unlet rd.scl - endif - if has_key(rd, 'vtx') - if has('textprop') - for id in rd.vtx - call prop_remove({'type': s:RSD, 'id': id, 'both': 1, - \'bufnr': rd.bnr, 'all': 1}) - endfor - if empty(filter(range(1, bufnr('$')), 'bufnr(v:val) != -1 && - \!empty(prop_find({"type": s:RSD, "bufnr": v:val, "lnum": 1}))')) - call prop_type_delete(s:RSD) - endif - else - for id in rd.vtx.id - call nvim_buf_del_extmark(rd.bnr, rd.vtx.ns, id) - endfor + elseif has_key(rd, 'txp') + for id in rd.txp + call prop_remove(#{type: s:RSD, id: id, both: 1, bufnr: rd.bnr, + \all: 1}) + endfor + if empty(filter(range(1, bufnr('$')), 'bufnr(v:val) != -1 && + \!empty(prop_find(#{type: s:RSD, bufnr: v:val, lnum: 1}))')) + call prop_type_delete(s:RSD) endif - unlet rd.vtx - endif - if has_key(rd, 'cid') - call s:Matchdelete(rd.cid, rd.wid) | unlet rd.cid - endif - if has_key(rd, 'fdm') - call execute('normal zE') - call setwinvar(rd.wid, '&foldmethod', rd.fdm) | unlet rd.fdm - endif - if has_key(rd, 'lid') - call s:Matchdelete(rd.lid, rd.wid) | unlet rd.lid + unlet rd.txp + elseif has_key(rd, 'ext') + for id in rd.ext.id + call nvim_buf_del_extmark(rd.bnr, rd.ext.ns, id) + endfor + unlet rd.ext + elseif has_key(rd, 'lid') + call s:Matchdelete(rd.lid, rd.wid) + unlet rd.lid endif endif endfunction " -------------------------------------- -" A Visual Area SpotDiff +" a visual area selectable spotdiff " -------------------------------------- let s:VSD = 'v_spotdiff' @@ -396,7 +329,7 @@ function! spotdiff#VDiffthis(sl, el, ll) abort let vm = ([a:sl, a:el] == [line("'<"), line("'>")]) ? visualmode() : '' let tc = 0 let se = [] - for ln in range(a:sl, a:el) + for ln in filter(range(a:sl, a:el), '1 <= v:val && v:val <= line("$")') let st = getbufline(cb, ln)[0] if empty(st) let [sc, ec] = [0, 0] @@ -441,7 +374,7 @@ function! spotdiff#VDiffthis(sl, el, ll) abort endfor endif " do diffthis - let t:VSDiff[k] = {'wid': cw, 'bnr': cb, 'sel': se, 'vmd': vm, 'lbl': a:ll} + let t:VSDiff[k] = #{wid: cw, bnr: cb, sel: se, vmd: vm, lbl: a:ll} call s:VS_DrawClearSel(1, k) if len(t:VSDiff) == 2 | call s:VS_DoDiff() | endif call s:VS_ToggleMap(1) @@ -449,13 +382,14 @@ function! spotdiff#VDiffthis(sl, el, ll) abort endfunction function! s:VS_DoDiff() abort - " set diffopt flags for icase/iwhite/indent - let do = split(&diffopt, ',') - let igc = (index(do, 'icase') != -1) - let igw = (index(do, 'iwhiteall') != -1) ? 1 : - \(index(do, 'iwhite') != -1) ? 2 : - \(index(do, 'iwhiteeol') != -1) ? 3 : 0 - let idh = (index(do, 'indent-heuristic') != -1) + let op = diffutil#DiffOpt() + let iw = has('nvim') ? ['ignore_whitespace', 'ignore_whitespace_change', + \'ignore_whitespace_change_at_eol'] : + \['iwhiteall', 'iwhite', 'iwhiteeol'] + let igw = 0 + for ix in range(len(iw)) + if has_key(op, iw[ix]) | let igw = ix + 1 | break | endif + endfor " set regular expression to split diff unit let du = get(t:, 'DiffUnit', get(g:, 'DiffUnit', 'Word1')) if du == 'Char' @@ -538,12 +472,12 @@ function! s:VS_DoDiff() abort let lm = (t:VSDiff[1].lbl && t:VSDiff[2].lbl) ? \min([t:VSDiff[1].sel[-1][0] - t:VSDiff[1].sel[0][0] + 1, \t:VSDiff[2].sel[-1][0] - t:VSDiff[2].sel[0][0] + 1]) : 1 - let hp = {1: {}, 2: {}} + let hp = #{1: {}, 2: {}} for k in [1, 2] | let t:VSDiff[k].pos = [] | endfor for ic in range(lm) - let lct = {1: [], 2: []} + let lct = #{1: [], 2: []} for k in [1, 2] - let lb = (&joinspaces && !t:VSDiff[k].lbl) ? nr2char(0xff) : '' + let lb = t:VSDiff[k].lbl ? '' : nr2char(0xff) " split line and set its position for [ln, sc, ec] in (t:VSDiff[k].lbl) ? [t:VSDiff[k].sel[ic]] : \t:VSDiff[k].sel @@ -551,7 +485,6 @@ function! s:VS_DoDiff() abort if empty(st) let lct[k] += [[[ln, 0, 0], '']] else - if igc | let st = tolower(st) | endif for tx in split(st, sre) let tl = len(tx) let lct[k] += [[[ln, sc, tl], tx]] @@ -592,36 +525,32 @@ function! s:VS_DoDiff() abort endif endfor " compare both diff units - let es = s:Diff(map(copy(lct[1]), 'v:val[1]'), - \map(copy(lct[2]), 'v:val[1]'), idh) - " set highlight positions - let cn = 0 | let [p1, p2] = [0, 0] - for ed in split(es, '[+-]\+\zs', 1)[: -2] - let [qe, q1, q2] = map(['=', '-', '+'], 'count(ed, v:val)') - if 0 < qe | let [p1, p2] += [qe, qe] | endif - if 0 < q1 && 0 < q2 + let cn = 0 + for pq in diffutil#DiffFunc(map(copy(lct[1]), 'v:val[1]'), + \map(copy(lct[2]), 'v:val[1]'), op) + let [p, q] = [#{1: pq[0], 2: pq[2]}, #{1: pq[1], 2: pq[3]}] + if 0 < q.1 && 0 < q.2 let hl = hcu[cn % len(hcu)] | let cn += 1 else let hl = 'DiffAdd' endif - let [h1, h2] = [hl, hl] + let h = #{1: hl, 2: hl} for k in [1, 2] let mx = [] - if 0 < q{k} " add or change - for ix in range(p{k}, p{k} + q{k} - 1) + if 0 < q[k] " add or change + for ix in range(p[k], p[k] + q[k] - 1) let mx += [lct[k][ix][0]] endfor - let p{k} += q{k} else " delete - let h{k} = 'vsDiffChangeBU' - if 0 < p{k} - let po = lct[k][p{k} - 1][0] - let bl = len(matchstr(lct[k][p{k} - 1][1], '.$')) + let h[k] = 'vsDiffChangeBU' + if 0 < p[k] + let po = lct[k][p[k] - 1][0] + let bl = len(matchstr(lct[k][p[k] - 1][1], '.$')) let mx += [[po[0], po[1] + po[2] - bl, bl]] endif - if p{k} < len(lct[k]) - let po = lct[k][p{k}][0] - let bl = len(matchstr(lct[k][p{k}][1], '^.')) + if p[k] < len(lct[k]) + let po = lct[k][p[k]][0] + let bl = len(matchstr(lct[k][p[k]][1], '^.')) let mx += [[po[0], po[1], bl]] endif endif @@ -635,8 +564,8 @@ function! s:VS_DoDiff() abort endif endfor let lx = map(items(lc), '[eval(v:val[0])] + v:val[1]') - if !has_key(hp[k], h{k}) | let hp[k][h{k}] = [] | endif - let hp[k][h{k}] += lx + if !has_key(hp[k], h[k]) | let hp[k][h[k]] = [] | endif + let hp[k][h[k]] += lx " set highlighted positions to show diff pair if 1 < len(lx) | call sort(lx, {i, j -> i[0] - j[0]}) | endif let t:VSDiff[k].pos += [lx] @@ -735,87 +664,102 @@ function! spotdiff#VDiffOpFunc(vm, lbl) abort call spotdiff#VDiffthis(line("'<"), line("'>"), a:lbl) endfunction -function! s:VS_ClearDiff(key) abort - let cw = win_getid() - noautocmd call win_gotoid(str2nr(expand(''))) - call spotdiff#VDiffoff(0) - noautocmd call win_gotoid(cw) +function! s:VS_ClearDiff() abort + let ew = eval(expand('')) + let tn = win_id2tabwin(ew)[0] + if 0 < tn + let vs = gettabvar(tn, 'VSDiff', {}) + let kn = filter([1, 2], 'has_key(vs, v:val) && vs[v:val].wid == ew') + if 0 < len(kn) + let cw = win_getid() + noautocmd call win_gotoid(ew) + call spotdiff#VDiffoff(len(kn) == 2) + noautocmd call win_gotoid(cw) + endif + endif endfunction -function! s:VS_RedrawDiff(key) abort +function! s:VS_RedrawDiff() abort call spotdiff#VDiffupdate() endfunction +let s:vsmap = map({'[b': ['JumpDiffCharPrevStart', 'VS_JumpDiff(0)'], + \']b': ['JumpDiffCharNextStart', 'VS_JumpDiff(1)'], + \'[e': ['JumpDiffCharPrevEnd', 'VS_JumpDiff(2)'], + \']e': ['JumpDiffCharNextEnd', 'VS_JumpDiff(3)']}, + \'["" . v:val[0], ":call " . v:val[1] . ""]') + if exists('g:loaded_diffchar') - let s:vs_map = - \{'JumpDiffCharPrevStart': ':call VS_JumpDiff(0, 0)', - \'JumpDiffCharNextStart': ':call VS_JumpDiff(1, 0)', - \'JumpDiffCharPrevEnd': ':call VS_JumpDiff(0, 1)', - \'JumpDiffCharNextEnd': ':call VS_JumpDiff(1, 1)'} - call map(s:vs_map, '[maparg(v:key, "n"), v:val]') + for s:key in keys(s:vsmap) + let [s:plg, s:cmd] = s:vsmap[s:key] + let s:vsmap[s:plg] = [maparg(s:plg, 'n'), s:cmd] + unlet s:vsmap[s:key] + endfor + function! s:VS_ToggleMap(on) abort let vd = exists('t:VSDiff') && len(t:VSDiff) == 2 let rn = (a:on == 0 && vd || a:on == -1 && !vd) ? 0 : \(a:on == 1 && vd || a:on == -1 && vd) ? 1 : -1 if rn != -1 - call execute(map(items(s:vs_map), + call execute(map(items(s:vsmap), \'"nnoremap " . v:val[0] . " " . v:val[1][rn]')) endif endfunction else - for [key, plg, cmd] in [ - \['[b', 'JumpDiffCharPrevStart', ':call VS_JumpDiff(0, 0)'], - \[']b', 'JumpDiffCharNextStart', ':call VS_JumpDiff(1, 0)'], - \['[e', 'JumpDiffCharPrevEnd', ':call VS_JumpDiff(0, 1)'], - \[']e', 'JumpDiffCharNextEnd', ':call VS_JumpDiff(1, 1)']] - if !hasmapto(plg, 'n') && empty(maparg(key, 'n')) + for s:key in keys(s:vsmap) + let [s:plg, s:cmd] = s:vsmap[s:key] + if !hasmapto(s:plg, 'n') && maparg(s:key, 'n') =~ '^$\|_defaults.lua' if get(g:, 'DiffCharDoMapping', 1) && get(g:, 'VDiffDoMapping', 1) - call execute('nmap ' . key . ' ' . plg) + call execute('nmap ' . s:key . ' ' . s:plg) endif endif - call execute('nnoremap ' . plg . ' ' . cmd . '') + call execute('nnoremap ' . s:plg . ' ' . s:cmd) endfor + unlet s:vsmap + function! s:VS_ToggleMap(on) abort endfunction endif -function! s:VS_JumpDiff(dir, pos) abort - " a:dir : 0 = backward, 1 = forward / a:pos : 0 = start, 1 = end +function! s:VS_JumpDiff(dp) abort + " a:dp : 0=backward/start, 1=forward/start, 2=backward/end, 3=forward/end if !exists('t:VSDiff') || len(t:VSDiff) != 2 | return | endif - let sk = filter(keys(t:VSDiff), 't:VSDiff[v:val].wid == win_getid()') + let sk = filter(#{1: [], 2: []}, 't:VSDiff[v:key].wid == win_getid()') if empty(sk) | return | endif + let [dir, pos] = (a:dp == 0) ? [0, 0] : (a:dp == 1) ? [1, 0] : + \(a:dp == 2) ? [0, 1] : [1, 1] let [cl, cc] = [line('.'), col('.')] if cc == col('$') " empty line - if !a:dir | let cc = 0 | endif + if !dir | let cc = 0 | endif else - if a:pos + if pos let cc += len(strcharpart(getline(cl)[cc - 1 :], 0, 1)) - 1 endif endif - let ss = 0 - for k in sk - for ix in a:dir ? range(len(t:VSDiff[k].sel)) : + for k in keys(sk) + for ix in dir ? range(len(t:VSDiff[k].sel)) : \range(len(t:VSDiff[k].sel) - 1, 0, -1) let sl = t:VSDiff[k].sel[ix] - if a:dir ? (cl < sl[0] || cl == sl[0] && cc <= sl[2]) : + if dir ? (cl < sl[0] || cl == sl[0] && cc <= sl[2]) : \(cl > sl[0] || cl == sl[0] && cc >= sl[1]) - let s{k} = sl - let ss += k + let sk[k] = sl break endif endfor + if empty(sk[k]) | unlet sk[k] | endif endfor - let sk = (ss == 0) ? [] : (ss == 1) ? [1] : (ss == 2) ? [2] : - \(a:dir ? (s1[0] < s2[0] || s1[0] == s2[0] && s1[1] < s2[1]) : - \(s1[0] > s2[0] || s1[0] == s2[0] && s1[1] > s2[1])) ? [1, 2] : [2, 1] - for k in sk - for pn in a:dir ? (range(has_key(t:VSDiff[k], 'pvn') ? - \t:VSDiff[k].pvn + (a:pos ? 0 : 1) : 0, len(t:VSDiff[k].pos) - 1, 1)) : - \(range(has_key(t:VSDiff[k], 'pvn') ? - \t:VSDiff[k].pvn + (a:pos ? -1 : 0) : len(t:VSDiff[k].pos) - 1, 0, -1)) - let ps = t:VSDiff[k].pos[pn][a:pos ? -1 : 0] - let [nl, nc] = [ps[0], a:pos ? ps[1] + ps[2] - 1 : ps[1]] - if a:dir ? (cl < nl || cl == nl && cc < nc) : + for k in (len(keys(sk)) < 2) ? keys(sk) : + \(dir ? (sk.1[0] < sk.2[0] || sk.1[0] == sk.2[0] && sk.1[1] < sk.2[1]) : + \(sk.1[0] > sk.2[0] || sk.1[0] == sk.2[0] && sk.1[1] > sk.2[1])) ? + \[1, 2] : [2, 1] + for pn in dir ? (range(has_key(t:VSDiff[k], 'pvn') ? + \t:VSDiff[k].pvn + (pos ? 0 : 1) : 0, len(t:VSDiff[k].pos) - 1, 1)) : + \(range(has_key(t:VSDiff[k], 'pvn') ? + \t:VSDiff[k].pvn + (pos ? -1 : 0) : len(t:VSDiff[k].pos) - 1, 0, -1)) + let ps = t:VSDiff[k].pos[pn][pos ? -1 : 0] + let [nl, nc] = [ps[0], pos ? ps[1] + ps[2] - 1 : ps[1]] + let nc = min([nc, col([nl, '$']) - 1]) + if dir ? (cl < nl || cl == nl && cc < nc) : \(cl > nl || cl == nl && cc > nc) call cursor(nl, nc) return @@ -824,69 +768,73 @@ function! s:VS_JumpDiff(dir, pos) abort endfor endfunction -function! s:VS_DiffPair(key, event) abort +function! s:VS_DiffPair(event) abort " a:event : 0 = WinLeave, 1 = CursorMoved if !exists('t:VSDiff') || len(t:VSDiff) != 2 | return | endif let [cl, cc] = [line('.'), col('.')] - let bkey = (a:key == 1) ? 2 : 1 - if has_key(t:VSDiff[a:key], 'pvn') - if a:event - for ps in t:VSDiff[a:key].pos[t:VSDiff[a:key].pvn] - if cl == ps[0] && ps[1] <= cc && cc <= ps[1] + ps[2] - 1 - return - endif - endfor - endif - unlet t:VSDiff[a:key].pvn - call s:Matchdelete(t:VSDiff[bkey].pid, t:VSDiff[bkey].wid) - unlet t:VSDiff[bkey].pid - endif - if a:event - if t:VSDiff[a:key].sel[0][0] <= cl && cl <= t:VSDiff[a:key].sel[-1][0] - let pn = len(t:VSDiff[a:key].pos) - 1 - while 0 <= pn - for ps in t:VSDiff[a:key].pos[pn] + for ak in filter([1, 2], 't:VSDiff[v:val].wid == win_getid()') + let bk = (ak == 1) ? 2 : 1 + if has_key(t:VSDiff[ak], 'pvn') + if a:event + for ps in t:VSDiff[ak].pos[t:VSDiff[ak].pvn] if cl == ps[0] && ps[1] <= cc && cc <= ps[1] + ps[2] - 1 - let t:VSDiff[a:key].pvn = pn - let t:VSDiff[bkey].pid = s:Matchaddpos(has('nvim') ? - \'TermCursor' : has('gui_running') ? 'Cursor' : 'IncSearch', - \t:VSDiff[bkey].pos[pn], -1, t:VSDiff[bkey].wid) - let pn = 0 - break + return endif endfor - let pn -= 1 - endwhile + endif + unlet t:VSDiff[ak].pvn + call s:Matchdelete(t:VSDiff[bk].pid, t:VSDiff[bk].wid) + unlet t:VSDiff[bk].pid endif - endif + if a:event + if t:VSDiff[ak].sel[0][0] <= cl && cl <= t:VSDiff[ak].sel[-1][0] + let pn = len(t:VSDiff[ak].pos) - 1 + while 0 <= pn + for ps in t:VSDiff[ak].pos[pn] + if cl == ps[0] && ps[1] <= cc && cc <= ps[1] + ps[2] - 1 + let t:VSDiff[ak].pvn = pn + let t:VSDiff[bk].pid = s:Matchaddpos(has('nvim') ? + \'TermCursor' : has('gui_running') ? 'Cursor' : 'IncSearch', + \t:VSDiff[bk].pos[pn], -1, t:VSDiff[bk].wid) + let pn = 0 + break + endif + endfor + let pn -= 1 + endwhile + endif + endif + endfor endfunction function! s:VS_ToggleEvent(on) abort let tv = filter(map(range(1, tabpagenr('$')), \'gettabvar(v:val, "VSDiff")'), '!empty(v:val)') - let ac = ['augroup ' . s:VSD, 'autocmd!'] + let ac = [] if !empty(tv) for tb in tv + let bn = 0 for k in keys(tb) - let ac += ['autocmd WinClosed call s:VS_ClearDiff(' . k . ')'] - if len(tb) == 2 - let ac += ['autocmd TextChanged,InsertLeave call s:VS_RedrawDiff(' . k . ')'] - if get(t:, 'DiffPairVisible', get(g:, 'DiffPairVisible', 1)) - let ac += ['autocmd CursorMoved call s:VS_DiffPair(' . k . ', 1)'] - let ac += ['autocmd WinLeave call s:VS_DiffPair(' . k . ', 0)'] + if bn != tb[k].bnr + let bn = tb[k].bnr + let bs = '' + let ac += [['WinClosed', bs, 's:VS_ClearDiff()']] + if len(tb) == 2 + let ac += [['TextChanged,InsertLeave', bs, 's:VS_RedrawDiff()']] + if get(t:, 'DiffPairVisible', get(g:, 'DiffPairVisible', 1)) + let ac += [['CursorMoved', bs, 's:VS_DiffPair(1)']] + let ac += [['WinLeave', bs, 's:VS_DiffPair(0)']] + endif endif endif endfor endfor - let ac += ['autocmd ColorScheme * call s:VS_ToggleHL(1)'] - let ac += ['autocmd TabEnter * call s:VS_ToggleMap(-1)'] + let ac += [['ColorScheme', '*', 's:VS_ToggleHL(1)']] + let ac += [['TabEnter', '*', 's:VS_ToggleMap(-1)']] + call map(ac, 'join(["autocmd", v:val[0], v:val[1], "call", v:val[2]])') endif - let ac += ['augroup END'] - if empty(tv) | let ac += ['augroup! ' . s:VSD] | endif + let ac = ['augroup ' . s:VSD, 'autocmd!'] + ac + ['augroup END'] + + \(empty(ac) ? ['augroup! ' . s:VSD] : []) call execute(ac) endfunction @@ -967,113 +915,12 @@ function! s:ColorClass(cn, lv) abort endfunction " -------------------------------------- -" Common +" common " -------------------------------------- -function! s:TraceDiffChar(u1, u2, ih) abort - " An O(NP) Sequence Comparison Algorithm - let [u1, u2, eq, e1, e2] = [a:u1, a:u2, '=', '-', '+'] - let [n1, n2] = [len(u1), len(u2)] - if u1 ==# u2 | return repeat(eq, n1) - elseif n1 == 0 | return repeat(e2, n2) - elseif n2 == 0 | return repeat(e1, n1) - endif - let [N, M, u1, u2] = (n1 >= n2) ? [n1, n2, u1, u2] : [n2, n1, u2, u1] - if n1 < n2 | let [e1, e2] = [e2, e1] | endif - let D = N - M - let fp = repeat([-1], M + N + 1) - let etree = [] " [next edit, previous p, previous k] - let p = -1 - while fp[D] != N - let p += 1 - let epk = repeat([[]], p * 2 + D + 1) - for k in range(-p, D - 1, 1) + range(D + p, D, -1) - let [y, epk[k]] = (fp[k - 1] + 1 > fp[k + 1]) ? - \[fp[k - 1] + 1, [e1, [(k > D) ? p - 1 : p, k - 1]]] : - \[fp[k + 1], [e2, [(k < D) ? p - 1 : p, k + 1]]] - let x = y - k - while x < M && y < N && u2[x] ==# u1[y] - let epk[k][0] .= eq | let [x, y] += [1, 1] - endwhile - let fp[k] = y - endfor - let etree += [epk] - endwhile - let ses = '' - while 1 - let ses = etree[p][k][0] . ses - if [p, k] == [0, 0] | break | endif - let [p, k] = etree[p][k][1] - endwhile - let ses = ses[1 :] - return a:ih ? s:ReduceDiffHunk(a:u1, a:u2, ses) : ses -endfunction - -function! s:ReduceDiffHunk(u1, u2, ses) abort - " in ==++++/==----, if == units equal to last ++/-- units, swap their SESs - " (AB vs AxByAB : =+=+++ -> =++++= -> ++++==) - let [eq, e1, e2] = ['=', '-', '+'] - let [p1, p2] = [-1, -1] | let ses = '' | let ez = '' - for ed in reverse(split(a:ses, '[+-]\+\zs')) - let es = ed . ez | let ez = '' | let qe = count(es, eq) - if 0 < qe - let [q1, q2] = [count(es, e1), count(es, e2)] - let [uu, pp, qq] = (qe <= q1 && q2 == 0) ? [a:u1, p1, q1] : - \(q1 == 0 && qe <= q2) ? [a:u2, p2, q2] : [[], 0, 0] - if !empty(uu) && uu[pp - qq - qe + 1 : pp - qq] ==# uu[pp - qe + 1 : pp] - let ez = es[-qe :] . es[qe : -qe - 1] | let es = es[: qe - 1] - else - let [p1, p2] -= [q1, q2] - endif - endif - let [p1, p2] -= [qe, qe] - let ses = es . ses - endfor - let ses = ez . ses - return ses -endfunction - -let s:Diff = function('s:TraceDiffChar') -if get(g:, 'BuiltinDiffFunc', 0) && - \(has('nvim') ? type(luaeval('vim.diff')) == v:t_func : - \exists('*diff') && has('patch-9.1.0099')) - function! s:ApplyDiffFunc(u1, u2, ih) abort - let [eq, e1, e2] = ['=', '-', '+'] - let [n1, n2] = [len(a:u1), len(a:u2)] - if a:u1 ==# a:u2 | return repeat(eq, n1) - elseif n1 == 0 | return repeat(e2, n2) - elseif n2 == 0 | return repeat(e1, n1) - endif - let ses = '' - let vd = s:DiffFunc(a:u1, a:u2) - if !empty(vd) - let p1 = 0 - for [i1, c1, i2, c2] in vd + [[n1, 0, 0, 0]] - let ses .= repeat(eq, i1 - p1) . repeat(e1, c1) . repeat(e2, c2) - let p1 = i1 + c1 - endfor - endif - return a:ih ? s:ReduceDiffHunk(a:u1, a:u2, ses) : ses - endfunction - let s:Diff = function('s:ApplyDiffFunc') - if has('nvim') - function! s:DiffFunc(u1, u2) abort - return map(v:lua.vim.diff(join(a:u1, "\n") . "\n", - \join(a:u2, "\n") . "\n", #{result_type: 'indices'}), - \'[v:val[0] - ((0 < v:val[1]) ? 1 : 0), v:val[1], - \v:val[2] - ((0 < v:val[3]) ? 1 : 0), v:val[3]]') - endfunction - else - function! s:DiffFunc(u1, u2) abort - return map(diff(a:u1, a:u2, #{output: 'indices'}), - \'[v:val.from_idx, v:val.from_count, v:val.to_idx, v:val.to_count]') - endfunction - endif -endif - function! s:Matchaddpos(grp, pos, pri, wid) abort return map(range(0, len(a:pos) - 1, 8), 'matchaddpos(a:grp, - \a:pos[v:val : v:val + 7], a:pri, -1, {"window": a:wid})') + \a:pos[v:val : v:val + 7], a:pri, -1, #{window: a:wid})') endfunction function! s:Matchdelete(id, wid) abort diff --git a/.vim/pack/plugins/start/vim-spotdiff/doc/spotdiff.txt b/.vim/pack/plugins/start/vim-spotdiff/doc/spotdiff.txt index 7e7e5f2..ffdcf9f 100644 --- a/.vim/pack/plugins/start/vim-spotdiff/doc/spotdiff.txt +++ b/.vim/pack/plugins/start/vim-spotdiff/doc/spotdiff.txt @@ -1,9 +1,9 @@ *spotdiff.txt* A range and area selectable `:diffthis` to compare partially -Last Change: 2024/06/23 -Version: 5.2 +Last Change: 2025/10/23 +Version: 6.0 Author: Rick Howe (Takumi Ohtani) -Copyright: (c) 2014-2024 by Rick Howe +Copyright: (c) 2014-2025 by Rick Howe License: MIT INTRODUCTION *spotdiff* @@ -186,18 +186,23 @@ Keymaps ~ ============================================================================== CHANGE HISTORY *spotdiff-history* -Update : 5.2 +6.0 +* Updated to support vim 9.0 and nvim 0.7.0 or later with major internal + changes. +* Fixed some defects including E957 and E734 errors on nvim 0.10.0 or later. + +5.2 * Implemented to update the differences shortly after the text is changed. -Update : 5.1 +5.1 * Added to open a temporary new window at left or right in |:Diffthis| command if "vertical" is included in the 'diffopt' option. -Update : 5.0 +5.0 * Changed to support vim 8.2 and nvim 0.4.4 or later. * Added some minor changes such as an error check in `:Diffthis` command. -Update : 4.5 +4.5 * Implemented to redefine visual area highlight groups whenever the color scheme is loaded. * Updated |g:DiffUnit| and |g:DiffColors| options to reflect those updated in @@ -208,21 +213,21 @@ Update : 4.5 numbers of matching colors, depending on the loaded color scheme. - Added a list of your favorite highlight groups in |g:DiffColors| option. -Update : 4.4 +4.4 * Enhanced to make diff units easier to read when "indent-heuristic" is specified in the 'diffopt' option. * Fixed some defects. -Update : 4.3 +4.3 * Updated to check a new WinClosed event (patch-8.2.3591) to appropriately clear the selected range or area and reset its differences when a window is closed. -Update : 4.2 +4.2 * Changed `:VDiffoff` command to check the current cursor position and find which of two selected area is to be cleared in the same window. -Update : 4.1 +4.1 * Added the keymaps which correspond to the `:VDiffthis`, `:VDiffoff`, and `:VDiffupdate` commands. * Added a custom operator which can select the motion and text object area by @@ -234,21 +239,21 @@ Update : 4.1 * Added the diffchar's keymaps which jump cursor to the start/end position of the next/previous diff unit. -Update : 4.0 +4.0 * Added `:VDiffthis`, `:VDiffoff`, and `:VDiffupdate` commands to select the Visual area to be compared as a single combined line or multiple separate lines. * Removed to use Conceal and Sign features in `:Diffthis` command. -Update : 3.2 +3.2 * Changed to use |hl-CursorLine|, instead of underline and '-' in the fold column, to indicate the selected lines. -Update : 3.1 +3.1 * Set a plugin specific expression to 'diffexpr' option while spot diff'ed to disable a new internal diff (patch-8.1.360). -Update : 3.0 +3.0 * Disable a new internal diff in 'diffopt' option (patch-8.1.360) to prevent unselected lines to be incorrectly diff'ed. And make this plugin work well even if an external diff command is not available. @@ -258,20 +263,20 @@ Update : 3.0 * Support new iwhiteall and iwhiteeol of 'diffopt' option. * Removed a support for vim version 7.x. -Update : 2.2 +2.2 * Added `:Diffupdate` command. -Update : 2.1 +2.1 * The selected lines are all underlined using sign feature, in addition to a '-' in the fold column, to make them more visible. * Fixed some defects. -Update : 2.0 +2.0 * `:Diffthis` indicates the selected lines with a '-' in the fold column. * `:Diffthis` always highlighted other lines than selected with |hl-Conceal|, but `!` is required as optionally. -Update : 1.1 +1.1 * `:Diffthis` highlights other lines than selected with |hl-Conceal|, instead of showing selected lines with sign feature. * `:Diffthis` and `:Diffoff` try to repair any diff mode mismatch, instead of diff --git a/.vim/pack/plugins/start/vim-spotdiff/plugin/spotdiff.vim b/.vim/pack/plugins/start/vim-spotdiff/plugin/spotdiff.vim index f7ca959..9753cc1 100644 --- a/.vim/pack/plugins/start/vim-spotdiff/plugin/spotdiff.vim +++ b/.vim/pack/plugins/start/vim-spotdiff/plugin/spotdiff.vim @@ -1,15 +1,16 @@ " spotdiff.vim : A range and area selectable diffthis to compare partially " -" Last Change: 2024/06/23 -" Version: 5.2 +" Last Change: 2025/10/23 +" Version: 6.0 " Author: Rick Howe (Takumi Ohtani) -" Copyright: (c) 2014-2024 by Rick Howe +" Copyright: (c) 2014-2025 by Rick Howe " License: MIT -if exists('g:loaded_spotdiff') || !has('diff') || !exists('##WinClosed') +if exists('g:loaded_spotdiff') || !has('diff') || + \(v:version < 900 && !has('nvim-0.7.0')) finish endif -let g:loaded_spotdiff = 5.2 +let g:loaded_spotdiff = 6.0 let s:save_cpo = &cpoptions set cpo&vim @@ -23,27 +24,24 @@ command! -range -bang -bar command! -bang -bar VDiffoff call spotdiff#VDiffoff(0) command! -bar VDiffupdate call spotdiff#VDiffupdate() -for [mod, key, plg, cmd] in [ - \['v', 't', '(VDiffthis)', - \':call spotdiff#VDiffthis(line("''<"), line("''>"), 0)'], - \['v', 'T', '(VDiffthis!)', - \':call spotdiff#VDiffthis(line("''<"), line("''>"), 1)'], - \['n', 'o', '(VDiffoff)', - \':call spotdiff#VDiffoff(0)'], - \['n', 'O', '(VDiffoff!)', - \':call spotdiff#VDiffoff(1)'], - \['n', 'u', '(VDiffupdate)', - \':call spotdiff#VDiffupdate()'], - \['n', 't', '(VDiffthis)', - \':let &operatorfunc = ''VDiffOpFunc0''g@'], - \['n', 'T', '(VDiffthis!)', - \':let &operatorfunc = ''VDiffOpFunc1''g@']] - if !hasmapto(plg, mod) && empty(maparg(key, mod)) +for [s:mod, s:key, s:plg, s:cmd] in [ + \['v', 't', 'VDiffthis', '#VDiffthis(line("''<"), line("''>"), 0)'], + \['v', 'T', 'VDiffthis!', '#VDiffthis(line("''<"), line("''>"), 1)'], + \['n', 'o', 'VDiffoff', '#VDiffoff(0)'], + \['n', 'O', 'VDiffoff!', '#VDiffoff(1)'], + \['n', 'u', 'VDiffupdate', '#VDiffupdate()'], + \['n', 't', 'VDiffthis', 'VDiffOpFunc0'], + \['n', 'T', 'VDiffthis!', 'VDiffOpFunc1']] + let s:key = '' . s:key + let s:plg = '(' . s:plg . ')' + let s:cmd = (s:cmd[0] == '#') ? ':call spotdiff' . s:cmd . '' : + \':let &operatorfunc = ''' . s:cmd . '''g@' + if !hasmapto(s:plg, s:mod) && empty(maparg(s:key, s:mod)) if get(g:, 'VDiffDoMapping', 1) - call execute(mod . 'map ' . key . ' ' . plg) + call execute(s:mod . 'map ' . s:key . ' ' . s:plg) endif endif - call execute(mod . 'noremap ' . plg . ' ' . cmd) + call execute(s:mod . 'noremap ' . s:plg . ' ' . s:cmd) endfor function! s:VDiffOpFunc0(vm) abort diff --git a/.vim/pack/plugins/start/vim-tabular/.gitignore b/.vim/pack/plugins/start/vim-tabular/.gitignore new file mode 100644 index 0000000..0a56e3f --- /dev/null +++ b/.vim/pack/plugins/start/vim-tabular/.gitignore @@ -0,0 +1 @@ +/doc/tags diff --git a/.vim/pack/plugins/start/vim-tagbar-markdown b/.vim/pack/plugins/start/vim-tagbar-markdown new file mode 160000 index 0000000..265dfc6 --- /dev/null +++ b/.vim/pack/plugins/start/vim-tagbar-markdown @@ -0,0 +1 @@ +Subproject commit 265dfc6ed12ec0d40b2156fb70542ef5657461b2 diff --git a/.vim/pack/plugins/start/vim-tagbar/.gitattributes b/.vim/pack/plugins/start/vim-tagbar/.gitattributes new file mode 100644 index 0000000..3b1db11 --- /dev/null +++ b/.vim/pack/plugins/start/vim-tagbar/.gitattributes @@ -0,0 +1,4 @@ +.gitignore export-ignore +.gitattributes export-ignore +README export-ignore +.info export-ignore diff --git a/.vim/pack/plugins/start/vim-tagbar/.github/FUNDING.yml b/.vim/pack/plugins/start/vim-tagbar/.github/FUNDING.yml new file mode 100644 index 0000000..f4973c7 --- /dev/null +++ b/.vim/pack/plugins/start/vim-tagbar/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: [alerque] +custom: ['https://paypal.me/alerque', 'https://paypal.me/dhegland42'] diff --git a/.vim/pack/plugins/start/vim-tagbar/.github/workflows/check.yml b/.vim/pack/plugins/start/vim-tagbar/.github/workflows/check.yml new file mode 100644 index 0000000..521806e --- /dev/null +++ b/.vim/pack/plugins/start/vim-tagbar/.github/workflows/check.yml @@ -0,0 +1,30 @@ +name: Check +on: [push, pull_request] +jobs: + check: + strategy: + fail-fast: false + matrix: + vimFlavor: ["vim", "nvim"] + tagsProvider: ["exuberant-ctags", "universal-ctags"] + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Enable Universe package repository + run: | + sudo add-apt-repository universe + sudo apt-get update + - name: Install ${{ matrix.tagsProvider }} + run: | + sudo apt-get install ${{ matrix.tagsProvider }} + - name: Install ${{ matrix.vimFlavor }} + run: | + sudo apt-get install ${{ matrix.vimFlavor == 'nvim' && 'neovim' || 'vim' }} + - name: Review versions + run: | + ctags --version + ${{ matrix.vimFlavor }} --version + - name: "Try tagbar#OpenWindow()" + run: | + ${{ matrix.vimFlavor == 'nvim' && 'nvim -u /dev/null --headless' || 'vim' }} -i NONE "+set rtp+=$(pwd)" "+call tagbar#OpenWindow() | q" "+cq" plugin/tagbar.vim diff --git a/.vim/pack/plugins/start/vim-tagbar/.github/workflows/reviewdog.yml b/.vim/pack/plugins/start/vim-tagbar/.github/workflows/reviewdog.yml new file mode 100644 index 0000000..421e438 --- /dev/null +++ b/.vim/pack/plugins/start/vim-tagbar/.github/workflows/reviewdog.yml @@ -0,0 +1,13 @@ +name: Reviewdog +on: [pull_request] +jobs: + vint: + name: vint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: vint + uses: reviewdog/action-vint@v1 + with: + github_token: ${{ secrets.github_token }} + reporter: github-pr-review diff --git a/.vim/pack/plugins/start/vim-tagbar/.github/workflows/vint.yml b/.vim/pack/plugins/start/vim-tagbar/.github/workflows/vint.yml new file mode 100644 index 0000000..8ee112b --- /dev/null +++ b/.vim/pack/plugins/start/vim-tagbar/.github/workflows/vint.yml @@ -0,0 +1,17 @@ +name: Vint +on: [push] +jobs: + vint: + name: vint + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + - name: Setup dependencies + run: pip install vim-vint + - name: Lint Vimscript + run: vint . diff --git a/.vim/pack/plugins/start/vim-tagbar/.gitignore b/.vim/pack/plugins/start/vim-tagbar/.gitignore new file mode 100644 index 0000000..6e92f57 --- /dev/null +++ b/.vim/pack/plugins/start/vim-tagbar/.gitignore @@ -0,0 +1 @@ +tags diff --git a/.vim/pack/plugins/start/vim-tagbar/.info b/.vim/pack/plugins/start/vim-tagbar/.info new file mode 100644 index 0000000..f4d9137 --- /dev/null +++ b/.vim/pack/plugins/start/vim-tagbar/.info @@ -0,0 +1,2 @@ +tagbar +3465 diff --git a/.vim/pack/plugins/start/vim-tagbar/.vintrc.yaml b/.vim/pack/plugins/start/vim-tagbar/.vintrc.yaml new file mode 100644 index 0000000..c44b6ab --- /dev/null +++ b/.vim/pack/plugins/start/vim-tagbar/.vintrc.yaml @@ -0,0 +1,5 @@ +cmdargs: + severity: style_problem + color: true + env: + neovim: false diff --git a/.vim/pack/plugins/start/vim-tagbar/LICENSE b/.vim/pack/plugins/start/vim-tagbar/LICENSE new file mode 100644 index 0000000..57339aa --- /dev/null +++ b/.vim/pack/plugins/start/vim-tagbar/LICENSE @@ -0,0 +1,82 @@ +TAGBAR LICENSE + +This is the normal Vim license (see ':h license' in Vim) with the necessary +replacements for the project and maintainer information. + +I) There are no restrictions on distributing unmodified copies of Tagbar + except that they must include this license text. You can also distribute + unmodified parts of Tagbar, likewise unrestricted except that they must + include this license text. You are also allowed to include executables + that you made from the unmodified Tagbar sources, plus your own usage + examples and scripts. + +II) It is allowed to distribute a modified (or extended) version of Tagbar, + including executables and/or source code, when the following four + conditions are met: + 1) This license text must be included unmodified. + 2) The modified Tagbar must be distributed in one of the following five ways: + a) If you make changes to Tagbar yourself, you must clearly describe in + the distribution how to contact you. When the maintainer asks you + (in any way) for a copy of the modified Tagbar you distributed, you + must make your changes, including source code, available to the + maintainer without fee. The maintainer reserves the right to + include your changes in the official version of Tagbar. What the + maintainer will do with your changes and under what license they + will be distributed is negotiable. If there has been no negotiation + then this license, or a later version, also applies to your changes. + The current maintainer is Jan Larres . If this + changes it will be announced in appropriate places (most likely + preservim.github.io/tagbar and/or github.com/preservim/tagbar). + When it is completely impossible to contact the maintainer, the + obligation to send him your changes ceases. Once the maintainer has + confirmed that he has received your changes they will not have to be + sent again. + b) If you have received a modified Tagbar that was distributed as + mentioned under a) you are allowed to further distribute it + unmodified, as mentioned at I). If you make additional changes the + text under a) applies to those changes. + c) Provide all the changes, including source code, with every copy of + the modified Tagbar you distribute. This may be done in the form of + a context diff. You can choose what license to use for new code you + add. The changes and their license must not restrict others from + making their own changes to the official version of Tagbar. + d) When you have a modified Tagbar which includes changes as mentioned + under c), you can distribute it without the source code for the + changes if the following three conditions are met: + - The license that applies to the changes permits you to distribute + the changes to the Tagbar maintainer without fee or restriction, and + permits the Tagbar maintainer to include the changes in the official + version of Tagbar without fee or restriction. + - You keep the changes for at least three years after last + distributing the corresponding modified Tagbar. When the + maintainer or someone who you distributed the modified Tagbar to + asks you (in any way) for the changes within this period, you must + make them available to him. + - You clearly describe in the distribution how to contact you. This + contact information must remain valid for at least three years + after last distributing the corresponding modified Tagbar, or as + long as possible. + e) When the GNU General Public License (GPL) applies to the changes, + you can distribute the modified Tagbar under the GNU GPL version 2 + or any later version. + 3) A message must be added, at least in the documentation, such that the + user of the modified Tagbar is able to see that it was modified. When + distributing as mentioned under 2)e) adding the message is only + required for as far as this does not conflict with the license used for + the changes. + 4) The contact information as required under 2)a) and 2)d) must not be + removed or changed, except that the person himself can make + corrections. + +III) If you distribute a modified version of Tagbar, you are encouraged to use + the Tagbar license for your changes and make them available to the + maintainer, including the source code. The preferred way to do this is + by e-mail or by uploading the files to a server and e-mailing the URL. If + the number of changes is small (e.g., a modified Makefile) e-mailing a + context diff will do. The e-mail address to be used is + + +IV) It is not allowed to remove this license from the distribution of the + Tagbar sources, parts of it or from a modified version. You may use this + license for previous Tagbar releases instead of the license that they + came with, at your option. diff --git a/.vim/pack/plugins/start/vim-tagbar/README.md b/.vim/pack/plugins/start/vim-tagbar/README.md new file mode 100644 index 0000000..97a259f --- /dev/null +++ b/.vim/pack/plugins/start/vim-tagbar/README.md @@ -0,0 +1,100 @@ +# Tagbar: a class outline viewer for Vim + +[![Vint](https://github.com/preservim/tagbar/workflows/Vint/badge.svg)](https://github.com/preservim/tagbar/actions?workflow=Vint) +[![Check](https://github.com/preservim/tagbar/workflows/Check/badge.svg)](https://github.com/preservim/tagbar/actions?workflow=Check) + +## What Tagbar is + +Tagbar is a Vim plugin that provides an easy way to browse the tags of the +current file and get an overview of its structure. It does this by creating a +sidebar that displays the ctags-generated tags of the current file, ordered by +their scope. This means that for example methods in C++ are displayed under +the class they are defined in. + +## What Tagbar is not + +Tagbar is not a general-purpose tool for managing `tags` files. It only +creates the tags it needs on-the-fly in-memory without creating any files. +`tags` file management is provided by other plugins, like for example +[gutentags](https://github.com/ludovicchabant/vim-gutentags). + +## Dependencies + +* [Vim](http://www.vim.org/) >= 7.3.1058 + or any version of [NeoVim](https://neovim.io/). + +* A ctags implementation: We _highly recommend_ any version of [Universal + Ctags](https://ctags.io). It is a maintained fork of Exuberant Ctags with + many bugfixes, support for many more formats, and proper Unicode support. + + [Exuberant Ctags](http://ctags.sourceforge.net/) 5.5 or higher works to some + degree but will be deprecated eventually. + + Some additional formats can also be handled by other providers such as + [jsctags](https://github.com/sergioramos/jsctags) or + [phpctags](https://github.com/vim-php/phpctags). + +## Installation + +Extract the archive or clone the repository into a directory in your +`'runtimepath'`, or use a plugin manager of your choice like +[pathogen](https://github.com/tpope/vim-pathogen). Don't forget to run +`:helptags` if your plugin manager doesn't do it for you so you can access the +documentation with `:help tagbar`. + +If the ctags executable is not installed in one of the directories in your +`$PATH` environment variable you have to set the `g:tagbar_ctags_bin` +variable, see the documentation for more info. + +## Quickstart + +Put something like the following into your ~/.vimrc: + +```vim +nmap :TagbarToggle +``` + +If you do this the F8 key will toggle the Tagbar window. You can of course use +any shortcut you want. For more flexible ways to open and close the window +(and the rest of the functionality) see the [documentation](https://github.com/majutsushi/tagbar/blob/master/doc/tagbar.txt) using `:help tagbar`. + +## Support for additional filetypes + +For filetypes that are not supported by Exuberant Ctags check out [the +wiki](https://github.com/preservim/tagbar/wiki) to see whether other projects +offer support for them and how to use them. Please add any other +projects/configurations that you find or create yourself so that others can +benefit from them, too. + +## Note: If the file structure display is wrong + +If you notice that there are some errors in the way your file's structure is +displayed in Tagbar, please make sure that the bug is actually in Tagbar +before you report an issue. Since Tagbar uses +[exuberant-ctags](http://ctags.sourceforge.net/) and compatible programs to do +the actual file parsing, it is likely that the bug is actually in the program +responsible for that filetype instead. + +There is an example in `:h tagbar-issues` about how to run ctags manually so +you can determine where the bug actually is. If the bug is actually in ctags, +please report it on their website instead, as there is nothing I can do about +it in Tagbar. Thank you! + +You can also have a look at [ctags bugs that have previously been filed +against Tagbar](https://github.com/preservim/tagbar/issues?labels=ctags-bug&page=1&state=closed). + +## Screenshots + +![screenshot1](https://i.imgur.com/Sf9Ls2r.png) +![screenshot2](https://i.imgur.com/n4bpPv3.png) + +## License + +Tagbar is distributed under the terms of the *Vim license*, see the included [LICENSE](LICENSE) file. + +## Contributors + +Tagbar was originally written by [Jan Larres](https://github.com/majutsushi). +It is actively maintained by [Caleb Maclennan](https://github.com/alerque) and [David Hegland](https://github.com/raven42). +At least [75 others have contributed](https://github.com/preservim/tagbar/graphs/contributors) features and bug fixes over the years. +Please document [issues](https://github.com/preservim/tagbar/issues) or submit [pull requests](https://github.com/preservim/tagbar/issues) on Github. diff --git a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar.vim b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar.vim index 7377016..d74b090 100644 --- a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar.vim +++ b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar.vim @@ -3,8 +3,8 @@ " Description: List the current file's tags in a sidebar, ordered by class etc " Author: Jan Larres " Licence: Vim licence -" Website: http://majutsushi.github.com/tagbar/ -" Version: 2.7 +" Website: https://preservim.github.io/tagbar +" Version: 3.1.1 " Note: This plugin was heavily inspired by the 'Taglist' plugin by " Yegappan Lakshmanan and uses a small amount of code from it. " @@ -87,6 +87,124 @@ let s:warnings = { \ 'encoding': 0 \ } +let s:singular_types = { + \ 'Classes': 'Class', + \ 'Delegates': 'Delegate', + \ 'Enumeration values': 'Enumeration value', + \ 'Enumerations': 'Enumeration', + \ 'Error codes': 'Error code', + \ 'Error domains': 'Error domain', + \ 'Fields': 'Field', + \ 'Interfaces': 'Interface', + \ 'JavaScript funtions': 'JavaScript function', + \ 'Methods': 'Method', + \ 'MobiLink Conn Scripts': 'MobiLink Conn Script', + \ 'MobiLink Properties': 'MobiLink Property', + \ 'MobiLink Table Scripts': 'MobiLink Table Script', + \ 'Properties': 'Property', + \ 'Signals': 'Signal', + \ 'Structures': 'Structure', + \ 'autocommand groups': 'autocommand group', + \ 'block data': 'block data', + \ 'block label': 'block label', + \ 'chapters': 'chapter', + \ 'classes': 'class', + \ 'commands': 'command', + \ 'common blocks': 'common block', + \ 'components': 'component', + \ 'constant definitions': 'constant definition', + \ 'constants': 'constant', + \ 'constructors': 'constructor', + \ 'cursors': 'cursor', + \ 'data items': 'data item', + \ 'defines': 'define', + \ 'derived types and structures': 'derived type and structure', + \ 'domains': 'domain', + \ 'entities': 'entity', + \ 'entry points': 'entry point', + \ 'embedded': 'embedded', + \ 'enum constants': 'enum constant', + \ 'enum types': 'enum type', + \ 'enumerations': 'enumeration', + \ 'enumerators': 'enumerator', + \ 'enums': 'enum', + \ 'events': 'event', + \ 'exception declarations': 'exception declaration', + \ 'exceptions': 'exception', + \ 'features': 'feature', + \ 'fields': 'field', + \ 'file descriptions': 'file description', + \ 'formats': 'format', + \ 'fragments': 'fragment', + \ 'function definitions': 'function definition', + \ 'functions': 'function', + \ 'functor definitions': 'functor definition', + \ 'global variables': 'global variable', + \ 'group items': 'group item', + \ 'imports': 'import', + \ 'includes': 'include', + \ 'indexes': 'index', + \ 'interfaces': 'interface', + \ 'javascript functions': 'JavaScript function', + \ 'labels': 'label', + \ 'macro definitions': 'macro definition', + \ 'macros': 'macro', + \ 'maps': 'map', + \ 'members': 'member', + \ 'methods': 'method', + \ 'modules or functors': 'module or function', + \ 'modules': 'module', + \ 'mxtags': 'mxtag', + \ 'named anchors': 'named anchor', + \ 'namelists': 'namelist', + \ 'namespaces': 'namespace', + \ 'net data types': 'net data type', + \ 'packages': 'package', + \ 'package': 'package', + \ 'paragraphs': 'paragraph', + \ 'parts': 'part', + \ 'patterns': 'pattern', + \ 'ports': 'port', + \ 'procedures': 'procedure', + \ 'program ids': 'program id', + \ 'programs': 'program', + \ 'projects': 'project', + \ 'properties': 'property', + \ 'prototypes': 'prototype', + \ 'publications': 'publication', + \ 'record definitions': 'record definition', + \ 'record fields': 'record field', + \ 'records': 'record', + \ 'register data types': 'register data type', + \ 'sections': 'section', + \ 'services': 'services', + \ 'sets': 'sets', + \ 'signature declarations': 'signature declaration', + \ 'singleton methods': 'singleton method', + \ 'slots': 'slot', + \ 'structs': 'struct', + \ 'structure declarations': 'structure declaration', + \ 'structure fields': 'structure field', + \ 'subparagraphs': 'subparagraph', + \ 'subroutines': 'subroutine', + \ 'subsections': 'subsection', + \ 'subsubsections': 'subsubsection', + \ 'subtypes': 'subtype', + \ 'synonyms': 'synonym', + \ 'tables': 'table', + \ 'targets': 'target', + \ 'tasks': 'task', + \ 'triggers': 'trigger', + \ 'type definitions': 'type definition', + \ 'type names': 'type name', + \ 'typedefs': 'typedef', + \ 'types': 'type', + \ 'unions': 'union', + \ 'value bindings': 'value binding', + \ 'variables': 'variable', + \ 'views': 'view', + \ 'vimball filenames': 'vimball filename'} + " s:Init() {{{2 function! s:Init(silent) abort if s:checked_ctags == 2 && a:silent @@ -114,42 +232,62 @@ endfunction function! s:InitTypes() abort call tagbar#debug#log('Initializing types') - let supported_types = s:GetSupportedFiletypes() + let s:supported_types = s:GetSupportedFiletypes() if s:ctags_is_uctags - let s:known_types = tagbar#types#uctags#init(supported_types) + let s:known_types = tagbar#types#uctags#init(s:supported_types) else - let s:known_types = tagbar#types#ctags#init(supported_types) + let s:known_types = tagbar#types#ctags#init(s:supported_types) endif " Use dart_ctags if available let dart_ctags = s:CheckFTCtags('dart_ctags', 'dart') if dart_ctags !=# '' - let supported_types['dart'] = 1 + let s:supported_types['dart'] = 1 call tagbar#debug#log('Detected dart_ctags, overriding typedef') let type_dart = tagbar#prototypes#typeinfo#new() let type_dart.ctagstype = 'dart' let type_dart.kinds = [ - \ {'short' : 'i', 'long' : 'imports', 'fold' : 1, 'stl' : 0}, - \ {'short' : 'C', 'long' : 'consts', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'v', 'long' : 'variables', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'F', 'long' : 'functions', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'l', 'long' : 'library', 'fold' : 0, 'stl' : 0}, + \ {'short' : 't', 'long' : 'export', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'i', 'long' : 'imports', 'fold' : 1, 'stl' : 0}, + \ {'short' : 'D', 'long' : 'dart', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'U', 'long' : 'pub', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'L', 'long' : 'local', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'P', 'long' : 'part', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'p', 'long' : 'part of', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'C', 'long' : 'consts', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'F', 'long' : 'functions', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'E', 'long' : 'enums', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'e', 'long' : 'constants', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'x', 'long' : 'mixins', 'fold' : 0, 'stl' : 0}, \ {'short' : 'c', 'long' : 'classes', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'd', 'long' : 'extends', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'w', 'long' : 'with', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'z', 'long' : 'implements', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'n', 'long' : 'on', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'r', 'long' : 'constructors', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'a', 'long' : 'abstract functions', 'fold' : 0, 'stl' : 0}, \ {'short' : 'f', 'long' : 'fields', 'fold' : 0, 'stl' : 0}, \ {'short' : 'm', 'long' : 'methods', 'fold' : 0, 'stl' : 0}, \ {'short' : 'M', 'long' : 'static methods', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'r', 'long' : 'constructors', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'o', 'long' : 'operators', 'fold' : 0, 'stl' : 0}, \ {'short' : 'g', 'long' : 'getters', 'fold' : 0, 'stl' : 0}, \ {'short' : 's', 'long' : 'setters', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'a', 'long' : 'abstract functions', 'fold' : 0, 'stl' : 0}, - \ ] + \ {'short' : 'o', 'long' : 'operators', 'fold' : 0, 'stl' : 0}, + \ ] let type_dart.sro = ':' let type_dart.kind2scope = { - \ 'c' : 'class' + \ 'c' : 'class', + \ 'E' : 'enum', + \ 'x' : 'mixin', + \ 'i' : 'directive' \ } let type_dart.scope2kind = { - \ 'class' : 'c' + \ 'class' : 'c', + \ 'enum' : 'E', + \ 'mixin' : 'x', + \ 'directive' : 'i' \ } let type_dart.ctagsbin = dart_ctags let type_dart.ctagsargs = '-l' @@ -190,17 +328,17 @@ function! s:InitTypes() abort let type_go = tagbar#prototypes#typeinfo#new() let type_go.ctagstype = 'go' let type_go.kinds = [ - \ {'short' : 'p', 'long' : 'package', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'i', 'long' : 'imports', 'fold' : 1, 'stl' : 0}, + \ {'short' : 'p', 'long' : 'package', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'i', 'long' : 'imports', 'fold' : 1, 'stl' : 1}, \ {'short' : 'c', 'long' : 'constants', 'fold' : 0, 'stl' : 0}, \ {'short' : 'v', 'long' : 'variables', 'fold' : 0, 'stl' : 0}, - \ {'short' : 't', 'long' : 'types', 'fold' : 0, 'stl' : 0}, + \ {'short' : 't', 'long' : 'types', 'fold' : 0, 'stl' : 1}, \ {'short' : 'n', 'long' : 'intefaces', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'w', 'long' : 'fields', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'w', 'long' : 'fields', 'fold' : 0, 'stl' : 1}, \ {'short' : 'e', 'long' : 'embedded', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'm', 'long' : 'methods', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'm', 'long' : 'methods', 'fold' : 0, 'stl' : 1}, \ {'short' : 'r', 'long' : 'constructors', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'f', 'long' : 'functions', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0, 'stl' : 1}, \ ] let type_go.sro = '.' let type_go.kind2scope = { @@ -393,8 +531,10 @@ function! s:MapKeys() abort let keys = def endif for key in keys - execute 'nnoremap' . map_options . key . - \ ' :call ' . func . '' + if !empty(key) + execute 'nnoremap' . map_options . key . + \ ' :call ' . func . '' + endif endfor unlet def endfor @@ -409,16 +549,6 @@ function! s:CreateAutocommands() abort augroup TagbarAutoCmds autocmd! - if !g:tagbar_silent - autocmd CursorHold __Tagbar__.* call s:ShowPrototype(1) - endif - autocmd WinEnter __Tagbar__.* call s:SetStatusLine() - autocmd WinLeave __Tagbar__.* call s:SetStatusLine() - - if g:tagbar_autopreview - autocmd CursorMoved __Tagbar__.* nested call s:ShowInPreviewWin() - endif - autocmd BufEnter * if expand('') !~ '__Tagbar__.*' | \ let s:last_alt_bufnr = bufnr('#') | \ endif @@ -426,28 +556,64 @@ function! s:CreateAutocommands() abort autocmd QuitPre * let s:vim_quitting = 1 endif autocmd WinEnter * nested call s:HandleOnlyWindow() - autocmd WinEnter * if bufwinnr(s:TagbarBufName()) == -1 | - \ call s:ShrinkIfExpanded() | - \ endif - autocmd BufWritePost * - \ call s:HandleBufWrite(fnamemodify(expand(''), ':p')) - autocmd CursorHold,CursorHoldI * call s:do_delayed_update() - " BufReadPost is needed for reloading the current buffer if the file - " was changed by an external command; see commit 17d199f - autocmd BufReadPost,BufEnter,CursorHold,FileType * call - \ s:AutoUpdate(fnamemodify(expand(''), ':p'), 0) - autocmd BufDelete,BufWipeout * - \ nested call s:HandleBufDelete(expand(''), expand('')) + if !g:tagbar_no_autocmds + if !g:tagbar_silent + autocmd CursorHold __Tagbar__.* call s:ShowPrototype(1) + endif + autocmd WinEnter __Tagbar__.* call s:SetStatusLine() + autocmd WinLeave __Tagbar__.* call s:SetStatusLine() - " Suspend Tagbar while grep commands are running, since we don't want - " to process files that only get loaded temporarily to search them - autocmd QuickFixCmdPre *grep* let s:tagbar_qf_active = 1 - autocmd QuickFixCmdPost *grep* if exists('s:tagbar_qf_active') | - \ unlet s:tagbar_qf_active | - \ endif + if g:tagbar_show_balloon == 1 && has('balloon_eval') + autocmd WinEnter __Tagbar__.* + \ let s:beval = &beval | + \ set ballooneval + autocmd WinLeave __Tagbar__.* + \ if exists("s:beval") | + \ let &beval = s:beval | + \ endif + endif - autocmd VimEnter * call s:CorrectFocusOnStartup() + if g:tagbar_autopreview + autocmd CursorMoved __Tagbar__.* nested call s:ShowInPreviewWin() + endif + + autocmd WinEnter * if bufwinnr(s:TagbarBufName()) == -1 | + \ call s:ShrinkIfExpanded() | + \ endif + + autocmd BufWritePost * + \ call s:HandleBufWrite(fnamemodify(expand(''), ':p')) + autocmd CursorHold,CursorHoldI * call s:do_delayed_update() + " BufReadPost is needed for reloading the current buffer if the file + " was changed by an external command; see commit 17d199f + autocmd BufReadPost,BufEnter,CursorHold,FileType * call + \ s:AutoUpdate(fnamemodify(expand(''), ':p'), 0) + if g:tagbar_highlight_follow_insert + autocmd CursorHoldI * call + \ s:AutoUpdate(fnamemodify(expand(''), ':p'), 0) + endif + + " Suspend Tagbar while grep commands are running, since we don't want + " to process files that only get loaded temporarily to search them + autocmd QuickFixCmdPre *grep* let s:tagbar_qf_active = 1 + autocmd QuickFixCmdPost *grep* if exists('s:tagbar_qf_active') | + \ unlet s:tagbar_qf_active | + \ endif + + autocmd VimEnter * call s:CorrectFocusOnStartup() + endif + augroup END + + " Separate these autocmds out from the others as we want to always perform + " these actions even if the tagbar window closes. + augroup TagbarCleanupAutoCmds + autocmd! + + if !g:tagbar_no_autocmds + autocmd BufDelete,BufWipeout * + \ nested call s:HandleBufDelete(expand(''), expand('')) + endif augroup END let s:autocommands_done = 1 @@ -514,16 +680,16 @@ function! s:CheckForExCtags(silent) abort let ctags_output = s:ExecuteCtags(ctags_cmd) call tagbar#debug#log("Command output:\n" . ctags_output) - call tagbar#debug#log('Exit code: ' . v:shell_error) + call tagbar#debug#log('Exit code: ' . s:shell_error) - if v:shell_error || ctags_output !~# '\(Exuberant\|Universal\) Ctags' + if s:shell_error || ctags_output !~# '\(Exuberant\|Universal\) Ctags' let l:errmsg = 'Tagbar: Ctags doesn''t seem to be Exuberant Ctags!' let l:infomsg = 'BSD ctags will NOT WORK.' . \ ' Please download Exuberant Ctags from ctags.sourceforge.net' . \ ' and install it in a directory in your $PATH' . \ ' or set g:tagbar_ctags_bin.' call s:CtagsErrMsg(l:errmsg, l:infomsg, a:silent, - \ ctags_cmd, ctags_output, v:shell_error) + \ ctags_cmd, ctags_output, s:shell_error) let s:checked_ctags = 2 return 0 elseif !s:CheckExCtagsVersion(ctags_output) @@ -605,19 +771,18 @@ endfunction " s:CheckFTCtags() {{{2 function! s:CheckFTCtags(bin, ftype) abort - if executable(a:bin) - return a:bin - endif - if exists('g:tagbar_type_' . a:ftype) let userdef = g:tagbar_type_{a:ftype} - if has_key(userdef, 'ctagsbin') - return userdef.ctagsbin - else + if has_key(userdef, 'kinds') return '' + elseif has_key(userdef, 'ctagsbin') + return userdef.ctagsbin endif endif + if executable(a:bin) + return a:bin + endif return '' endfunction @@ -632,7 +797,7 @@ function! s:GetSupportedFiletypes() abort let ctags_output = s:ExecuteCtags(ctags_cmd) - if v:shell_error + if s:shell_error " this shouldn't happen as potential problems would have already been " caught by the previous ctags checking return @@ -640,14 +805,14 @@ function! s:GetSupportedFiletypes() abort let types = split(ctags_output, '\n\+') - let supported_types = {} + let ctags_supported_types = {} for type in types if match(type, '\[disabled\]') == -1 - let supported_types[tolower(type)] = 1 + let ctags_supported_types[tolower(type)] = 1 endif endfor - return supported_types + return ctags_supported_types endfunction " Known files {{{1 @@ -717,7 +882,7 @@ function! s:OpenWindow(flags) abort if tagbarwinnr != -1 if winnr() != tagbarwinnr && jump call s:goto_win(tagbarwinnr) - call s:HighlightTag(g:tagbar_autoshowtag != 2, 1, curline) + call s:HighlightTag(g:tagbar_autoshowtag != 2, 1, 1, curline) endif call tagbar#debug#log('OpenWindow finished, Tagbar already open') return @@ -761,17 +926,15 @@ function! s:OpenWindow(flags) abort endif let s:window_opening = 1 - if g:tagbar_vertical == 0 + if g:tagbar_position =~# 'vertical' + let size = g:tagbar_width let mode = 'vertical ' - let openpos = g:tagbar_left ? 'topleft ' : 'botright ' - let width = g:tagbar_width else + let size = g:tagbar_height let mode = '' - let openpos = g:tagbar_left ? 'leftabove ' : 'rightbelow ' - let width = g:tagbar_vertical endif - exe 'silent keepalt ' . openpos . mode . width . 'split ' . s:TagbarBufName() - exe 'silent ' . mode . 'resize ' . width + exe 'silent keepalt ' . g:tagbar_position . size . 'split ' . s:TagbarBufName() + exe 'silent ' . mode . 'resize ' . size unlet s:window_opening call s:InitWindow(autoclose) @@ -785,7 +948,7 @@ function! s:OpenWindow(flags) abort endif call s:AutoUpdate(curfile, 0) - call s:HighlightTag(g:tagbar_autoshowtag != 2, 1, curline) + call s:HighlightTag(g:tagbar_autoshowtag != 2, 1, 1, curline) if !(g:tagbar_autoclose || autofocus || g:tagbar_autofocus) if exists('*win_getid') @@ -828,20 +991,38 @@ function! s:InitWindow(autoclose) abort setlocal nobuflisted setlocal nomodifiable setlocal textwidth=0 + setlocal colorcolumn="" + + if g:tagbar_scrolloff > 0 + execute 'setlocal scrolloff=' . g:tagbar_scrolloff + endif if g:tagbar_show_balloon == 1 && has('balloon_eval') setlocal balloonexpr=TagbarBalloonExpr() - set ballooneval endif " Window-local options setlocal nolist - setlocal nowrap setlocal winfixwidth setlocal nospell + if g:tagbar_wrap == 0 + setlocal nowrap + else + setlocal wrap + if exists('+linebreak') + setlocal breakindent + setlocal breakindentopt=shift:4 + if g:tagbar_wrap == 1 + setlocal linebreak + elseif g:tagbar_wrap == 2 + setlocal nolinebreak + endif + endif + endif + if g:tagbar_show_linenumbers == 0 setlocal nonumber if exists('+relativenumber') @@ -866,6 +1047,7 @@ function! s:InitWindow(autoclose) abort setlocal foldmethod& setlocal foldexpr& + silent! setlocal signcolumn=no let w:autoclose = a:autoclose @@ -909,6 +1091,7 @@ function! s:CloseWindow() abort " Other windows are open, only close the tagbar one let curfile = tagbar#state#get_current_file(0) + let s:is_maximized = 0 close @@ -1030,6 +1213,17 @@ function! s:ProcessFile(fname, ftype) abort return endif + let l:bufnum = bufnr(a:fname) + + if !bufloaded(l:bufnum) + call tagbar#debug#log('[ProcessFile] Buffer is not loaded exiting...') + return + endif + if !bufexists(l:bufnum) + call tagbar#debug#log('[ProcessFile] Buffer does not exist exiting...') + return + endif + let typeinfo = s:known_types[a:ftype] " If the file has only been updated preserve the fold states, otherwise @@ -1053,29 +1247,43 @@ function! s:ProcessFile(fname, ftype) abort call tagbar#debug#log('typeinfo for file to process: ' . string(typeinfo)) - " Use a temporary files for ctags processing instead of the original one. - " This allows using Tagbar for files accessed with netrw, and also doesn't - " slow down Tagbar for files that sit on slow network drives. - let tempfile = tempname() - let ext = fnamemodify(fileinfo.fpath, ':e') - if ext !=# '' - let tempfile .= '.' . ext - endif - - call tagbar#debug#log('Caching file into: ' . tempfile) - let templines = getbufline(fileinfo.bufnr, 1, '$') - let res = writefile(templines, tempfile) - - if res != 0 - call tagbar#debug#log('Could not create copy '.tempfile) + if g:tagbar_file_size_limit > 0 + \ && fileinfo.fsize > g:tagbar_file_size_limit + \ && !exists('b:tagbar_force_update') + call tagbar#debug#log('File size exceeds defined limit') + let fileinfo.fsize_exceeded = 1 + call s:known_files.put(fileinfo) return - endif - let fileinfo.mtime = getftime(tempfile) + elseif g:tagbar_use_cache + " Use a temporary files for ctags processing instead of the original one. + " This allows using Tagbar for files accessed with netrw, and also doesn't + " slow down Tagbar for files that sit on slow network drives. + let tempfile = tempname() + let ext = fnamemodify(fileinfo.fpath, ':e') + if ext !=# '' + let tempfile .= '.' . ext + endif - let ctags_output = s:ExecuteCtagsOnFile(tempfile, a:fname, typeinfo) + call tagbar#debug#log('Caching file into: ' . tempfile) + let templines = getbufline(fileinfo.bufnr, 1, '$') + let res = writefile(templines, tempfile) - if !tagbar#debug#enabled() - call delete(tempfile) + if res != 0 + call tagbar#debug#log('Could not create copy '.tempfile) + return + endif + let fileinfo.mtime = getftime(tempfile) + let fileinfo.fsize_exceeded = 0 + + let ctags_output = s:ExecuteCtagsOnFile(tempfile, a:fname, typeinfo) + + if !tagbar#debug#enabled() + call delete(tempfile) + endif + else + call tagbar#debug#log('File caching disabled') + let fileinfo.fsize_exceeded = 0 + let ctags_output = s:ExecuteCtagsOnFile(a:fname, a:fname, typeinfo) endif if ctags_output == -1 @@ -1104,9 +1312,14 @@ function! s:ProcessFile(fname, ftype) abort if line =~# '^!_TAG_' || has_key(seen, line) continue endif + if g:tagbar_ignore_anonymous && line =~# '__anon' + call tagbar#debug#log('anonymous tag found - ignoring per tagbar configuration') + continue + endif + let seen[line] = 1 - let parts = split(line, ';"') + let parts = split(line, ';"\t') if len(parts) == 2 " Is a valid tag line call s:ParseTagline(parts[0], parts[1], typeinfo, fileinfo) endif @@ -1174,9 +1387,9 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort " universal-ctags deprecated this argument name if s:ctags_is_uctags - let ctags_args += [ '--extras=' ] + let ctags_args += [ '--extras=+F' ] else - let ctags_args += [ '--extra=' ] + let ctags_args += [ '--extra=', '--file-scope=yes' ] endif let ctags_args = ctags_args + [ @@ -1184,8 +1397,7 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort \ '-', \ '--format=2', \ '--excmd=pattern', - \ '--fields=nksSaf', - \ '--file-scope=yes', + \ '--fields=nksSafet', \ '--sort=no', \ '--append=no' \ ] @@ -1195,11 +1407,6 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort let ctags_args += [ '-V' ] endif - " Include extra type definitions - if has_key(a:typeinfo, 'deffile') - let ctags_args += ['--options=' . expand(a:typeinfo.deffile)] - endif - " Third-party programs may not necessarily make use of this if has_key(a:typeinfo, 'ctagstype') let ctags_type = a:typeinfo.ctagstype @@ -1211,9 +1418,29 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort endif endfor + " Must define custom languages before --language-force + if has_key(a:typeinfo, 'deffile') && filereadable(expand(a:typeinfo.deffile)) + " check if ftype is a custom language (unknown to ctags) + if has_key(a:typeinfo, 'ftype') && !has_key(s:supported_types, a:typeinfo.ftype) + let ctags_args += ['--options=' . expand(a:typeinfo.deffile)] + endif + endif + let ctags_args += ['--language-force=' . ctags_type] let ctags_args += ['--' . ctags_type . '-kinds=' . ctags_kinds] endif + + " Include extra type definitions - include last to allow for any + " overrides + if has_key(a:typeinfo, 'deffile') && filereadable(expand(a:typeinfo.deffile)) + let ctags_args += ['--options=' . expand(a:typeinfo.deffile)] + endif + + if has_key(a:typeinfo, 'regex') + for regex in a:typeinfo.regex + let ctags_args += ['--regex-' . ctags_type . '=' . regex] + endfor + endif endif if has_key(a:typeinfo, 'ctagsbin') @@ -1233,10 +1460,10 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort let ctags_output = s:ExecuteCtags(ctags_cmd) - if v:shell_error || ctags_output =~? 'Warning: cannot open source file' + if s:shell_error || ctags_output =~? 'Warning: cannot open \(source\|input\) file' call tagbar#debug#log('Command output:') call tagbar#debug#log(ctags_output) - call tagbar#debug#log('Exit code: ' . v:shell_error) + call tagbar#debug#log('Exit code: ' . s:shell_error) " Only display an error message if the Tagbar window is open and we " haven't seen the error before. if bufwinnr(s:TagbarBufName()) != -1 && @@ -1250,7 +1477,7 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort echomsg line endfor endif - echomsg 'Exit code: ' . v:shell_error + echomsg 'Exit code: ' . s:shell_error endif return -1 endif @@ -1290,7 +1517,7 @@ function! s:ParseTagline(part1, part2, typeinfo, fileinfo) abort " When splitting fields make sure not to create empty keys or values in " case a value illegally contains tabs - let fields = split(a:part2, '^\t\|\t\ze\w\+:') + let fields = split(a:part2, '\t\ze\w\+:') let fielddict = {} if fields[0] !~# ':' let fielddict.kind = remove(fields, 0) @@ -1306,7 +1533,7 @@ function! s:ParseTagline(part1, part2, typeinfo, fileinfo) abort let fielddict[key] = 'yes' endif if len(val) > 0 - if key ==# 'line' || key ==# 'column' + if key ==# 'line' || key ==# 'column' || key ==# 'end' let fielddict[key] = str2nr(val) else let fielddict[key] = val @@ -1368,6 +1595,22 @@ function! s:ProcessTag(name, filename, pattern, fields, is_split, typeinfo, file let taginfo.fields.line = 0 endif + " Make sure our 'end' is valid + if taginfo.fields.end < taginfo.fields.line + if a:typeinfo.getKind(taginfo.fields.kind).stl + " the config indicates this is a scoped kind due to 'stl', but we + " don't have scope vars, assume scope goes to end of file. This + " can also be the case for exhuberant ctags which doesn't support + " the --fields=e option. + " When we call the GetNearbyTag(), it will look up for the nearest + " tag, so if we have multiples that have scope to the end of the + " file it will still only grab the first one above the current line + let taginfo.fields.end = line('$') + else + let taginfo.fields.end = taginfo.fields.line + endif + endif + if !has_key(taginfo.fields, 'kind') call tagbar#debug#log( \ "Warning: No 'kind' field found for tag " . a:name[0] . '!') @@ -1384,6 +1627,17 @@ function! s:ProcessTag(name, filename, pattern, fields, is_split, typeinfo, file let a:fileinfo.fline[taginfo.fields.line] = taginfo + if has_key(taginfo.fields, 'typeref') + let typeref = taginfo.fields.typeref + let delimit = stridx(typeref, ':') + let key = strpart(typeref, 0, delimit) + if key ==# 'typename' + let taginfo.data_type = substitute(strpart(typeref, delimit + 1), '\t', '', 'g') + else + let taginfo.data_type = key + endif + endif + " If this filetype doesn't have any scope information then we can stop " here after adding the tag to the list if !has_key(a:typeinfo, 'scope2kind') @@ -1614,9 +1868,7 @@ function! s:create_pseudotag(name, parent, kind, typeinfo, fileinfo) abort \ pseudotag.path . a:typeinfo.sro . pseudotag.name endif let pseudotag.depth = len(split(pseudotag.path, '\V' . escape(a:typeinfo.sro, '\'))) - let pseudotag.parent = a:parent - let pseudotag.fileinfo = a:fileinfo let pseudotag.typeinfo = a:typeinfo @@ -1716,7 +1968,16 @@ function! s:RenderContent(...) abort let typeinfo = fileinfo.typeinfo - if !empty(fileinfo.getTags()) + if fileinfo.fsize_exceeded == 1 + if g:tagbar_compact + silent 0put ='\" File size [' . fileinfo.fsize . 'B] exceeds limit' + else + silent put ='\" File size exceeds defined limit' + silent put ='\" File Size [' . fileinfo.fsize . ' bytes]' + silent put ='\" Limit [' . g:tagbar_file_size_limit . ' bytes]' + silent put ='\" Use TagbarForceUpdate override' + endif + elseif !empty(fileinfo.getTags()) " Print tags call s:PrintKinds(typeinfo, fileinfo) else @@ -1742,13 +2003,13 @@ function! s:RenderContent(...) abort if !empty(tagbar#state#get_current_file(0)) && \ fileinfo.fpath ==# tagbar#state#get_current_file(0).fpath let scrolloff_save = &scrolloff - set scrolloff=0 + setlocal scrolloff=0 call cursor(topline, 1) normal! zt call cursor(saveline, savecol) - let &scrolloff = scrolloff_save + let &l:scrolloff = scrolloff_save else " Make sure as much of the Tagbar content as possible is shown in the " window by jumping to the top after drawing @@ -1792,7 +2053,7 @@ function! s:PrintKinds(typeinfo, fileinfo) abort for tag in curtags call s:PrintTag(tag, 0, output, a:fileinfo, a:typeinfo) - if !g:tagbar_compact + if g:tagbar_compact != 1 call add(output, '') endif endfor @@ -1807,7 +2068,12 @@ function! s:PrintKinds(typeinfo, fileinfo) abort endif let padding = g:tagbar_show_visibility ? ' ' : '' - call add(output, foldmarker . padding . kind.long) + if g:tagbar_show_tag_count + let tag_count = ' (' . len(curtags) . ')' + call add(output, foldmarker . padding . kind.long . tag_count) + else + call add(output, foldmarker . padding . kind.long) + endif let curline = len(output) + offset let kindtag.tline = curline @@ -1823,18 +2089,17 @@ function! s:PrintKinds(typeinfo, fileinfo) abort let curline = len(output) + offset let tag.tline = curline let a:fileinfo.tline[curline] = tag - let tag.depth = 1 endfor endif - if !g:tagbar_compact + if g:tagbar_compact != 1 call add(output, '') endif endif endfor let outstr = join(output, "\n") - if g:tagbar_compact && s:short_help + if g:tagbar_compact && !g:tagbar_help_visibility && s:short_help silent 0put =outstr else silent put =outstr @@ -1894,44 +2159,60 @@ endfunction " s:PrintHelp() {{{2 function! s:PrintHelp() abort - if !g:tagbar_compact && s:short_help + if !g:tagbar_compact && !g:tagbar_help_visibility && s:short_help silent 0put ='\" Press ' . s:get_map_str('help') . ' for help' silent put _ - elseif !s:short_help + elseif g:tagbar_help_visibility || !s:short_help + let help_cmds = [ + \ ['jump', 'Jump to tag definition'], + \ ['preview', 'As above, but stay in tagbar window'], + \ ['previewwin', 'Show tag in preview window'], + \ ['nexttag', 'Go to next top-level tag'], + \ ['prevtag', 'Go to previous top-level tag'], + \ ['showproto', 'Display tag prototype'], + \ ['hidenonpublic', 'Hide non-public tags'], + \ ] + let fold_cmds = [ + \ ['openfold', 'Open fold'], + \ ['closefold', 'Close fold'], + \ ['togglefold', 'Toggle fold'], + \ ['openallfolds', 'Open all folds'], + \ ['closeallfolds', 'Close all folds'], + \ ['incrementfolds', 'Increment fold level by 1'], + \ ['decrementfolds', 'Decrement fold level by 1'], + \ ['nextfold', 'Go to next fold'], + \ ['prevfold', 'Go to previous fold'], + \ ] + let misc_cmds = [ + \ ['togglesort', 'Toggle sort'], + \ ['togglecaseinsensitive', 'Toggle case insensitive sort option'], + \ ['toggleautoclose', 'Toggle autoclose option'], + \ ['togglepause', 'Toggle pause'], + \ ['zoomwin', 'Zoom window in/out'], + \ ['close', 'Close window'], + \ ['help', 'Toggle help'], + \ ] + silent 0put ='\" Tagbar keybindings' silent put ='\"' silent put ='\" --------- General ---------' - silent put ='\" ' . s:get_map_str('jump') . ': Jump to tag definition' - silent put ='\" ' . s:get_map_str('preview') . ': As above, but stay in' - silent put ='\" Tagbar window' - silent put ='\" ' . s:get_map_str('previewwin') . ': Show tag in preview window' - silent put ='\" ' . s:get_map_str('nexttag') . ': Go to next top-level tag' - silent put ='\" ' . s:get_map_str('prevtag') . ': Go to previous top-level tag' - silent put ='\" ' . s:get_map_str('showproto') . ': Display tag prototype' - silent put ='\" ' . s:get_map_str('hidenonpublic') . ': Hide non-public tags' + for [cmd, desc] in help_cmds + if !empty(s:get_map_str(cmd)) | silent put ='\" ' . s:get_map_str(cmd) . ': ' . desc | endif + endfor silent put ='\"' silent put ='\" ---------- Folds ----------' - silent put ='\" ' . s:get_map_str('openfold') . ': Open fold' - silent put ='\" ' . s:get_map_str('closefold') . ': Close fold' - silent put ='\" ' . s:get_map_str('togglefold') . ': Toggle fold' - silent put ='\" ' . s:get_map_str('openallfolds') . ': Open all folds' - silent put ='\" ' . s:get_map_str('closeallfolds') . ': Close all folds' - silent put ='\" ' . s:get_map_str('incrementfolds') . ': Increment fold level by 1' - silent put ='\" ' . s:get_map_str('decrementfolds') . ': Decrement fold level by 1' - silent put ='\" ' . s:get_map_str('nextfold') . ': Go to next fold' - silent put ='\" ' . s:get_map_str('prevfold') . ': Go to previous fold' + for [cmd, desc] in fold_cmds + if !empty(s:get_map_str(cmd)) | silent put ='\" ' . s:get_map_str(cmd) . ': ' . desc | endif + endfor silent put ='\"' silent put ='\" ---------- Misc -----------' - silent put ='\" ' . s:get_map_str('togglesort') . ': Toggle sort' - silent put ='\" ' . s:get_map_str('togglecaseinsensitive') . ': Toggle case insensitive sort option' - silent put ='\" ' . s:get_map_str('toggleautoclose') . ': Toggle autoclose option' - silent put ='\" ' . s:get_map_str('togglepause') . ': Toggle pause' - silent put ='\" ' . s:get_map_str('zoomwin') . ': Zoom window in/out' - silent put ='\" ' . s:get_map_str('close') . ': Close window' - silent put ='\" ' . s:get_map_str('help') . ': Toggle help' + for [cmd, desc] in misc_cmds + if !empty(s:get_map_str(cmd)) | silent put ='\" ' . s:get_map_str(cmd) . ': ' . desc | endif + endfor silent put _ endif endfunction + function! s:get_map_str(map) abort let def = get(g:, 'tagbar_map_' . a:map) if type(def) ==# type('') @@ -1956,13 +2237,13 @@ function! s:RenderKeepView(...) abort call s:RenderContent() let scrolloff_save = &scrolloff - set scrolloff=0 + setlocal scrolloff=0 call cursor(topline, 1) normal! zt call cursor(line, curcol) - let &scrolloff = scrolloff_save + let &l:scrolloff = scrolloff_save redraw endfunction @@ -1970,14 +2251,24 @@ endfunction " User actions {{{1 " s:HighlightTag() {{{2 function! s:HighlightTag(openfolds, ...) abort + + if g:tagbar_no_autocmds + " If no autocmds are enabled, then it doesn't make sense to highlight + " anything as the cursor can move around and any highlighting would be + " inaccurate + return + endif + + let noauto = a:0 > 0 ? a:1 : 0 + let tagline = 0 - let force = a:0 > 0 ? a:1 : 0 + let force = a:0 > 1 ? a:2 : 0 - if a:0 > 1 - let tag = s:GetNearbyTag(1, 0, a:2) + if a:0 > 2 + let tag = s:GetNearbyTag(g:tagbar_highlight_method, 0, a:3) else - let tag = s:GetNearbyTag(1, 0) + let tag = s:GetNearbyTag(g:tagbar_highlight_method, 0) endif if !empty(tag) let tagline = tag.tline @@ -2035,7 +2326,15 @@ function! s:HighlightTag(openfolds, ...) abort call winline() let foldpat = '[' . g:tagbar#icon_open . g:tagbar#icon_closed . ' ]' - let pattern = '/^\%' . tagline . 'l\s*' . foldpat . '[-+# ]\?\zs[^( ]\+\ze/' + + " If printing the line number of the tag to the left, and the tag is + " visible (I.E. parent isn't folded) + let identifier = '\zs\V' . escape(tag.name, '/\') . '\m\ze' + if g:tagbar_show_tag_linenumbers == 2 && tagline == tag.tline + let pattern = '/^\%' . tagline . 'l\s*' . foldpat . '[-+# ]\[[0-9]\+\] \?' . identifier . '/' + else + let pattern = '/^\%' . tagline . 'l\s*' . foldpat . '[-+# ]\?' . identifier . '/' + endif call tagbar#debug#log("Highlight pattern: '" . pattern . "'") if hlexists('TagbarHighlight') " Safeguard in case syntax highlighting is disabled execute 'match TagbarHighlight ' . pattern @@ -2045,29 +2344,66 @@ function! s:HighlightTag(openfolds, ...) abort finally if !in_tagbar call s:goto_win(pprevwinnr, 1) - call s:goto_win(prevwinnr, 1) + call s:goto_win(prevwinnr, noauto) endif redraw endtry endfunction -" s:JumpToTag() {{{2 -function! s:JumpToTag(stay_in_tagbar) abort - let taginfo = s:GetTagInfo(line('.'), 1) +" Is the given line number already visible in the window without +" any scrolling? +function! s:IsLineVisible(line) abort + let topline = line('w0') + let bottomline = line('w$') + let alreadyvisible = (a:line >= topline) && (a:line <= bottomline) + return alreadyvisible +endfunction - let autoclose = w:autoclose +" s:JumpToTag() {{{2 +function! s:JumpToTag(stay_in_tagbar, ...) abort + let taginfo = a:0 > 0 ? a:1 : s:GetTagInfo(line('.'), 1) + let force_lazy_scroll = a:0 > 1 ? a:2 : 0 if empty(taginfo) || !taginfo.isNormalTag() + " Cursor line not on a tag. Check if this is the start of a foldable + " line and if so, initiate the CloseFold() / OpenFold(). First trim + " any whitespace from the start of the line so we don't have to worry + " about multiple nested folds that are indented + " + " NOTE: This will only work with folds that are not also tags. For + " example in a class definition that acts as the start of a fold when + " there are member functions in the class, that line is also a valid + " tag, so hitting on that line will cause it to jump to the tag, + " not fold/unfold that particular fold + let line = substitute(getline('.'), '^\s*\(.\{-}\)\s*$', '\1', '') + + if (match(line, g:tagbar#icon_open . '[-+ ]')) == 0 + call s:CloseFold() + elseif (match(line, g:tagbar#icon_closed . '[-+ ]')) == 0 + call s:OpenFold() + endif return endif let tagbarwinnr = winnr() + if exists('w:autoclose') + let autoclose = w:autoclose + else + let autoclose = 0 + endif call s:GotoFileWindow(taginfo.fileinfo) " Mark current position so it can be jumped back to mark ' + " Check if the tag is already visible in the window. We must do this + " before jumping to the line. + let noscroll = 0 + if g:tagbar_jump_lazy_scroll != 0 || force_lazy_scroll + let noscroll = s:IsLineVisible(taginfo.fields.line) + endif + " Jump to the line where the tag is defined. Don't use the search pattern " since it doesn't take the scope into account and thus can fail if tags " with the same name are defined in different scopes (e.g. classes) @@ -2102,20 +2438,39 @@ function! s:JumpToTag(stay_in_tagbar) abort let taginfo.fileinfo.fline[curline] = taginfo endif - " Center the tag in the window and jump to the correct column if - " available, otherwise try to find it in the line - normal! z. + if noscroll + " Do not scroll. + else + " Center the tag in the window and jump to the correct column if + " available, otherwise try to find it in the line + normal! z. + + " If configured, adjust the jump_offset and center the window on that + " line. Then fall-through adjust the cursor() position below that + if g:tagbar_jump_offset != 0 && g:tagbar_jump_offset < curline + if g:tagbar_jump_offset > winheight(0) / 2 + let jump_offset = winheight(0) / 2 + elseif g:tagbar_jump_offset < -winheight(0) / 2 + let jump_offset = -winheight(0) / 2 + else + let jump_offset = g:tagbar_jump_offset + endif + execute curline+jump_offset + normal! z. + endif + endif + if taginfo.fields.column > 0 call cursor(taginfo.fields.line, taginfo.fields.column) else call cursor(taginfo.fields.line, 1) - call search(taginfo.name, 'c', line('.')) + call search('\V' . taginfo.name, 'c', line('.')) endif normal! zv if a:stay_in_tagbar - call s:HighlightTag(0) + call s:HighlightTag(0, 1) call s:goto_win(tagbarwinnr) redraw elseif g:tagbar_autoclose || autoclose @@ -2126,6 +2481,9 @@ function! s:JumpToTag(stay_in_tagbar) abort if s:pwin_by_tagbar pclose endif + if s:is_maximized + call s:ZoomWindow() + endif call s:HighlightTag(0) endif endfunction @@ -2150,7 +2508,7 @@ function! s:ShowInPreviewWin() abort " We want the preview window to be relative to the file window in normal " (horizontal) mode, and relative to the Tagbar window in vertical mode, " to make the best use of space. - if g:tagbar_vertical == 0 + if g:tagbar_position =~# 'vertical' call s:GotoFileWindow(taginfo.fileinfo, 1) call s:mark_window() endif @@ -2158,10 +2516,13 @@ function! s:ShowInPreviewWin() abort " Open the preview window if it is not already open. This has to be done " explicitly before the :psearch below to better control its positioning. if !pwin_open - silent execute + let l:confirm = &confirm + let &confirm = 0 + silent! execute \ g:tagbar_previewwin_pos . ' pedit ' . \ fnameescape(taginfo.fileinfo.fpath) - if g:tagbar_vertical != 0 + let &confirm = l:confirm + if g:tagbar_position !~# 'vertical' silent execute 'vertical resize ' . g:tagbar_width endif " Remember that the preview window was opened by Tagbar so we can @@ -2169,7 +2530,7 @@ function! s:ShowInPreviewWin() abort let s:pwin_by_tagbar = 1 endif - if g:tagbar_vertical != 0 + if g:tagbar_position !~# 'vertical' call s:GotoFileWindow(taginfo.fileinfo, 1) call s:mark_window() endif @@ -2412,7 +2773,7 @@ function! s:OpenParents(...) abort if a:0 == 1 let tag = a:1 else - let tag = s:GetNearbyTag(1, 0) + let tag = s:GetNearbyTag('nearest', 0) endif if !empty(tag) @@ -2581,7 +2942,7 @@ function! s:AutoUpdate(fname, force, ...) abort let s:nearby_disabled = 0 endif - call s:HighlightTag(0) + call s:HighlightTag(0, 1) call s:SetStatusLine() call tagbar#debug#log('AutoUpdate finished successfully') endfunction @@ -2659,7 +3020,7 @@ function! s:EscapeCtagsCmd(ctags_bin, args, ...) abort "Set up 0th argument of ctags_cmd "a:ctags_bin may have special characters that require escaping. - if &shell =~? 'cmd\.exe$' && a:ctags_bin !~# '\s' + if (&shell =~? 'cmd\.exe$' || &shell =~? 'powershell\.exe$' || &shell =~? 'powershell$' || &shell =~? 'pwsh\.exe$' || &shell =~? 'pwsh$') && a:ctags_bin !~# '\s' "For windows cmd.exe, escaping the 0th argument can cause "problems if it references a batch file and the batch file uses %~dp0. "So for windows cmd.exe, only escape the 0th argument iff necessary. @@ -2737,6 +3098,40 @@ function! s:EscapeCtagsCmd(ctags_bin, args, ...) abort return ctags_cmd endfunction +" run shell command in a proper way: prevent temporary window creation +function! s:run_system(cmd, version) abort + if has('win32') && !has('nvim') && a:version > 0 && (has('python3') || has('python2')) + if a:version == 3 && has('python3') + let pyx = 'py3 ' + let python_eval = 'py3eval' + elseif a:version == 2 && has('python2') + let pyx = 'py2 ' + let python_eval = 'pyeval' + else + let pyx = 'pyx ' + let python_eval = 'pyxeval' + endif + let l:pc = 0 + exec pyx . 'import subprocess, vim' + exec pyx . '__argv = {"args":vim.eval("a:cmd"), "shell":True}' + exec pyx . '__argv["stdout"] = subprocess.PIPE' + exec pyx . '__argv["stderr"] = subprocess.STDOUT' + exec pyx . '__argv["errors"] = "ignore"' + exec pyx . '__pp = subprocess.Popen(**__argv, universal_newlines=True, encoding="utf8")' + exec pyx . '__return_text = __pp.stdout.read()' + exec pyx . '__pp.stdout.close()' + exec pyx . '__return_code = __pp.wait()' + exec 'let l:hr = '. python_eval .'("__return_text")' + exec 'let l:pc = '. python_eval .'("__return_code")' + let s:shell_error = l:pc + return l:hr + endif + let hr = system(a:cmd) + let s:shell_error = v:shell_error + return hr +endfunction + + " s:ExecuteCtags() {{{2 " Execute ctags with necessary shell settings " Partially based on the discussion at @@ -2770,11 +3165,13 @@ function! s:ExecuteCtags(ctags_cmd) abort if tagbar#debug#enabled() silent 5verbose let ctags_output = system(a:ctags_cmd) + let s:shell_error = v:shell_error call tagbar#debug#log(v:statusmsg) - call tagbar#debug#log('Exit code: ' . v:shell_error) + call tagbar#debug#log('Exit code: ' . s:shell_error) redraw! else - silent let ctags_output = system(a:ctags_cmd) + let py_version = get(g:, 'tagbar_python', 1) + silent let ctags_output = s:run_system(a:ctags_cmd, py_version) endif if &shell =~? 'cmd\.exe' @@ -2795,7 +3192,7 @@ endfunction " s:GetNearbyTag() {{{2 " Get the tag info for a file near the cursor in the current file -function! s:GetNearbyTag(all, forcecurrent, ...) abort +function! s:GetNearbyTag(request, forcecurrent, ...) abort if s:nearby_disabled return {} endif @@ -2805,23 +3202,39 @@ function! s:GetNearbyTag(all, forcecurrent, ...) abort return {} endif + let curline = a:0 > 0 ? a:1 : line('.') + let direction = a:0 > 1 ? a:2 : -1 + let ignore_curline = a:0 > 2 ? a:3 : 0 + let typeinfo = fileinfo.typeinfo - if a:0 > 0 - let curline = a:1 - else - let curline = line('.') - endif let tag = {} + if direction < 0 + let endline = 1 + let increment = -1 + else + let endline = line('$') + let increment = 1 + endif + " If a tag appears in a file more than once (for example namespaces in " C++) only one of them has a 'tline' entry and can thus be highlighted. " The only way to solve this would be to go over the whole tag list again, " making everything slower. Since this should be a rare occurence and " highlighting isn't /that/ important ignore it for now. - for line in range(curline, 1, -1) + for line in range(curline, endline, increment) if has_key(fileinfo.fline, line) let curtag = fileinfo.fline[line] - if a:all || typeinfo.getKind(curtag.fields.kind).stl + if a:request ==# 'nearest-stl' && typeinfo.getKind(curtag.fields.kind).stl + let tag = curtag + break + elseif a:request ==# 'scoped-stl' + \ && typeinfo.getKind(curtag.fields.kind).stl + \ && curtag.fields.line <= curline + \ && curline <= curtag.fields.end + let tag = curtag + break + elseif a:request ==# 'nearest' || (line == curline && ignore_curline == 0) let tag = curtag break endif @@ -2831,6 +3244,31 @@ function! s:GetNearbyTag(all, forcecurrent, ...) abort return tag endfunction +" s:JumpToNearbyTag() {{{2 +function! s:JumpToNearbyTag(direction, request, flags) abort + let fileinfo = tagbar#state#get_current_file(0) + if empty(fileinfo) + return {} + endif + + let lnum = a:direction > 0 ? line('.') + 1 : line('.') - 1 + let lazy_scroll = a:flags =~# 's' ? 0 : 1 + + let tag = s:GetNearbyTag(a:request, 1, lnum, a:direction, 1) + + if empty(tag) + " No next tag found + if a:direction > 0 + echo '...no next tag found' + else + echo '...no previous tag found' + endif + return + endif + + call s:JumpToTag(1, tag, lazy_scroll) +endfunction + " s:GetTagInfo() {{{2 " Return the info dictionary of the tag on the specified line. If the line " does not contain a valid tag (for example because it is empty or only @@ -3028,7 +3466,7 @@ endfunction " s:SetStatusLine() {{{2 function! s:SetStatusLine() abort let tagbarwinnr = bufwinnr(s:TagbarBufName()) - if tagbarwinnr == -1 + if tagbarwinnr == -1 || exists('g:tagbar_no_status_line') return endif @@ -3088,7 +3526,15 @@ function! s:HandleOnlyWindow() abort let vim_quitting = s:vim_quitting let s:vim_quitting = 0 - if vim_quitting && !s:HasOpenFileWindows() + let file_open = s:HasOpenFileWindows() + + if vim_quitting && file_open == 2 && !g:tagbar_autoclose_netrw + call tagbar#debug#log('Closing Tagbar due to QuitPre - netrw only remaining window') + call s:CloseWindow() + return + endif + + if vim_quitting && file_open != 1 call tagbar#debug#log('Closing Tagbar window due to QuitPre event') if winnr('$') >= 1 call s:goto_win(tagbarwinnr, 1) @@ -3123,13 +3569,13 @@ function! s:HandleBufDelete(bufname, bufnr) abort return endif + call s:known_files.rm(fnamemodify(a:bufname, ':p')) + let tagbarwinnr = bufwinnr(s:TagbarBufName()) if tagbarwinnr == -1 || a:bufname =~# '__Tagbar__.*' return endif - call s:known_files.rm(fnamemodify(a:bufname, ':p')) - if !s:HasOpenFileWindows() if tabpagenr('$') == 1 && exists('t:tagbar_buf_name') " The last normal window closed due to a :bdelete/:bwipeout. @@ -3206,11 +3652,22 @@ endfunction " s:HasOpenFileWindows() {{{2 function! s:HasOpenFileWindows() abort + let netrw = 0 + for i in range(1, winnr('$')) let buf = winbufnr(i) - " skip unlisted buffers, except for netrw - if !buflisted(buf) && getbufvar(buf, '&filetype') !=# 'netrw' + " If the buffer filetype is netrw (or nerdtree) then mark netrw + " for final return. If we don't find any other window, we want + " to leave the netrw window open and not close vim entirely when + " called from the HandleOnlyWindow() code path. + let buf_ft = getbufvar(buf, '&filetype') + if buf_ft ==# 'netrw' || buf_ft ==# 'nerdtree' + let netrw = 1 + endif + + " skip unlisted buffers + if !buflisted(buf) continue endif @@ -3227,6 +3684,10 @@ function! s:HasOpenFileWindows() abort return 1 endfor + if netrw + call tagbar#debug#log('netrw only window remaining') + return 2 + endif return 0 endfunction @@ -3242,6 +3703,18 @@ endfunction " s:goto_win() {{{2 function! s:goto_win(winnr, ...) abort + "Do not go to a popup window to avoid errors. + "Hence, check first if a:winnr is an integer, + "if this integer is equal to 0, + "the window is a popup window + if has('popupwin') + if type(a:winnr) == type(0) && a:winnr == 0 + return + endif + if a:winnr ==# 'p' && winnr('#') == 0 + return + endif + endif let cmd = type(a:winnr) == type(0) ? a:winnr . 'wincmd w' \ : 'wincmd ' . a:winnr let noauto = a:0 > 0 ? a:1 : 0 @@ -3325,6 +3798,7 @@ endfunction " Autoload functions {{{1 " Wrappers {{{2 + function! tagbar#ToggleWindow(...) abort let flags = a:0 > 0 ? a:1 : '' call s:ToggleWindow(flags) @@ -3351,7 +3825,7 @@ function! tagbar#highlighttag(openfolds, force) abort echohl None return endif - call s:HighlightTag(a:openfolds, a:force) + call s:HighlightTag(a:openfolds, 1, a:force) endfunction function! tagbar#RestoreSession() abort @@ -3365,6 +3839,24 @@ endfunction " }}}2 +" tagbar#Update() {{{2 +" Trigger an AutoUpdate() of the currently opened file +function! tagbar#Update() abort + if s:init_done == 0 + call s:Init(0) + endif + call s:AutoUpdate(fnamemodify(expand('%'), ':p'), 0) +endfunction + +" tagbar#ForceUpdate() {{{2 +function! tagbar#ForceUpdate() abort + if !exists('b:tagbar_force_update') + let b:tagbar_force_update = 1 + call s:AutoUpdate(fnamemodify(expand('%'), ':p'), 1) + unlet b:tagbar_force_update + endif +endfunction + " tagbar#toggle_pause() {{{2 function! tagbar#toggle_pause() abort let s:paused = !s:paused @@ -3417,28 +3909,67 @@ function! tagbar#autoopen(...) abort call tagbar#debug#log('tagbar#autoopen finished without finding valid file') endfunction +" tagbar#GetTagNearLine() {{{2 +function! tagbar#GetTagNearLine(lnum, ...) abort + if a:0 >= 2 + let fmt = a:1 + let longsig = a:2 =~# 's' + let fullpath = a:2 =~# 'f' + let prototype = a:2 =~# 'p' + if a:0 >= 3 + let search_method = a:3 + else + let search_method = 'nearest-stl' + endif + else + let fmt = '%s' + let longsig = 0 + let fullpath = 0 + let prototype = 0 + let search_method = 'nearest-stl' + endif + + let taginfo = s:GetNearbyTag(search_method, 1, a:lnum) + + if empty(taginfo) + return '' + endif + + if prototype + return taginfo.getPrototype(1) + else + return printf(fmt, taginfo.str(longsig, fullpath)) + endif +endfunction + " tagbar#currenttag() {{{2 function! tagbar#currenttag(fmt, default, ...) abort " Indicate that the statusline functionality is being used. This prevents " the CloseWindow() function from removing the autocommands. let s:statusline_in_use = 1 - if a:0 > 0 + if a:0 >= 1 " also test for non-zero value for backwards compatibility let longsig = a:1 =~# 's' || (type(a:1) == type(0) && a:1 != 0) let fullpath = a:1 =~# 'f' let prototype = a:1 =~# 'p' + if a:0 >= 2 + let search_method = a:2 + else + let search_method = g:tagbar_highlight_method + endif else let longsig = 0 let fullpath = 0 let prototype = 0 + let search_method = g:tagbar_highlight_method endif if !s:Init(1) return a:default endif - let tag = s:GetNearbyTag(0, 1) + let tag = s:GetNearbyTag(search_method, 1) if !empty(tag) if prototype @@ -3504,5 +4035,103 @@ function! tagbar#inspect(var) abort return get(s:, a:var) endfunction +" tagbar#currenttagtype() {{{2 +function! tagbar#currenttagtype(fmt, default) abort + " Indicate that the statusline functionality is being used. This prevents + " the CloseWindow() function from removing the autocommands. + let s:statusline_in_use = 1 + let kind = '' + let tag = s:GetNearbyTag('scoped-stl', 1) + + if empty(tag) + return a:default + endif + + let kind = tag.fields.kind + if kind ==# '' + return a:default + endif + + let typeinfo = tag.fileinfo.typeinfo + let plural = typeinfo.kinds[typeinfo.kinddict[kind]].long + if has_key(s:singular_types, plural) + let singular = s:singular_types[plural] + else + let singular = plural + endif + return printf(a:fmt, singular) +endfunction + +" tagbar#printfileinfo() {{{2 +function! tagbar#printfileinfo() abort + if !tagbar#debug#enabled() + echo 'Tagbar debug is disabled - unable to print fileinfo to tagbar log' + return + endif + + let fileinfo = tagbar#state#get_current_file(0) + if empty(fileinfo) + call tagbar#debug#log('File contains no tag entries') + return + endif + let typeinfo = fileinfo.typeinfo + + call tagbar#debug#log('Printing fileinfo [' . fileinfo.fpath . ' lines:' . fileinfo.lnum) + for line in range(1, fileinfo.lnum) + if has_key(fileinfo.fline, line) + let tag = fileinfo.fline[line] + call tagbar#debug#log(' ' + \ . ' line:' . line + \ . ' kind:' . tag.fields.kind + \ . ' depth:' . tag.depth + \ . ' [' . tag.strfmt() . ']' + \ ) + endif + endfor + call tagbar#debug#log('All tags printed') + + echo 'Tagbar fileinfo printed to debug logfile' +endfunction + +" tagbar#IsOpen() {{{2 +function! tagbar#IsOpen() abort + let tagbarwinnr = bufwinnr('__Tagbar__') + if tagbarwinnr != -1 + " Window open + return 1 + else + " Window not open + return 0 + endif +endfunction + +" tagbar#jump() {{{2 +function! tagbar#jump() abort + if s:init_done == 0 + call tagbar#Update() + endif + if &filetype !=# 'tagbar' + " Not in tagbar window - ignore this function call + return + endif + call s:JumpToTag(1) +endfun + +" tagbar#jumpToNearbyTag() {{{2 +" params: +" direction = -1:backwards search 1:forward search +" [search_method] = Search method to use for GetTagNearLine() +" [flags] = list of flags (as a string) to control behavior +" 's' - use the g:tagbar_scroll_offset setting when jumping +function! tagbar#jumpToNearbyTag(direction, ...) abort + if s:init_done == 0 + call tagbar#Update() + endif + let search_method = a:0 >= 1 ? a:1 : 'nearest-stl' + let flags = a:0 >= 2 ? a:2 : '' + + call s:JumpToNearbyTag(a:direction, search_method, flags) +endfunction + " Modeline {{{1 " vim: ts=8 sw=4 sts=4 et foldenable foldmethod=marker foldcolumn=1 diff --git a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/basetag.vim b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/basetag.vim index 2095271..2412b03 100644 --- a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/basetag.vim +++ b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/basetag.vim @@ -3,6 +3,9 @@ let s:visibility_symbols = { \ 'protected' : '#', \ 'private' : '-' \ } +if exists('g:tagbar_visibility_symbols') && !empty(g:tagbar_visibility_symbols) + let s:visibility_symbols = g:tagbar_visibility_symbols +endif function! tagbar#prototypes#basetag#new(name) abort let newobj = {} @@ -11,7 +14,9 @@ function! tagbar#prototypes#basetag#new(name) abort let newobj.fields = {} let newobj.fields.line = 0 let newobj.fields.column = 0 + let newobj.fields.end = 0 let newobj.prototype = '' + let newobj.data_type = '' let newobj.path = '' let newobj.fullpath = a:name let newobj.depth = 0 @@ -27,6 +32,7 @@ function! tagbar#prototypes#basetag#new(name) abort let newobj.isSplitTag = function(s:add_snr('s:isSplitTag')) let newobj.isKindheader = function(s:add_snr('s:isKindheader')) let newobj.getPrototype = function(s:add_snr('s:getPrototype')) + let newobj.getDataType = function(s:add_snr('s:getDataType')) let newobj._getPrefix = function(s:add_snr('s:_getPrefix')) let newobj.initFoldState = function(s:add_snr('s:initFoldState')) let newobj.getClosedParentTline = function(s:add_snr('s:getClosedParentTline')) @@ -69,11 +75,16 @@ function! s:getPrototype(short) abort dict return self.prototype endfunction +" s:getDataType() {{{1 +function! s:getDataType() abort dict + return self.data_type +endfunction + " s:_getPrefix() {{{1 function! s:_getPrefix() abort dict let fileinfo = self.fileinfo - if !empty(self._childlist) + if !empty(self._childlist) && g:tagbar_show_prefix == 1 if fileinfo.tagfolds[self.fields.kind][self.fullpath] let prefix = g:tagbar#icon_closed else @@ -84,9 +95,9 @@ function! s:_getPrefix() abort dict endif " Visibility is called 'access' in the ctags output if g:tagbar_show_visibility - if has_key(self.fields, 'access') + if has_key(self.fields, 'access') && g:tagbar_show_prefix == 1 let prefix .= get(s:visibility_symbols, self.fields.access, ' ') - elseif has_key(self.fields, 'file') + elseif has_key(self.fields, 'file') && g:tagbar_show_prefix == 1 let prefix .= s:visibility_symbols.private else let prefix .= ' ' diff --git a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/fileinfo.vim b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/fileinfo.vim index fd275b8..fe2ae86 100644 --- a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/fileinfo.vim +++ b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/fileinfo.vim @@ -9,6 +9,12 @@ function! tagbar#prototypes#fileinfo#new(fname, ftype, typeinfo) abort " File modification time let newobj.mtime = getftime(a:fname) + " Get file size + let newobj.fsize = getfsize(a:fname) + + " Get the number of lines in the file + let newobj.lnum = line('$') + " The vim file type let newobj.ftype = a:ftype @@ -52,6 +58,10 @@ function! tagbar#prototypes#fileinfo#new(fname, ftype, typeinfo) abort let newobj.openKindFold = function(s:add_snr('s:openKindFold')) let newobj.closeKindFold = function(s:add_snr('s:closeKindFold')) + " This is used during file processing. If the limit is exceeded at that + " point, then mark this flag for displaying to the tagbar window + let newobj.fsize_exceeded = 0 + return newobj endfunction diff --git a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/normaltag.vim b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/normaltag.vim index d212c62..ec106b9 100644 --- a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/normaltag.vim +++ b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/normaltag.vim @@ -1,3 +1,12 @@ +function! s:maybe_map_scope(scopestr) abort + if !empty(g:tagbar_scopestrs) + if has_key(g:tagbar_scopestrs, a:scopestr) + return g:tagbar_scopestrs[a:scopestr] + endif + endif + return a:scopestr +endfunction + function! tagbar#prototypes#normaltag#new(name) abort let newobj = tagbar#prototypes#basetag#new(a:name) @@ -5,6 +14,7 @@ function! tagbar#prototypes#normaltag#new(name) abort let newobj.strfmt = function(s:add_snr('s:strfmt')) let newobj.str = function(s:add_snr('s:str')) let newobj.getPrototype = function(s:add_snr('s:getPrototype')) + let newobj.getDataType = function(s:add_snr('s:getDataType')) return newobj endfunction @@ -18,14 +28,33 @@ endfunction function! s:strfmt() abort dict let typeinfo = self.typeinfo - let suffix = get(self.fields, 'signature', '') - if has_key(self.fields, 'type') - let suffix .= ' : ' . self.fields.type - elseif has_key(get(typeinfo, 'kind2scope', {}), self.fields.kind) - let suffix .= ' : ' . typeinfo.kind2scope[self.fields.kind] + if g:tagbar_show_suffix == 1 + let suffix = get(self.fields, 'signature', '') + if has_key(self.fields, 'type') + let suffix .= ' : ' . self.fields.type + elseif has_key(get(typeinfo, 'kind2scope', {}), self.fields.kind) + let scope = s:maybe_map_scope(typeinfo.kind2scope[self.fields.kind]) + if !g:tagbar_show_data_type + let suffix .= ' : ' . scope + endif + endif + + if g:tagbar_show_data_type && self.getDataType() !=# '' + let suffix .= ' : ' . self.getDataType() + endif + else + let suffix = '' endif - return self._getPrefix() . self.name . suffix + let prefix = self._getPrefix() + + if g:tagbar_show_tag_linenumbers == 1 + let suffix .= ' [' . self.fields.line . ']' + elseif g:tagbar_show_tag_linenumbers == 2 + let prefix .= '[' . self.fields.line . '] ' + endif + + return prefix . self.name . suffix endfunction " s:str() {{{1 @@ -61,6 +90,11 @@ function! s:getPrototype(short) abort dict endif let line = getbufline(bufnr, self.fields.line)[0] + " If prototype includes declaration, remove the '=' and anything after + " FIXME: Need to remove this code. This breaks python prototypes that + " can include a '=' in the function paramter list. + " ex: function(arg1, optional_arg2=False) + " let line = substitute(line, '\s*=.*', '', '') let list = split(line, '\zs') let start = index(list, '(') @@ -78,7 +112,7 @@ function! s:getPrototype(short) abort dict let prototype = line let curlinenr = self.fields.line + 1 - while balance > 0 + while balance > 0 && curlinenr < line('$') let curline = getbufline(bufnr, curlinenr)[0] let curlist = split(curline, '\zs') let balance += count(curlist, '(') @@ -107,6 +141,39 @@ function! s:getPrototype(short) abort dict return prototype endfunction +" s:getDataType() {{{1 +function! s:getDataType() abort dict + if self.data_type !=# '' + let data_type = self.data_type + else + " This is a fallthrough attempt to derive the data_type from the line + " in the event ctags doesn't return the typeref field + let bufnr = self.fileinfo.bufnr + + if self.fields.line == 0 || !bufloaded(bufnr) + " No linenumber available or buffer not loaded (probably due to + " 'nohidden'), try the pattern instead + return substitute(self.pattern, '^\\M\\^\\C\s*\(.*\)\\$$', '\1', '') + endif + + let line = getbufline(bufnr, self.fields.line)[0] + let data_type = substitute(line, '\s*' . escape(self.name, '~') . '.*', '', '') + + " Strip off the path if we have one along with any spaces prior to the + " path + if self.path !=# '' + let data_type = substitute(data_type, '\s*' . self.path . self.typeinfo.sro, '', '') + endif + + " Strip off leading spaces + let data_type = substitute(data_type, '^\s\+', '', '') + + let self.data_type = data_type + endif + + return data_type +endfunction + " s:add_snr() {{{1 function! s:add_snr(funcname) abort if !exists('s:snr') diff --git a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/pseudotag.vim b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/pseudotag.vim index abd3752..740cd84 100644 --- a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/pseudotag.vim +++ b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/pseudotag.vim @@ -20,8 +20,15 @@ function! s:strfmt() abort dict if has_key(typeinfo.kind2scope, self.fields.kind) let suffix .= ' : ' . typeinfo.kind2scope[self.fields.kind] endif + let prefix = self._getPrefix() - return self._getPrefix() . self.name . '*' . suffix + if g:tagbar_show_tag_linenumbers == 1 + let suffix .= ' [' . self.fields.line . ']' + elseif g:tagbar_show_tag_linenumbers == 2 + let prefix .= '[' . self.fields.line . '] ' + endif + + return prefix . self.name . '*' . suffix endfunction " s:add_snr() {{{1 diff --git a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/typeinfo.vim b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/typeinfo.vim index 67dbbca..1ed9588 100644 --- a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/typeinfo.vim +++ b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/prototypes/typeinfo.vim @@ -15,7 +15,8 @@ endfunction " s:getKind() {{{1 function! s:getKind(kind) abort dict - let idx = self.kinddict[a:kind] + "let idx = self.kinddict[a:kind] + let idx = has_key(self.kinddict, a:kind) ? self.kinddict[a:kind] : -1 return self.kinds[idx] endfunction diff --git a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/sorting.vim b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/sorting.vim index 2d24ecb..b03faff 100644 --- a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/sorting.vim +++ b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/sorting.vim @@ -21,6 +21,12 @@ endfunction function! s:compare_by_kind(tag1, tag2) abort let typeinfo = s:compare_typeinfo + if !has_key(typeinfo.kinddict, a:tag1.fields.kind) + return -1 + endif + if !has_key(typeinfo.kinddict, a:tag2.fields.kind) + return 1 + endif if typeinfo.kinddict[a:tag1.fields.kind] <# \ typeinfo.kinddict[a:tag2.fields.kind] return -1 diff --git a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/types/ctags.vim b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/types/ctags.vim index e225f13..ca49ab1 100644 --- a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/types/ctags.vim +++ b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/types/ctags.vim @@ -115,6 +115,7 @@ function! tagbar#types#ctags#init(supported_types) abort \ 'union' : 'u' \ } let types.c = type_c + let types.lpc = type_c " C++ {{{1 let type_cpp = tagbar#prototypes#typeinfo#new() let type_cpp.ctagstype = 'c++' @@ -194,6 +195,21 @@ function! tagbar#types#ctags#init(supported_types) abort \ {'short' : 's', 'long' : 'sections', 'fold' : 0, 'stl' : 1} \ ] let types.cobol = type_cobol + " Crystal {{{1 + let type_crystal = tagbar#prototypes#typeinfo#new() + let type_crystal.ctagstype = 'crystal' + let type_crystal.kinds = [ + \ {'short' : 'm', 'long' : 'modules', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'd', 'long' : 'defs', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'M', 'long' : 'macros', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'l', 'long' : 'libs', 'fold' : 0, 'stl' : 1}, + \ {'short' : 's', 'long' : 'structs', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'a', 'long' : 'aliases', 'fold' : 0, 'stl' : 1} + \ ] + let type_crystal.sro = '::' + let types.crystal = type_crystal " DOS Batch {{{1 let type_dosbatch = tagbar#prototypes#typeinfo#new() let type_dosbatch.ctagstype = 'dosbatch' diff --git a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/types/uctags.vim b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/types/uctags.vim index dbe799a..bd3fc13 100644 --- a/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/types/uctags.vim +++ b/.vim/pack/plugins/start/vim-tagbar/autoload/tagbar/types/uctags.vim @@ -187,6 +187,95 @@ function! tagbar#types#uctags#init(supported_types) abort \ {'short' : 'v', 'long' : 'patterns', 'fold' : 0, 'stl' : 1} \ ] let types.beta = type_beta + " BibTeX {{{1 + let type_bibtex = tagbar#prototypes#typeinfo#new() + let type_bibtex.ctagstype = 'bibtex' + let type_bibtex.kinds = [ + \ {'short' : 'a', 'long' : 'article', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'b', 'long' : 'book', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'B', 'long' : 'booklet', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'c', 'long' : 'conference', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'i', 'long' : 'inbook', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'I', 'long' : 'incollection', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'j', 'long' : 'inproceedings', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'm', 'long' : 'manual', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'M', 'long' : 'mastersthesis', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'n', 'long' : 'misc', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'p', 'long' : 'phdthesis', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'P', 'long' : 'proceedings', 'fold' : 0, 'stl' : 0}, + \ {'short' : 's', 'long' : 'string', 'fold' : 0, 'stl' : 0}, + \ {'short' : 't', 'long' : 'techreport', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'u', 'long' : 'unpublished', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'A', 'long' : 'artworks', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'C', 'long' : 'bibnotes', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'D', 'long' : 'bookinbooks', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'E', 'long' : 'Booklets', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'G', 'long' : 'collections', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'H', 'long' : 'commentarys', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'J', 'long' : 'images', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'K', 'long' : 'interferences', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'L', 'long' : 'jurisdictions', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'N', 'long' : 'legals', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'O', 'long' : 'letters', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'Q', 'long' : 'musics', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'R', 'long' : 'mvbooks', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'S', 'long' : 'mvcollections', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'T', 'long' : 'mvproceedings', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'U', 'long' : 'mvreferences', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'V', 'long' : 'onlines', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'W', 'long' : 'patents', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'g', 'long' : 'performances', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'h', 'long' : 'periodicals', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'k', 'long' : 'reviews', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'l', 'long' : 'sets', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'o', 'long' : 'suppbooks', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'q', 'long' : 'suppperiodicals', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'r', 'long' : 'thesis', 'fold' : 0, 'stl' : 0}, + \ ] + let types.bibtex = type_bibtex + let types.bib = type_bibtex + " BibLaTex {{{1 + let type_biblatex = tagbar#prototypes#typeinfo#new() + let type_biblatex.ctagstype = 'biblatex' + let type_biblatex.kinds = [ + \ {'short' : 'A', 'long' : 'artworks', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'B', 'long' : 'audios', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'C', 'long' : 'bibnotes', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'D', 'long' : 'bookinbooks', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'E', 'long' : 'Booklets', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'G', 'long' : 'collections', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'H', 'long' : 'commentarys', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'I', 'long' : 'datasets', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'J', 'long' : 'images', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'K', 'long' : 'interferences', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'L', 'long' : 'jurisdictions', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'M', 'long' : 'legislations', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'N', 'long' : 'legals', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'O', 'long' : 'letters', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'P', 'long' : 'movies', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'Q', 'long' : 'musics', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'R', 'long' : 'mvbooks', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'S', 'long' : 'mvcollections', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'T', 'long' : 'mvproceedings', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'U', 'long' : 'mvreferences', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'V', 'long' : 'onlines', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'W', 'long' : 'patents', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'g', 'long' : 'performances', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'h', 'long' : 'periodicals', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'i', 'long' : 'references', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'j', 'long' : 'reports', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'k', 'long' : 'reviews', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'l', 'long' : 'sets', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'm', 'long' : 'software', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'n', 'long' : 'standards', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'o', 'long' : 'suppbooks', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'p', 'long' : 'suppcollections', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'q', 'long' : 'suppperiodicals', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'r', 'long' : 'thesis', 'fold' : 0, 'stl' : 0}, + \ {'short' : 's', 'long' : 'videos', 'fold' : 0, 'stl' : 0}, + \ {'short' : 't', 'long' : 'xdatas', 'fold' : 0, 'stl' : 0}, + \ ] + let types.biblatex = type_biblatex " C {{{1 let type_c = tagbar#prototypes#typeinfo#new() let type_c.ctagstype = 'c' @@ -215,6 +304,7 @@ function! tagbar#types#uctags#init(supported_types) abort \ 'union' : 'u' \ } let types.c = type_c + let types.lpc = type_c " C++ {{{1 let type_cpp = tagbar#prototypes#typeinfo#new() let type_cpp.ctagstype = 'c++' @@ -250,6 +340,7 @@ function! tagbar#types#uctags#init(supported_types) abort \ } let types.cpp = type_cpp let types.cuda = type_cpp + let types.arduino = type_cpp " C# {{{1 let type_cs = tagbar#prototypes#typeinfo#new() let type_cs.ctagstype = 'c#' @@ -298,6 +389,40 @@ function! tagbar#types#uctags#init(supported_types) abort \ 'namespace' : 'n' \ } let types.clojure = type_clojure + " CMake {{{1 + let type_cmake = tagbar#prototypes#typeinfo#new() + let type_cmake.ctagstype = 'cmake' + let type_cmake.kinds = [ + \ {'short': 'p', 'long': 'projects' , 'fold': 0, 'stl': 1}, + \ {'short': 'm', 'long': 'macros' , 'fold': 0, 'stl': 1}, + \ {'short': 'f', 'long': 'functions', 'fold': 0, 'stl': 1}, + \ {'short': 'D', 'long': 'options' , 'fold': 0, 'stl': 1}, + \ {'short': 'v', 'long': 'variables', 'fold': 0, 'stl': 1}, + \ {'short': 't', 'long': 'targets' , 'fold': 0, 'stl': 1}, + \ ] + let type_cmake.sro = '.' + let type_cmake.kind2scope = { + \ 'f' : 'function', + \ } + let type_cmake.scope2kind = { + \ 'function' : 'f', + \ } + let types.cmake = type_cmake + " Crystal {{{1 + let type_crystal = tagbar#prototypes#typeinfo#new() + let type_crystal.ctagstype = 'crystal' + let type_crystal.kinds = [ + \ {'short' : 'm', 'long' : 'modules', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'd', 'long' : 'defs', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'M', 'long' : 'macros', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'l', 'long' : 'libs', 'fold' : 0, 'stl' : 1}, + \ {'short' : 's', 'long' : 'structs', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'a', 'long' : 'aliases', 'fold' : 0, 'stl' : 1} + \ ] + let type_crystal.sro = '::' + let types.crystal = type_crystal " Ctags config {{{1 let type_ctags = tagbar#prototypes#typeinfo#new() let type_ctags.ctagstype = 'ctags' @@ -383,6 +508,14 @@ function! tagbar#types#uctags#init(supported_types) abort \ {'short' : 'v', 'long' : 'variables', 'fold' : 0, 'stl' : 1} \ ] let types.dosbatch = type_dosbatch + " DTS {{{1 + let type_dts = tagbar#prototypes#typeinfo#new() + let type_dts.ctagstype = 'dts' + let type_dts.kinds = [ + \ {'short' : 'l', 'long' : 'labels', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'p', 'long' : 'phandlers', 'fold' : 0, 'stl' : 1} + \ ] + let types.dts = type_dts " Eiffel {{{1 let type_eiffel = tagbar#prototypes#typeinfo#new() let type_eiffel.ctagstype = 'eiffel' @@ -524,15 +657,41 @@ function! tagbar#types#uctags#init(supported_types) abort \ 'struct' : 's' \ } let types.go = type_go + " Haskell {{{1 + let type_haskell = tagbar#prototypes#typeinfo#new() + let type_haskell.ctagstype = 'haskell' + let type_haskell.kinds = [ + \ {'short' : 'm', 'long' : 'module', 'fold' : 0, 'stl' : 0}, + \ {'short' : 't', 'long' : 'types', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'c', 'long' : 'constructors', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0, 'stl' : 1} + \ ] + let types.haskell = type_haskell " HTML {{{1 let type_html = tagbar#prototypes#typeinfo#new() let type_html.ctagstype = 'html' + let type_html.ctagsargs = [ + \ '--fields=+{roles}', + \ '--extras=+{reference}', + \ '--extras=+F', + \ '-f', + \ '-', + \ '--format=2', + \ '--excmd=pattern', + \ '--fields=nksSafet', + \ '--sort=no', + \ '--append=no', + \ ] let type_html.kinds = [ - \ {'short' : 'a', 'long' : 'named anchors', 'fold' : 0, 'stl' : 1}, - \ {'short' : 'h', 'long' : 'H1 headings', 'fold' : 0, 'stl' : 1}, - \ {'short' : 'i', 'long' : 'H2 headings', 'fold' : 0, 'stl' : 1}, - \ {'short' : 'j', 'long' : 'H3 headings', 'fold' : 0, 'stl' : 1}, - \ ] + \ {'short' : 'a', 'long' : 'named anchors', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'C', 'long' : 'stylesheets', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'I', 'long' : 'identifiers', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'J', 'long' : 'scripts', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'h', 'long' : 'H1 headings', 'fold' : 1, 'stl' : 1}, + \ {'short' : 'i', 'long' : 'H2 headings', 'fold' : 1, 'stl' : 1}, + \ {'short' : 'j', 'long' : 'H3 headings', 'fold' : 1, 'stl' : 1}, + \ ] let types.html = type_html " Java {{{1 let type_java = tagbar#prototypes#typeinfo#new() @@ -583,6 +742,31 @@ function! tagbar#types#uctags#init(supported_types) abort \ 'function' : 'f', \ } let types.javascript = type_javascript + + " Kotlin {{{1 + let type_kotlin = tagbar#prototypes#typeinfo#new() + let type_kotlin.ctagstype = 'kotlin' + let type_kotlin.kinds = [ + \ {'short': 'p', 'long': 'packages', 'fold':0, 'stl':0}, + \ {'short': 'c', 'long': 'classes', 'fold':0, 'stl':1}, + \ {'short': 'o', 'long': 'objects', 'fold':0, 'stl':0}, + \ {'short': 'i', 'long': 'interfaces', 'fold':0, 'stl':0}, + \ {'short': 'T', 'long': 'typealiases', 'fold':0, 'stl':0}, + \ {'short': 'm', 'long': 'methods', 'fold':0, 'stl':1}, + \ {'short': 'C', 'long': 'constants', 'fold':0, 'stl':0}, + \ {'short': 'v', 'long': 'variables', 'fold':0, 'stl':0}, + \ ] + let type_kotlin.sro = '.' + " Note: the current universal ctags version does not have proper + " definition for the scope of the tags. So for now we can't add the + " kind2scope / scope2kind for anything until ctags supports the correct + " scope info + let type_kotlin.kind2scope = { + \ } + let type_kotlin.scope2kind = { + \ } + let types.kotlin = type_kotlin + " Lisp {{{1 let type_lisp = tagbar#prototypes#typeinfo#new() let type_lisp.ctagstype = 'lisp' @@ -610,14 +794,33 @@ function! tagbar#types#uctags#init(supported_types) abort let type_markdown = tagbar#prototypes#typeinfo#new() let type_markdown.ctagstype = 'markdown' let type_markdown.kinds = [ - \ {'short' : 'c', 'long' : 'h1', 'fold' : 0, 'stl' : 0}, - \ {'short' : 's', 'long' : 'h2', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'S', 'long' : 'h3', 'fold' : 0, 'stl' : 0}, - \ {'short' : 't', 'long' : 'h4', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'T', 'long' : 'h5', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'u', 'long' : 'h6', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'c', 'long' : 'chapter', 'fold' : 0, 'stl' : 1}, + \ {'short' : 's', 'long' : 'section', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'S', 'long' : 'subsection', 'fold' : 0, 'stl' : 1}, + \ {'short' : 't', 'long' : 'subsubsection', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'T', 'long' : 'l3subsection', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'u', 'long' : 'l4subsection', 'fold' : 0, 'stl' : 1}, \ ] + let type_markdown.kind2scope = { + \ 'c' : 'chapter', + \ 's' : 'section', + \ 'S' : 'subsection', + \ 't' : 'subsubsection', + \ 'T' : 'l3subsection', + \ 'u' : 'l4subsection', + \ } + let type_markdown.scope2kind = { + \ 'chapter' : 'c', + \ 'section' : 's', + \ 'subsection' : 'S', + \ 'subsubsection' : 't', + \ 'l3subsection' : 'T', + \ 'l4subsection' : 'u', + \ } + let type_markdown.sro = '""' + let type_markdown.sort = 0 let types.markdown = type_markdown + let types.pandoc = type_markdown " Matlab {{{1 let type_matlab = tagbar#prototypes#typeinfo#new() let type_matlab.ctagstype = 'matlab' @@ -717,9 +920,11 @@ function! tagbar#types#uctags#init(supported_types) abort let type_perl.kinds = [ \ {'short' : 'p', 'long' : 'packages', 'fold' : 1, 'stl' : 0}, \ {'short' : 'c', 'long' : 'constants', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'M', 'long' : 'modules', 'fold' : 0, 'stl' : 0}, \ {'short' : 'f', 'long' : 'formats', 'fold' : 0, 'stl' : 0}, \ {'short' : 'l', 'long' : 'labels', 'fold' : 0, 'stl' : 1}, - \ {'short' : 's', 'long' : 'subroutines', 'fold' : 0, 'stl' : 1} + \ {'short' : 's', 'long' : 'subroutines', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'd', 'long' : 'subroutineDeclarations', 'fold' : 0, 'stl' : 0} \ ] let types.perl = type_perl " Perl 6 {{{1 @@ -813,6 +1018,36 @@ function! tagbar#types#uctags#init(supported_types) abort \ {'short' : 'v', 'long' : 'function variables', 'fold' : 0, 'stl' : 0}, \ ] let types.r = type_r + " ReStructuredText {{{1 + let type_restructuredtext = tagbar#prototypes#typeinfo#new() + let type_restructuredtext.ctagstype = 'restructuredtext' + let type_restructuredtext.kinds = [ + \ {'short' : 'c', 'long' : 'chapter', 'fold' : 0, 'stl' : 1}, + \ {'short' : 's', 'long' : 'section', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'S', 'long' : 'subsection', 'fold' : 0, 'stl' : 1}, + \ {'short' : 't', 'long' : 'subsubsection', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'T', 'long' : 'l3subsection', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'u', 'long' : 'l4subsection', 'fold' : 0, 'stl' : 1}, + \ ] + let type_restructuredtext.kind2scope = { + \ 'c' : 'chapter', + \ 's' : 'section', + \ 'S' : 'subsection', + \ 't' : 'subsubsection', + \ 'T' : 'l3subsection', + \ 'u' : 'l4subsection', + \ } + let type_restructuredtext.scope2kind = { + \ 'chapter' : 'c', + \ 'section' : 's', + \ 'subsection' : 'S', + \ 'subsubsection' : 't', + \ 'l3subsection' : 'T', + \ 'l4subsection' : 'u', + \ } + let type_restructuredtext.sro = '""' + let type_restructuredtext.sort = 0 + let types.rst = type_restructuredtext " REXX {{{1 let type_rexx = tagbar#prototypes#typeinfo#new() let type_rexx.ctagstype = 'rexx' @@ -856,7 +1091,8 @@ function! tagbar#types#uctags#init(supported_types) abort \ {'short' : 'M', 'long' : 'macro', 'fold' : 0, 'stl' : 1}, \ {'short' : 'm', 'long' : 'struct field', 'fold' : 0, 'stl' : 1}, \ {'short' : 'e', 'long' : 'enum variant', 'fold' : 0, 'stl' : 1}, - \ {'short' : 'P', 'long' : 'method', 'fold' : 0, 'stl' : 1} + \ {'short' : 'P', 'long' : 'method', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'C', 'long' : 'constant', 'fold' : 0, 'stl' : 0}, \ ] let type_rust.sro = '::' let type_rust.kind2scope = { @@ -957,6 +1193,47 @@ function! tagbar#types#uctags#init(supported_types) abort \ {'short' : 'p', 'long' : 'procedures', 'fold' : 0, 'stl' : 1} \ ] let types.tcl = type_tcl + " Terraform (HCL) {{{1 + let type_tf = tagbar#prototypes#typeinfo#new() + let type_tf.ctagstype = 'terraform' + let type_tf.kinds = [ + \ {'short' : 'r', 'long' : 'resources', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'd', 'long' : 'data', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'p', 'long' : 'providers', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'm', 'long' : 'modules', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'o', 'long' : 'output', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'l', 'long' : 'locals', 'fold' : 0, 'stl' : 0}, + \ ] + " TypeScript {{{1 + let type_ts = tagbar#prototypes#typeinfo#new() + let type_ts.ctagstype = 'typescript' + let type_ts.kinds = [ + \ {'short' : 'n', 'long' : 'namespaces', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'i', 'long' : 'interfaces', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'g', 'long' : 'enums', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'e', 'long' : 'enumerations', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'C', 'long' : 'constants', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'p', 'long' : 'properties', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'm', 'long' : 'methods', 'fold' : 0, 'stl' : 1}, + \ ] + let type_ts.sro = '.' + let type_ts.kind2scope = { + \ 'c' : 'class', + \ 'i' : 'interface', + \ 'g' : 'enum', + \ 'n' : 'namespace', + \ } + let type_ts.scope2kind = { + \ 'class' : 'c', + \ 'interface' : 'i', + \ 'enum' : 'g', + \ 'namespace' : 'n' + \ } + let types.typescript = type_ts " LaTeX {{{1 let type_tex = tagbar#prototypes#typeinfo#new() let type_tex.ctagstype = 'tex' @@ -969,7 +1246,8 @@ function! tagbar#types#uctags#init(supported_types) abort \ {'short' : 'b', 'long' : 'subsubsections', 'fold' : 0, 'stl' : 1}, \ {'short' : 'P', 'long' : 'paragraphs', 'fold' : 0, 'stl' : 0}, \ {'short' : 'G', 'long' : 'subparagraphs', 'fold' : 0, 'stl' : 0}, - \ {'short' : 'l', 'long' : 'labels', 'fold' : 0, 'stl' : 0} + \ {'short' : 'l', 'long' : 'labels', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'f', 'long' : 'frames', 'fold' : 0, 'stl' : 1} \ ] let type_tex.sro = '""' let type_tex.kind2scope = { @@ -1074,6 +1352,59 @@ function! tagbar#types#uctags#init(supported_types) abort \ {'short' : 't', 'long' : 'tasks', 'fold' : 0, 'stl' : 1} \ ] let types.verilog = type_verilog + " SystemVerilog {{{1 + let type_systemverilog = tagbar#prototypes#typeinfo#new() + let type_systemverilog.ctagstype = 'systemverilog' + let type_systemverilog.kinds = [ + \ {'short' : 'A', 'long' : 'assertions', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'C', 'long' : 'class', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'E', 'long' : 'enum', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'H', 'long' : 'checkers', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'I', 'long' : 'interfaces', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'K', 'long' : 'packages', 'fold' : 1, 'stl' : 0}, + \ {'short' : 'L', 'long' : 'clokcing', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'M', 'long' : 'modports', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'N', 'long' : 'nettype', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'O', 'long' : 'constraints', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'P', 'long' : 'programs', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'Q', 'long' : 'prototypes', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'R', 'long' : 'properties', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'S', 'long' : 'structs and unions', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'T', 'long' : 'type declarations', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'V', 'long' : 'covergroups', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'b', 'long' : 'blocks', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'c', 'long' : 'constants', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'd', 'long' : 'text macros', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'e', 'long' : 'events', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'i', 'long' : 'module or interface', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'l', 'long' : 'interface class', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'm', 'long' : 'module', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'n', 'long' : 'net data types', 'fold' : 0, 'stl' : 0}, + \ {'short' : 'p', 'long' : 'ports', 'fold' : 1, 'stl' : 1}, + \ {'short' : 'q', 'long' : 'sequences', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'r', 'long' : 'variable data types', 'fold' : 1, 'stl' : 1}, + \ {'short' : 't', 'long' : 'tasks', 'fold' : 0, 'stl' : 1}, + \ {'short' : 'w', 'long' : 'members', 'fold' : 0, 'stl' : 1} + \ ] + let type_systemverilog.sro = '.' " Nesting doesn't seem to be possible + let type_systemverilog.kind2scope = { + \ 'E' : 'enum', + \ 'C' : 'class', + \ 'm' : 'module', + \ 'P' : 'program', + \ 'K' : 'package', + \ 'I' : 'interface', + \ } + let type_systemverilog.scope2kind = { + \ 'enum' : 'E', + \ 'class' : 'C', + \ 'module' : 'm', + \ 'program' : 'P', + \ 'package' : 'K', + \ 'interface': 'I', + \ } + let types.systemverilog = type_systemverilog " VHDL {{{1 " The VHDL ctags parser unfortunately doesn't generate proper scopes let type_vhdl = tagbar#prototypes#typeinfo#new() diff --git a/.vim/pack/plugins/start/vim-tagbar/doc/tagbar.txt b/.vim/pack/plugins/start/vim-tagbar/doc/tagbar.txt index 01dc046..30faf2e 100644 --- a/.vim/pack/plugins/start/vim-tagbar/doc/tagbar.txt +++ b/.vim/pack/plugins/start/vim-tagbar/doc/tagbar.txt @@ -2,8 +2,8 @@ Author: Jan Larres Licence: Vim licence, see |license| -Homepage: http://majutsushi.github.com/tagbar/ -Version: 2.7 +Homepage: https://preservim.github.io/tagbar +Version: 3.1.1 ============================================================================== Contents *tagbar* *tagbar-contents* @@ -103,6 +103,10 @@ The following features are supported by Tagbar: Fortran, HTML, Java, JavaScript, Lisp, Lua, Make, MatLab, OCaml, Pascal, Perl, PHP, Python, REXX, Ruby, Scheme, Shell script, SLang, SML, SQL, Tcl, Tex, Vera, Verilog, VHDL, Vim and YACC. + - Additional languages are supported through universal-ctags, including + CUDA, R, Rust, Go, and many others. See + https://github.com/universal-ctags/ctags/blob/master/docs/news.rst#new-parsers + for the complete list. - Can be extended to support arbitrary new types. ------------------------------------------------------------------------------ @@ -123,12 +127,13 @@ The following requirements have to be met in order to be able to use tagbar: - Vim 7.0 or higher. Older versions will not work since Tagbar uses data structures that were only introduced in Vim 7. - - Exuberant ctags 5.5 or higher. Ctags is the program that generates the - tag information that Tagbar uses. It is shipped with most Linux - distributions, otherwise it can be downloaded from the following - website: + - At a minimum Exuberant Ctags >= 5.5, or (highly recommended) any version + of Universal Ctags which is a currently maintained fork of Exuberant Ctags + with many bugfixes, support for many more formats, and proper Unicode + support. Some additional formats can also be handled by other providers + such as jsctags, phpctags, or others. - http://ctags.sourceforge.net/ + Universal Ctags can be downloaded from https://ctags.io/ Tagbar will work on any platform that ctags runs on -- this includes UNIX derivatives, Mac OS X and Windows. Note that other versions like @@ -179,16 +184,16 @@ There are essentially two ways to use Tagbar: Opening and closing the Tagbar window~ Use |:TagbarOpen| or |:TagbarToggle| to open the Tagbar window if it is closed. By default the window is opened on the right side, set the option -|g:tagbar_left| to open it on the left instead. If the window is already open, +|g:tagbar_position| to open it elsewhere instead. If the window is already open, |:TagbarOpen| will jump to it and |:TagbarToggle| will close it again. |:TagbarClose| will simply close the window if it is open. It is probably a good idea to assign a key to these commands. For example, put this into your |vimrc|: > - nnoremap :TagbarToggle + nnoremap :TagbarToggle < -You can then open and close Tagbar by simply pressing the key. +You can then open and close Tagbar by simply pressing the key. You can also use |:TagbarOpenAutoClose| to open the Tagbar window, jump to it and have it close automatically on tag selection regardless of the @@ -207,6 +212,10 @@ by moving the cursor to a tag and pressing or double-clicking on it with the mouse. The source file will then move to the definition and put the cursor in the corresponding line. This won't work for pseudo-tags. +If the current line of the tagbar window is not on a tag, for example on the +'functions' tag-kind and is hit, then that tag-kind will be folded or +unfolded if possible. + Sorting~ You can sort the tags in the Tagbar window in two ways: by name or by file order. Sorting them by name simply displays the tags in their alphabetical @@ -261,9 +270,11 @@ COMMANDS *tagbar-commands* :TagbarClose *:TagbarClose* Close the Tagbar window if it is open. -:TagbarToggle *:TagbarToggle* -:Tagbar +:TagbarToggle [{flags}] *:TagbarToggle* +:Tagbar [{flags}] Open the Tagbar window if it is closed, or close it if it is open. + Additional behaviour can be specified with the same optional {flags} + argument as :TagbarOpen. :TagbarOpenAutoClose *:TagbarOpenAutoClose* Open the Tagbar window, jump to it and close it on tag selection. This is @@ -284,9 +295,9 @@ COMMANDS *tagbar-commands* Open the parent folds of the current tag in the file window as much as needed for the tag to be visible in the Tagbar window. -:TagbarCurrentTag [{flags}] *:TagbarCurrentTag* - Echo the current tag in the command line. For {flags} see - |tagbar-statusline|. +:TagbarCurrentTag [{flags} [{search-method}]] *:TagbarCurrentTag* + Echo the current tag in the command line. For {flags} and {search-method} + see |tagbar-statusline|. :TagbarGetTypeConfig {filetype} *:TagbarGetTypeConfig* Paste the Tagbar configuration of the vim filetype {filetype} at the @@ -306,6 +317,33 @@ COMMANDS *tagbar-commands* :TagbarDebugEnd *:TagbarDebugEnd* End debug mode, debug messages will no longer be written to the logfile. +:TagbarForceUpdate *:TagbarForceUpdate* + Forcefully update a file even if it exceeds the |g:tagbar_file_size_limit| + value. This will only work for one invocation of the file processing. + After the file is processed and tags are generated, then it will re-enable + the file size limit. So if the file is written and needs to be processed + again, this command will need to be re-executed. + +:TagbarJump *:TagbarJump* + Jump to the tag under the cursor. This only works while the cursor is in + the tagbar window. This will leave the cursor in the tagbar window. It is + the same behavior as the |p| key mapping. + + This command will call the |tagbar#jump()| function. + +:TagbarJumpPrev *:TagbarJumpPrev* + Jump to the previous tag under the cursor. This works in the file window. + This will search for the previous {'nearest-stl'} type tag starting at the + line just before the current line and do a backwards search. + + This command will call the |tagbar#jumpToNearbyTag(-1)| function. + +:TagbarJumpNext *:TagbarJumpNext* + Jump to the next tag under the cursor. This works in the file window. + This will search for the next {'nearest-stl'} type tag starting at the + line just after the current line and do a forward search. + + This command will call the |tagbar#jumpToNearbyTag(1)| function. ------------------------------------------------------------------------------ FUNCTIONS *tagbar-functions* @@ -315,74 +353,158 @@ FUNCTIONS *tagbar-functions* update tag information. This should be called after you have used |tagbar#currenttag| manually. +*tagbar#GetTagNearLine()* + Get the current tag near the specified line number (lnum). Optionally + takes a fmt and signature specification using the same method as the + |tagbar#currenttag()| function. Defaults to GetTagNearLine(lnum, '%s', ''). + + This could be used in a custom foldtext function to show the current tag + the fold current fold is located in. + + This function can also take in a search method similar to the + |tagbar#currenttag()| function. Full syntax is as follows: + tagbar#GetTagNearLine(lnum [, {fmt}, {flags} [, {search-method}]]) + + Example: > + set foldtext=MyFoldFunc() + function! MyFoldFunc() + let tag = tagbar#GetTagNearLine(v:foldend, '%s', 'p') + let lines = v:foldend - v:foldstart + 1 + return tag . ' --- ' . lines . ' lines' + endfunction +< +*tagbar#ForceUpdate()* + Forcefully update a file even if it exceeds the |g:tagbar_file_size_limit| + value. This also clears the internal flags to the file will be re-examined + again. + +*tagbar#printfileinfo()* + This function is used in conjunction with |TagbarDebug| and will print all + the known tags into the tagbar debug logfile. This is useful for looking + at the internal tag information that tagbar tracks. + +*tagbar#IsOpen()* + This function will return 1 if the tagbar window is open, else it will + return 0. + +*tagbar#jump()* + Jump to the tag under the cursor. This only works while the cursor is in + the tagbar window. This will leave the cursor in the tagbar window. It is + the same behavior as the |p| key mapping. + + This is the function called when using the |:TagbarJump| command. + +*tagbar#jumpToNearbyTag()* + This function will jump to the next tag or previous tag starting a search + from the line under the cursor. This works when in the file window instead + of inside the tagbar window like the |tagbar#jump()| function. + + The direction of search must be provided. If the [direction] is greater + than 0, then it will do a forward search. If the [direction] is less + than 0, then it will do a backward search. + + Can also optionally provide a [search_method] which is used in the + |tagbar#GetTagNearLine()| function call and behaves the same way. This + will default to *'nearest-stl'* if not specified. + + Can optionally provide a flags field [flags] to control the nearby tag + jumping. The flags should be a string of characters with the following + meanings: + 's' - use the |g:tagbar_scroll_off| setting when jumping + + Full syntax: + tagbar#jumpToNearbyTag(direction [, {search-method} [, {flags}]]) + + Examples: +> + " These keymaps will jump to the next/prev tag that can be scoped. Ex: + " function calls, class definitions, etc. + nnoremap t] :call tagbar#jumpToNearbyTag(1) + nnoremap t[ :call tagbar#jumpToNearbyTag(-1) + + " These keymaps will jump to the next/prev tag regardless of type. Ex: + " function calls, class definitions, variable definitions, typedefs, etc. + nnoremap t] :call tagbar#jumpToNearbyTag(1, 'nearest') + nnoremap t[ :call tagbar#jumpToNearbyTag(-1, 'nearest') + + " These keymaps will jump to the next/prev tag regardless of type, and + " will also use the jump_offset configuration to position the cursor + nnoremap t] :call tagbar#jumpToNearbyTag(1, 'nearest', 's') + nnoremap t[ :call tagbar#jumpToNearbyTag(-1, 'nearest', 's') +< + ------------------------------------------------------------------------------ KEY MAPPINGS *tagbar-keys* The following mappings are valid in the Tagbar window: /? Display key mapping help. - Map option: tagbar_map_help -/ Jump to the tag under the cursor. Doesn't work for pseudo-tags - or generic headers. - Map option: tagbar_map_jump + Map option: |tagbar_map_help| +/ Jump to the tag under the cursor. Doesn't work for pseudo-tags. + If on generic header, it will fold/unfold that header. + Map option: |tagbar_map_jump| p Jump to the tag under the cursor, but stay in the Tagbar window. - Map option: tagbar_map_preview + Map option: |tagbar_map_preview| P Open the tag in a |preview-window|. - Map option: tagbar_map_previewwin + Map option: |tagbar_map_previewwin| When on a fold icon, open or close the fold depending on the current state. <2-LeftMouse> Same as . See |g:tagbar_singleclick| if you want to use a single- instead of a double-click. Go to the next top-level tag. - Map option: tagbar_map_nexttag + Map option: |tagbar_map_nexttag| Go to the previous top-level tag. - Map option: tagbar_map_prevtag + Map option: |tagbar_map_prevtag| Display the prototype of the current tag (i.e. the line defining it) in the command line. - Map option: tagbar_map_showproto + Map option: |tagbar_map_showproto| v Hide tags that are declared non-public. Tags without any visibility information will still be shown. - Map option: tagbar_map_hidenonpublic + Map option: |tagbar_map_hidenonpublic| +/zo Open the fold under the cursor. - Map option: tagbar_map_openfold + Map option: |tagbar_map_openfold| -/zc Close the fold under the cursor or the current one if there is no fold under the cursor. - Map option: tagbar_map_closefold + Map option: |tagbar_map_closefold| o/za Toggle the fold under the cursor or the current one if there is no fold under the cursor. - Map option: tagbar_map_togglefold + Map option: |tagbar_map_togglefold| */zR Open all folds by setting foldlevel to 99. - Map option: tagbar_map_openallfolds + Map option: |tagbar_map_openallfolds| =/zM Close all folds by setting foldlevel to 0. - Map option: tagbar_map_closeallfolds + Map option: |tagbar_map_closeallfolds| zr Increase the fold level of the buffer by 1. Opens all folds one level. - Map option: tagbar_map_incrementfolds + Map option: |tagbar_map_incrementfolds| zm Decrease the fold level of the buffer by 1. Closes all folds one level. - Map option: tagbar_map_decrementfolds + Map option: |tagbar_map_decrementfolds| zj Go to the start of the next fold, like the standard Vim |zj|. - Map option: tagbar_map_nextfold + Map option: |tagbar_map_nextfold| zk Go to the end of the previous fold, like the standard Vim |zk|. - Map option: tagbar_map_prevfold + Map option: |tagbar_map_prevfold| s Toggle sort order between name and file order. - Map option: tagbar_map_togglesort + Map option: |tagbar_map_togglesort| c Toggle the |g:tagbar_autoclose| option. - Map option: tagbar_map_toggleautoclose + Map option: |tagbar_map_toggleautoclose| t Toggle the pause (like :TagbarTogglePause) - Map option: tagbar_map_togglepause + Map option: |tagbar_map_togglepause| x Toggle zooming the window. - Map option: tagbar_map_zoomwin + Map option: |tagbar_map_zoomwin| q Close the Tagbar window. - Map option: tagbar_map_close + Map option: |tagbar_map_close| These mappings can be redefined with the given map options. The argument can be either a string or a |List| of strings. In the latter case the -functionality will be assigned to all of the keys in the list. For example, if -you want to remap the sort toggling functionality to "r": +functionality will be assigned to all of the keys in the list. +For example, if you want to remap the sort toggling functionality to "r": > let g:tagbar_map_togglesort = "r" < +Alternatively, if you want to disable this mapping, then set to '': +> + let g:tagbar_map_togglesort = '' +< See |key-notation| for how to write special keys like or the keypad keys. @@ -421,10 +543,36 @@ This causes ctags to use settings from ~/.vim/ctags.cnf, ignoring other configuration files. + *g:tagbar_position* +g:tagbar_position~ +Default: 'botright vertical' + +By default the Tagbar window will be opened on the right-hand side of vim in a +vertical split. Set this option to one of the standard vim split options such +as 'topleft', 'botright', 'leftabove', or 'rightbelow' to open in the +corresponding position instead. If desiring a vertically split window, then +include a ' vertical' in the field value as well. This can be useful when +activating Tagbar at the same time as another plugin which creates a new +window. It allows for more granular control of the Tagbar position in +relation to the current active window. + +If using a vertical split, |g:tagbar_width| will be used to determine the +window width for the tagbar window. Else |g:tagbar_height| will be used to +determine the window height for the tagbar window. + +See |split| for more details on window positioning. + +Example: +> + let g:tagbar_position = 'leftabove' +< *g:tagbar_left* g:tagbar_left~ Default: 0 +This option has been superceded by |g:tagbar_position| instead. It has been left +around for backward compatibility. + By default the Tagbar window will be opened on the right-hand side of vim. Set this option to open it on the left instead. @@ -440,6 +588,9 @@ Example: g:tagbar_vertical~ Default: 0 +This option has been superceded by |g:tagbar_height| instead. It has been left +around for backward compatibility. + If this is set to a positive value then the Tagbar window will be opened at the top or bottom of the Vim window instead of at the side. This can be useful for monitors that have been rotated into a vertical position. The value of @@ -451,15 +602,32 @@ Example: let g:tagbar_vertical = 30 < + *g:tagbar_height* +g:tagbar_height~ +Default: 0 + +If |g:tagbar_position| does not include a 'vertical' option, then this +value is used to determine the height of the Tagbar window. + +Example: +> + let g:tagbar_height = 30 +< + *g:tagbar_width* g:tagbar_width~ Default: 40 -Width of the Tagbar window in characters. +If |g:tagbar_position| does include a 'vertical' options, then this value is +used to determine the width of the Tagbar window in characters. This value can +also be set using the |winwidth(0)| function call to calculate a dynamic value +to make the tagbar width relative to a percentage of the vim window size as +seen in the example below that will open the tagbar window to 20 percent of +the window width with a limit of no less than 25 characters. Example: > - let g:tagbar_width = 30 + let g:tagbar_width = max([25, winwidth(0) / 5]) < *g:tagbar_zoomwidth* @@ -492,6 +660,23 @@ Example: let g:tagbar_autoclose = 1 < + *g:tagbar_autoclose_netrw* +g:tagbar_autoclose_netrw~ +Default: 0 + +This option is used to control the behavior when tagbar is the last window +open, but the netrw (or nerdtree) window is also open. If this value is set to +1, that will indicate that vim should be closed if tagbar and netrw are the +last windows open. If you set this to 0 and tagbar and the netrw (or nerdtree) +windows are the only remaining windows, then it will still close the tagbar +window, however it will leave vim open with the netrw (or nerdtree) window +open. + +Example: +> + let g:tagbar_autoclose_netrw = 1 +< + *g:tagbar_autofocus* g:tagbar_autofocus~ Default: 0 @@ -538,11 +723,24 @@ Setting this option will result in Tagbar omitting the short help at the top of the window and the blank lines in between top-level scopes in order to save screen real estate. +Possible values are: + 0: Show short help and blank lines between top-level scopes + 1: Don't show the short help or the blank lines. + 2: Don't show the short help but show the blank lines. + Example: > let g:tagbar_compact = 1 < + *g:tagbar_help_visibility* +g:tagbar_help_visibility~ +Default: 0 +Setting this option will cause the full help information to be displayed all +the time in the tagbar window. +> + let g:tagbar_help_visibility = 1 +< *g:tagbar_indent* g:tagbar_indent~ Default: 2 @@ -556,7 +754,7 @@ Example: < *g:tagbar_show_balloon* -g:tagbar_show_balloon +g:tagbar_show_balloon~ Default: 1 Whether balloon messages should be shown in the Tagbar window. @@ -570,7 +768,17 @@ Example: > let g:tagbar_show_balloon = 0 < + *g:tagbar_show_data_type* +g:tagbar_show_data_type~ +Default: 0 +When set to non-zero, the tag data-type will be displayed to the right of the +tag in the tagbar window. + +Example: +> + let g:tagbar_show_data_type = 1 +< *g:tagbar_show_visibility* g:tagbar_show_visibility~ Default: 1 @@ -582,7 +790,21 @@ Example: > let g:tagbar_show_visibility = 0 < + *g:tagbar_visibility_symbols* +g:tagbar_visibility_symbols +Default: { 'public' : '+', 'protected' : '#', 'private' : '-' } +Symbols to use for visibility (public/protected/private) to the left of the tag +name. See |g:tagbar_show_visibility|. + +Example: +> + let g:tagbar_visibility_symbols = { + \ 'public' : '+', + \ 'protected' : '#', + \ 'private' : '-' + \ } +< *g:tagbar_show_linenumbers* g:tagbar_show_linenumbers~ Default: 0 @@ -599,7 +821,66 @@ Example: > let g:tagbar_show_linenumbers = 2 < + *g:tagbar_show_prefix* +g:tagbar_show_prefix~ +Default: 1 +Controls if the prefix information is shown before the tag. The prefix info is +usually defined as the variable scope. For example, if a variable is private +scope only, then a '-' symbol will be used by default. + +Possible values are: + 0: Don't show the prefix. + 1: Show the prefix. + +Example: +> + let g:tagbar_show_prefix = 0 +< + *g:tagbar_show_suffix* +g:tagbar_show_suffix~ +Default: 1 + +Controls if the suffix information is shown after the tag. The suffix info is +usually data type. + +Possible values are: + 0: Don't show the suffix. + 1: Show the suffix. + +Example: +> + let g:tagbar_show_suffix = 0 +< + *g:tagbar_show_tag_linenumbers* +g:tagbar_show_tag_linenumbers~ +Default: 0 + +This option allows printing the tag line number next to the tag in the tagbar +window. It can be set to the following values: + 0 - The line number will not be printed + 1 - The line number will be printed to the right of the tag > + Example: function1(int i) [123] +< + 2 - The line number will be printed to the left of the tag > + Example: [123] function1(int i) +< +Example: +> + let g:tagbar_show_tag_linenumbers = 1 +< + *g:tagbar_show_tag_count* +g:tagbar_show_tag_count~ +Default: 0 + +This option allows showing the tag count next to the tag kind in the tagbar +window. This will show up like this > + > functions () +< +Example: +> + let g:tagbar_show_tag_count = 1 +< *g:tagbar_hide_nonpublic* g:tagbar_hide_nonpublic~ Default: 0 @@ -668,6 +949,38 @@ just choose other characters in that case): let g:tagbar_iconchars = ['▸', '▾'] let g:tagbar_iconchars = ['▷', '◢'] let g:tagbar_iconchars = ['+', '-'] (default on Windows) +< + *g:tagbar_scopestrs* +g:tagbar_scopestrs~ +Default: {} + +Setting to replace a tag's scope with a user-specified string in Tagbar's +display. If a scope is found in the keys of |g:tagbar_scopestrs|, then the +scope will be displayed as the corresponding value. If the scope is not +found, then the scope will be displayed as normal. + +Example (don't worry if some of the characters aren't displayed correctly, +just choose other characters or strings in that case): +> + let g:tagbar_scopestrs = { + \ 'class': "\uf0e8", + \ 'const': "\uf8ff", + \ 'constant': "\uf8ff", + \ 'enum': "\uf702", + \ 'field': "\uf30b", + \ 'func': "\uf794", + \ 'function': "\uf794", + \ 'getter': "\ufab6", + \ 'implementation': "\uf776", + \ 'interface': "\uf7fe", + \ 'map': "\ufb44", + \ 'member': "\uf02b", + \ 'method': "\uf6a6", + \ 'setter': "\uf7a9", + \ 'variable': "\uf71b", + \ } + + < *g:tagbar_autoshowtag* @@ -765,14 +1078,27 @@ default statusline: > function! TagbarStatusFunc(current, sort, fname, flags, ...) abort let colour = a:current ? '%#StatusLine#' : '%#StatusLineNC#' - let flagstr = join(flags, '') + let flagstr = join(a:flags, '') if flagstr != '' let flagstr = '[' . flagstr . '] ' endif - return colour . '[' . sort . '] ' . flagstr . fname + return colour . '[' . a:sort . '] ' . flagstr . a:fname endfunction let g:tagbar_status_func = 'TagbarStatusFunc' < + *g:tagbar_no_status_line* +g:tagbar_no_status_line~ +Default: undefined + +This option will prevent any status line updates being done by Tagbar. Use +this in the event where another plugin is being used to update the status +line. If |g:tagbar_status_func| is set, then that function will never be +called. + +Example: +> + let g:tagbar_no_status_line = 1 +< *g:tagbar_silent* g:tagbar_silent~ @@ -785,6 +1111,231 @@ Example: > let g:tagbar_silent = 1 < + *g:tagbar_use_cache* +g:tagbar_use_cache~ +Default: 1 + +By default the file contents are passed to ctags by writing them to +a temporary file and invoking ctags on that file. This greatly speeds up tag +generation in the event of slow file systems such as network shares and +enables tagbar to run even on netrw virtual files that ctags would otherwise +not be able to find at all. However it does incure the cost of an extra write +operation. Additionally not all systems are able to let programs share access +to temporary file space (for example Snap packages cannot read from the host +system's temp file space). This setting can disable the cache mechanism +entriely forcing the tags to be generated from the existing copy of the file +on disk rather than the current buffer written to a temporary file. + +Example: +> + let g:tagbar_use_cache = 0 +< + + *g:tagbar_file_size_limit* +g:tagbar_file_size_limit~ +Default: 0 + +By default, all files are processed by tagbar. Setting this value to non-zero +will disable processing for any file with a byte count greater than +|g:tagbar_file_size_limit|. A message will be displayed once for a given buffer +if the limit is exceeded. The file can be forcefully updated with the +|tagbar#ForceUpdate()| function or with the |:TagbarForceUpdate| command. If +the value is set to 0, then the file will always be processed. + +Example: +> + let g:tagbar_file_size_limit = 10000 +< + + *g:tagbar_wrap* +g:tagbar_wrap~ +Default: 0 + +Possible Values: + 0 Disable line wrapping. + 1 Enable the |wrap| option and also enable the |linebreak| option to + split the lines on word boundaries. This will use the default + |breakat| setting in vim. Note: This can cause possible display issues + with tags that exceed the tagbar window width. A very long tag name + will cause the tag itself to wrap resulting in an empty line and + indentation of the tag (see example below). + 2 Enable the |wrap| option but disable the |linebreak| option. This will + split the lines at the end of the tagbar window and can cause it to + wrap in the middle of a word. This should be used if there are tags + that are regularly longer than the tagbar window width. + +This also will use the |breakindent| and |breakindentopt| options in vim to +set the indentation of the wrapped lines. + +Note: This requires VIM to be compiled with the |+linebreak| option for the +wrap intentation to function. + +Examples: +> + " Wrap with linebreak - note the wrap works on word boundaries, but + " a very long tag name does cause an odd display issue. + let g:tagbar_wrap = 1 + +-------------------------------------------+ + | ⯆ functions (106) | + | s:add_tag_recursive(parent,taginfo, | + | pathlist) : function! | + | s:AutoUpdate(fname,force,...) : | + | function! | + | | + | s:SomeReallyLongTagNameThatWillExc| + | eedWindowWidth : function! | + +-------------------------------------------+ + + " Wrap without linbreak - note the display issue is gone for the + " really long tag name, but the other wraps will breakup words. + let g:tagbar_wrap = 2 + +-------------------------------------------+ + | ⯆ functions (106) | + | s:add_tag_recursive(parent,taginfo,pat| + | hlist) : function! | + | s:AutoUpdate(fname,force,...) : functi| + | on! | + | s:SomeReallyLongTagNameThatWillExceedW| + | indowWidth : funciton! | + +-------------------------------------------+ +< + *g:tagbar_no_autocmds* +g:tagbar_no_autocmds~ +Default: 0 + +If set to non-zero, tagbar will not enable any autocmds. Note: This greatly +limits what tagbar can do. When activated, it will generate the tags once and +display the contents once. You can use |:TagbarForceUpdate| to manually update +the tagbar window if this is activated. There will only be two autocmds +created in the tagbar autocmd group to handle closing the tagbar window +automatically on the QuitPre event. + +Example: +> + let g:tagbar_no_autocmds = 1 +< + *g:tagbar_scrolloff* +g:tagbar_scrolloff~ +Default: 0 + +If set to non-zero, the tagbar window initialization will set the |scrolloff| +value local to the tagbar window to the specified value. This is used to +position the current tag in the tagbar window. See the help for |scrolloff| +for more details. If set to a very high value (greater than the height of the +tagbar window), then the current tag should always stay in the center of the +tagbar window. + +Example: +> + let g:tagbar_scrolloff = 10 +< + *g:tagbar_jump_offset* +g:tagbar_jump_offset~ +Default: 0 + +This value can be used to control the jump offset positioning. When jumping to +a tag from the tagbar window, the tag will appear |g:tagbar_jump_offset| lines +above or below the center of the window. For example, if set to 10 and you +jump to a tag, the tag will appear 10 lines above the center of the window. +This can also be set to a negative value if you want the tag jump location to +be below the center of the window. + +If set to greater than |winheight|() then the tag will always appear at the +top of the screen. If set to less than -|winheight|(), then the tag will +always appear at the bottom of the screen. + +Examples: +> + " Set the tag jump location to appear at the top + let g:tagbar_jump_offset = 999 + + " Set the tag jump locaiton to appear at the bottom + let g:tagbar_jump_offset = -999 + + " Set the tag jump location to appear 25% from the top + let g:tagbar_jump_offset = winheight(0) / 4 +< + *g:tagbar_jump_lazy_scroll* +g:tagbar_jump_lazy_scroll~ +Default: 0 + +If set to non-zero, a jump to a tag will only scroll the window if the +tag is not already visible in the window. In other words, when jumping to +a tag that is already visible, the cursor will simply be placed on the line +containing the tag without scrolling the window. If the tag is not visible +in the window then the window will be scrolled and the tag (and cursor) +placed in the location dictated by |g:tagbar_jump_offset|. + + *g:tagbar_highlight_follow_insert* +g:tagbar_highlight_follow_insert~ +Default: 0 + +If set to non-zero, the highlight of the current tag in the Tagbar will follow +the cursor in insert mode as well, after a short pause once the cursor stops +moving. Enabling this option may introduce some lag during the input, so it is +disabled by default. + +Example: +> + let g:tagbar_highlight_follow_insert = 1 +< + *g:tagbar_highlight_method* +g:tagbar_highlight_method~ +Default: 'nearest-stl' + +This configuration controls how the tag highlighting works in the tagbar +window. The possible values are: + 'nearest-stl' - Highlight the nearest tag that is defined with the + {stl} option + 'scoped-stl' - Highlight the nearest tag defined with the {stl} flag + in the kind definition, also taking into account the + scope. + 'nearest' - Highlight the nearest tag regardless of the type or + flags. This was the behavior prior to the introduction + of the 'scoped-stl' idea. If you want to revert to the + old method, set |g:tagbar_highlight_method| to + 'nearest'. + +Use case example: Consider the following example. If the cursor is at line +#10, then the highlight method will behave differently in each case. If set to +'nearest-stl', the tag for some_function() will be highlighted. If set to +'scoped-stl', the tag for 'class A' will be highlighted. If set to 'nearest', +then the tag for 'SOME_MACRO' will be highlighted. + +If the cursor is moded to line #8, then both 'nearest-stl' and 'scoped-stl' +will highlight the tag for 'some_function()'. The 'nearest' method will +highlight the 'SOME_MACRO' tag. +> + 1 class A { + 2 + 3 int some_function(int arg) { + 4 int var1; + 5 int var2; + 6 #define SOME_MACRO 1 + 7 ... + 8 printf("..."); + 9 } + 10 + 11 int another_function(int arg) { + 12 int varA; + 13 printf("###"); + 14 } + 15 } +< +Example: > + let g:tagbar_highlight_method = 'nearest' +< + *g:tagbar_ignore_anonymous* +g:tagbar_ignore_anonymous~ +Default: 0 + +If set, any '__anon' tags generated by ctags will be ignored and will not be +displayed in the tagbar window. Note: this will also mean any child tags of +that anonymous tag will also not be visible. + +Example: > + let g:tagbar_ignore_anonymous = 1 +< ------------------------------------------------------------------------------ HIGHLIGHT COLOURS *tagbar-highlight* @@ -807,6 +1358,9 @@ TagbarScope TagbarType The type of a tag or scope if available. +TagbarTagLineN + The source line number displayed to the right of each tag entry. + TagbarSignature Function signatures. @@ -891,7 +1445,7 @@ read |tagbar-extend| (especially the "kinds" entry) on how to do that. The function has the following signature: -tagbar#currenttag({format}, {default} [, {flags}]) +tagbar#currenttag({format}, {default} [, {flags} [, {search-method}]]) {format} is a |printf()|-compatible format string where "%s" will be replaced by the name of the tag. {default} will be displayed instead of the format string if no tag can be found. @@ -906,9 +1460,43 @@ tagbar#currenttag({format}, {default} [, {flags}]) useful in cases where ctags doesn't report some information, like the signature. Note that this can get quite long. + The optional {search-method} argument specified how to search for the + nearest tag. Valid options are: + 'nearest' This will look for the closest tag above the current line + regardless of type. This will match even one line tags or + other tags not defined with the {stl} flag in their kind + definition. This is the quickest option, but least + accurate. + 'nearest-stl' This will look for the closest tag above the current line + which is defined with the {stl} flag in its kind + definition. This is a little slower, but provides a little + more context and accuracy. + 'scoped-stl' This will look for the closest tag above the current line + taking scope into account as well as the {stl} flag. The + scope is determined by the ctags 'end' field. This is the + slowest of the options as when outside of a function + scope, it could end up searching all the way to the top of + the file for the nearest scoped tag (or possibly none if + not in any scope at all). For example, if you put the following into your statusline: > %{tagbar#currenttag('[%s] ','')} -< then the function "myfunc" will be shown as "[myfunc()] ". +< then the function "myfunc" will be shown as "[myfunc()] ". + As another example, we can use the following in our status line to find + the current scoped tag and also print the full path when found: > + %{tagbar#currenttag('%s', '', 'f', 'scoped-stl')} +< then the function "myfunc" within class "myclass" will be shown as + "myclass::myfunc()". But when outside of the function, it will be shown as + "myclass" +Additionally you can show the kind (type) of the current tag, using following +function: + +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 @@ -924,7 +1512,7 @@ IGNORING SPECIFIC FILES *tagbar-ignore* You can ignore specific files by setting the |buffer-variable| "b:tagbar_ignore" to 1. This is best done with an |autocommand|: > - autocmd BufNewFile,BufReadPost foo.cpp let b:tagbar_ignore = 1 + autocmd BufNewFile,BufReadPre foo.cpp let b:tagbar_ignore = 1 < Note that autocommands are order-sensitive, so make sure that this autocommand gets defined before the ones that Tagbar defines so the variable will get @@ -952,6 +1540,7 @@ former allows simple regular expression-based parsing that is easy to get started with, but doesn't support scopes unless you instead want to write a C-based parser module for Exuberant Ctags. The regex approach is described in more detail below. + Writing your own program is the approach used by for example jsctags and can be useful if your language can best be parsed by a program written in the language itself, or if you want to provide the program as part of a complete @@ -959,10 +1548,32 @@ support package for the language. Some tips on how to write such a program are given at the end of this section. Before writing your own extension have a look at the wiki -(https://github.com/majutsushi/tagbar/wiki) or try googling for existing ones. +(https://github.com/preservim/tagbar/wiki) or try googling for existing ones. If you do end up creating your own extension please consider adding it to the wiki so that others can benefit from it, too. +In some cases there may be a definition for the filetype defined, but vim may +not recognize the extension. For example, the BibLaTeX file format is defined +separately from the BibTeX support for universal-ctags. So there are two defined +language types in tagbar. However VIM does not have a specific extension that +is recognized for the BibLaTeX filetype. In these cases it is necessary to add +a custom filetype extension definition in your .vim configuration. + +For example: +> + $ cat ~/.vim/filetype.vim + " custom filetypes + + augroup filetypedetect + au! BufRead,BufNewFile *.biblatex setfiletype biblatex + augroup END + $ +< + +This will automatically detect the file extension of *.biblatex and define the +filetype in VIM as a biblatex filetype so tagbar will correctly identify the +filetype and use the correct definition. + Every type definition in Tagbar is a dictionary with the following keys: ctagstype: The name of the language as recognized by ctags. Use the command > @@ -993,7 +1604,26 @@ kinds: A list of the "language kinds" that should be listed in Tagbar, "f:functions:1" < would list all the function definitions in a file under the header "functions", fold them, and implicitly show them in the statusline - if tagbar#currenttag() is used. + if tagbar#currenttag() is used. The {stl} field is also used to + determine tag that are considered for scoped highlighting in the + tagbar window. By default, whenever the cursor is on a line + containing a known tag, then that tag will be highlighted in the + tagbar window. However if the cursor is not on a line containing a + tag, then only tags of a type that has {stl} set to 1 will be + highlighted. For example, in C the "macro" type has an {stl} value + of 0. So if there is a macro defined within the scope of a + function such as this: +> + int function1(int arg) { + #define BUF_LENGTH 10 + char buffer[BUF_LENGTH + 1]; + snprintf(buffer, BUF_LENGTH, "some string"); + } +< + Then when the cursor is on the #define line, then that macro will + be highlighted in the tagbar window. However if the cursor was on + the snprintf() line, then the tag for function1() would be + highlighted. sro: The scope resolution operator. For example, in C++ it is "::" and in Java it is ".". If in doubt run ctags as shown below and check the output. @@ -1078,6 +1708,47 @@ ctagsargs: The arguments to be passed to the filetype-specific ctags program If special escaping is required for different OS shell types or if in doubt, then it is recommended to define ctagsargs with a List. + regex: A list of regular expression arguments that will be provided to + ctags via a '--regex-=' option. Multiple regular + expressions can be provded to allow adding support for multiple new + tag regular expressions. The regex statement should be formatted as + documented in the ctags documentation. + https://docs.ctags.io/en/latest/optlib.html#regex-option-argument-flags + When adding a regex statement, the corresponding tag kind label + will need to be defined in the |kinds| definition in the structure + as well. An example for a 'TODO' label for the c language would be + as follows (note: use of the '{_anonymous=..}' option is not + strictly necessary, but does give a unique tag name for each match): +> + let g:tagbar_type_c = { + \ 'ctagstype' : 'c', + \ 'regex' : [ + \ '/(TODO).*//T,ToDo,ToDo Messages/{_anonymous=todo_}', + \ ], + \ 'kinds' : [ + \ 'h:header files:1:0', + \ 'd:macros:1:0', + \ 'p:prototypes:1:0', + \ 'g:enums:0:1', + \ 'e:enumerators:0:0', + \ 't:typedefs:0:0', + \ 's:structs:0:1', + \ 'm:members:1:0', + \ 'v:variables:0:0', + \ 'f:functions:0:1', + \ 'T:todo:0:0', + \ ], + \ 'sro' : '::', + \ 'kind2scope' : { + \ 'g' : 'enum', + \ 's' : 'struct', + \ }, + \ 'scope2kind' : { + \ 'enum' : 'g', + \ 'struct' : 's', + \ } + \ } +< You then have to assign this dictionary to a variable in your vimrc with the @@ -1410,6 +2081,24 @@ Known issues~ ============================================================================== 8. History *tagbar-history* +Note: All tagged releases are an accomodation to distribution packagers. The +upstream developers of this plugin recommend using a plugin manager and +tracking HEAD in the default branch rather than tagged releases. + +3.1.1 (2022-11-04) + - Periodic rollup, see `git log v3.0.0..v3.1.1` + +3.1.0 (2022-11-04) + - Periodic rollup (incomplete merge, suggest 3.1.1) + +3.0.0 (2021-01-21) + - Massive rollup with years of small changes, see `git log v2.7..v3.0.0` + - New upstream project namespace (Preservim) and maintainers + - Deprecate Exuberant Ctags, primarily support Universal Ctags + - Add lots of configuration options (see `:help tagbar`) + - Add utility functions to ease integration with other plugins + - Support many new filetypes out of the box + 2.7 (2017-01-09) - Added support for Universal Ctags, courtesy of Dmytro Konstantinov - Added option to arrange Tagbar window vertically diff --git a/.vim/pack/plugins/start/vim-tagbar/doc/tags b/.vim/pack/plugins/start/vim-tagbar/doc/tags deleted file mode 100644 index 79a988c..0000000 --- a/.vim/pack/plugins/start/vim-tagbar/doc/tags +++ /dev/null @@ -1,62 +0,0 @@ -:TagbarClose tagbar.txt /*:TagbarClose* -:TagbarCurrentTag tagbar.txt /*:TagbarCurrentTag* -:TagbarDebug tagbar.txt /*:TagbarDebug* -:TagbarDebugEnd tagbar.txt /*:TagbarDebugEnd* -:TagbarGetTypeConfig tagbar.txt /*:TagbarGetTypeConfig* -:TagbarOpen tagbar.txt /*:TagbarOpen* -:TagbarOpenAutoClose tagbar.txt /*:TagbarOpenAutoClose* -:TagbarSetFoldlevel tagbar.txt /*:TagbarSetFoldlevel* -:TagbarShowTag tagbar.txt /*:TagbarShowTag* -:TagbarToggle tagbar.txt /*:TagbarToggle* -:TagbarTogglePause tagbar.txt /*:TagbarTogglePause* -g:tagbar_autoclose tagbar.txt /*g:tagbar_autoclose* -g:tagbar_autofocus tagbar.txt /*g:tagbar_autofocus* -g:tagbar_autopreview tagbar.txt /*g:tagbar_autopreview* -g:tagbar_autoshowtag tagbar.txt /*g:tagbar_autoshowtag* -g:tagbar_case_insensitive tagbar.txt /*g:tagbar_case_insensitive* -g:tagbar_compact tagbar.txt /*g:tagbar_compact* -g:tagbar_ctags_bin tagbar.txt /*g:tagbar_ctags_bin* -g:tagbar_ctags_options tagbar.txt /*g:tagbar_ctags_options* -g:tagbar_expand tagbar.txt /*g:tagbar_expand* -g:tagbar_foldlevel tagbar.txt /*g:tagbar_foldlevel* -g:tagbar_hide_nonpublic tagbar.txt /*g:tagbar_hide_nonpublic* -g:tagbar_iconchars tagbar.txt /*g:tagbar_iconchars* -g:tagbar_indent tagbar.txt /*g:tagbar_indent* -g:tagbar_left tagbar.txt /*g:tagbar_left* -g:tagbar_previewwin_pos tagbar.txt /*g:tagbar_previewwin_pos* -g:tagbar_show_balloon tagbar.txt /*g:tagbar_show_balloon* -g:tagbar_show_linenumbers tagbar.txt /*g:tagbar_show_linenumbers* -g:tagbar_show_visibility tagbar.txt /*g:tagbar_show_visibility* -g:tagbar_silent tagbar.txt /*g:tagbar_silent* -g:tagbar_singleclick tagbar.txt /*g:tagbar_singleclick* -g:tagbar_sort tagbar.txt /*g:tagbar_sort* -g:tagbar_status_func tagbar.txt /*g:tagbar_status_func* -g:tagbar_systemenc tagbar.txt /*g:tagbar_systemenc* -g:tagbar_updateonsave_maxlines tagbar.txt /*g:tagbar_updateonsave_maxlines* -g:tagbar_vertical tagbar.txt /*g:tagbar_vertical* -g:tagbar_width tagbar.txt /*g:tagbar_width* -g:tagbar_zoomwidth tagbar.txt /*g:tagbar_zoomwidth* -tagbar tagbar.txt /*tagbar* -tagbar#StopAutoUpdate() tagbar.txt /*tagbar#StopAutoUpdate()* -tagbar-autoopen tagbar.txt /*tagbar-autoopen* -tagbar-commands tagbar.txt /*tagbar-commands* -tagbar-configuration tagbar.txt /*tagbar-configuration* -tagbar-contents tagbar.txt /*tagbar-contents* -tagbar-credits tagbar.txt /*tagbar-credits* -tagbar-extend tagbar.txt /*tagbar-extend* -tagbar-features tagbar.txt /*tagbar-features* -tagbar-functions tagbar.txt /*tagbar-functions* -tagbar-highlight tagbar.txt /*tagbar-highlight* -tagbar-history tagbar.txt /*tagbar-history* -tagbar-ignore tagbar.txt /*tagbar-ignore* -tagbar-installation tagbar.txt /*tagbar-installation* -tagbar-intro tagbar.txt /*tagbar-intro* -tagbar-issues tagbar.txt /*tagbar-issues* -tagbar-keys tagbar.txt /*tagbar-keys* -tagbar-other tagbar.txt /*tagbar-other* -tagbar-pseudotags tagbar.txt /*tagbar-pseudotags* -tagbar-requirements tagbar.txt /*tagbar-requirements* -tagbar-statusline tagbar.txt /*tagbar-statusline* -tagbar-todo tagbar.txt /*tagbar-todo* -tagbar-usage tagbar.txt /*tagbar-usage* -tagbar.txt tagbar.txt /*tagbar.txt* diff --git a/.vim/pack/plugins/start/vim-tagbar/plugin/tagbar.vim b/.vim/pack/plugins/start/vim-tagbar/plugin/tagbar.vim index a1e13e7..62e467a 100644 --- a/.vim/pack/plugins/start/vim-tagbar/plugin/tagbar.vim +++ b/.vim/pack/plugins/start/vim-tagbar/plugin/tagbar.vim @@ -3,8 +3,8 @@ " Description: List the current file's tags in a sidebar, ordered by class etc " Author: Jan Larres " Licence: Vim licence -" Website: http://majutsushi.github.com/tagbar/ -" Version: 2.7 +" Website: https://preservim.github.io/tagbar +" Version: 3.1.1 " Note: This plugin was heavily inspired by the 'Taglist' plugin by " Yegappan Lakshmanan and uses a small amount of code from it. " @@ -49,27 +49,74 @@ function! s:init_var(var, value) abort endfunction function! s:setup_options() abort - if !exists('g:tagbar_vertical') || g:tagbar_vertical == 0 - let previewwin_pos = 'topleft' + if exists('g:tagbar_position') + " Map older deprecated values to correct values + if g:tagbar_position ==# 'top' + let g:tagbar_position = 'leftabove' + elseif g:tagbar_position ==# 'bottom' + let g:tagbar_position = 'rightbelow' + elseif g:tagbar_position ==# 'left' + let g:tagbar_position = 'topleft vertical' + elseif g:tagbar_position ==# 'right' + let g:tagbar_position = 'botright vertical' + endif + if g:tagbar_position !~# 'vertical' + let previewwin_pos = 'rightbelow vertical' + else + let previewwin_pos = 'topleft' + endif + let default_pos = g:tagbar_position else - let previewwin_pos = 'rightbelow vertical' + if exists('g:tagbar_vertical') && g:tagbar_vertical > 0 + let previewwin_pos = 'rightbelow vertical' + if exists('g:tagbar_left') && g:tagbar_left + let default_pos = 'leftabove' + else + let default_pos = 'rightbelow' + endif + let g:tagbar_height = g:tagbar_vertical + elseif exists('g:tagbar_left') && g:tagbar_left + let previewwin_pos = 'topleft' + let default_pos = 'topleft vertical' + else + let previewwin_pos = 'topleft' + let default_pos = 'botright vertical' + endif endif let options = [ \ ['autoclose', 0], + \ ['autoclose_netrw', 0], \ ['autofocus', 0], \ ['autopreview', 0], \ ['autoshowtag', 0], \ ['case_insensitive', 0], \ ['compact', 0], \ ['expand', 0], + \ ['file_size_limit', 0], \ ['foldlevel', 99], \ ['hide_nonpublic', 0], + \ ['height', 10], \ ['indent', 2], + \ ['jump_offset', 0], + \ ['jump_lazy_scroll', 0], \ ['left', 0], + \ ['help_visibility', 0], + \ ['highlight_follow_insert', 0], + \ ['highlight_method', 'nearest-stl'], + \ ['ignore_anonymous', 0], + \ ['no_autocmds', 0], + \ ['position', default_pos], \ ['previewwin_pos', previewwin_pos], + \ ['scopestrs', {}], + \ ['scrolloff', 0], \ ['show_balloon', 1], + \ ['show_data_type', 0], \ ['show_visibility', 1], \ ['show_linenumbers', 0], + \ ['show_prefix', 1], + \ ['show_suffix', 1], + \ ['show_tag_count', 0], + \ ['show_tag_linenumbers', 0], \ ['singleclick', 0], \ ['sort', 1], \ ['systemenc', &encoding], @@ -77,10 +124,13 @@ function! s:setup_options() abort \ ['width', 40], \ ['zoomwidth', 1], \ ['silent', 0], + \ ['use_cache', 1], + \ ['wrap', 0], \ ] for [opt, val] in options call s:init_var(opt, val) + unlet val endfor endfunction call s:setup_options() @@ -88,7 +138,7 @@ call s:setup_options() if !exists('g:tagbar_iconchars') if has('multi_byte') && has('unix') && &encoding ==# 'utf-8' && \ (!exists('+termencoding') || empty(&termencoding) || &termencoding ==# 'utf-8') - let g:tagbar_iconchars = ['▶', '▼'] + let g:tagbar_iconchars = ['▸', '▾'] else let g:tagbar_iconchars = ['+', '-'] endif @@ -136,18 +186,23 @@ augroup TagbarSession augroup END " Commands {{{1 -command! -nargs=0 Tagbar call tagbar#ToggleWindow() -command! -nargs=0 TagbarToggle call tagbar#ToggleWindow() +command! -nargs=? Tagbar call tagbar#ToggleWindow() +command! -nargs=? TagbarToggle call tagbar#ToggleWindow() command! -nargs=? TagbarOpen call tagbar#OpenWindow() command! -nargs=0 TagbarOpenAutoClose call tagbar#OpenWindow('fcj') command! -nargs=0 TagbarClose call tagbar#CloseWindow() command! -nargs=1 -bang TagbarSetFoldlevel call tagbar#SetFoldLevel(, 0) command! -nargs=0 TagbarShowTag call tagbar#highlighttag(1, 1) -command! -nargs=? TagbarCurrentTag echo tagbar#currenttag('%s', 'No current tag', ) +command! -nargs=* TagbarCurrentTag echo tagbar#currenttag('%s', 'No current tag', ) command! -nargs=1 TagbarGetTypeConfig call tagbar#gettypeconfig() command! -nargs=? TagbarDebug call tagbar#debug#start_debug() command! -nargs=0 TagbarDebugEnd call tagbar#debug#stop_debug() command! -nargs=0 TagbarTogglePause call tagbar#toggle_pause() +command! -nargs=0 TagbarForceUpdate call tagbar#ForceUpdate() +command! -nargs=0 TagbarJump call tagbar#jump() +command! -nargs=0 TagbarJumpPrev call tagbar#jumpToNearbyTag(-1) +command! -nargs=0 TagbarJumpNext call tagbar#jumpToNearbyTag(1) + " Modeline {{{1 " vim: ts=8 sw=4 sts=4 et foldenable foldmethod=marker foldcolumn=1 diff --git a/.vim/pack/plugins/start/vim-tagbar/syntax/tagbar.vim b/.vim/pack/plugins/start/vim-tagbar/syntax/tagbar.vim index d671def..1d47938 100644 --- a/.vim/pack/plugins/start/vim-tagbar/syntax/tagbar.vim +++ b/.vim/pack/plugins/start/vim-tagbar/syntax/tagbar.vim @@ -2,8 +2,8 @@ " Description: Tagbar syntax settings " Author: Jan Larres " Licence: Vim licence -" Website: http://majutsushi.github.com/tagbar/ -" Version: 2.7 +" Website: https://preservim.github.io/tagbar +" Version: 3.1.1 scriptencoding utf-8 @@ -36,8 +36,9 @@ syntax match TagbarHelpKey '" \zs.*\ze:' contained syntax match TagbarHelpTitle '" \zs-\+ \w\+ -\+' contained syntax match TagbarNestedKind '^\s\+\[[^]]\+\]$' -syntax match TagbarType ' : \zs.*' -syntax match TagbarSignature '(.*)' +syntax match TagbarType ' : \zs.*' contains=TagbarTagLineN +syntax match TagbarTagLineN '\s\+\[[0-9]\+\]\(\s\+\|$\)' +syntax match TagbarSignature '\(\') - let s:buf[s:nr].cWORD = expand('') - let s:buf[s:nr].cfile = expand('') + silent let s:buf[s:nr].cword = expand('') + silent let s:buf[s:nr].cWORD = expand('') + silent let s:buf[s:nr].cfile = expand('') let s:buf[s:nr].cur_init_pos = [line('.'), col('.')] let s:buf[s:nr].seq_last = undotree().seq_last let s:buf[s:nr].empty_undotree = empty(undotree().entries) diff --git a/.vim/pack/plugins/start/vim-undoquit b/.vim/pack/plugins/start/vim-undoquit new file mode 160000 index 0000000..96935ca --- /dev/null +++ b/.vim/pack/plugins/start/vim-undoquit @@ -0,0 +1 @@ +Subproject commit 96935cae0c04ab9c7384afe1d2537ce883672e8c diff --git a/.vim/pack/plugins/start/vim-undotree/.gitignore b/.vim/pack/plugins/start/vim-undotree/.gitignore new file mode 100644 index 0000000..926ccaa --- /dev/null +++ b/.vim/pack/plugins/start/vim-undotree/.gitignore @@ -0,0 +1 @@ +doc/tags diff --git a/.vim/pack/plugins/start/vim-undotree/LICENSE b/.vim/pack/plugins/start/vim-undotree/LICENSE index cc3ed7b..8f331fa 100644 --- a/.vim/pack/plugins/start/vim-undotree/LICENSE +++ b/.vim/pack/plugins/start/vim-undotree/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2024, the VIM undotree plug-in authors +Copyright (c) 2025, the VIM undotree plug-in authors Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/.vim/pack/plugins/start/vim-undotree/autoload/undotree.vim b/.vim/pack/plugins/start/vim-undotree/autoload/undotree.vim index 4a2cb92..f1b793c 100644 --- a/.vim/pack/plugins/start/vim-undotree/autoload/undotree.vim +++ b/.vim/pack/plugins/start/vim-undotree/autoload/undotree.vim @@ -58,6 +58,7 @@ let s:helpmore = ['" ===== Marks ===== ', \'" >num< : The current state', \'" {num} : The next redo state', \'" [num] : The latest state', + \'" =num= : The diff mark', \'" s : Saved states', \'" S : The last saved state', \'" ===== Hotkeys ====='] @@ -85,6 +86,8 @@ let s:keymap += [['FocusTarget','','Set Focus back to the editor']] let s:keymap += [['ClearHistory','C','Clear undo history (with confirmation)']] let s:keymap += [['TimestampToggle','T','Toggle relative timestamp']] let s:keymap += [['DiffToggle','D','Toggle the diff panel']] +let s:keymap += [['DiffMark','=','Set the diff marker']] +let s:keymap += [['ClearDiffMark','M','Clear the diff marker']] let s:keymap += [['NextState','K','Move to the next undo state']] let s:keymap += [['PreviousState','J','Move to the previous undo state']] let s:keymap += [['NextSavedState','>','Move to the next saved state']] @@ -96,16 +99,16 @@ let s:keymap += [['Enter','','Move to the current state']] " 'Diff' sign definitions. There are two 'delete' signs; a 'normal' one and one " that is used if the very end of the buffer has been deleted (in which case the -" deleted text is actually bejond the end of the current buffer version and therefore +" deleted text is actually beyond the end of the current buffer version and therefore " it is not possible to place a sign on the exact line - because it doesn't exist. " Instead, a 'special' delete sign is placed on the (existing) last line of the " buffer) -exe 'sign define UndotreeAdd text=++ texthl='.undotree_HighlightSyntaxAdd -exe 'sign define UndotreeChg text=~~ texthl='.undotree_HighlightSyntaxChange -exe 'sign define UndotreeDel text=-- texthl='.undotree_HighlightSyntaxDel -exe 'sign define UndotreeDelEnd text=-v texthl='.undotree_HighlightSyntaxDel +exe 'sign define UndotreeAdd text='.undotree_SignAdded.' texthl='.undotree_HighlightSyntaxAdd +exe 'sign define UndotreeChg text='.undotree_SignChanged.' texthl='.undotree_HighlightSyntaxChange +exe 'sign define UndotreeDel text='.undotree_SignDeleted.' texthl='.undotree_HighlightSyntaxDel +exe 'sign define UndotreeDelEnd text='.undotree_SignDeletedEnd.' texthl='.undotree_HighlightSyntaxDel -" Id to use for all signs. This is an arbirary number that is hoped to be unique +" Id to use for all signs. This is an arbitrary number that is hoped to be unique " within the instance of vim. There is no way of guaranteeing it IS unique, which " is a shame because it needs to be! " @@ -301,6 +304,7 @@ function! s:undotree.Init() abort " Increase to make it unique. let self.width = g:undotree_SplitWidth let self.opendiff = g:undotree_DiffAutoOpen + let self.diffmark = -1 " Marker for the diff view let self.targetid = -1 let self.targetBufnr = -1 let self.rawtree = {} "data passed from undotree() @@ -389,7 +393,7 @@ endfunction function! s:undotree.ActionHelp() abort let self.showHelp = !self.showHelp call self.Draw() - call self.MarkSeqs() + call self.MarkSeqs(1) endfunction function! s:undotree.ActionFocusTarget() abort @@ -436,6 +440,32 @@ function! s:undotree.ActionNextSavedState() abort call self.ActionInTarget('later 1f') endfunction +function! s:undotree.ActionDiffMark() abort + let index = self.Screen2Index(line('.')) + if index < 0 + return + endif + let seq = self.asciimeta[index].seq + if seq == -1 + return + endif + if seq == self.diffmark + let self.diffmark = -1 + else + let self.diffmark = seq + endif + call self.UpdateDiff() + call self.Draw() + call self.MarkSeqs(0) +endfunction + +function! s:undotree.ActionClearDiffMark() abort + let self.diffmark = -1 + call self.UpdateDiff() + call self.Draw() + call self.MarkSeqs(1) +endfunction + function! s:undotree.ActionDiffToggle() abort let self.opendiff = !self.opendiff call t:diffpanel.Toggle() @@ -480,7 +510,7 @@ function! s:undotree.UpdateDiff() abort if !t:diffpanel.IsVisible() return endif - call t:diffpanel.Update(self.seq_cur,self.targetBufnr,self.targetid) + call t:diffpanel.Update(self.seq_cur,self.targetBufnr,self.targetid,self.diffmark) endfunction " May fail due to target window closed. @@ -488,7 +518,7 @@ function! s:undotree.SetTargetFocus() abort for winnr in range(1, winnr('$')) "winnr starts from 1 if getwinvar(winnr,'undotree_id') == self.targetid if winnr() != winnr - call s:exec("norm! ".winnr."\\") + call s:exec_silent("norm! ".winnr."\\") return 1 endif endif @@ -577,9 +607,13 @@ function! s:undotree.Show() abort setlocal nocursorline endif setlocal nomodifiable - setlocal statusline=%!t:undotree.GetStatusLine() + if g:undotree_StatusLine + setlocal statusline=%!t:undotree.GetStatusLine() + endif setfiletype undotree + " Make :q call ActionClose + cabbrev q :call t:undotree.ActionClose() call self.BindKey() call self.BindAu() @@ -607,12 +641,17 @@ function! s:undotree.Update() abort if exists('b:isUndotreeBuffer') return endif + " let the user disable undotree for chosen buftypes + if index(g:undotree_DisabledBuftypes, &buftype) != -1 + call s:log("undotree.Update() disabled buftype") + return + endif + " let the user disable undotree for chosen filetypes + if index(g:undotree_DisabledFiletypes, &filetype) != -1 + call s:log("undotree.Update() disabled filetype") + return + endif if (&bt != '' && &bt != 'acwrite') || (&modifiable == 0) || (mode() != 'n') - if &bt == 'quickfix' || &bt == 'nofile' - "Do nothing for quickfix and q: - call s:log("undotree.Update() ignore quickfix") - return - endif if self.targetBufnr == bufnr('%') && self.targetid == w:undotree_id call s:log("undotree.Update() invalid buffer NOupdate") return @@ -641,7 +680,7 @@ function! s:undotree.Update() abort return endif call self.SetFocus() - call self.MarkSeqs() + call self.MarkSeqs(1) call self.UpdateDiff() return endif @@ -664,7 +703,7 @@ function! s:undotree.Update() abort call self.Render() call self.SetFocus() call self.Draw() - call self.MarkSeqs() + call self.MarkSeqs(1) call self.UpdateDiff() endfunction @@ -739,7 +778,7 @@ function! s:undotree.Draw() abort setlocal nomodifiable endfunction -function! s:undotree.MarkSeqs() abort +function! s:undotree.MarkSeqs(move_cursor) abort call s:log("bak(cur,curhead,newhead): ". \self.seq_cur_bak.' '. \self.seq_curhead_bak.' '. @@ -780,8 +819,10 @@ function! s:undotree.MarkSeqs() abort let lineNr = self.Index2Screen(index) call setline(lineNr,substitute(getline(lineNr), \'\zs \(\d\+\) \ze [sS ] ','>\1<','')) - " move cursor to that line. - call s:exec("normal! " . lineNr . "G") + if a:move_cursor + " move cursor to that line. + call s:exec("normal! " . lineNr . "G") + endif endif if self.seq_curhead != -1 let index = self.seq2index[self.seq_curhead] @@ -795,6 +836,13 @@ function! s:undotree.MarkSeqs() abort call setline(lineNr,substitute(getline(lineNr), \'\zs \(\d\+\) \ze [sS ] ','[\1]','')) endif + " mark diff marker + if self.diffmark != -1 + let index = self.seq2index[self.diffmark] + let lineNr = self.Index2Screen(index) + call setline(lineNr, substitute(getline(lineNr), + \ '\zs \(\d\+\) \ze [sS ]', '=\1=', '')) + endif setlocal nomodifiable endfunction @@ -935,7 +983,7 @@ function! s:undotree.Render() abort endif endfor - " Then, find the element with minimun seq. + " Then, find the element with minimum seq. let minseq = 99999999 let minnode = {} if foundx == 0 @@ -1056,8 +1104,8 @@ endfunction "diff panel let s:diffpanel = s:new(s:panel) -function! s:diffpanel.Update(seq,targetBufnr,targetid) abort - call s:log('diffpanel.Update(),seq:'.a:seq.' bufname:'.bufname(a:targetBufnr)) +function! s:diffpanel.Update(seq,targetBufnr,targetid,diffmark) abort + call s:log('diffpanel.Update(),seq:'.a:seq.' bufname:'.bufname(a:targetBufnr).' diffmark:'.a:diffmark) if !self.diffexecutable return endif @@ -1068,9 +1116,9 @@ function! s:diffpanel.Update(seq,targetBufnr,targetid) abort if a:seq == 0 let diffresult = [] else - if has_key(self.cache,a:targetBufnr.'_'.a:seq) + if has_key(self.cache,a:targetBufnr.'_'.a:seq.'_'.a:diffmark) call s:log("diff cache hit.") - let diffresult = self.cache[a:targetBufnr.'_'.a:seq] + let diffresult = self.cache[a:targetBufnr.'_'.a:seq.'_'.a:diffmark] else " Double check the target winnr and bufnr let targetWinnr = -1 @@ -1092,10 +1140,29 @@ function! s:diffpanel.Update(seq,targetBufnr,targetid) abort " remember and restore cursor and window position. let savedview = winsaveview() - let new = getbufline(a:targetBufnr,'^','$') - silent undo - let old = getbufline(a:targetBufnr,'^','$') - silent redo + let new = [] + let old = [] + let diff_dist = 1 + + if a:diffmark != -1 + let diff_dist = a:seq - a:diffmark + if diff_dist > 0 + let new = getbufline(a:targetBufnr,'^','$') + execute 'silent earlier ' . diff_dist + let old = getbufline(a:targetBufnr,'^','$') + execute 'silent later ' . diff_dist + else + let old = getbufline(a:targetBufnr,'^','$') + execute 'silent later ' . (-diff_dist) + let new = getbufline(a:targetBufnr,'^','$') + execute 'silent earlier ' . (-diff_dist) + endif + else + let new = getbufline(a:targetBufnr,'^','$') + silent undo + let old = getbufline(a:targetBufnr,'^','$') + silent redo + endif call winrestview(savedview) @@ -1118,7 +1185,7 @@ function! s:diffpanel.Update(seq,targetBufnr,targetid) abort endif let &eventignore = ei_bak "Update cache - let self.cache[a:targetBufnr.'_'.a:seq] = diffresult + let self.cache[a:targetBufnr.'_'.a:seq.'_'.a:diffmark] = diffresult endif endif @@ -1130,7 +1197,15 @@ function! s:diffpanel.Update(seq,targetBufnr,targetid) abort call s:exec('1,$ d _') call append(0,diffresult) - call append(0,'- seq: '.a:seq.' -') + if a:diffmark == -1 || a:seq == a:diffmark + call append(0,'+ seq: '.a:seq.' +') + elseif a:seq > a:diffmark + call append(0,'+ seq: '.a:seq.' +') + call append(0,'- seq: '.a:diffmark.' -') + else + call append(0,'+ seq: '.a:diffmark.' +') + call append(0,'- seq: '.a:seq.' -') + endif "remove the last empty line if getline("$") == "" @@ -1293,7 +1368,9 @@ function! s:diffpanel.Show() abort setlocal norelativenumber setlocal nocursorline setlocal nomodifiable - setlocal statusline=%!t:diffpanel.GetStatusLine() + if g:undotree_StatusLine + setlocal statusline=%!t:diffpanel.GetStatusLine() + endif let &eventignore = ei_bak diff --git a/.vim/pack/plugins/start/vim-undotree/doc/undotree.txt b/.vim/pack/plugins/start/vim-undotree/doc/undotree.txt index d1fc48f..3e7304e 100644 --- a/.vim/pack/plugins/start/vim-undotree/doc/undotree.txt +++ b/.vim/pack/plugins/start/vim-undotree/doc/undotree.txt @@ -27,10 +27,17 @@ CONTENTS *undotree-contents* 3.11 undotree_HighlightChangedText .. |undotree_HighlightChangedText| 3.12 undotree_HighlightSyntaxAdd .... |undotree_HighlightSyntaxAdd| undotree_HighlightSyntaxChange . |undotree_HighlightSyntaxChange| - 3.13 Undotree_CustomMap ............. |Undotree_CustomMap| - 3.14 undotree_HelpLine .............. |undotree_HelpLine| - 3.15 undotree_CursorLine ............ |undotree_CursorLine| - 3.16 undotree_UndoDir................ |undotree_UndoDir| + 3.13 undotree_SignAdded ............. |undotree_SignAdded| + undotree_SignModified .......... |undotree_SignModified| + undotree_SignDeleted ........... |undotree_SignDeleted| + undotree_SignDeletedEnd ........ |undotree_SignDeletedEnd| + 3.14 Undotree_CustomMap ............. |Undotree_CustomMap| + 3.15 undotree_HelpLine .............. |undotree_HelpLine| + 3.16 undotree_CursorLine ............ |undotree_CursorLine| + 3.17 undotree_StatusLine ............ |undotree_StatusLine| + 3.18 undotree_DisabledFiletypes...... |undotree_DisabledFiletypes| + 3.19 undotree_DisabledBuftypes....... |undotree_DisabledBuftypes| + 3.20 undotree_UndoDir................ |undotree_UndoDir| 4. Bugs ................................. |undotree-bugs| 5. Changelog ............................ |undotree-changelog| 6. License .............................. |undotree-license| @@ -111,6 +118,9 @@ Markers * Saved changes are marked as s and the big S indicates the most recent saved change. + * The = number = marks user chosen change. When this mark is set the + diff panel displays diff between current seq and marked seq. + * Press ? in undotree window for quick help. Persistent undo @@ -394,7 +404,24 @@ You may chose your favorite through ":hi" command. Default: "DiffAdd", "DiffDelete" and "DiffChange" ------------------------------------------------------------------------------ -3.13 g:Undotree_CustomMap *Undotree_CustomMap* +3.13 g:undotree_SignAdded *undotree_SignAdded* + g:undotree_SignModified *undotree_SignModified* + g:undotree_SignDeleted *undotree_SignDeleted* + g:undotree_SignDeletedEnd *undotree_SignDeletedEnd* + +Set the signs to display in the gutter where the file has been changed. + +SignDeletedEnd is used when the last line of the buffer has been deleted; +it is not possible to display SignDeleted since the deleted text is actually +beyond the end of the current buffer version and therefore it is not possible +to place a sign on the exact line - because it doesn't exist. +Instead, a special delete sign is placed on the (existing) last line of the +buffer + +Default: "++", "~~", "--" and "-v" + +------------------------------------------------------------------------------ +3.14 g:Undotree_CustomMap *Undotree_CustomMap* There are two ways of changing the default key mappings: The first way is to define global mappings as the following example: @@ -426,24 +453,49 @@ List of the commands available for redefinition. UndotreeRedo UndotreeUndo UndotreeEnter + UndotreeDiffMark + UndotreeClearDiffMark < ------------------------------------------------------------------------------ -3.14 g:undotree_HelpLine *undotree_HelpLine* +3.15 g:undotree_HelpLine *undotree_HelpLine* Set to 0 to hide "Press ? for help". Default: 1 ------------------------------------------------------------------------------ -3.15 g:undotree_CursorLine +3.16 g:undotree_CursorLine *undotree_CursorLine* Set to 0 to disable cursorline. Default: 1 ------------------------------------------------------------------------------ -3.16 g:undotree_UndoDir *undotree_UndoDir* +3.17 g:undotree_StatusLine + +By default, Undotree will override your statusline option while in the +Undotree buffer. +Set to 0 to disable this. + +Default: 1 + +------------------------------------------------------------------------------ +3.18 g:undotree_DisabledFiletypes *undotree_DisabledFiletypes* + +List of filetypes that Undotree will ignore. + +Default: empty + +------------------------------------------------------------------------------ +3.19 g:undotree_DisabledBuftypes *undotree_DisabledBuftypes* + +List of filetypes that Undotree will ignore. + +Default: ['terminal', 'prompt', 'quickfix'] + +------------------------------------------------------------------------------ +3.20 g:undotree_UndoDir *undotree_UndoDir* Set the path for the persistence undo directory. Due to the differing formats of the persistence undo files between nvim and vim, the default undodir for diff --git a/.vim/pack/plugins/start/vim-undotree/plugin/undotree.vim b/.vim/pack/plugins/start/vim-undotree/plugin/undotree.vim index 4f4b4b9..d294829 100644 --- a/.vim/pack/plugins/start/vim-undotree/plugin/undotree.vim +++ b/.vim/pack/plugins/start/vim-undotree/plugin/undotree.vim @@ -160,6 +160,20 @@ if !exists('g:undotree_HighlightSyntaxDel') let g:undotree_HighlightSyntaxDel = "DiffDelete" endif +" Signs to display in the gutter where the file has been modified +if !exists('g:undotree_SignAdded') + let g:undotree_SignAdded = "++" +endif +if !exists('g:undotree_SignChanged') + let g:undotree_SignChanged = "~~" +endif +if !exists('g:undotree_SignDeleted') + let g:undotree_SignDeleted = "--" +endif +if !exists('g:undotree_SignDeletedEnd') + let g:undotree_SignDeletedEnd = "-v" +endif + " Deprecates the old style configuration. if exists('g:undotree_SplitLocation') echo "g:undotree_SplitLocation is deprecated, @@ -176,6 +190,21 @@ if !exists('g:undotree_CursorLine') let g:undotree_CursorLine = 1 endif +" Set statusline +if !exists('g:undotree_StatusLine') + let g:undotree_StatusLine = 1 +endif + +" Ignored filetypes +if !exists('g:undotree_DisabledFiletypes') + let g:undotree_DisabledFiletypes = [] +endif + +" Ignored buftypes +if !exists('g:undotree_DisabledBuftypes') + let g:undotree_DisabledBuftypes = ['terminal', 'prompt', 'quickfix', 'nofile'] +endif + " Define the default persistence undo directory if not defined in vim/nvim " startup script. if !exists('g:undotree_UndoDir') diff --git a/.vim/vimrc b/.vim/vimrc index a6c9fc5..a8dc535 100644 --- a/.vim/vimrc +++ b/.vim/vimrc @@ -69,7 +69,7 @@ set fillchars=vert:\│ set fillchars+=foldsep:\│,fold:\— set fillchars+=foldclose:\🗁 set fillchars+=foldopen:\🗁 -set foldlevel=2 +set foldlevel=10 set wildmode=full