diff --git a/.gitattributes b/.gitattributes index bad1d9edb2..46ac5f9cc6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,13 @@ -src/testdir/test42.in diff +# The old test .ok files are expected to use LF line endings, even on Windows. +# In src/testdir/Make_mvc.mak and src/testdir/Make_ming.mak, the test result +# files .out are converted to LF line endings before being compared. +# Therefore, if the .ok files' line endings are not specified and are +# converted to CRLF, the comparison between .ok and .out will fail. +src/testdir/test*.ok text eol=lf + +# This ok file contains literal CR LF endings. Should not be touched by git, +# so handle as binary +src/testdir/test21.ok -text # `vim.pot` is updated every time any of the *.c files are modified. And as it # contains line numbers for strings from *.c files, inserting a line into a @@ -24,7 +33,7 @@ src/po/vim.pot -diff src/po/vim.pot diff=ignore_vim_pot # GitHub reacts to the `linguist-generated` attribute, by ignoring marked files -# for the repository's language statistics and hiddning changes in these files +# for the repository's language statistics and hiding changes in these files # by default in diffs. # # https://docs.github.com/en/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index d904e1c95a..f21bc31b0c 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -13,6 +13,7 @@ nsis/lang/russian.nsi @RestorerZ runtime/autoload/freebasic.vim @dkearns runtime/autoload/hare.vim @selenebun runtime/autoload/hcl.vim @gpanders +runtime/autoload/javascriptcomplete.vim @jsit runtime/autoload/modula2.vim @dkearns runtime/autoload/rubycomplete.vim @segfault @dkearns runtime/autoload/rust.vim @lilyball @@ -44,6 +45,7 @@ runtime/colors/torte.vim @habamax @romainl @neutaaaaan runtime/colors/wildcharm.vim @habamax @romainl @neutaaaaan runtime/colors/zaibatsu.vim @habamax @romainl @neutaaaaan runtime/colors/zellner.vim @habamax @romainl @neutaaaaan +runtime/compiler/biome.vim @Konfekt runtime/compiler/checkstyle.vim @dkearns runtime/compiler/cm3.vim @dkearns runtime/compiler/cucumber.vim @tpope @@ -125,9 +127,12 @@ runtime/ftplugin/asy.vim @avidseeker runtime/ftplugin/autohotkey.vim @telemachus runtime/ftplugin/awk.vim @dkearns runtime/ftplugin/basic.vim @dkearns +runtime/ftplugin/bicep.vim @scottmckendry +runtime/ftplugin/bicep-params.vim @scottmckendry runtime/ftplugin/brighterscript.vim @ribru17 runtime/ftplugin/brightscript.vim @ribru17 runtime/ftplugin/bst.vim @tpope +runtime/ftplugin/bpftrace.vim @sgruszka runtime/ftplugin/c3.vim @ttytm runtime/ftplugin/cabal.vim @ribru17 runtime/ftplugin/cedar.vim @ribru17 @@ -219,11 +224,14 @@ runtime/ftplugin/kivy.vim @ribru17 runtime/ftplugin/kotlin.vim @udalov runtime/ftplugin/lc.vim @ribru17 runtime/ftplugin/ldapconf.vim @ribru17 +runtime/ftplugin/leex.vim @jparise runtime/ftplugin/leo.vim @ribru17 runtime/ftplugin/less.vim @genoma runtime/ftplugin/lex.vim @ribru17 runtime/ftplugin/lf.vim @andis-sprinkis runtime/ftplugin/liquid.vim @tpope +runtime/ftplugin/logtalk.dict @pmoura +runtime/ftplugin/logtalk.vim @pmoura runtime/ftplugin/lua.vim @dkearns runtime/ftplugin/lynx.vim @dkearns runtime/ftplugin/m17ndb.vim @dseomn @@ -286,6 +294,7 @@ runtime/ftplugin/sed.vim @dkearns runtime/ftplugin/sh.vim @dkearns runtime/ftplugin/shaderslang.vim @mTvare6 runtime/ftplugin/slint.vim @ribru17 +runtime/ftplugin/sml.vim @tocariimaa runtime/ftplugin/snakemake.vim @ribru17 runtime/ftplugin/solidity.vim @coti-z runtime/ftplugin/solution.vim @dkearns @@ -331,6 +340,7 @@ runtime/import/dist/vimhighlight.vim @lacygoill runtime/indent/arduino.vim @k-takata runtime/indent/astro.vim @wuelnerdotexe runtime/indent/basic.vim @dkearns +runtime/indent/bpftrace.vim @sgruszka runtime/indent/bst.vim @tpope runtime/indent/cdl.vim @dkearns runtime/indent/chatito.vim @ObserverOfTime @@ -374,8 +384,10 @@ runtime/indent/kdl.vim @imsnif @jiangyinzuo runtime/indent/kotlin.vim @udalov runtime/indent/krl.vim @KnoP-01 runtime/indent/ld.vim @dkearns +runtime/indent/lf.vim @andis-sprinkis runtime/indent/less.vim @genoma runtime/indent/liquid.vim @tpope +runtime/indent/logtalk.vim @pmoura runtime/indent/lua.vim @marcuscf runtime/indent/m17ndb.vim @dseomn runtime/indent/make.vim @dkearns @@ -448,6 +460,7 @@ runtime/syntax/asy.vim @avidseeker runtime/syntax/autohotkey.vim @mmikeww runtime/syntax/awk.vim @dkearns runtime/syntax/basic.vim @dkearns +runtime/syntax/bpftrace.vim @sgruszka runtime/syntax/bst.vim @tpope runtime/syntax/bzl.vim @dbarnett runtime/syntax/bzr.vim @hdima @@ -462,6 +475,7 @@ runtime/syntax/chuck.vim @andreacfromtheapp runtime/syntax/clojure.vim @axvr runtime/syntax/codeowners.vim @jparise runtime/syntax/cs.vim @nickspoons +runtime/syntax/css.vim @jsit runtime/syntax/csv.vim @habamax runtime/syntax/cucumber.vim @tpope runtime/syntax/d.vim @JesseKPhillips @@ -546,10 +560,12 @@ runtime/syntax/kivy.vim @prophittcorey runtime/syntax/kotlin.vim @udalov runtime/syntax/kdl.vim @imsnif @jiangyinzuo runtime/syntax/krl.vim @KnoP-01 +runtime/syntax/leex.vim @jparise runtime/syntax/less.vim @genoma runtime/syntax/lf.vim @andis-sprinkis runtime/syntax/liquid.vim @tpope runtime/syntax/log.vim @mao-yining +runtime/syntax/logtalk.vim @pmoura runtime/syntax/lua.vim @marcuscf runtime/syntax/lynx.vim @dkearns runtime/syntax/lyrics.vim @ObserverOfTime diff --git a/.github/actions/test_artifacts/action.yml b/.github/actions/test_artifacts/action.yml index e68fec961b..0afcd6d779 100644 --- a/.github/actions/test_artifacts/action.yml +++ b/.github/actions/test_artifacts/action.yml @@ -1,31 +1,41 @@ name: 'test_artifacts' description: "Upload failed test artifacts" +inputs: + artifact-name: + description: Name of the artifact + required: true + runs: using: "composite" steps: - - name: Collect matrix properties for naming - uses: actions/github-script@v8 - id: matrix-props - env: - MATRIX_PROPS: ${{ toJSON(matrix) }} - with: - # An array-flattening-to-string JavaScript function. - script: | - const f = function (x) { return x.toString().length > 0; } - const g = function (x) { - return (Array.isArray(x)) - ? x.filter(f) - .map((function (h) { return function (y) { return h(y); }; })(g)) - .join('-') - : x; - } - return Object.values(JSON.parse(process.env.MATRIX_PROPS)) - .filter(f) - .map(g) - .join('-'); - # By default, the JSON-encoded return value of the function is - # set as the "result". - result-encoding: string +# MacVim: We don't use a matrix within the reused +# workflow, and so would prefer to manually pass +# in the name of the artifact rather than deriving +# it from the matrix automatically like in Vim +# upstream. +# - name: Collect matrix properties for naming +# uses: actions/github-script@v8 +# id: matrix-props +# env: +# MATRIX_PROPS: ${{ toJSON(inputs) }} +# with: +# # An array-flattening-to-string JavaScript function. +# script: | +# const f = function (x) { return x.toString().length > 0; } +# const g = function (x) { +# return (Array.isArray(x)) +# ? x.filter(f) +# .map((function (h) { return function (y) { return h(y); }; })(g)) +# .join('-') +# : x; +# } +# return Object.values(JSON.parse(process.env.MATRIX_PROPS)) +# .filter(f) +# .map(g) +# .join('-'); +# # By default, the JSON-encoded return value of the function is +# # set as the "result". +# result-encoding: string - name: Upload failed tests uses: actions/upload-artifact@v4 with: @@ -35,7 +45,7 @@ runs: github.run_attempt, github.job, strategy.job-index, - steps.matrix-props.outputs.result) }} + inputs.artifact-name) }} # A file, directory or wildcard pattern that describes what # to upload. diff --git a/.github/actions/test_macvim_artifacts/action.yml b/.github/actions/test_macvim_artifacts/action.yml index e02eec625e..a0ec557045 100644 --- a/.github/actions/test_macvim_artifacts/action.yml +++ b/.github/actions/test_macvim_artifacts/action.yml @@ -1,6 +1,14 @@ # This is a clone of test_artifacts for MacVim-specific files +# This should be almost identical to test_artifacts, other than the artifact +# name/path. In the future we could potentially combine the two, but for now +# it's simpler to keep them separate to ease upstream merging. name: 'test_macvim_artifacts' description: "Upload failed MacVim test artifacts" +inputs: + artifact-name: + description: Name of the artifact + required: true + runs: using: "composite" steps: @@ -8,7 +16,12 @@ runs: uses: actions/upload-artifact@v4 with: # Name of the artifact to upload. - name: ${{ github.workflow }}-${{ github.job }}-${{ join(matrix.*, '-') }}-failed-macvim-tests + name: ${{ format('GH-{0}-{1}-{2}-{3}-{4}-failed-macvim-tests', + github.run_id, + github.run_attempt, + github.job, + strategy.job-index, + inputs.artifact-name) }} # A file, directory or wildcard pattern that describes what # to upload. diff --git a/.github/actions/universal-package/action.yml b/.github/actions/universal-package/action.yml index 6d5f0a9e5a..0ea6df8532 100644 --- a/.github/actions/universal-package/action.yml +++ b/.github/actions/universal-package/action.yml @@ -7,15 +7,19 @@ description: Create universal Homebrew package which contains x86_64 and arm64 # that has both x86_64 and arm64 arch, as Homebrew's distributed bottles are thin binaries with only one arch. # # We still use Homebrew to manage the library because their formulas are up to date and have correct build instructions -# that will work. This way we don't have to manually configuring and building and updating the package info. +# that will work. This way we don't have to manually configure, build, and update the package info. inputs: formula: - description: Formura name + description: Formula name required: true contents: description: Path for contents in package's keg required: true + gnuiconv: + description: Use the Homebrew GNU libiconv instead of system one + type: boolean + required: false runs: using: 'composite' steps: @@ -31,14 +35,24 @@ runs: # version and stomp what we have here. brew update + brew cat ${formula} >${formula}.rb + + if [[ "${{ inputs.gnuiconv }}" == "true" ]]; then + # Modify formula to build using Homebrew libiconv. Usually just adding "depends_on" is enough, but since we + # override "CC" to use vanilla system clang, we need to manually inject the compilation/link flags to specify + # the locations. + sed -i.bak '/^[[:blank:]]*def install$/i\'$'\n depends_on "libiconv"\n' ${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["CFLAGS"] += " -I'$(brew --prefix)$'/opt/libiconv/include"\n' ${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["LDFLAGS"] += " -L'$(brew --prefix)$'/opt/libiconv/lib"\n' ${formula}.rb + fi + # Patch the official Homebrew formula to explicitly build for min deployment target and a universal binary. We # also need to explicitly use system Clang because Homebrew's bundled clang script tries to inject -march # compiler flags that will cause universal builds to fail as Clang does not like that. - brew cat ${formula} | \ - sed '/^[[:blank:]]*def install$/a\'$'\n ENV["MACOSX_DEPLOYMENT_TARGET"] = "'${MACOSX_DEPLOYMENT_TARGET}$'"\n' | \ - sed '/^[[:blank:]]*def install$/a\'$'\n ENV["CC"] = "/usr/bin/clang"\n' | \ - sed '/^[[:blank:]]*def install$/a\'$'\n ENV["CFLAGS"] = "-arch x86_64 -arch arm64"\n' | \ - sed '/^[[:blank:]]*def install$/a\'$'\n ENV["LDFLAGS"] = "-arch x86_64 -arch arm64"\n' >${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["MACOSX_DEPLOYMENT_TARGET"] = "'${MACOSX_DEPLOYMENT_TARGET}$'"\n' ${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["CC"] = "/usr/bin/clang"\n' ${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["CFLAGS"] = "-arch x86_64 -arch arm64"\n' ${formula}.rb + sed -i.bak '/^[[:blank:]]*def install$/a\'$'\n ENV["LDFLAGS"] = "-arch x86_64 -arch arm64"\n' ${formula}.rb # Homebrew requires formula files to be placed in taps and disallows # installing from raw paths, so we manually create a taps folder for a @@ -85,7 +99,9 @@ runs: brew list ${formula} &>/dev/null || brew install --quiet --formula -s macvim-dev/deps/${formula} # If formula was cached, this step is necessary to relink it to brew prefix (e.g. /usr/local) - brew unlink ${formula} && brew link ${formula} + # The "-f" is there to force link keg-only formulas. Homebrew doesn't provide a command to just link in the + # optional /opt/homebrew/opt/... folders, so we have to resort to doing this. + brew unlink ${formula} && brew link -f ${formula} echo '::endgroup::' echo '::group::Verify built version' diff --git a/.github/labeler.yml b/.github/labeler.yml index 5b884c89e0..720765d383 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -128,9 +128,12 @@ runtime: - all: - changed-files: - any-glob-to-any-file: - - 'runtime/ftplugin' - - 'runtime/syntax' - - 'runtime/indent' + - 'runtime/autoload/**/*.vim' + - 'runtime/colors/**/*.vim' + - 'runtime/compiler/**/*.vim' + - 'runtime/ftplugin/**/*.vim' + - 'runtime/indent/**/*.vim' + - 'runtime/syntax/**/*.vim' - 'runtime/pack/dist/opt/termdebug/plugin/termdebug.vim' termdebug: diff --git a/.github/workflows/ci-macvim.yaml b/.github/workflows/ci-macvim.yaml index 7bd4fedcc8..2aa9b0c337 100644 --- a/.github/workflows/ci-macvim.yaml +++ b/.github/workflows/ci-macvim.yaml @@ -29,20 +29,14 @@ jobs: skip: ${{ ! startswith(github.ref, 'refs/tags/release') }} legacy: true - - os: macos-13 - xcode: '15.2' - testgui: true - extra: [vimtags, check-xcodeproj-compat] - - # Below runners use Apple Silicon. - os: macos-14 xcode: '15.4' - testgui: false + testgui: true + extra: [vimtags, check-xcodeproj-compat] - # Most up to date OS and Xcode. Used to publish release for the main build. - os: macos-15 xcode: '16.4' - testgui: true + testgui: false publish: true optimized: true diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index ac9e71ae52..3364adf340 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: steps: - name: Checkout repository from github - uses: actions/checkout@v5 + uses: actions/checkout@v6 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index f74174636b..04859a9758 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Checkout repository from github if: env.TOKEN - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Download Coverity if: env.TOKEN diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml index 59ced56920..4eac572158 100644 --- a/.github/workflows/link-check.yml +++ b/.github/workflows/link-check.yml @@ -8,7 +8,7 @@ jobs: lychee: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Run Lychee uses: lycheeverse/lychee-action@v2 with: diff --git a/.github/workflows/macvim-buildtest.yaml b/.github/workflows/macvim-buildtest.yaml index 3cd5987636..5bee202306 100644 --- a/.github/workflows/macvim-buildtest.yaml +++ b/.github/workflows/macvim-buildtest.yaml @@ -64,7 +64,7 @@ jobs: runs-on: ${{ inputs.os }} steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Set up legacy build if: inputs.legacy @@ -89,6 +89,15 @@ jobs: xcode-select -p xcodebuild -version + # Set up, install, and cache GNU libiconv library to work around Apple iconv issues. + + - name: Set up libiconv + if: inputs.publish + uses: ./.github/actions/universal-package + with: + formula: libiconv + contents: opt/libiconv/lib/libiconv.a,opt/libiconv/lib/libiconv.dylib + # Set up, install, and cache gettext library for localization. - name: Set up gettext @@ -97,6 +106,7 @@ jobs: with: formula: gettext contents: lib/libintl.a,lib/libintl.dylib + gnuiconv: true # gettext needs to match MacVim in using the same version of iconv # Set up, install, and cache libsodium library for encryption. @@ -125,7 +135,7 @@ jobs: # Note: Legacy self-hosted runner already has this installed and doesn't need this. - name: Cache Python 2 if: inputs.publish && !inputs.legacy - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: python27-cache key: ${{ inputs.os }}-python27 @@ -222,6 +232,9 @@ jobs: sed -i.bak -f ci/config.mk.optimized.sed src/auto/config.mk fi + # Use Homebrew GNU libiconv since Apple iconv has been broken since macOS 14 + sed -i.bak -f ci/config.mk.brew-libiconv.sed src/auto/config.mk + - name: Modify configure result if: inputs.publish run: | @@ -271,6 +284,11 @@ jobs: echo 'Found external dynamic linkage!'; false fi + # Make sure we are not using system iconv, which has been buggy since macOS 14. + if otool -L ${VIM_BIN} | grep '^\s*/usr/lib/libiconv'; then + echo 'Using system iconv! We should be linking against GNU iconv instead.'; false + fi + # Make sure that --disable-sparkle flag will properly exclude all references to Sparkle symbols. This is # necessary because we still use weak linking to Sparkle when that flag is set and so references to Sparkle # wouldn't fail the build (we just remove Sparkle.framework from the built app after the fact). @@ -348,11 +366,17 @@ jobs: id: test_macvim timeout-minutes: 10 run: | + echo '::group::Build MacVim test binaries' + # Build test binaries in a separate step to allow grouping in the CI output to make the output more concise. + make ${MAKE_BUILD_ARGS} -C src macvim-tests-binaries + echo '::endgroup::' make ${MAKE_BUILD_ARGS} -C src macvim-tests - name: Upload failed MacVim test results if: ${{ !cancelled() && failure() && steps.test_macvim.conclusion == 'failure' }} uses: ./.github/actions/test_macvim_artifacts + with: + artifact-name: ${{ format('{0}-{1}', inputs.os, inputs.xcode) }} - name: Build Vim test binaries run: | @@ -385,6 +409,8 @@ jobs: - name: Upload failed test files if: ${{ !cancelled() && failure() }} uses: ./.github/actions/test_artifacts + with: + artifact-name: ${{ format('{0}-{1}', inputs.os, inputs.xcode) }} - name: Build MacVim dmg image if: inputs.publish && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master') @@ -405,7 +431,7 @@ jobs: # and add pictures to make them look nice. - name: Upload MacVim image if: inputs.publish && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master') - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: MacVim${{ inputs.publish_postfix }}.dmg path: src/MacVim/build/Release/MacVim${{ inputs.publish_postfix }}.dmg diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b37315d030..133c5c7edb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,10 +12,10 @@ A pull request has the advantage that it will trigger the Continuous Integration tests, you will be warned of problems (you can ignore the coverage warning, it's noisy). -Please consider adding a test. All new functionality should be tested and bug -fixes should be tested for regressions: the test should fail before the fix and -pass after the fix. Look through recent patches for examples and find help -with ":help testing". The tests are located under "src/testdir". +Please always add a test, if possible. All new functionality should be tested +and bug fixes should be tested for regressions: the test should fail before the +fix and pass after the fix. Look through recent patches for examples and find +help with ":help testing". The tests are located under "src/testdir". Contributions will be distributed with Vim under the Vim license. Providing a change to be included implies that you agree with this and your contribution @@ -46,6 +46,15 @@ When merging PRs into Vim, the current maintainer @chrisbra usually adds missing anybody that explicitly *ACK*s a pull request as a statement that those approvers are happy with that particular change. +## Using AI + +When using AI for contributions, please disclose this. Any AI-generated code +must follow the Vim code style. In particular, [test_codestyle.vim][18] +must not report any failures. Check the CI output for any test failures. + +Ensure that changes are properly tested. Do not submit a single PR that +addresses multiple unrelated issues. + # Reporting issues We use GitHub [issues][17], but that is not a requirement. Writing to the Vim @@ -160,3 +169,4 @@ mailing list. For other questions please use the [Vi Stack Exchange][8] website, [15]: https://en.wikipedia.org/wiki/Developer_Certificate_of_Origin [16]: https://github.com/vim/vim/blob/master/runtime/doc/helphelp.txt [17]: https://github.com/vim/vim/issues +[18]: https://github.com/vim/vim/blob/master/src/testdir/test_codestyle.vim diff --git a/Filelist b/Filelist index 9ab71cb892..7c8d1dd9e4 100644 --- a/Filelist +++ b/Filelist @@ -829,6 +829,10 @@ RT_ALL = \ runtime/pack/dist/opt/editorconfig/doc/editorconfig.txt \ runtime/pack/dist/opt/editorconfig/ftdetect/editorconfig.vim \ runtime/pack/dist/opt/editorconfig/plugin/editorconfig.vim \ + runtime/pack/dist/opt/helpcurwin/autoload/helpcurwin.vim \ + runtime/pack/dist/opt/helpcurwin/doc/helpcurwin.txt \ + runtime/pack/dist/opt/helpcurwin/doc/tags \ + runtime/pack/dist/opt/helpcurwin/plugin/helpcurwin.vim \ runtime/pack/dist/opt/helptoc/autoload/helptoc.vim \ runtime/pack/dist/opt/helptoc/doc/helptoc.txt \ runtime/pack/dist/opt/helptoc/doc/tags \ @@ -852,7 +856,11 @@ RT_ALL = \ runtime/pack/dist/opt/netrw/autoload/netrw_gitignore.vim \ runtime/pack/dist/opt/netrw/doc/netrw.txt \ runtime/pack/dist/opt/netrw/plugin/netrwPlugin.vim \ - runtime/pack/dist/opt/netrw/syntax/netrw.vim + runtime/pack/dist/opt/netrw/syntax/netrw.vim \ + runtime/pack/dist/opt/osc52/plugin/osc52.vim \ + runtime/pack/dist/opt/osc52/autoload/osc52.vim \ + runtime/pack/dist/opt/osc52/doc/osc52.txt \ + runtime/pack/dist/opt/osc52/doc/tags # Runtime files for all distributions without CR/LF translation. RT_ALL_BIN = \ diff --git a/README_vim.md b/README_vim.md index 30b0bd7b51..66a1e6cb8b 100644 --- a/README_vim.md +++ b/README_vim.md @@ -1,16 +1,3 @@ -
- Special thanks for supporting Vim by donating to the ICCF: -
-
- - Warp sponsorship - - -### [Warp, built for coding with multiple AI agents.](https://www.warp.dev/vim) -[Available for MacOS, Linux, & Windows](https://www.warp.dev/vim)
-
-
- # [![Vim The editor](https://github.com/vim/vim/raw/master/runtime/vimlogo.gif)](https://www.vim.org) [![Github Build status](https://github.com/vim/vim/workflows/GitHub%20CI/badge.svg)](https://github.com/vim/vim/actions?query=workflow%3A%22GitHub+CI%22) diff --git a/ci/config.mk.brew-libiconv.sed b/ci/config.mk.brew-libiconv.sed new file mode 100644 index 0000000000..6bfc3d6919 --- /dev/null +++ b/ci/config.mk.brew-libiconv.sed @@ -0,0 +1,8 @@ +# Use Homebrew GNU libiconv to work around broken Apple iconv. Use static +# linking as we don't want our binary releases to pull in third-party +# dependencies. +# +# If gettext is configured in the build, it also needs to be built against GNU +# libiconv. Otherwise we would get a link error from this. +/^CFLAGS[[:blank:]]*=/s/$/ -I\/opt\/homebrew\/opt\/libiconv\/include/ +/^LIBS[[:blank:]]*=/s/-liconv/\/opt\/homebrew\/opt\/libiconv\/lib\/libiconv.a/ diff --git a/ci/config.mk.sed b/ci/config.mk.sed index d888901931..f667b2c04f 100644 --- a/ci/config.mk.sed +++ b/ci/config.mk.sed @@ -1,3 +1,3 @@ /^CFLAGS[[:blank:]]*=/s/$/ -Wall -Wextra -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Werror -Wno-deprecated-declarations/ -/^PERL_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unused-function -Wno-shadow/ +/^PERL_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unused-function -Wno-strict-prototypes -Wno-shadow/ /^RUBY_CFLAGS_EXTRA[[:blank:]]*=/s/$/ -Wno-error=unused-parameter -Wno-strict-prototypes/ diff --git a/lang/LICENSE.ru.txt b/lang/LICENSE.ru.txt index ba9deae972..d51f178c7d 100644 --- a/lang/LICENSE.ru.txt +++ b/lang/LICENSE.ru.txt @@ -1,3 +1,8 @@ +Примечание. Данный текст перевода лицензии Vim предоставляется с целью +ознакомления и не является юридически значимым. Переводчик не несёт +ответственности за возможные неточности и ошибки при переводе лицензии. +Единственно юридически значимым является текст лицензии Vim на английском языке. + ЛИЦЕНЗИЯ VIM I) Неизменённые копии программы Vim могут распространяться без ограничения @@ -29,15 +34,15 @@ II) Изменённую (или дополненную) версию прогр будут распространяться на условиях настоящей лицензии или более поздней её версии. Лица, в данное время являющиеся ответственными за разработку, указаны в перечне, размещённом по адресу: - https://github.com/orgs/vim/people. В случае изменения этой - информации, актуальные данные будут опубликованы на - соответствующих ресурсах (вероятнее всего по интернет‐адресам - vim.sf.net, www.vim.org и/или comp.editors). В случае полной - невозможности установить контакт с ответственным разработчиком, - обязательства по отправке изменений утрачивают силу. После - передачи подтверждения о получении изменений от ответственного - разработчика, необходимость в повторной отправке копии изменённой - программы Vim неприменима. + https://github.com/orgs/vim/people. + При изменении этой информации, актуальные данные будут + опубликованы на соответствующих ресурсах (вероятнее всего + по интернет‐адресам vim.sf.net, www.vim.org и/или comp.editors). + В случае полной невозможности связаться с ответственным + разработчиком, обязательства по отправке изменений утрачивают + силу. После передачи подтверждения о получении изменений + от ответственного разработчика, необходимость в повторной + отправке копии изменённой программы Vim неприменима. b) Если лицом получена изменённая версия программа Vim, распространяющаяся на условиях, указанных в ч. II) п. 2) пп. а) допускается дальнейшее её распространение этим лицом без внесения diff --git a/lang/LICENSE.zh_cn.txt b/lang/LICENSE.zh_cn.txt new file mode 100644 index 0000000000..e3eef9a32d --- /dev/null +++ b/lang/LICENSE.zh_cn.txt @@ -0,0 +1,60 @@ +注意: 本译文仅供参考。若因译文错漏引发任何问题,译者概不承担责任。VIM 许可证的 +完整英文版本为唯一法律依据。如有任何疑问,以英文原文为准。 + +VIM 许可证 + +I) 可以任意发布没有修改的 Vim 的拷贝,但是必须保证包含本许可证。您也可以发布 + 未经修改的部分 Vim,同样也必须包含这份许可证。发布由未经修改的 Vim 源代码 + 所编译出的 Vim 可执行文件,外加您自己的应用实例和 Vim 脚本也是允许的。 + +II) 在满足以下全部四个条件的前提下,您可以发布经过修改 (或扩充) 的 Vim 版本, + 包括可执行文件 和/或 源代码: + 1) 本许可证必须包含在内,并且不能被修改。 + 2) 经过修改的 Vim 必须以下述五种方式之一发布: + a) 如果您本人对 Vim 做了改动,您必须在发布版本里清楚地说明如何与您联系。 + 当 Vim 的维护者 (以任何方式) 向您索取您所发布的 Vim 时,您必须把所做 + 的改动包括源代码无偿地提供出来。维护者保留把这些改动加入 Vim 正式版本 + 的权利。至于维护者怎样处理这些改动,以及用什么许可证发布,可以协商。 + 如果没有协商,那么,本许可证,或者它更新的版本,同样适用于您做出的改 + 动。Vim 现在的几位维护者可见: + https://github.com/orgs/vim/people + 如果维护者发生变动,会在合适的地方 (很可能是 vim.sf.net、www.vim.org + 和/或 comp.editors) 公布,当完全不能与维护者联系时,发送变更的约定自 + 动终止。一旦维护者确认收到了您所做的修改,您就不必再次发送了。 + + b) 如果您得到的是一个修改过的 Vim,并且它是在条件 a) 下发布的,那么您可 + 以不加改动地在条件 I) 下发布它;如果您又做了额外的改动,则这些改动受 + 到 a) 款条文的约束。 + + c) 在您发布的经过修改的 Vim 的每一份拷贝里,提供所有的变更部分,包括源代 + 码。提供的形式可以采用上下文风格的差异比较记录 (context diff)。您可以 + 为添加的新代码选择许可证,但是这些更改和为其选择的许可证不能限制他人 + 对 Vim 正式版本作出自己的改动。 + + d) 在满足以下全部三个条件的前提下,您可以继续发布带有条件 c) 所提及之变 + 更的经过修改的 Vim,而不必在发布时提供更改部分的源代码: + - 这些变更所附带的许可证允许您把这些变更无偿地并且没有任何限制地提供 + 给 Vim 的维护者,而且允许 Vim 的维护者无偿地并且没有任何限制地把这 + 些更改加入到 Vim 的正式版本中。 + - 从您最后一次发布更改的 Vim 之日起,您要保存这些改动至少三年时间。在 + 这期间,维护者或别人 (以任何方式) 向您要求提供这些变更时,您必须提 + 供给他。 + - 您要在发布版本中清楚地说明如何与您联系,这个联系方式必须保证自最后 + 一次发布相应的经过修改的 Vim 之日起至少三年有效,或尽可能长。 + e) 当这些变更以 GPL (GNU General Public License,GNU 通用公共许可证) 发 + 布时,您可以在 GPL 版本 2,或更高版本的 GPL 下发布修改过的 Vim。 + 3) 必须添加一条改动的信息。至少要放在 "version" 命令的输出和启动画面里,好 + 让用户知道自己用的是一个修改过的 Vim。当以 2)e) 条件发布时,只有不与变 + 更适用的许可证冲突,这个信息的添加才是必要的。 + 4) 在 2)a) 和 2)d) 条件里要求的联系方式不能随便更改或删除,除非是作者自己 + 作出的更正。 + +III) 如果您发布一个更改过的 Vim,强烈建议您对变更部分使用 Vim 的许可证,并且对 + 维护者提供变更部分并开放源代码。最好的方式是通过电子邮件或者把文件放到服 + 务器上,通过电子邮件传送 URL。如果只修改了很少的部分 (例如,只是一个修改 + 过的 Makefile),那么传送一个上下文风格的差异比较记录 (context diff) 就可 + 以了。电子邮件的地址是 + +IV) 不允许从 Vim 的源代码的发行版本或其中部分的源代码里删除本许可证,即使来自 + 更改过的版本也是如此。您可能想用这份许可证代替以前版本的 Vim 里的许可证, + 这可以由您自行决定。 diff --git a/lang/README.zh_cn.txt b/lang/README.zh_cn.txt new file mode 100644 index 0000000000..94e8d8dd3b --- /dev/null +++ b/lang/README.zh_cn.txt @@ -0,0 +1,122 @@ +Vim: Vi IMproved 9.1 版本的 README.txt 文件 + + +什 么 是 VIM ? + +Vim 是经典 UNIX 编辑器 Vi 的一个极大改进版本。它新增了许多功能:多级撤销、语法高 +亮、命令行历史、在线帮助、拼写检查、文件名补全、块操作、脚本语言等。同时也提供了 +图形用户界面(GUI)。尽管如此,Vi 兼容性依然得以保留,习惯使用 Vi 的用户操作时仍 +会感到得心应手。与 Vi 的差异请参阅 "runtime/doc/vi_diff.txt"。 + +此编辑器对于编辑代码和其他纯文本文件非常有用。所有命令都通过常规键盘字符输入,因 +此熟练盲打的用户能够高效工作。此外,用户可以将功能键映射到命令,并且可以使用鼠标。 + +Vim 也致力于提供一个(基本)符合 POSIX 标准的 vi 实现。当它以最小功能集(通常称 +为 vim.tiny)编译时,被许多 Linux 发行版用作默认的 vi 编辑器。 + +Vim 可在 MS-Windows (7, 8, 10, 11)、macOS、Haiku、VMS 以及几乎所有 UNIX 变体上运 +行。移植到其他系统应该不太困难。旧版本的 Vim 曾在 Amiga DOS、Atari MiNT、BeOS、 +MS-DOS、MS-Windows 95/98/Me/NT/2000/XP/Vista、RISC OS 和 OS/2 上运行。这些版本的 +维护现已终止。 + + +获 取 途 径 + +通常你可以使用你喜欢的软件包管理器来安装 Vim。在 Mac 和 Linux 上,会预装一个简化 +版的 Vim,如果你需要更多功能,仍需要安装完整的 Vim。 + +有针对 Unix、PC、Amiga 和其他一些系统的独立发行版。本 README.txt 文件随运行时存 +档一起提供。该存档包含文档、语法文件以及其他运行时使用的文件。要运行 Vim,你必须 +获取二进制存档或源代码存档之一。您需要哪一种取决于您想要运行 Vim 的系统以及您是 +否希望或必须自行编译。请查阅 "https://www.vim.org/download.php" 以了解当前可用的 +发行版概览。 + +获取最新版 Vim 的常见方式: +* 从 github 检出 git 仓库:https://github.com/vim/vim。 +* 以存档形式获取源代码:https://github.com/vim/vim/tags。 +* 从 vim-win32-installer 仓库获取 Windows 可执行文件: + https://github.com/vim/vim-win32-installer/releases。 + + +编 译 + +如果你获得的是二进制发行版,则无需编译 Vim。如果你获得的是源代码发行版,编译 Vim +所需的所有内容都在 "src" 目录中。请参阅 src/INSTALL 文件中的说明。 + + +安 装 + +请查阅以下文件之一以获取系统特定的安装说明。这些文件位于仓库中的 READMEdir 目录, +或者在你解压缩存档后的顶级目录中: + +README_ami.txt Amiga +README_unix.txt Unix +README_dos.txt MS-DOS 和 MS-Windows +README_mac.txt Macintosh +README_haiku.txt Haiku +README_vms.txt VMS + +根据你使用的发行版,可能还有其他 README_*.txt 文件。 + + +文 档 + +Vim tutor 是为初学者设计的一小时培训课程。通常可以通过 "vimtutor" 命令启动。更多 +信息请参阅 ":help tutor"。 + +最佳方式是在 Vim 中使用 ":help" 命令。如果您尚未安装可执行文件,请阅读 +"runtime/doc/help.txt"。该文件包含指向其他文档文件的指引。用户手册采用书籍体例编 +排,是学习使用 Vim 的推荐资料。具体请参阅 ":help user-manual"。 + + +复 制 与 版 权 + +Vim 是慈善软件。您可以尽情使用和复制它,但鼓励您捐款以帮助乌干达的孤儿。请阅读 +"runtime/doc/uganda.txt" 文件了解详情(在 Vim 中执行 ":help uganda")。 + +许可摘要:对于未经修改的 Vim 副本,其使用或分发不受任何限制。Vim 的部分内容亦可 +分发,但必须始终包含许可文本。对于修改版本,则需遵循若干限制条款。本许可证与 GPL +兼容,您可使用 GPL 库编译 Vim 并进行分发。 + + +赞 助 + +修复错误与增添新功能均需投入大量时间与精力。为支持开发工作并激励开发者持续完善 +Vim,敬请通过捐赠表达您的认可。 + +您捐赠的资金将主要用于帮助乌干达的儿童。请参阅 "runtime/doc/uganda.txt"。但同时, +您的捐赠也将激励开发团队持续投入 Vim 的开发工作。 + +关于赞助的最新信息,请查看 Vim 网站: + https://www.vim.org/sponsor/ + + +贡 献 + +如果您想帮助改进 Vim,请参阅 CONTRIBUTING.md 文件。 + + +信 息 与 支 持 + +如果您在 macOS 上,可以使用 MacVim:https://macvim.org + +关于 Vim 的最新消息可以在 Vim 主页上找到: + https://www.vim.org/ + +如果您遇到问题,请查阅 Vim 文档或使用技巧: + https://www.vim.org/docs.php + https://vim.fandom.com/wiki/Vim_Tips_Wiki + +如果您仍有问题或其他疑问,请使用其中一个邮件列表与 Vim 用户和开发者讨论: + https://www.vim.org/maillist.php + +如果其他方法都无效,请直接将错误报告发送到 vim-dev 邮件列表: + + + +主 要 作 者 + +Vim 主要由 Bram Moolenaar 创建,可通过 ":help Bram-Moolenaar" 命 +令了解更多信息。 + +请将任何其他评论、补丁、鲜花和建议发送到 vim-dev 邮件列表: diff --git a/nsis/README.txt b/nsis/README.txt index c4f3645ab1..01c6c5d3b0 100644 --- a/nsis/README.txt +++ b/nsis/README.txt @@ -35,7 +35,7 @@ Preparatory stage and for the 64-bit version — "winpty.dll" from x64/bin to "winpty64.dll". Put the renamed file and "winpty-agent.exe" in "../.." (above the "vim91" directory). However, you can specify a different directory by specifying - the appropriate makefile value. How to do this is described below. + the appropriate makefile value. How to do this is described below. 6. To use stronger encryption, add the Sodium library. You can get it here: https://github.com/jedisct1/libsodium/releases/download/1.0.19-RELEASE/libsodium-1.0.19-msvc.zip @@ -64,7 +64,7 @@ Preparatory stage The default is "../..". However, you can specify a different directory by specifying the appropriate makefile value. How to do - this is described below. + this is described below. 8. Install NSIS if you didn't do that already. Download Unicode version the ShellExecAsUser plug-in for NSIS from: @@ -80,7 +80,7 @@ Installer assembly stage After the installer is created and you copy it to the desired location, run the following command in the "/nsis" directory nmake.exe -lf Make_mvc.mak clean - + On UNIX-like systems, go to the "/nsis" directory and type the command make -f Makefile [variables] all diff --git a/nsis/lang/simpchinese.nsi b/nsis/lang/simpchinese.nsi index 0c9290eab4..fb4d5087f7 100644 --- a/nsis/lang/simpchinese.nsi +++ b/nsis/lang/simpchinese.nsi @@ -22,16 +22,14 @@ LangString ^UninstallCaption ${LANG_SIMPCHINESE} \ # Translated license file for the license page {{{1 ############################################################################## -LicenseLangString page_lic_file 0 "..\lang\LICENSE.nsis.txt" -#LicenseLangString page_lic_file ${LANG_SIMPCHINESE} \ -# "..\lang\LICENSE.zh_cn.nsis.txt" +LicenseLangString page_lic_file ${LANG_SIMPCHINESE} \ + "..\lang\LICENSE.zh_cn.nsis.txt" ############################################################################## # Translated README.txt file, which is opened after installation {{{1 ############################################################################## -LangString vim_readme_file 0 "README.txt" -#LangString vim_readme_file ${LANG_SIMPCHINESE} "README.zh_cn.txt" +LangString vim_readme_file ${LANG_SIMPCHINESE} "README.zh_cn.txt" ############################################################################## # MUI Configuration Strings {{{1 diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim index 791dccf67c..20c8d2ec89 100644 --- a/runtime/autoload/dist/ft.vim +++ b/runtime/autoload/dist/ft.vim @@ -3,7 +3,7 @@ vim9script # Vim functions for file type detection # # Maintainer: The Vim Project -# Last Change: 2025 Oct 28 +# Last Change: 2026 Jan 06 # Former Maintainer: Bram Moolenaar # These functions are moved here from runtime/filetype.vim to make startup @@ -29,6 +29,28 @@ export def Check_inp() endif enddef +# Erlang Application Resource Files (*.app.src is matched by extension) +# See: https://erlang.org/doc/system/applications +export def FTapp() + if exists("g:filetype_app") + exe "setf " .. g:filetype_app + return + endif + const pat = '^\s*{\s*application\s*,\s*\(''\=\)' .. expand("%:t:r:r") .. '\1\s*,' + var line: string + for lnum in range(1, min([line("$"), 100])) + line = getline(lnum) + # skip Erlang comments, might be something else + if line =~ '^\s*%' || line =~ '^\s*$' + continue + elseif line =~ '^\s*{' && + getline(lnum, lnum + 9)->filter((_, v) => v !~ '^\s*%')->join(' ') =~# pat + setf erlang + endif + return + endfor +enddef + # This function checks for the kind of assembly that is wanted by the user, or # can be detected from the beginning of the file. export def FTasm() @@ -1659,6 +1681,7 @@ const ft_from_ext = { # XA65 MOS6510 cross assembler "a65": "a65", # Applescript + "applescript": "applescript", "scpt": "applescript", # Applix ELF "am": "elf", @@ -1723,7 +1746,7 @@ const ft_from_ext = { "bst": "bst", # Bicep "bicep": "bicep", - "bicepparam": "bicep", + "bicepparam": "bicep-params", # BIND zone "zone": "bindzone", # Blank @@ -1735,6 +1758,8 @@ const ft_from_ext = { # BSDL "bsd": "bsdl", "bsdl": "bsdl", + # Bpftrace + "bt": "bpftrace", # C3 "c3": "c3", "c3i": "c3", @@ -1851,6 +1876,9 @@ const ft_from_ext = { "elv": "elvish", # Faust "lib": "faust", + # Fennel + "fnl": "fennel", + "fnlm": "fennel", # Libreoffice config files "xcu": "xml", "xlb": "xml", @@ -1889,6 +1917,9 @@ const ft_from_ext = { # Diff files "diff": "diff", "rej": "diff", + # Djot + "dj": "djot", + "djot": "djot", # DOT "dot": "dot", "gv": "dot", @@ -1951,6 +1982,8 @@ const ft_from_ext = { "fish": "fish", # Flix "flix": "flix", + # Fluent + "ftl": "fluent", # Focus Executable "fex": "focexec", "focexec": "focexec", @@ -2093,6 +2126,8 @@ const ft_from_ext = { "tmpl": "template", # Hurl "hurl": "hurl", + # Hylo + "hylo": "hylo", # Hyper Builder "hb": "hb", # Httest @@ -2202,6 +2237,10 @@ const ft_from_ext = { "k": "kwt", # Kivy "kv": "kivy", + # Koka + "kk": "koka", + # Kos + "kos": "kos", # Kotlin "kt": "kotlin", "ktm": "kotlin", @@ -2225,6 +2264,8 @@ const ft_from_ext = { "ldg": "ledger", "ledger": "ledger", "journal": "ledger", + # Leex + "xrl": "leex", # Leo "leo": "leo", # Less @@ -2332,6 +2373,8 @@ const ft_from_ext = { # N1QL "n1ql": "n1ql", "nql": "n1ql", + # Nickel + "ncl": "nickel", # Nim file "nim": "nim", "nims": "nim", @@ -2344,6 +2387,8 @@ const ft_from_ext = { "norg": "norg", # Novell netware batch files "ncf": "ncf", + # N-Quads + "nq": "nq", # Not Quite C "nqc": "nqc", # NSE - Nmap Script Engine - uses Lua syntax @@ -2570,6 +2615,8 @@ const ft_from_ext = { "builder": "ruby", "rxml": "ruby", "rjs": "ruby", + # Sorbet (Ruby typechecker) + "rbi": "ruby", # Rust "rs": "rust", # S-lang @@ -2702,6 +2749,7 @@ const ft_from_ext = { "nut": "squirrel", # Starlark "ipd": "starlark", + "sky": "starlark", "star": "starlark", "starlark": "starlark", # OpenVPN configuration @@ -2968,6 +3016,7 @@ const ft_from_ext = { "usd": "usd", # Rofi stylesheet "rasi": "rasi", + "rasinc": "rasi", # Zsh module # mdd: https://github.com/zsh-users/zsh/blob/57248b88830ce56adc243a40c7773fb3825cab34/Etc/zsh-development-guide#L285-L288 # mdh, pro: https://github.com/zsh-users/zsh/blob/57248b88830ce56adc243a40c7773fb3825cab34/Etc/zsh-development-guide#L268-L271 @@ -2998,6 +3047,8 @@ const ft_from_name = { "apt.conf": "aptconf", # BIND zone "named.root": "bindzone", + # Brewfile (uses Ruby syntax) + "Brewfile": "ruby", # Busted (Lua unit testing framework - configuration files) ".busted": "lua", # Bun history @@ -3066,6 +3117,8 @@ const ft_from_name = { ".editorconfig": "editorconfig", # Elinks configuration "elinks.conf": "elinks", + # Erlang + "rebar.config": "erlang", # Exim "exim.conf": "exim", # Exports diff --git a/runtime/autoload/dist/script.vim b/runtime/autoload/dist/script.vim index 5fb45ccc51..de168f0c09 100644 --- a/runtime/autoload/dist/script.vim +++ b/runtime/autoload/dist/script.vim @@ -4,7 +4,7 @@ vim9script # Invoked from "scripts.vim" in 'runtimepath' # # Maintainer: The Vim Project -# Last Change: 2025 Aug 09 +# Last Change: 2025 Dec 22 # Former Maintainer: Bram Moolenaar export def DetectFiletype() @@ -233,6 +233,10 @@ export def Exe2filetype(name: string, line1: string): string elseif name =~ '^execlineb\>' return 'execline' + # Bpftrace + elseif name =~ '^bpftrace\>' + return 'bpftrace' + # Vim elseif name =~ '^vim\>' return 'vim' diff --git a/runtime/autoload/dist/vim9.vim b/runtime/autoload/dist/vim9.vim index fa14bdaf04..53385e0824 100644 --- a/runtime/autoload/dist/vim9.vim +++ b/runtime/autoload/dist/vim9.vim @@ -3,7 +3,7 @@ vim9script # Vim runtime support library # # Maintainer: The Vim Project -# Last Change: 2025 Aug 15 +# Last Change: 2025 Dec 21 export def IsSafeExecutable(filetype: string, executable: string): bool if empty(exepath(executable)) @@ -60,15 +60,19 @@ if has('unix') enddef else export def Launch(args: string) - const fork = has('gui_running') ? '' : '&' + const fork = has('gui_running') ? '&' : '' execute $':silent ! nohup {args} {Redir()} {fork}' | redraw! enddef endif elseif has('win32') export def Launch(args: string) - const shell = (&shell =~? '\') ? '' : 'cmd.exe /c' - const quotes = empty(shell) ? '' : '""' - execute $'silent ! {shell} start {quotes} /b {args} {Redir()}' | redraw! + try + execute ':silent !start' args | redraw! + catch /^Vim(!):E371:/ + echohl ErrorMsg + echom "dist#vim9#Launch(): can not start" args + echohl None + endtry enddef else export def Launch(dummy: string) @@ -81,7 +85,10 @@ var os_viewer = null_string if has('win32unix') # (cyg)start suffices os_viewer = '' -# Windows / WSL +# Windows +elseif has('win32') + os_viewer = '' # Use :!start +# WSL elseif executable('explorer.exe') os_viewer = 'explorer.exe' # Linux / BSD @@ -126,6 +133,11 @@ export def Open(file: string) &shellslash = false defer setbufvar('%', '&shellslash', true) endif + if &shell == 'pwsh' || &shell == 'powershell' + const shell = &shell + setlocal shell& + defer setbufvar('%', '&shell', shell) + endif Launch($"{Viewer()} {shellescape(file, 1)}") enddef diff --git a/runtime/autoload/getscript.vim b/runtime/autoload/getscript.vim index 1e3b5b39d6..27a5a49535 100644 --- a/runtime/autoload/getscript.vim +++ b/runtime/autoload/getscript.vim @@ -14,6 +14,7 @@ " 2024 Nov 12 by Vim Project: fix problems on Windows (#16036) " 2025 Feb 28 by Vim Project: add support for bzip3 (#16755) " 2025 May 11 by Vim Project: check network connectivity (#17249) +" 2025 Dec 21 by Vim Project: make the wget check more robust (#18987) " }}} " " GetLatestVimScripts: 642 1 :AutoInstall: getscript.vim @@ -58,7 +59,10 @@ endif " wget vs curl {{{2 if !exists("g:GetLatestVimScripts_wget") - if executable("wget") + if executable("wget.exe") + " enforce extension: windows powershell desktop version has a wget alias that hides wget.exe + let g:GetLatestVimScripts_wget= "wget.exe" + elseif executable("wget") let g:GetLatestVimScripts_wget= "wget" elseif executable("curl.exe") " enforce extension: windows powershell desktop version has a curl alias that hides curl.exe @@ -73,7 +77,7 @@ endif " options that wget and curl require: if !exists("g:GetLatestVimScripts_options") - if g:GetLatestVimScripts_wget == "wget" + if g:GetLatestVimScripts_wget =~ "wget" let g:GetLatestVimScripts_options= "-q -O" elseif g:GetLatestVimScripts_wget =~ "curl" let g:GetLatestVimScripts_options= "-s -o" diff --git a/runtime/autoload/gnat.vim b/runtime/autoload/gnat.vim index 0def6723b2..585be2e1e0 100644 --- a/runtime/autoload/gnat.vim +++ b/runtime/autoload/gnat.vim @@ -3,7 +3,7 @@ " Language: Ada (GNAT) " $Id: gnat.vim 887 2008-07-08 14:29:01Z krischik $ " Copyright: Copyright (C) 2006 Martin Krischik -" Maintainer: Martin Krischi k +" Maintainer: Martin Krischi " Ned Okie " $Author: krischik $ " $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $ diff --git a/runtime/autoload/sqlcomplete.vim b/runtime/autoload/sqlcomplete.vim index adbdbab894..4017ae9b05 100644 --- a/runtime/autoload/sqlcomplete.vim +++ b/runtime/autoload/sqlcomplete.vim @@ -3,6 +3,7 @@ " Maintainer: David Fishburn " Version: 16.0 " Last Change: 2017 Oct 15 +" 2025 Nov 11 by Vim project: only set 'omnifunc' if dbext script was loaded #18716 " Homepage: http://www.vim.org/scripts/script.php?script_id=1572 " Usage: For detailed help " ":help sql.txt" @@ -98,12 +99,11 @@ " Set completion with CTRL-X CTRL-O to autoloaded function. " This check is in place in case this script is " sourced directly instead of using the autoload feature. -if exists('&omnifunc') - " Do not set the option if already set since this - " results in an E117 warning. - if &omnifunc == "" - setlocal omnifunc=sqlcomplete#Complete - endif +" +" Do not set the option if already set since this +" results in an E117 warning. +if exists('&omnifunc') && &omnifunc == "" && exists('g:loaded_dbext') + setlocal omnifunc=sqlcomplete#Complete endif if exists('g:loaded_sql_completion') diff --git a/runtime/autoload/tutor.vim b/runtime/autoload/tutor.vim index c3b5df37d9..a31f74680a 100644 --- a/runtime/autoload/tutor.vim +++ b/runtime/autoload/tutor.vim @@ -211,7 +211,7 @@ function! tutor#TutorCmd(tutor_name) endif call tutor#SetupVim() - exe "drop ".l:to_open + exe "drop ".fnameescape(l:to_open) call tutor#EnableInteractive(v:true) endfunction diff --git a/runtime/autoload/xmlformat.vim b/runtime/autoload/xmlformat.vim index c89c8784b9..c541e65755 100644 --- a/runtime/autoload/xmlformat.vim +++ b/runtime/autoload/xmlformat.vim @@ -1,5 +1,5 @@ " Vim plugin for formatting XML -" Last Change: 2020 Jan 06 +" Last Change: 2023 March 15th " Version: 0.3 " Author: Christian Brabandt " Repository: https://github.com/chrisbra/vim-xml-ftplugin @@ -37,13 +37,17 @@ func! xmlformat#Format() abort " Keep empty input lines? if empty(line) call add(result, '') + let current += 1 continue elseif line !~# '<[/]\?[^>]*>' - let nextmatch = match(list, '<[/]\?[^>]*>', current) - if nextmatch > -1 - let line .= ' '. join(list[(current + 1):(nextmatch-1)], " ") - call remove(list, current+1, nextmatch-1) + let nextmatch = match(list, '^\s*$\|<[/]\?[^>]*>', current) + if nextmatch > -1 + let lineEnd = nextmatch + else + let lineEnd = len(list) endif + let line .= ' '. join(list[(current + 1):(lineEnd-1)], " ") + call remove(list, current+1, lineEnd-1) endif " split on `>`, but don't split on very first opening < " this means, items can be like ['', 'tag content'] @@ -79,9 +83,13 @@ func! xmlformat#Format() abort if s:EndTag(t[1]) call s:DecreaseIndent() endif - "for y in t[1:] - let result+=s:FormatContent(t[1:]) - "endfor + let result+=s:FormatContent(t[1:]) + if s:IsTag(t[1]) + let lastitem = t[1] + continue + endif + elseif s:IsComment(item) + let result+=s:FormatContent([item]) else call add(result, s:Indent(item)) endif @@ -94,7 +102,7 @@ func! xmlformat#Format() abort if !empty(result) let lastprevline = getline(v:lnum + count_orig) let delete_lastline = v:lnum + count_orig - 1 == line('$') - exe v:lnum. ",". (v:lnum + count_orig - 1). 'd' + exe 'silent ' .. v:lnum. ",". (v:lnum + count_orig - 1). 'd' call append(v:lnum - 1, result) " Might need to remove the last line, if it became empty because of the " append() call diff --git a/runtime/autoload/zip.vim b/runtime/autoload/zip.vim index 49e4e81981..74b0d28fa0 100644 --- a/runtime/autoload/zip.vim +++ b/runtime/autoload/zip.vim @@ -17,6 +17,7 @@ " 2025 Mar 11 by Vim Project: handle filenames with leading '-' correctly " 2025 Jul 12 by Vim Project: drop ../ on write to prevent path traversal attacks " 2025 Sep 22 by Vim Project: support PowerShell Core +" 2025 Dec 20 by Vim Project: use :lcd instead of :cd " License: Vim License (see vim's :help license) " Copyright: Copyright (C) 2005-2019 Charles E. Campbell {{{1 " Permission is hereby granted to use and distribute this code, @@ -371,7 +372,7 @@ fun! zip#Write(fname) call mkdir(tmpdir,"p") " attempt to change to the indicated directory - if s:ChgDir(tmpdir,s:ERROR,"(zip#Write) cannot cd to temporary directory") + if s:ChgDir(tmpdir,s:ERROR,"(zip#Write) cannot lcd to temporary directory") return endif @@ -380,7 +381,7 @@ fun! zip#Write(fname) call delete("_ZIPVIM_", "rf") endif call mkdir("_ZIPVIM_") - cd _ZIPVIM_ + lcd _ZIPVIM_ if has("unix") let zipfile = substitute(a:fname,'zipfile://\(.\{-}\)::[^\\].*$','\1','') @@ -455,7 +456,7 @@ fun! zip#Write(fname) endif " cleanup and restore current directory - cd .. + lcd .. call delete("_ZIPVIM_", "rf") call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!") call delete(tmpdir, "rf") @@ -536,7 +537,7 @@ endfun " s:ChgDir: {{{2 fun! s:ChgDir(newdir,errlvl,errmsg) try - exe "cd ".fnameescape(a:newdir) + exe "lcd ".fnameescape(a:newdir) catch /^Vim\%((\a\+)\)\=:E344/ redraw! if a:errlvl == s:NOTE diff --git a/runtime/compiler/biome.vim b/runtime/compiler/biome.vim new file mode 100644 index 0000000000..57a80d4b1b --- /dev/null +++ b/runtime/compiler/biome.vim @@ -0,0 +1,23 @@ +" Vim compiler file +" Compiler: Biome (= linter for JavaScript, TypeScript, JSX, TSX, JSON, +" JSONC, HTML, Vue, Svelte, Astro, CSS, GraphQL and GritQL files) +" Maintainer: @Konfekt +" Last Change: 2025 Nov 12 +if exists("current_compiler") | finish | endif +let current_compiler = "biome" + +let s:cpo_save = &cpo +set cpo&vim + +exe 'CompilerSet makeprg=' .. escape('biome check --linter-enabled=true --formatter-enabled=false --assist-enabled=false --reporter=github ' + \ .. get(b:, 'biome_makeprg_params', get(g:, 'biome_makeprg_params', '')), ' \|"') + +CompilerSet errorformat=::%trror%.%#file=%f\\,line=%l\\,%.%#col=%c\\,%.%#::%m +CompilerSet errorformat+=::%tarning%.%#file=%f\\,line=%l\\,%.%#col=%c\\,%.%#::%m +CompilerSet errorformat+=::%totice%.%#file=%f\\,line=%l\\,%.%#col=%c\\,%.%#::%m +CompilerSet errorformat+=%-G\\s%# +CompilerSet errorformat+=%-Gcheck\ %.%# +CompilerSet errorformat+=%-G%.%#Some\ errors\ were\ emitted\ while\ running\ checks%. + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/cppcheck.vim b/runtime/compiler/cppcheck.vim index 033613c091..17f79f4fa0 100644 --- a/runtime/compiler/cppcheck.vim +++ b/runtime/compiler/cppcheck.vim @@ -1,7 +1,7 @@ " vim compiler file " Compiler: cppcheck (C++ static checker) " Maintainer: Vincent B. (twinside@free.fr) -" Last Change: 2024 Nov 19 by @Konfekt +" Last Change: 2025 Nov 06 by @Konfekt if exists("current_compiler") | finish | endif let current_compiler = "cppcheck" @@ -18,14 +18,14 @@ if !exists('g:c_cppcheck_params') let s:undo_compiler = 'unlet! g:c_cppcheck_params' endif -let &l:makeprg = 'cppcheck --quiet' +exe 'CompilerSet makeprg=' .. escape('cppcheck --quiet' \ ..' --template="{file}:{line}:{column}: {severity}: [{id}] {message} {callstack}"' \ ..' '..get(b:, 'c_cppcheck_params', get(g:, 'c_cppcheck_params', (&filetype ==# 'cpp' ? ' --language=c++' : ''))) \ ..' '..get(b:, 'c_cppcheck_includes', get(g:, 'c_cppcheck_includes', \ (filereadable('compile_commands.json') ? '--project=compile_commands.json' : \ (!empty(glob('*'..s:slash..'compile_commands.json', 1, 1)) ? '--project='..glob('*'..s:slash..'compile_commands.json', 1, 1)[0] : - \ (empty(&path) ? '' : '-I')..join(map(filter(split(&path, ','), 'isdirectory(v:val)'),'shellescape(v:val)'), ' -I'))))) -exe 'CompilerSet makeprg='..escape(&l:makeprg, ' \|"') + \ (empty(&path) ? '' : '-I')..join(map(filter(split(&path, ','), 'isdirectory(v:val)'),'shellescape(v:val)'), ' -I'))))), + \ ' \|"') CompilerSet errorformat= \%f:%l:%c:\ %tarning:\ %m, diff --git a/runtime/compiler/gcc.vim b/runtime/compiler/gcc.vim index 7b6ebb98f4..1d5900eb27 100644 --- a/runtime/compiler/gcc.vim +++ b/runtime/compiler/gcc.vim @@ -6,6 +6,7 @@ " by Daniel Hahler, 2019 Jul 12 " added line suggested by Anton Lindqvist 2016 Mar 31 " 2024 Apr 03 by The Vim Project (removed :CompilerSet definition) +" 2025 Dec 17 by The Vim Project (correctly parse: 'make: *** [Makefile:2: all] Error 1') if exists("current_compiler") finish @@ -16,6 +17,7 @@ let s:cpo_save = &cpo set cpo&vim CompilerSet errorformat= + \make:\ ***\ [%f:%l:\ %m, \%*[^\"]\"%f\"%*\\D%l:%c:\ %m, \%*[^\"]\"%f\"%*\\D%l:\ %m, \\"%f\"%*\\D%l:%c:\ %m, diff --git a/runtime/compiler/gnat.vim b/runtime/compiler/gnat.vim index 086edbede3..696d1c6eb4 100644 --- a/runtime/compiler/gnat.vim +++ b/runtime/compiler/gnat.vim @@ -3,7 +3,7 @@ " Language: Ada (GNAT) " $Id: gnat.vim 887 2008-07-08 14:29:01Z krischik $ " Copyright: Copyright (C) 2006 Martin Krischik -" Maintainer: Martin Krischi k +" Maintainer: Martin Krischi " Ned Okie " $Author: krischik $ " $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $ diff --git a/runtime/compiler/maven.vim b/runtime/compiler/maven.vim index 72e74e301d..1657da75a4 100644 --- a/runtime/compiler/maven.vim +++ b/runtime/compiler/maven.vim @@ -7,24 +7,54 @@ " Original Source: https://github.com/mikelue/vim-maven-plugin/blob/master/compiler/maven.vim " (distributed under same terms as LICENSE per " https://github.com/mikelue/vim-maven-plugin/issues/13) -" Last Change: 2024 Nov 12 +" Last Change: 2025 Nov 18 if exists("current_compiler") finish endif let current_compiler = "maven" +" CompilerSet makeprg=mvn execute $'CompilerSet makeprg=mvn\ --batch-mode\ {escape(get(b:, 'maven_makeprg_params', get(g:, 'maven_makeprg_params', '')), ' \|"')}' " Error message for POM CompilerSet errorformat=[FATAL]\ Non-parseable\ POM\ %f:\ %m%\\s%\\+@%.%#line\ %l\\,\ column\ %c%.%#, CompilerSet errorformat+=[%tRROR]\ Malformed\ POM\ %f:\ %m%\\s%\\+@%.%#line\ %l\\,\ column\ %c%.%# +" Handle Non-parseable POM with '@:' embedded in the 'position:' clause. +CompilerSet errorformat+=[FATAL]\ Non-parseable\ POM\ %f:\ %m%\\s%\\+%.%#@%l:%c%.%#, +CompilerSet errorformat+=[%tRROR]\ Malformed\ POM\ %f:\ %m%\\s%\\+%.%#@%l:%c%.%#, -" Java related build messages +" JavaC messages with paths relative to module root: +" With column: CompilerSet errorformat+=[%tARNING]\ %f:[%l\\,%c]\ %m CompilerSet errorformat+=[%tRROR]\ %f:[%l\\,%c]\ %m CompilerSet errorformat+=%A[%t%[A-Z]%#]\ %f:[%l\\,%c]\ %m,%Z CompilerSet errorformat+=%A%f:[%l\\,%c]\ %m,%Z +" Without column: +CompilerSet errorformat+=[%tARNING]\ %f:[%l]\ %m +CompilerSet errorformat+=[%tRROR]\ %f:[%l]\ %m +CompilerSet errorformat+=%A[%t%[A-Z]%#]\ %f:[%l]\ %m,%Z +CompilerSet errorformat+=%A%f:[%l]\ %m,%Z + +" Plug-in messages with absolute paths: +" with column: +CompilerSet errorformat+=[%tARNING]\ %f:%l:%c:\ %m +CompilerSet errorformat+=[%tRROR]\ %f:%l:%c:\ %m +CompilerSet errorformat+=%A[%t%[A-Z]%#]\ %f:%l:%c:\ %m,%Z +CompilerSet errorformat+=%A%f:%l:%c:\ %m,%Z +" without column: +CompilerSet errorformat+=[%tARNING]\ %f:%l:\ %m +CompilerSet errorformat+=[%tRROR]\ %f:%l:\ %m +CompilerSet errorformat+=%A[%t%[A-Z]%#]\ %f:%l:\ %m,%Z +CompilerSet errorformat+=%A%f:%l:\ %m,%Z + +" SpotBugs +CompilerSet errorformat+=[%tRROR]\ %m%\\s%\\+\[%*[^]]]%\\s%\\+In\ %f\ %.%#, +CompilerSet errorformat+=[%tARNING]\ %m%\\s%\\+\[%*[^]]]%\\s%\\+In\ %f\ %.%#, +CompilerSet errorformat+=[%tRROR]\ %.%#\ [aA]t\ %f:\[lines\ %l-%\\d\\+]\ %.%#, +CompilerSet errorformat+=[%tARNING]\ %.%#\ [aA]t\ %f:\[lines\ %l-%\\d\\+]\ %.%#, +CompilerSet errorformat+=[%tRROR]\ %.%#\ [aA]t\ %f:\[line\ %l]\ %.%#, +CompilerSet errorformat+=[%tARNING]\ %.%#\ [aA]t\ %f:\[line\ %l]\ %.%#, " jUnit related build messages CompilerSet errorformat+=%+E\ \ %#test%m,%Z @@ -36,5 +66,7 @@ CompilerSet errorformat+=%+Z%\\s%#at\ %f(%\\f%\\+:%l), CompilerSet errorformat+=%+C%.%# " Misc message removal +" CompilerSet errorformat+=%-GPicked\ up\ _JAVA_OPTIONS\ %.%#, +CompilerSet errorformat+=%-GAudit\ done., CompilerSet errorformat+=%-G[INFO]\ %.%#, CompilerSet errorformat+=%-G[debug]\ %.%# diff --git a/runtime/compiler/mypy.vim b/runtime/compiler/mypy.vim index 907b98b777..c7a575ce2d 100644 --- a/runtime/compiler/mypy.vim +++ b/runtime/compiler/mypy.vim @@ -1,7 +1,7 @@ " Vim compiler file " Compiler: Mypy (Python static checker) " Maintainer: @Konfekt -" Last Change: 2024 Nov 19 +" Last Change: 2025 Nov 06 if exists("current_compiler") | finish | endif let current_compiler = "mypy" @@ -10,9 +10,9 @@ let s:cpo_save = &cpo set cpo&vim " CompilerSet makeprg=mypy -let &l:makeprg = 'mypy --show-column-numbers ' - \ ..get(b:, 'mypy_makeprg_params', get(g:, 'mypy_makeprg_params', '--strict --ignore-missing-imports')) -exe 'CompilerSet makeprg='..escape(&l:makeprg, ' \|"') +exe 'CompilerSet makeprg=' .. escape('mypy --show-column-numbers ' + \ ..get(b:, 'mypy_makeprg_params', get(g:, 'mypy_makeprg_params', '--strict --ignore-missing-imports')), + \ ' \|"') CompilerSet errorformat=%f:%l:%c:\ %t%*[^:]:\ %m let &cpo = s:cpo_save diff --git a/runtime/compiler/perl.vim b/runtime/compiler/perl.vim index 6aeaac3fa1..04643af26c 100644 --- a/runtime/compiler/perl.vim +++ b/runtime/compiler/perl.vim @@ -1,6 +1,6 @@ " Vim compiler file " Compiler: Perl syntax checks (perl -Wc) -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Author: Christian J. Robinson " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues diff --git a/runtime/compiler/perlcritic.vim b/runtime/compiler/perlcritic.vim index 4b5f34dd2e..d50bc31129 100644 --- a/runtime/compiler/perlcritic.vim +++ b/runtime/compiler/perlcritic.vim @@ -1,6 +1,6 @@ " Vim compiler file " Compiler: perlcritic -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Author: Doug Kearns " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues diff --git a/runtime/compiler/podchecker.vim b/runtime/compiler/podchecker.vim index 20faaa4bcc..744c1034d6 100644 --- a/runtime/compiler/podchecker.vim +++ b/runtime/compiler/podchecker.vim @@ -1,6 +1,6 @@ " Vim compiler file " Compiler: podchecker -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Author: Doug Kearns " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues diff --git a/runtime/compiler/pylint.vim b/runtime/compiler/pylint.vim index 96abf315ab..749fe7d134 100644 --- a/runtime/compiler/pylint.vim +++ b/runtime/compiler/pylint.vim @@ -3,6 +3,7 @@ " Maintainer: Daniel Moch " Last Change: 2024 Nov 07 by The Vim Project (added params variable) " 2024 Nov 19 by the Vim Project (properly escape makeprg setting) +" 2025 Nov 06 by the Vim Project (do not set buffer-local makeprg) if exists("current_compiler") | finish | endif let current_compiler = "pylint" @@ -11,10 +12,10 @@ let s:cpo_save = &cpo set cpo&vim " CompilerSet makeprg=ruff -let &l:makeprg = 'pylint ' . +exe 'CompilerSet makeprg=' .. escape('pylint ' . \ '--output-format=text --msg-template="{path}:{line}:{column}:{C}: [{symbol}] {msg}" --reports=no ' . - \ get(b:, "pylint_makeprg_params", get(g:, "pylint_makeprg_params", '--jobs=0')) -exe 'CompilerSet makeprg='..escape(&l:makeprg, ' \|"') + \ get(b:, "pylint_makeprg_params", get(g:, "pylint_makeprg_params", '--jobs=0')), + \ ' \|"') CompilerSet errorformat=%A%f:%l:%c:%t:\ %m,%A%f:%l:\ %m,%A%f:(%l):\ %m,%-Z%p^%.%#,%-G%.%# let &cpo = s:cpo_save diff --git a/runtime/compiler/pyright.vim b/runtime/compiler/pyright.vim new file mode 100644 index 0000000000..a7dad6f377 --- /dev/null +++ b/runtime/compiler/pyright.vim @@ -0,0 +1,25 @@ +" Vim compiler file +" Compiler: Pyright (Python Type Checker) +" Maintainer: @konfekt +" Last Change: 2025 Dec 26 + +if exists("current_compiler") | finish | endif +let current_compiler = "pyright" + +let s:cpo_save = &cpo +set cpo&vim + +" CompilerSet makeprg=pyright +" CompilerSet makeprg=basedpyright +exe 'CompilerSet makeprg=' .. escape( + \ get(b:, 'pyright_makeprg', get(g:, 'pyright_makeprg', 'pyright')), + \ ' \|"') +CompilerSet errorformat= + \%E%f:%l:%c\ -\ error:\ %m, + \%W%f:%l:%c\ -\ warning:\ %m, + \%N%f:%l:%c\ -\ note:\ %m, + \%C[ \t]\ %.%#, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/rime_deployer.vim b/runtime/compiler/rime_deployer.vim index e0c8daef6e..5331412dc3 100644 --- a/runtime/compiler/rime_deployer.vim +++ b/runtime/compiler/rime_deployer.vim @@ -3,6 +3,7 @@ " Maintainer: Wu, Zhenyu " URL: https://rime.im " Latest Revision: 2024-04-09 +" Last Change: 2025 Nov 16 by The Vim Project (set errorformat) if exists('b:current_compiler') finish @@ -25,6 +26,8 @@ for s:shared_data_dir in ['/sdcard/rime-data', '/run/current-system/sw/share/rim endfor execute 'CompilerSet makeprg=rime_deployer\ --build\ %:p:h:S\' s:shared_data_dir unlet s:prefix s:shared_data_dir +" CompilerSet errorformat=%f:%l:%c:\ %m,%f:%l:\ %m +CompilerSet errorformat& let &cpoptions = s:save_cpoptions unlet s:save_cpoptions diff --git a/runtime/compiler/ruff.vim b/runtime/compiler/ruff.vim index 318f4fe5cb..d4f564b06a 100644 --- a/runtime/compiler/ruff.vim +++ b/runtime/compiler/ruff.vim @@ -3,6 +3,8 @@ " Maintainer: @pbnj-dragon " Last Change: 2024 Nov 07 " 2024 Nov 19 by the Vim Project (properly escape makeprg setting) +" 2025 Nov 06 by the Vim Project (do not set buffer-local makeprg) +" 2024 Dec 24 by the Vim Project (mute Found messages) if exists("current_compiler") | finish | endif let current_compiler = "ruff" @@ -11,10 +13,11 @@ let s:cpo_save = &cpo set cpo&vim " CompilerSet makeprg=ruff -let &l:makeprg= 'ruff check --output-format=concise ' - \ ..get(b:, 'ruff_makeprg_params', get(g:, 'ruff_makeprg_params', '--preview')) -exe 'CompilerSet makeprg='..escape(&l:makeprg, ' \|"') +exe 'CompilerSet makeprg=' .. escape('ruff check --output-format=concise ' + \ ..get(b:, 'ruff_makeprg_params', get(g:, 'ruff_makeprg_params', '--preview')), + \ ' \|"') CompilerSet errorformat=%f:%l:%c:\ %m,%f:%l:\ %m,%f:%l:%c\ -\ %m,%f: +CompilerSet errorformat+=%-GFound\ %.%# let &cpo = s:cpo_save unlet s:cpo_save diff --git a/runtime/compiler/rustc.vim b/runtime/compiler/rustc.vim index b3c8091987..0b48891852 100644 --- a/runtime/compiler/rustc.vim +++ b/runtime/compiler/rustc.vim @@ -2,6 +2,8 @@ " Compiler: Rust Compiler " Maintainer: Chris Morgan " Latest Revision: 2023-09-11 +" 2025 Nov 15 by Vim project: remove test for Vim patch 7.4.191 +" 2025 Dec 18 by Vim project: detect more errors #18957 " For bugs, patches and license go to https://github.com/rust-lang/rust.vim if exists("current_compiler") @@ -17,11 +19,7 @@ set cpo&vim if get(g:, 'rustc_makeprg_no_percent', 0) CompilerSet makeprg=rustc else - if has('patch-7.4.191') - CompilerSet makeprg=rustc\ \%:S - else - CompilerSet makeprg=rustc\ \"%\" - endif + CompilerSet makeprg=rustc\ \%:S endif " New errorformat (after nightly 2016/08/10) @@ -32,8 +30,10 @@ CompilerSet errorformat= \%Eerror:\ %m, \%Eerror[E%n]:\ %m, \%Wwarning:\ %m, + \%Wwarning[E%n]:\ %m, \%Inote:\ %m, \%C\ %#-->\ %f:%l:%c, + \%C\ %#╭▸\ %f:%l:%c, \%E\ \ left:%m,%C\ right:%m\ %f:%l:%c,%Z " Old errorformat (before nightly 2016/08/10) diff --git a/runtime/compiler/tombi.vim b/runtime/compiler/tombi.vim index bab95ba24c..7a286723cd 100644 --- a/runtime/compiler/tombi.vim +++ b/runtime/compiler/tombi.vim @@ -1,7 +1,7 @@ " Vim compiler file " Language: TOML " Maintainer: Konfekt -" Last Change: 2025 Oct 28 +" Last Change: 2025 Oct 29 if exists("current_compiler") | finish | endif let current_compiler = "tombi" @@ -44,7 +44,7 @@ if s:tombi_nocolor if &shell =~# '\v<%(cmd|cmd)>' CompilerSet makeprg=set\ NO_COLOR=1\ &&\ tombi\ lint elseif &shell =~# '\v<%(powershell|pwsh)>' - CompilerSet makeprg=$env:NO_COLOR="1";\ tombi\ lint + CompilerSet makeprg=$env:NO_COLOR=\"1\";\ tombi\ lint else echoerr "tombi compiler: Unsupported shell for Windows" endif diff --git a/runtime/compiler/ty.vim b/runtime/compiler/ty.vim new file mode 100644 index 0000000000..d9ee5aae8a --- /dev/null +++ b/runtime/compiler/ty.vim @@ -0,0 +1,20 @@ +" Vim compiler file +" Compiler: Ty (Python Type Checker) +" Maintainer: @konfekt +" Last Change: 2024 Dec 24 + +if exists("current_compiler") | finish | endif +let current_compiler = "ty" + +let s:cpo_save = &cpo +set cpo&vim + +" CompilerSet makeprg=ty +exe 'CompilerSet makeprg=' .. escape( + \ get(b:, 'ty_makeprg', get(g:, 'ty_makeprg', 'ty check --no-progress --color=never')) + \ ..' --output-format=concise', ' \|"') +CompilerSet errorformat=%f:%l:%c:\ %m,%f:%l:\ %m,%f:%l:%c\ -\ %m,%f: +CompilerSet errorformat+=%-GFound\ %.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/vimdoc.vim b/runtime/compiler/vimdoc.vim index a30355f855..ca34f105e4 100644 --- a/runtime/compiler/vimdoc.vim +++ b/runtime/compiler/vimdoc.vim @@ -2,6 +2,7 @@ " Language: vimdoc " Maintainer: Wu, Zhenyu " Latest Revision: 2024-04-13 +" Last Change: 2025 Nov 16 by The Vim Project (set errorformat) " " If you can not find 'vimdoc' in the package manager of your distribution e.g " 'pip', then you may need to build it from its source. @@ -15,6 +16,8 @@ let s:save_cpoptions = &cpoptions set cpoptions&vim CompilerSet makeprg=vimdoc +" CompilerSet errorformat=%f:%l:%c:\ %m,%f:%l:\ %m +CompilerSet errorformat& let &cpoptions = s:save_cpoptions unlet s:save_cpoptions diff --git a/runtime/compiler/yamllint.vim b/runtime/compiler/yamllint.vim index 88e2efb27a..adb1dbdee7 100644 --- a/runtime/compiler/yamllint.vim +++ b/runtime/compiler/yamllint.vim @@ -3,6 +3,7 @@ " Maintainer: Romain Lafourcade " Last Change: 2021 July 21 " 2024 Apr 03 by The Vim Project (removed :CompilerSet definition) +" 2025 Nov 16 by The Vim Project (set errorformat) if exists("current_compiler") finish @@ -10,4 +11,6 @@ endif let current_compiler = "yamllint" CompilerSet makeprg=yamllint\ -f\ parsable +" CompilerSet errorformat=%f:%l:%c:\ [%t%*[^]]]\ %m,%f:%l:%c:\ [%*[^]]]\ %m +CompilerSet errorformat& diff --git a/runtime/compiler/zig_build_exe.vim b/runtime/compiler/zig_build_exe.vim index 259d0e267b..440eff7885 100644 --- a/runtime/compiler/zig_build_exe.vim +++ b/runtime/compiler/zig_build_exe.vim @@ -1,7 +1,7 @@ " Vim compiler file " Compiler: Zig Compiler (zig build-exe) " Upstream: https://github.com/ziglang/zig.vim -" Last Change: 2024 Apr 05 by The Vim Project (removed :CompilerSet definition) +" Last Change: 2025 Nov 16 by The Vim Project (set errorformat) if exists('current_compiler') finish @@ -12,11 +12,9 @@ let current_compiler = 'zig_build_exe' let s:save_cpo = &cpo set cpo&vim -if has('patch-7.4.191') - CompilerSet makeprg=zig\ build-exe\ \%:S\ \$* -else - CompilerSet makeprg=zig\ build-exe\ \"%\"\ \$* -endif +CompilerSet makeprg=zig\ build-exe\ \%:S\ \$* +" CompilerSet errorformat=%f:%l:%c: %t%*[^:]: %m, %f:%l:%c: %m, %f:%l: %m +CompilerSet errorformat& let &cpo = s:save_cpo unlet s:save_cpo diff --git a/runtime/compiler/zig_test.vim b/runtime/compiler/zig_test.vim index dafeb6f1e3..afe57ad4d3 100644 --- a/runtime/compiler/zig_test.vim +++ b/runtime/compiler/zig_test.vim @@ -1,7 +1,7 @@ " Vim compiler file " Compiler: Zig Compiler (zig test) " Upstream: https://github.com/ziglang/zig.vim -" Last Change: 2024 Apr 05 by The Vim Project (removed :CompilerSet definition) +" Last Change: 2025 Nov 16 by The Vim Project (set errorformat) if exists('current_compiler') finish @@ -12,11 +12,9 @@ let current_compiler = 'zig_test' let s:save_cpo = &cpo set cpo&vim -if has('patch-7.4.191') - CompilerSet makeprg=zig\ test\ \%:S\ \$* -else - CompilerSet makeprg=zig\ test\ \"%\"\ \$* -endif +CompilerSet makeprg=zig\ test\ \%:S\ \$* +" CompilerSet errorformat=%f:%l:%c: %t%*[^:]: %m, %f:%l:%c: %m, %f:%l: %m +CompilerSet errorformat& let &cpo = s:save_cpo unlet s:save_cpo diff --git a/runtime/defaults.vim b/runtime/defaults.vim index 5c7100edc2..9306af3fbb 100644 --- a/runtime/defaults.vim +++ b/runtime/defaults.vim @@ -1,7 +1,7 @@ " The default vimrc file. " " Maintainer: The Vim Project -" Last Change: 2025 Sep 10 +" Last Change: 2025 Nov 28 " Former Maintainer: Bram Moolenaar " " This is loaded if no vimrc file was found. @@ -136,7 +136,7 @@ if &t_Co > 2 || has("gui_running") syntax on " I like highlighting strings inside C comments. - " Revert with ":unlet c_comment_strings". + " Revert with ":unlet g:c_comment_strings". let c_comment_strings=1 endif diff --git a/runtime/doc/arabic.txt b/runtime/doc/arabic.txt index 72c9ed8e12..832b426dda 100644 --- a/runtime/doc/arabic.txt +++ b/runtime/doc/arabic.txt @@ -1,7 +1,7 @@ -*arabic.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*arabic.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Nadim Shaikli + VIM REFERENCE MANUAL by Nadim Shaikli Arabic Language support (options & mappings) for Vim *Arabic* diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index 318b57b548..665b5893c8 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -1,7 +1,7 @@ -*autocmd.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*autocmd.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Automatic commands *autocommand* *autocommands* diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index e0ef87ea61..0b68f91b8b 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -1,7 +1,7 @@ -*builtin.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*builtin.txt* For Vim version 9.1. Last change: 2026 Jan 03 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Builtin functions *builtin-functions* @@ -23,9 +23,11 @@ Use CTRL-] on the function name to jump to the full explanation. USAGE RESULT DESCRIPTION ~ -abs({expr}) Float or Number absolute value of {expr} +abs({expr}) Float/Number + absolute value of {expr} acos({expr}) Float arc cosine of {expr} -add({object}, {item}) List/Blob append {item} to {object} +add({object}, {item}) List/Blob + append {item} to {object} and({expr}, {expr}) Number bitwise AND append({lnum}, {text}) Number append {text} below line {lnum} appendbufline({buf}, {lnum}, {text}) @@ -33,7 +35,8 @@ appendbufline({buf}, {lnum}, {text}) in buffer {buf} argc([{winid}]) Number number of files in the argument list argidx() Number current index in the argument list -arglistid([{winnr} [, {tabnr}]]) Number argument list id +arglistid([{winnr} [, {tabnr}]]) + Number argument list id argv({nr} [, {winid}]) String {nr} entry of the argument list argv([-1, {winid}]) List the argument list asin({expr}) Float arc sine of {expr} @@ -43,7 +46,7 @@ assert_equal({exp}, {act} [, {msg}]) assert_equalfile({fname-one}, {fname-two} [, {msg}]) Number assert file contents are equal assert_exception({error} [, {msg}]) - Number assert {error} is in v:exception + Number assert {error} is in |v:exception| assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]]) Number assert {cmd} fails assert_false({actual} [, {msg}]) @@ -81,8 +84,8 @@ bufexists({buf}) Number |TRUE| if buffer {buf} exists buflisted({buf}) Number |TRUE| if buffer {buf} is listed bufload({buf}) Number load buffer {buf} if not loaded yet bufloaded({buf}) Number |TRUE| if buffer {buf} is loaded -bufname([{buf}]) String Name of the buffer {buf} -bufnr([{buf} [, {create}]]) Number Number of the buffer {buf} +bufname([{buf}]) String name of the buffer {buf} +bufnr([{buf} [, {create}]]) Number number of the buffer {buf} bufwinid({buf}) Number window ID of buffer {buf} bufwinnr({buf}) Number window number of buffer {buf} byte2line({byte}) Number line number at byte count {byte} @@ -121,7 +124,8 @@ ch_setoptions({handle}, {options}) ch_status({handle} [, {options}]) String status of channel {handle} changenr() Number current change number -char2nr({expr} [, {utf8}]) Number ASCII/UTF-8 value of first char in {expr} +char2nr({expr} [, {utf8}]) Number ASCII/UTF-8 value of first char in + {expr} charclass({string}) Number character class of {string} charcol({expr} [, {winid}]) Number column number of cursor or mark charidx({string}, {idx} [, {countcc} [, {utf16}]]) @@ -136,7 +140,6 @@ complete({startcol}, {matches}) none set Insert mode completion complete_add({expr}) Number add completion match complete_check() Number check for key typed during completion complete_info([{what}]) Dict get current completion information -complete_match([{lnum}, {col}]) List get completion column and trigger text confirm({msg} [, {choices} [, {default} [, {type}]]]) Number number of choice picked by user copy({expr}) any make a shallow copy of {expr} @@ -181,10 +184,12 @@ expand({expr} [, {nosuf} [, {list}]]) expandcmd({string} [, {options}]) String expand {string} like with `:edit` extend({expr1}, {expr2} [, {expr3}]) - List/Dict insert items of {expr2} into {expr1} + List/Dict + insert items of {expr2} into {expr1} extendnew({expr1}, {expr2} [, {expr3}]) - List/Dict like |extend()| but creates a new - List or Dictionary + List/Dict + like |extend()| but creates a new List + or Dictionary feedkeys({string} [, {mode}]) Number add key sequence to typeahead buffer filecopy({from}, {to}) Number |TRUE| if copying file {from} to {to} worked @@ -195,7 +200,8 @@ filter({expr1}, {expr2}) List/Dict/Blob/String {expr2} is 0 finddir({name} [, {path} [, {count}]]) findfile({name} [, {path} [, {count}]]) - String/List find dir/file {name} in {path} + String/List + find dir/file {name} in {path} flatten({list} [, {maxdepth}]) List flatten {list} up to {maxdepth} levels flattennew({list} [, {maxdepth}]) List flatten a copy of {list} @@ -217,7 +223,8 @@ funcref({name} [, {arglist}] [, {dict}]) Funcref reference to function {name} function({name} [, {arglist}] [, {dict}]) Funcref named reference to function {name} -garbagecollect([{atexit}]) none free memory, breaking cyclic references +garbagecollect([{atexit}]) none free memory, breaking cyclic + references get({list}, {idx} [, {def}]) any get item {idx} from {list} or {def} get({dict}, {key} [, {def}]) any get item {key} from {dict} or {def} get({func}, {what}) any get property of funcref/partial {func} @@ -230,7 +237,7 @@ getbufvar({buf}, {varname} [, {def}]) getcellpixels() List get character cell pixel size getcellwidths() List get character cell width overrides getchangelist([{buf}]) List list of change list items -getchar([{expr} [, {opts}]]) Number or String +getchar([{expr} [, {opts}]]) Number/String get one character from the user getcharmod() Number modifiers for the last typed character getcharpos({expr}) List position of cursor, mark, etc. @@ -246,7 +253,8 @@ getcmdprompt() String return the current command-line prompt getcmdscreenpos() Number return cursor screen position in command-line getcmdtype() String return current command-line type -getcmdwintype() String return current command-line window type +getcmdwintype() String return current command-line window + type getcompletion({pat}, {type} [, {filtered}]) List list of cmdline completion matches getcompletiontype({pat}) String return the type of the command-line @@ -264,7 +272,8 @@ getimstatus() Number |TRUE| if the IME status is active getjumplist([{winnr} [, {tabnr}]]) List list of jump list items getline({lnum}) String line {lnum} of current buffer -getline({lnum}, {end}) List lines {lnum} to {end} of current buffer +getline({lnum}, {end}) List lines {lnum} to {end} of current + buffer getloclist({nr}) List list of location list items getloclist({nr}, {what}) Dict get specific location list properties getmarklist([{buf}]) List list of global/local marks @@ -276,7 +285,8 @@ getpos({expr}) List position of cursor, mark, etc. getqflist() List list of quickfix items getqflist({what}) Dict get specific quickfix list properties getreg([{regname} [, 1 [, {list}]]]) - String or List contents of a register + String/List + contents of a register getreginfo([{regname}]) Dict information about a register getregion({pos1}, {pos2} [, {opts}]) List get the text from {pos1} to {pos2} @@ -287,7 +297,8 @@ getscriptinfo([{opts}]) List list of sourced scripts getstacktrace() List get current stack trace of Vim scripts gettabinfo([{expr}]) List list of tab pages gettabvar({nr}, {varname} [, {def}]) - any variable {varname} in tab {nr} or {def} + any variable {varname} in tab {nr} or + {def} gettabwinvar({tabnr}, {winnr}, {name} [, {def}]) any {name} in {winnr} in tab page {tabnr} gettagstack([{nr}]) Dict get the tag stack of window {nr} @@ -306,8 +317,8 @@ globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]]) has({feature} [, {check}]) Number |TRUE| if feature {feature} supported has_key({dict}, {key}) Number |TRUE| if {dict} has entry {key} haslocaldir([{winnr} [, {tabnr}]]) - Number |TRUE| if the window executed |:lcd| - or |:tcd| + Number |TRUE| if the window executed `:lcd` or + `:tcd` hasmapto({what} [, {mode} [, {abbr}]]) Number |TRUE| if mapping to {what} exists histadd({history}, {item}) Number add an item to a history @@ -333,9 +344,13 @@ inputdialog({prompt} [, {text} [, {cancelreturn}]]) inputlist({textlist}) Number let the user pick from a choice list inputrestore() Number restore typeahead inputsave() Number save and clear typeahead -inputsecret({prompt} [, {text}]) String like input() but hiding the text -insert({object}, {item} [, {idx}]) List insert {item} in {object} [before {idx}] -instanceof({object}, {class}) Number |TRUE| if {object} is an instance of {class} +inputsecret({prompt} [, {text}]) + String like input() but hiding the text +insert({object}, {item} [, {idx}]) + List insert {item} in {object} + [before {idx}] +instanceof({object}, {class}) Number |TRUE| if {object} is an instance of + {class} interrupt() none interrupt script execution invert({expr}) Number bitwise invert isabsolutepath({path}) Number |TRUE| if {path} is an absolute path @@ -347,7 +362,8 @@ isnan({expr}) Number |TRUE| if {expr} is NaN items({expr}) List key/index-value pairs in {expr} job_getchannel({job}) Channel get the channel handle for {job} job_info([{job}]) Dict get information about {job} -job_setoptions({job}, {options}) none set options for {job} +job_setoptions({job}, {options}) + none set options for {job} job_start({command} [, {options}]) Job start a job job_status({job}) String get the status of {job} @@ -359,9 +375,10 @@ json_decode({string}) any decode JSON json_encode({expr}) String encode JSON keys({dict}) List keys in {dict} keytrans({string}) String translate internal keycodes to a form - that can be used by |:map| + that can be used by `:map` len({expr}) Number the length of {expr} -libcall({lib}, {func}, {arg}) String call {func} in library {lib} with {arg} +libcall({lib}, {func}, {arg}) String call {func} in library {lib} with + {arg} libcallnr({lib}, {func}, {arg}) Number idem, but return a Number line({expr} [, {winid}]) Number line nr of cursor, last line or mark line2byte({lnum}) Number byte count of line {lnum} @@ -380,7 +397,7 @@ luaeval({expr} [, {expr}]) any evaluate |Lua| expression map({expr1}, {expr2}) List/Dict/Blob/String change each item in {expr1} to {expr2} maparg({name} [, {mode} [, {abbr} [, {dict}]]]) - String or Dict + String/Dict rhs of mapping {name} in mode {mode} mapcheck({name} [, {mode} [, {abbr}]]) String check for mappings matching {name} @@ -395,7 +412,7 @@ matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]]) Number highlight {pattern} with {group} matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]]) Number highlight positions with {group} -matcharg({nr}) List arguments of |:match| +matcharg({nr}) List arguments of `:match` matchbufline({buf}, {pat}, {lnum}, {end}, [, {dict}) List all the {pat} matches in buffer {buf} matchdelete({id} [, {win}]) Number delete match identified by {id} @@ -406,7 +423,8 @@ matchfuzzy({list}, {str} [, {dict}]) matchfuzzypos({list}, {str} [, {dict}]) List fuzzy match {str} in {list} matchlist({expr}, {pat} [, {start} [, {count}]]) - List match and submatches of {pat} in {expr} + List match and submatches of {pat} in + {expr} matchstr({expr}, {pat} [, {start} [, {count}]]) String {count}'th match of {pat} in {expr} matchstrlist({list}, {pat} [, {dict}) @@ -423,11 +441,13 @@ mzeval({expr}) any evaluate |MzScheme| expression nextnonblank({lnum}) Number line nr of non-blank line >= {lnum} ngettext({single}, {plural}, {number}[, {domain}]) String translate text based on {number} -nr2char({expr} [, {utf8}]) String single char with ASCII/UTF-8 value {expr} +nr2char({expr} [, {utf8}]) String single char with ASCII/UTF-8 value + {expr} or({expr}, {expr}) Number bitwise OR pathshorten({expr} [, {len}]) String shorten directory names in a path perleval({expr}) any evaluate |Perl| expression -popup_atcursor({what}, {options}) Number create popup window near the cursor +popup_atcursor({what}, {options}) + Number create popup window near the cursor popup_beval({what}, {options}) Number create popup window for 'ballooneval' popup_clear() none close all popup windows popup_close({id} [, {result}]) none close popup window {id} @@ -447,7 +467,8 @@ popup_menu({what}, {options}) Number create a popup window used as a menu popup_move({id}, {options}) none set position of popup window {id} popup_notification({what}, {options}) Number create a notification popup window -popup_setbuf({id}, {buf}) Bool set the buffer for the popup window {id} +popup_setbuf({id}, {buf}) Bool set the buffer for the popup window + {id} popup_setoptions({id}, {options}) none set options for popup window {id} popup_settext({id}, {text}) none set the text of popup window {id} @@ -457,10 +478,13 @@ preinserted() Number whether text is inserted after cursor prevnonblank({lnum}) Number line nr of non-blank line <= {lnum} printf({fmt}, {expr1}...) String format text prompt_getprompt({buf}) String get prompt text -prompt_setcallback({buf}, {expr}) none set prompt callback function -prompt_setinterrupt({buf}, {text}) none set prompt interrupt function +prompt_setcallback({buf}, {expr}) + none set prompt callback function +prompt_setinterrupt({buf}, {text}) + none set prompt interrupt function prompt_setprompt({buf}, {text}) none set prompt text -prop_add({lnum}, {col}, {props}) none add one text property +prop_add({lnum}, {col}, {props}) + none add one text property prop_add_list({props}, [[{lnum}, {col}, {end-lnum}, {end-col}], ...]) none add multiple text properties prop_clear({lnum} [, {lnum-end} [, {props}]]) @@ -494,6 +518,8 @@ readdirex({dir} [, {expr} [, {dict}]]) List file info in {dir} selected by {expr} readfile({fname} [, {type} [, {max}]]) List get list of lines from file {fname} +redraw_listener_add({opts}) Number add callbacks to listen for redraws +redraw_listener_remove({id}) none remove a redraw listener reduce({object}, {func} [, {initial}]) any reduce {object} using {func} reg_executing() String get the executing register name @@ -526,9 +552,10 @@ round({expr}) Float round off {expr} rubyeval({expr}) any evaluate |Ruby| expression screenattr({row}, {col}) Number attribute at screen position screenchar({row}, {col}) Number character at screen position -screenchars({row}, {col}) List List of characters at screen position +screenchars({row}, {col}) List list of characters at screen position screencol() Number current cursor column -screenpos({winid}, {lnum}, {col}) Dict screen row and col of a text character +screenpos({winid}, {lnum}, {col}) + Dict screen row and col of a text character screenrow() Number current cursor row screenstring({row}, {col}) String characters at screen position search({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]]) @@ -569,7 +596,9 @@ setqflist({list} [, {action}]) Number modify quickfix list using {list} setqflist({list}, {action}, {what}) Number modify specific quickfix list props setreg({n}, {v} [, {opt}]) Number set register to value and type -settabvar({nr}, {varname}, {val}) none set {varname} in tab page {nr} to {val} +settabvar({nr}, {varname}, {val}) + none set {varname} in tab page {nr} to + {val} settabwinvar({tabnr}, {winnr}, {varname}, {val}) none set {varname} in window {winnr} in tab page {tabnr} to {val} @@ -601,7 +630,8 @@ sign_unplacelist({list}) List unplace a list of signs simplify({filename}) String simplify filename as much as possible sin({expr}) Float sine of {expr} sinh({expr}) Float hyperbolic sine of {expr} -slice({expr}, {start} [, {end}]) String, List or Blob +slice({expr}, {start} [, {end}]) + String/List/Blob slice of a String, List or Blob sort({list} [, {how} [, {dict}]]) List sort {list}, compare with {how} @@ -631,7 +661,8 @@ strcharpart({str}, {start} [, {len} [, {skipcc}]]) String {len} characters of {str} at character {start} strchars({expr} [, {skipcc}]) Number character count of the String {expr} -strdisplaywidth({expr} [, {col}]) Number display length of the String {expr} +strdisplaywidth({expr} [, {col}]) + Number display length of the String {expr} strftime({format} [, {time}]) String format time with a specified format strgetchar({str}, {index}) Number get char {index} from {str} stridx({haystack}, {needle} [, {start}]) @@ -639,20 +670,24 @@ stridx({haystack}, {needle} [, {start}]) string({expr}) String String representation of {expr} value strlen({expr}) Number length of the String {expr} strpart({str}, {start} [, {len} [, {chars}]]) - String {len} bytes/chars of {str} at - byte {start} + String {len} bytes/chars of {str} at byte + {start} strptime({format}, {timestring}) - Number Convert {timestring} to unix timestamp + Number convert {timestring} to unix timestamp strridx({haystack}, {needle} [, {start}]) Number last index of {needle} in {haystack} strtrans({expr}) String translate string to make it printable strutf16len({string} [, {countcc}]) - Number number of UTF-16 code units in {string} -strwidth({expr}) Number display cell length of the String {expr} -submatch({nr} [, {list}]) String or List - specific match in ":s" or substitute() + Number number of UTF-16 code units in + {string} +strwidth({expr}) Number display cell length of the String + {expr} +submatch({nr} [, {list}]) String/List + specific match in `:substitute` or + substitute() substitute({expr}, {pat}, {sub}, {flags}) - String all {pat} in {expr} replaced with {sub} + String all {pat} in {expr} replaced with + {sub} swapfilelist() List swap files found in 'directory' swapinfo({fname}) Dict information about swap file {fname} swapname({buf}) String swap file of buffer {buf} @@ -661,12 +696,14 @@ synIDattr({synID}, {what} [, {mode}]) String attribute {what} of syntax ID {synID} synIDtrans({synID}) Number translated syntax ID of {synID} synconcealed({lnum}, {col}) List info about concealing -synstack({lnum}, {col}) List stack of syntax IDs at {lnum} and {col} +synstack({lnum}, {col}) List stack of syntax IDs at {lnum} and + {col} system({expr} [, {input}]) String output of shell command/filter {expr} systemlist({expr} [, {input}]) List output of shell command/filter {expr} tabpagebuflist([{arg}]) List list of buffer numbers in tab page tabpagenr([{arg}]) Number number of current or last tab page -tabpagewinnr({tabarg} [, {arg}]) Number number of current window in tab page +tabpagewinnr({tabarg} [, {arg}]) + Number number of current window in tab page tagfiles() List tags files used taglist({expr} [, {filename}]) List list of tags matching {expr} tan({expr}) Float tangent of {expr} @@ -696,7 +733,8 @@ term_setansicolors({buf}, {colors}) none set ANSI palette in GUI color mode term_setapi({buf}, {expr}) none set |terminal-api| function name prefix term_setkill({buf}, {how}) none set signal to stop job in terminal -term_setrestore({buf}, {command}) none set command to restore terminal +term_setrestore({buf}, {command}) + none set command to restore terminal term_setsize({buf}, {rows}, {cols}) none set the size of a terminal term_start({cmd} [, {options}]) Number open a terminal window and run a job @@ -736,8 +774,10 @@ timer_start({time}, {callback} [, {options}]) Number create a timer timer_stop({timer}) none stop a timer timer_stopall() none stop all timers -tolower({expr}) String the String {expr} switched to lowercase -toupper({expr}) String the String {expr} switched to uppercase +tolower({expr}) String the String {expr} switched to + lowercase +toupper({expr}) String the String {expr} switched to + uppercase tr({src}, {fromstr}, {tostr}) String translate chars of {src} in {fromstr} to chars in {tostr} trim({text} [, {mask} [, {dir}]]) @@ -756,7 +796,7 @@ utf16idx({string}, {idx} [, {countcc} [, {charidx}]]) Number UTF-16 index of byte {idx} in {string} values({dict}) List values in {dict} virtcol({expr} [, {list} [, {winid}]) - Number or List + Number/List screen column of cursor or mark virtcol2col({winid}, {lnum}, {col}) Number byte index of a character on screen @@ -783,7 +823,8 @@ winheight({nr}) Number height of window {nr} winlayout([{tabnr}]) List layout of windows in tab {tabnr} winline() Number window line of the cursor winnr([{expr}]) Number number of current window -winrestcmd() String returns command to restore window sizes +winrestcmd() String returns command to restore window + sizes winrestview({dict}) none restore view of current window winsaveview() Dict save view of current window winwidth({nr}) Number width of window {nr} @@ -911,7 +952,7 @@ appendbufline({buf}, {lnum}, {text}) *appendbufline()* for an invalid {lnum}, since {lnum} isn't actually used. Can also be used as a |method| after a List, the base is - passed as the second argument: > + passed as the third argument: > mylist->appendbufline(buf, lnum) < Return type: |Number| @@ -2074,51 +2115,6 @@ complete_info([{what}]) *complete_info()* Return type: dict -complete_match([{lnum}, {col}]) *complete_match()* - Searches backward from the given position and returns a List - of matches according to the 'isexpand' option. When no - arguments are provided, uses the current cursor position. - - Each match is represented as a List containing - [startcol, trigger_text] where: - - startcol: column position where completion should start, - or -1 if no trigger position is found. For multi-character - triggers, returns the column of the first character. - - trigger_text: the matching trigger string from 'isexpand', - or empty string if no match was found or when using the - default 'iskeyword' pattern. - - When 'isexpand' is empty, uses the 'iskeyword' pattern "\k\+$" - to find the start of the current keyword. - - Examples: > - set isexpand=.,->,/,/*,abc - func CustomComplete() - let res = complete_match() - if res->len() == 0 | return | endif - let [col, trigger] = res[0] - let items = [] - if trigger == '/*' - let items = ['/** */'] - elseif trigger == '/' - let items = ['/*! */', '// TODO:', '// fixme:'] - elseif trigger == '.' - let items = ['length()'] - elseif trigger =~ '^\->' - let items = ['map()', 'reduce()'] - elseif trigger =~ '^\abc' - let items = ['def', 'ghk'] - endif - if items->len() > 0 - let startcol = trigger =~ '^/' ? col : col + len(trigger) - call complete(startcol, items) - endif - endfunc - inoremap call CustomComplete() -< - Return type: list> - - confirm({msg} [, {choices} [, {default} [, {type}]]]) *confirm()* confirm() offers the user a dialog, from which a choice can be made. It returns the number of the choice. For the first @@ -2759,13 +2755,18 @@ executable({expr}) *executable()* then the name is also tried without adding an extension. On MS-Windows it only checks if the file exists and is not a directory, not if it's really executable. + On MS-Windows an executable in the same directory as the Vim executable is always found. Since this directory is added to $PATH it should also work to execute it |win32-PATH|. - *NoDefaultCurrentDirectoryInExePath* - On MS-Windows an executable in Vim's current working directory - is also normally found, but this can be disabled by setting - the $NoDefaultCurrentDirectoryInExePath environment variable. + *$NoDefaultCurrentDirectoryInExePath* + On MS-Windows when using cmd.exe as 'shell' an executable in + Vim's current working directory is also normally found, which + can be disabled by setting the + `$NoDefaultCurrentDirectoryInExePath` environment variable. + This variable is always set by Vim when executing external + commands (e.g., via |:!|, |:make|, or |system()|) for security + reasons. The result is a Number: 1 exists @@ -2935,7 +2936,7 @@ exists({expr}) *exists()* Can also be used as a |method|: > Varname()->exists() < - Return type: |String| + Return type: |Number| exists_compiled({expr}) *exists_compiled()* @@ -2952,7 +2953,7 @@ exists_compiled({expr}) *exists_compiled()* Can only be used in a |:def| function. *E1233* This does not work to check for arguments or local variables. - Return type: |String| + Return type: |Number| exp({expr}) *exp()* @@ -4882,6 +4883,11 @@ getpos({expr}) *getpos()* within the line. To get the character position in the line, use |getcharpos()|. + The visual marks |'<| and |'>| refer to the beginning and end + of the visual selection relative to the buffer. Note that + this differs from |setpos()|, where they are relative to the + cursor position. + Note that for '< and '> Visual mode matters: when it is "V" (visual line mode) the column of '< is zero and the column of '> is a large number equal to |v:maxcol|. @@ -5393,9 +5399,13 @@ getwininfo([{winid}]) *getwininfo()* {only with the +quickfix feature} quickfix 1 if quickfix or location list window {only with the +quickfix feature} + status_height status lines height (0 or 1) + tabnr tab page number terminal 1 if a terminal window {only with the +terminal feature} - tabnr tab page number + textoff number of columns occupied by any + 'foldcolumn', 'signcolumn' and line + number in front of the text topline first displayed buffer line variables a reference to the dictionary with window-local variables @@ -5404,9 +5414,6 @@ getwininfo([{winid}]) *getwininfo()* otherwise wincol leftmost screen column of the window; "col" from |win_screenpos()| - textoff number of columns occupied by any - 'foldcolumn', 'signcolumn' and line - number in front of the text winid |window-ID| winnr window number winrow topmost screen line of the window; @@ -6823,9 +6830,10 @@ listener_add({callback} [, {buf} [, {unbuffered}]]) *listener_add()* The entries are in the order the changes were made, thus the most recent change is at the end. - Because of the third trigger reason for triggering a callback - listed above, the line numbers passed to the callback are not - guaranteed to be valid. If this is a problem then make + Because of the third reason for triggering a callback listed + above, the line numbers passed to the callback are not + guaranteed to be valid. In particular, the end value can be + greater than line('$') + 1. If this is a problem then make {unbuffered} |TRUE|. When {unbuffered} is |TRUE| the {callback} is invoked for every @@ -8379,24 +8387,24 @@ printf({fmt}, {expr1} ...) *printf()* *E1502* You can re-use a [field-width] (or [precision]) argument: > - echo printf("%1$d at width %2$d is: %01$*2$d", 1, 2) + echo printf("%1$d at width %2$d is: %1$0*2$d", 1, 2) < 1 at width 2 is: 01 However, you can't use it as a different type: > - echo printf("%1$d at width %2$ld is: %01$*2$d", 1, 2) + echo printf("%1$d at width %2$ld is: %1$0*2$d", 1, 2) < E1502: Positional argument 2 used as field width reused as different type: long int/int *E1503* When a positional argument is used, but not the correct number or arguments is given, an error is raised: > - echo printf("%1$d at width %2$d is: %01$*2$.*3$d", 1, 2) + echo printf("%1$d at width %2$d is: %1$0*2$.*3$d", 1, 2) < E1503: Positional argument 3 out of bounds: %1$d at width - %2$d is: %01$*2$.*3$d + %2$d is: %1$0*2$.*3$d Only the first error is reported: > - echo printf("%01$*2$.*3$d %4$d", 1, 2) -< E1503: Positional argument 3 out of bounds: %01$*2$.*3$d + echo printf("%1$0*2$.*3$d %4$d", 1, 2) +< E1503: Positional argument 3 out of bounds: %1$0*2$.*3$d %4$d *E1504* @@ -8828,6 +8836,48 @@ readfile({fname} [, {type} [, {max}]]) *readfile()* Return type: list or list +redraw_listener_add({opts}) *redraw_listener_add()* + Add a listener that holds callback functions that will be + called at specific times in the redraw cycle. {opts} is a + dictionary that contain the callback functions to be defined. + At least one callback must be specified. *E1571* + Returns a unique ID that can be passed to + |redraw_listener_remove()|. + + {opts} may have the following entries: + + on_start Called first on each screen redraw. Takes no + arguments and returns nothing. + on_end Called at the end of each screen redraw. + Takes no arguments and returns nothing. + + A good use case for this function is with the |listener_add()| + callback with unbuffered set to TRUE. This allows you to + modify the state on buffer changes, and finally render that + state just before the next redraw, only if it has changed. + Attempting to render or redraw for every single buffer change + would be very inefficient. + + You may not call redraw_listener_add() during any of the + callbacks defined in {opts}. *E1570* + + Can also be used as a |method|: > + GetOpts()->redraw_listener_add() +< + Return type: |Number| + + +redraw_listener_remove({id}) *redraw_listener_remove()* + Remove a redraw listener previously added with + |redraw_listener_add()|. Returns FALSE when {id} could not be + found, TRUE when {id} was removed. + + Can also be used as a |method|: > + GetRedrawListenerId()->redraw_listener_remove() +< + Return type: |Number| + + reduce({object}, {func} [, {initial}]) *reduce()* *E998* {func} is called for every item in {object}, which can be a |String|, |List|, |Tuple| or a |Blob|. {func} is called with @@ -10111,9 +10161,14 @@ setpos({expr}, {list}) *setpos()* preferred column is not set. When it is present and setting a mark position it is not used. - Note that for '< and '> changing the line number may result in - the marks to be effectively be swapped, so that '< is always - before '>. + Note that for |'<| and |'>| changing the line number may + result in the marks to be effectively swapped, so that |'<| is + always before |'>|. + + The visual marks |'<| and |'>| refer to the beginning and end + of the visual selection relative to the cursor position. + Note that this differs from |getpos()|, where they are + relative to the buffer. Returns 0 when the position could be set, -1 otherwise. An error message is given if {expr} is invalid. @@ -11604,7 +11659,7 @@ synIDtrans({synID}) *synIDtrans()* synconcealed({lnum}, {col}) *synconcealed()* - The result is a |List| with currently three items: + The result is a |List| with three items: 1. The first item in the list is 0 if the character at the position {lnum} and {col} is not part of a concealable region, 1 if it is. {lnum} is used like with |getline()|. diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt index 86b2d18772..de5cd0bfb9 100644 --- a/runtime/doc/change.txt +++ b/runtime/doc/change.txt @@ -1,7 +1,7 @@ -*change.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*change.txt* For Vim version 9.1. Last change: 2026 Jan 08 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar This file describes commands that delete or change text. In this context, @@ -1094,7 +1094,8 @@ inside of strings can change! Also see 'softtabstop' option. > *:y* *:yank* *E850* :[range]y[ank] [x] Yank [range] lines [into register x]. Yanking to the "* or "+ registers is possible only when the - |+clipboard| feature is included. + |+clipboard| or |+clipboard_provider| features are + included. :[range]y[ank] [x] {count} Yank {count} lines, starting with last line number @@ -1776,7 +1777,9 @@ l Long lines are not broken in insert mode: When a line was longer than automatically format it. *fo-m* m Also break at a multibyte character above 255. This is useful for - Asian text where every character is a word on its own. + Asian text where every character is a word on its own. Note that + line breaks may also be added after punctuation characters such as + colons to match the CJK linebreaking rules. *fo-M* M When joining lines, don't insert a space before or after a multibyte character. Overrules the 'B' flag. diff --git a/runtime/doc/channel.txt b/runtime/doc/channel.txt index 2965483465..1750d1cb28 100644 --- a/runtime/doc/channel.txt +++ b/runtime/doc/channel.txt @@ -1,7 +1,7 @@ -*channel.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*channel.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Inter-process communication *channel* diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt index ede9a5ec03..4c607c9179 100644 --- a/runtime/doc/cmdline.txt +++ b/runtime/doc/cmdline.txt @@ -1,7 +1,7 @@ -*cmdline.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*cmdline.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *Cmdline-mode* *Command-line-mode* diff --git a/runtime/doc/debug.txt b/runtime/doc/debug.txt index 4e75c174b8..eee4089a47 100644 --- a/runtime/doc/debug.txt +++ b/runtime/doc/debug.txt @@ -1,7 +1,7 @@ -*debug.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*debug.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Debugging Vim *debug-vim* diff --git a/runtime/doc/debugger.txt b/runtime/doc/debugger.txt index 164dfbf902..6cb01466f8 100644 --- a/runtime/doc/debugger.txt +++ b/runtime/doc/debugger.txt @@ -1,7 +1,7 @@ -*debugger.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*debugger.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Gordon Prieur + VIM REFERENCE MANUAL by Gordon Prieur Debugger Support Features *debugger-support* diff --git a/runtime/doc/develop.txt b/runtime/doc/develop.txt index 922da72727..8526926d58 100644 --- a/runtime/doc/develop.txt +++ b/runtime/doc/develop.txt @@ -1,7 +1,7 @@ -*develop.txt* For Vim version 9.1. Last change: 2025 Oct 09 +*develop.txt* For Vim version 9.1. Last change: 2025 Dec 13 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Development of Vim. *development* @@ -153,7 +153,7 @@ VIM IS... NOT *design-not* everything but the kitchen sink, but some people say that you can clean one with it. ;-)" To use Vim with gdb see |terminal-debugger|. Other (older) tools can be - found at http://www.agide.org (link seems dead) and http://clewn.sf.net. + found at http://clewn.sf.net. - Vim is not a fancy GUI editor that tries to look nice at the cost of being less consistent over all platforms. But functional GUI features are welcomed. diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt index 419373a8de..8ff2937f00 100644 --- a/runtime/doc/diff.txt +++ b/runtime/doc/diff.txt @@ -1,7 +1,7 @@ -*diff.txt* For Vim version 9.1. Last change: 2025 Oct 14 +*diff.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *diff* *vimdiff* *gvimdiff* *diff-mode* diff --git a/runtime/doc/digraph.txt b/runtime/doc/digraph.txt index ac3ae71b5c..575ae822b2 100644 --- a/runtime/doc/digraph.txt +++ b/runtime/doc/digraph.txt @@ -1,7 +1,7 @@ -*digraph.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*digraph.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Digraphs *digraph* *digraphs* *Digraphs* diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt index 6141dcec12..2e75fb9a80 100644 --- a/runtime/doc/editing.txt +++ b/runtime/doc/editing.txt @@ -1,7 +1,7 @@ -*editing.txt* For Vim version 9.1. Last change: 2025 Oct 14 +*editing.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Editing files *edit-files* diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 497c1a1b5b..c82e24f133 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1,7 +1,7 @@ -*eval.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*eval.txt* For Vim version 9.1. Last change: 2025 Dec 27 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Expression evaluation *expression* *expr* *E15* *eval* @@ -38,6 +38,7 @@ a remark is given. 12. The sandbox |eval-sandbox| 13. Textlock |textlock| 14. Vim script library |vim-script-library| +15. Clipboard providers |clipboard-providers| Testing support is documented in |testing.txt|. Profiling is documented at |profiling|. @@ -1348,7 +1349,13 @@ To compare Funcrefs to see if they refer to the same function, ignoring bound Dictionary and arguments, use |get()| to get the function name: > if get(Part1, 'name') == get(Part2, 'name') " Part1 and Part2 refer to the same function -< *E1037* +< + *E1437* +An |Object| can only be compared with another |Object|, using only the +"equal", "not equal", "is" and "isnot" operators |expr4|. An |enum| is also a +type of |Object|, and the same rules apply. + + *E1037* Using "is" or "isnot" with a |List|, |Tuple|, |Dictionary| or |Blob| checks whether the expressions are referring to the same |List|, |Tuple|, |Dictionary| or |Blob| instance. A copy of a |List| or |Tuple| is different @@ -2247,7 +2254,14 @@ v:clipmethod The current method of accessing the clipboard that is being x11 X11 selections are being used. none The above methods are unavailable or cannot be used. - See 'clipmethod' for more details. + If it is set to a value not in the above list, then a + clipboard provider with the given name is being used for the + clipboard functionality. See 'clipmethod' for more details. + + *v:clipproviders* +v:clipproviders + A dictionary containing clipboard providers, see + |clipboard-providers| for more information. *v:cmdarg* *cmdarg-variable* v:cmdarg This variable is used for two purposes: @@ -2381,8 +2395,8 @@ v:echospace Number of screen cells that can be used for an `:echo` message available above the last line. *v:errmsg* *errmsg-variable* -v:errmsg Last given error message. It's allowed to set this variable. - Example: > +v:errmsg Last error message that occurred (not necessarily displayed). + It's allowed to set this variable. Example: > :let v:errmsg = "" :silent! next :if v:errmsg != "" @@ -3003,6 +3017,10 @@ v:versionlong Like v:version, but also including the patchlevel in the last v:vim_did_enter Zero until most of startup is done. It is set to one just before |VimEnter| autocommands are triggered. + *v:vim_did_init* *vim_did_init-variable* +v:vim_did_init Zero until initialization is done. It is set to one just + after |vimrc| is sourced and before |load-plugins|. + *v:warningmsg* *warningmsg-variable* v:warningmsg Last given warning message. It's allowed to set this variable. @@ -3709,19 +3727,22 @@ text... *:cat* *:catch* *E603* *E604* *E605* *E654* *E1033* -:cat[ch] /{pattern}/ The following commands until the next `:catch`, +:cat[ch] [/{pattern}/] The following commands until the next `:catch`, `:finally`, or `:endtry` that belongs to the same `:try` as the `:catch` are executed when an exception matching {pattern} is being thrown and has not yet been caught by a previous `:catch`. Otherwise, these commands are skipped. - When {pattern} is omitted all errors are caught. - Examples: > + Pattern can start with "Vim({cmd})" to indicate an + exception that occurred when executing the Ex command + {cmd}. When {pattern} is omitted all errors are + caught. Examples: > :catch /^Vim:Interrupt$/ " catch interrupts (CTRL-C) - :catch /^Vim\%((\a\+)\)\=:E/ " catch all Vim errors - :catch /^Vim\%((\a\+)\)\=:/ " catch errors and interrupts + :catch /^Vim\%((\S\+)\)\=:E/ " catch all Vim errors + :catch /^Vim\%((\S\+)\)\=:/ " catch errors and interrupts :catch /^Vim(write):/ " catch all errors in :write - :catch /^Vim\%((\a\+)\)\=:E123:/ " catch error E123 + :catch /^Vim(!):/ " catch all errors in :! + :catch /^Vim\%((\S\+)\)\=:E123:/ " catch error E123 :catch /my-exception/ " catch user exception :catch /.*/ " catch everything :catch " same as /.*/ @@ -3844,7 +3865,7 @@ text... when the screen is redrawn. *:echow* *:echowin* *:echowindow* -:[N]echow[indow] {expr1} .. +:[N]echow[indow] {expr1} ... Like |:echomsg| but when the messages popup window is available the message is displayed there. This means it will show for three seconds and avoid a @@ -5228,7 +5249,7 @@ $VIMRUNTIME/plugin/openPlugin.vim dist#vim9#Open(file: string) ~ Opens `path` with the system default handler (macOS `open`, Windows -`explorer.exe`, Linux `xdg-open`, …). If the variable |g:Openprg| exists the +`start`, Linux `xdg-open`, …). If the variable |g:Openprg| exists the string specified in the variable is used instead. The |:Open| user command uses file completion for its argument. @@ -5277,5 +5298,117 @@ Usage: >vim :call dist#vim9#Launch() :Launch . < - +============================================================================== +15. Clipboard providers *clipboard-providers* + +The clipboard provider feature allows the "+" |quoteplus| and "*" |quotestar| +registers to be overridden by custom Vim script functions. There can be +multiple providers, and Vim chooses which one to use based on 'clipmethod'. + +Despite the name, it should be treated separate from the clipboard +functionality. It essentially overrides the existing behaviour of the +clipboard registers. + + *clipboard-providers-clipboard* +The clipboard provider feature will respect the "unnamed" and "unnamedplus" +values in the 'clipboard' option. Any other value will be ignored. + + *clipboard-providers-no-clipboard* +If the |+clipboard| feature is not enabled, then the "+" and "*" registers +will not be enabled/available unless |v:clipmethod| is set to a provider. If +it is set to a provider, then the clipboard registers will be exposed despite +not having the |+clipboard| feature. + + *clipboard-providers-plus* +If on a platform that only has the "*" register, then the "+" register will +only be available when |v:clipmethod| is set to a provider. If you want to +check if the "+" is available for use, it can be checked with: > + if has('unnamedplus') +< + *clipboard-providers-clipmethod* +To integrate the providers with Vim's clipboard functionality, the +'clipmethod' option is used on all platforms. The names of clipboard +providers should be put inside the option, and if Vim chooses it, then it +overrides the "+" and "*" registers. Note that the "+" and "*" will not be +saved in the viminfo at all. + + *clipboard-providers-define* +To define a clipboard provider, the |v:clipproviders| vim variable is used. It +is a |dict| where each key is the clipboard provider name, and the value is +another |dict| declaring the "available", "copy", and "paste" callbacks: >vim + let v:clipproviders["myprovider"] = { + \ "available": function("Available"), + \ "paste": { + \ "+": function("Paste"), + \ "*": function("Paste") + \ }, + \ "copy": { + \ "+": function("Copy"), + \ "*": function("Copy") + \ } + \ } + set clipmethod^=myprovider +< +Each callback can either be a name of a function in a string, a |Funcref|, or +a |lambda| expression. + +With the exception of the "available" callback if a callback is not provided, +Vim will not invoke anything, and this is not an error. + + *clipboard-providers-textlock* +In both the "paste" and "copy" callbacks, it is not allowed to change the +buffer text, see |textlock|. + + *clipboard-providers-available* +The "available" callback is optional, does not take any arguments and should +return a |boolean| or non-zero number, which tells Vim if it is available +for use. If it is not, then Vim skips over it and tries the next 'clipmethod' +value. If the "available" callback is not provided, Vim assumes the provider +is always available for use (true). + + *clipboard-providers-paste* +The "paste" callback takes the following arguments in the following order: + 1. Name of the register being accessed, either "+" or "*". + +It should return a |list| or |tuple| containing the following elements in +order: + 1. Register type (and optional width) conforming to |setreg()|. If it + is an empty string, then the type is automatically chosen. + 2. A |list| of strings to return to Vim, each representing a line. + + *clipboard-providers-copy* +The "copy" callback returns nothing and takes the following arguments in the +following order: + 1. Name of the register being accessed, either "+" or "*". + 2. Register type conforming to |getregtype()| + 3. List of strings to use, each representing a line. + +Below is a sample script that makes use of the clipboard provider feature: >vim + func Available() + return v:true + endfunc + + func Copy(reg, type, str) + echom "Register: " .. a:reg + echom "Register type: " .. a:type + echom "Contents: " .. string(a:str) + endfunc + + func Paste(reg) + return ("b40", ["this", "is", "the", a:reg, "register!"]) + endfunc + + let v:clipproviders["test"] = { + \ "available": function("Available"), + \ "copy": { + \ "+": function("Copy"), + \ "*": function("Copy") + \ }, + \ "paste": { + \ "+": function("Paste"), + \ "*": function("Paste") + \ } + \ } + set clipmethod^=test +< vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/doc/farsi.txt b/runtime/doc/farsi.txt index f4474038d4..d5ae408935 100644 --- a/runtime/doc/farsi.txt +++ b/runtime/doc/farsi.txt @@ -1,7 +1,7 @@ -*farsi.txt* For Vim version 9.1. Last change: 2019 May 05 +*farsi.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Mortaza Ghassab Shiran + VIM REFERENCE MANUAL by Mortaza Ghassab Shiran Right to Left and Farsi Mapping for Vim *farsi* *Farsi* diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt index b363b11293..8ec0fa43ad 100644 --- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -1,7 +1,7 @@ -*filetype.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*filetype.txt* For Vim version 9.1. Last change: 2025 Dec 07 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Filetypes *filetype* *file-type* @@ -138,6 +138,7 @@ what kind of file it is. This doesn't always work. A number of global variables can be used to overrule the filetype used for certain extensions: file name variable ~ + *.app g:filetype_app *.asa g:filetype_asa |ft-aspperl-syntax| |ft-aspvbs-syntax| *.asm g:asmsyntax |ft-asm-syntax| diff --git a/runtime/doc/fold.txt b/runtime/doc/fold.txt index 40cff059c6..dd2a0a04b4 100644 --- a/runtime/doc/fold.txt +++ b/runtime/doc/fold.txt @@ -1,7 +1,7 @@ -*fold.txt* For Vim version 9.1. Last change: 2025 Oct 03 +*fold.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Folding *Folding* *folding* *folds* diff --git a/runtime/doc/ft_rust.txt b/runtime/doc/ft_rust.txt index 4f4e3a85e7..b1789b8141 100644 --- a/runtime/doc/ft_rust.txt +++ b/runtime/doc/ft_rust.txt @@ -60,8 +60,8 @@ g:rust_conceal_pub~ *g:rust_recommended_style* g:rust_recommended_style~ Set this option to enable vim indentation and textwidth settings to - conform to style conventions of the rust standard library (i.e. use 4 - spaces for indents and sets 'textwidth' to 99). This option is enabled + conform to style conventions of the Rust style guide (i.e. use 4 + spaces for indents and set 'textwidth' to 100). This option is enabled by default. To disable it: > let g:rust_recommended_style = 0 < diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt index 0096e083fb..60de2a28a5 100644 --- a/runtime/doc/gui.txt +++ b/runtime/doc/gui.txt @@ -1,7 +1,7 @@ -*gui.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*gui.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Vim's Graphical User Interface *gui* *GUI* diff --git a/runtime/doc/gui_w32.txt b/runtime/doc/gui_w32.txt index 1c33ff6962..475b12e962 100644 --- a/runtime/doc/gui_w32.txt +++ b/runtime/doc/gui_w32.txt @@ -1,7 +1,7 @@ -*gui_w32.txt* For Vim version 9.1. Last change: 2025 Oct 11 +*gui_w32.txt* For Vim version 9.1. Last change: 2025 Dec 21 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Vim's Win32 Graphical User Interface *gui-w32* *win32-gui* @@ -504,4 +504,25 @@ To use the system's default title bar colors, set highlighting groups to hi TitleBar guibg=NONE guifg=NONE hi TitleBarNC guibg=NONE guifg=NONE < + +Full Screen *gui-w32-fullscreen* + +To enable fullscreen mode in the Windows GUI version of Vim, add the 's' flag +to the 'guioptions' setting. + +For convenience, you can define a command or mapping to toggle fullscreen mode: +> + command! ToggleFullscreen { + if &guioptions =~# 's' + set guioptions-=s + else + set guioptions+=s + endif + } + + map &go =~# 's' ? ":se go-=s" : ":se go+=s" + +The fullscreen mode will occupy the entire screen area while hiding window +decorations such as the title bar and borders. + vim:tw=78:sw=4:ts=8:noet:ft=help:norl: diff --git a/runtime/doc/gui_x11.txt b/runtime/doc/gui_x11.txt index 7810e3d31a..2d08876b5b 100644 --- a/runtime/doc/gui_x11.txt +++ b/runtime/doc/gui_x11.txt @@ -1,7 +1,7 @@ -*gui_x11.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*gui_x11.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Vim's Graphical User Interface *gui-x11* *GUI-X11* diff --git a/runtime/doc/hangulin.txt b/runtime/doc/hangulin.txt index 3f37d8eb83..a643c2fa40 100644 --- a/runtime/doc/hangulin.txt +++ b/runtime/doc/hangulin.txt @@ -1,7 +1,8 @@ -*hangulin.txt* For Vim version 9.1. Last change: 2019 Nov 21 +*hangulin.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Chi-Deok Hwang and Sung-Hyun Nam + VIM REFERENCE MANUAL by Chi-Deok Hwang and Sung-Hyun Nam + *hangul* Vim had built-in support for hangul, the Korean language, for users without diff --git a/runtime/doc/hebrew.txt b/runtime/doc/hebrew.txt index 64b9c60bc6..2cbd81979a 100644 --- a/runtime/doc/hebrew.txt +++ b/runtime/doc/hebrew.txt @@ -1,7 +1,7 @@ -*hebrew.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*hebrew.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Ron Aaron and Avner Lottem + VIM REFERENCE MANUAL by Ron Aaron and Avner Lottem Hebrew Language support (options & mapping) for Vim *hebrew* diff --git a/runtime/doc/help.txt b/runtime/doc/help.txt index d39292baf2..eabf59529c 100644 --- a/runtime/doc/help.txt +++ b/runtime/doc/help.txt @@ -1,4 +1,4 @@ -*help.txt* For Vim version 9.1. Last change: 2025 Jun 27 +*help.txt* For Vim version 9.1. Last change: 2025 Nov 01 VIM - main help file k @@ -44,7 +44,7 @@ BASIC: |quickref| Overview of the most common commands you will use |tutor| 30-minute interactive course for beginners |copying| About copyrights -|iccf| Helping poor children in Uganda +|Kuwasha| Helping poor children in Uganda |sponsor| Sponsor Vim development, become a registered Vim user |www| Vim on the World Wide Web |bugs| Where to send bug reports diff --git a/runtime/doc/helphelp.txt b/runtime/doc/helphelp.txt index d10cb2c14a..c014e558c1 100644 --- a/runtime/doc/helphelp.txt +++ b/runtime/doc/helphelp.txt @@ -1,7 +1,7 @@ -*helphelp.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*helphelp.txt* For Vim version 9.1. Last change: 2025 Dec 02 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Help on help files *helphelp* @@ -158,11 +158,12 @@ When no argument is given to |:help| the file given with the 'helpfile' option will be opened. Otherwise the specified tag is searched for in all "doc/tags" files in the directories specified in the 'runtimepath' option. -If you would like to open the help in the current window, see this tip: -|help-curwin|. - The initial height of the help window can be set with the 'helpheight' option (default 20). + +If you want to open help on {subject} in the current window, the helpcurwin +optional package can be used. See |package-helpcurwin|. + *help-buffer-options* When the help buffer is created, several local options are set to make sure the help text is displayed as it was intended: diff --git a/runtime/doc/howto.txt b/runtime/doc/howto.txt index 2d8c8b5c4f..596afb83d7 100644 --- a/runtime/doc/howto.txt +++ b/runtime/doc/howto.txt @@ -1,7 +1,7 @@ -*howto.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*howto.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar How to ... *howdoi* *how-do-i* *howto* *how-to* diff --git a/runtime/doc/if_cscop.txt b/runtime/doc/if_cscop.txt index e96a04ecf1..1ecd5ba719 100644 --- a/runtime/doc/if_cscop.txt +++ b/runtime/doc/if_cscop.txt @@ -1,7 +1,8 @@ -*if_cscop.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*if_cscop.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Andy Kahn + VIM REFERENCE MANUAL by Andy Kahn + *cscope* *Cscope* This document explains how to use Vim's cscope interface. diff --git a/runtime/doc/if_lua.txt b/runtime/doc/if_lua.txt index f0d77cffda..20183858d7 100644 --- a/runtime/doc/if_lua.txt +++ b/runtime/doc/if_lua.txt @@ -1,7 +1,7 @@ -*if_lua.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*if_lua.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Luis Carvalho + VIM REFERENCE MANUAL by Luis Carvalho The Lua Interface to Vim *lua* *Lua* diff --git a/runtime/doc/if_mzsch.txt b/runtime/doc/if_mzsch.txt index d76816dbec..8159eb678f 100644 --- a/runtime/doc/if_mzsch.txt +++ b/runtime/doc/if_mzsch.txt @@ -1,7 +1,7 @@ -*if_mzsch.txt* For Vim version 9.1. Last change: 2025 Oct 14 +*if_mzsch.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Sergey Khorev + VIM REFERENCE MANUAL by Sergey Khorev The MzScheme Interface to Vim *mzscheme* *MzScheme* diff --git a/runtime/doc/if_ole.txt b/runtime/doc/if_ole.txt index c546e971a6..c0f1472c6e 100644 --- a/runtime/doc/if_ole.txt +++ b/runtime/doc/if_ole.txt @@ -1,7 +1,7 @@ -*if_ole.txt* For Vim version 9.1. Last change: 2023 Nov 19 +*if_ole.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Paul Moore + VIM REFERENCE MANUAL by Paul Moore The OLE Interface to Vim *ole-interface* diff --git a/runtime/doc/if_perl.txt b/runtime/doc/if_perl.txt index 616c3b31cd..54fd6a0be4 100644 --- a/runtime/doc/if_perl.txt +++ b/runtime/doc/if_perl.txt @@ -1,9 +1,10 @@ -*if_perl.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*if_perl.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Sven Verdoolaege + VIM REFERENCE MANUAL by Sven Verdoolaege and Matt Gerassimof + Perl and Vim *perl* *Perl* 1. Editing Perl files |perl-editing| diff --git a/runtime/doc/if_pyth.txt b/runtime/doc/if_pyth.txt index 0402e2cbbd..65d1c8bedf 100644 --- a/runtime/doc/if_pyth.txt +++ b/runtime/doc/if_pyth.txt @@ -1,7 +1,7 @@ -*if_pyth.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*if_pyth.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Paul Moore + VIM REFERENCE MANUAL by Paul Moore The Python Interface to Vim *python* *Python* diff --git a/runtime/doc/if_ruby.txt b/runtime/doc/if_ruby.txt index c024b48e3c..14558fab1e 100644 --- a/runtime/doc/if_ruby.txt +++ b/runtime/doc/if_ruby.txt @@ -1,7 +1,8 @@ -*if_ruby.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*if_ruby.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Shugo Maeda + VIM REFERENCE MANUAL by Shugo Maeda + The Ruby Interface to Vim *ruby* *Ruby* diff --git a/runtime/doc/if_sniff.txt b/runtime/doc/if_sniff.txt index ff587ad249..eeff3cd5d8 100644 --- a/runtime/doc/if_sniff.txt +++ b/runtime/doc/if_sniff.txt @@ -1,7 +1,7 @@ -*if_sniff.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*if_sniff.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Anton Leherbauer + VIM REFERENCE MANUAL by Anton Leherbauer The SNiFF+ support was removed at patch 7.4.1433. If you want to check it out diff --git a/runtime/doc/if_tcl.txt b/runtime/doc/if_tcl.txt index a5c098297d..c925944023 100644 --- a/runtime/doc/if_tcl.txt +++ b/runtime/doc/if_tcl.txt @@ -1,7 +1,7 @@ -*if_tcl.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*if_tcl.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Ingo Wilken + VIM REFERENCE MANUAL by Ingo Wilken The Tcl Interface to Vim *tcl* *Tcl* *TCL* diff --git a/runtime/doc/indent.txt b/runtime/doc/indent.txt index afd3954654..0be5703687 100644 --- a/runtime/doc/indent.txt +++ b/runtime/doc/indent.txt @@ -1,7 +1,7 @@ -*indent.txt* For Vim version 9.1. Last change: 2025 Oct 14 +*indent.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar This file is about indenting C programs and other files. diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt index 7bda20b248..3e03a5da7c 100644 --- a/runtime/doc/index.txt +++ b/runtime/doc/index.txt @@ -1,7 +1,8 @@ -*index.txt* For Vim version 9.1. Last change: 2025 Aug 06 +*index.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar + *index* This file contains a list of all commands for each mode, with a tag and a @@ -169,7 +170,7 @@ commands in CTRL-X submode *i_CTRL-X_index* |i_CTRL-X_CTRL-Y| CTRL-X CTRL-Y scroll down |i_CTRL-X_CTRL-U| CTRL-X CTRL-U complete with 'completefunc' |i_CTRL-X_CTRL-V| CTRL-X CTRL-V complete like in : command line -|i_CTRL-X_CTRL-Z| CTRL-X CTRL-Z stop completion, keeping the text as-is +|i_CTRL-X_CTRL-Z| CTRL-X CTRL-Z stop completion, text is unchanged |i_CTRL-X_CTRL-]| CTRL-X CTRL-] complete tags |i_CTRL-X_s| CTRL-X s spelling suggestions @@ -807,7 +808,8 @@ tag char note action in Normal mode ~ |g@| g@{motion} call 'operatorfunc' |g~| g~{motion} 2 swap case for Nmove text |g| g 1 same as "gj" -|g| g 1 same as "g$" +|g| g 1 same as "g$" but go to the rightmost + non-blank character instead |g| g 1 same as "g0" |g| g same as g same as diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt index b0bd39a281..4890892197 100644 --- a/runtime/doc/insert.txt +++ b/runtime/doc/insert.txt @@ -1,7 +1,7 @@ -*insert.txt* For Vim version 9.1. Last change: 2025 Oct 17 +*insert.txt* For Vim version 9.1. Last change: 2026 Jan 07 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *Insert* *Insert-mode* @@ -1720,7 +1720,7 @@ Complete: Notes - It doesn't complete command arguments that rely on 'shellcmd' completion - type in Windows and WSL due to general slowness of canditate gathering, + type in Windows and WSL due to general slowness of candidate gathering, e.g. > terminal dir diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt index 46aa9428f3..9595345290 100644 --- a/runtime/doc/intro.txt +++ b/runtime/doc/intro.txt @@ -1,7 +1,7 @@ -*intro.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*intro.txt* For Vim version 9.1. Last change: 2025 Nov 27 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Introduction to Vim *ref* *reference* @@ -275,7 +275,7 @@ Vim would never have become what it is now, without the help of these people! improvements Doug Kearns Runtime file maintainer Foxe Chen Wayland support, new features - glepnir completion feature + glepnir work on improving completion feature, fixes Girish Palya autocompletion (ins/cmdline), omnifunc composing, search/subst completion, and more. Hirohito Higashi lots of patches and fixes @@ -450,6 +450,8 @@ notation meaning equivalent decimal value(s) ~ delete 127 command sequence intro ALT-Esc 155 ** CSI when typed in the GUI ** + operating system command 157 ** + received OSC response ** end-of-line (can be , or , depends on system and 'fileformat') ** diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt index 98ac3e1181..ee46180a65 100644 --- a/runtime/doc/map.txt +++ b/runtime/doc/map.txt @@ -1,7 +1,7 @@ -*map.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*map.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Key mapping, abbreviations and user-defined commands. @@ -1753,7 +1753,7 @@ by default correspond to the current line, last line and the whole buffer, relate to arguments, (loaded) buffers, windows or tab pages. Possible values are (second column is the short name used in listing): - -addr=lines Range of lines (this is the default for -range) + -addr=lines Range of lines (the default for -range) -addr=arguments arg Range for arguments -addr=buffers buf Range for buffers (also not loaded buffers) -addr=loaded_buffers load Range for loaded buffers @@ -1761,8 +1761,7 @@ Possible values are (second column is the short name used in listing): -addr=tabs tab Range for tab pages -addr=quickfix qf Range for quickfix entries -addr=other ? Other kind of range; can use ".", "$" and "%" - as with "lines" (this is the default for - -count) + as with "lines" (the default for -count) Special cases ~ diff --git a/runtime/doc/mbyte.txt b/runtime/doc/mbyte.txt index ea545874c2..9c99f22c4e 100644 --- a/runtime/doc/mbyte.txt +++ b/runtime/doc/mbyte.txt @@ -1,7 +1,7 @@ -*mbyte.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*mbyte.txt* For Vim version 9.1. Last change: 2025 Dec 17 - VIM REFERENCE MANUAL by Bram Moolenaar et al. + VIM REFERENCE MANUAL by Bram Moolenaar et al. Multi-byte support *multibyte* *multi-byte* @@ -601,7 +601,7 @@ Each field means: - AVE: AVERAGE_WIDTH field. Ten times average width in pixels. - CR: CHARSET_REGISTRY field. The name of the charset group. - CE: CHARSET_ENCODING field. The rest of the charset name. For some - charsets, such as JIS X 0208, if this field is 0, code points has + charsets, such as JIS X 0208, if this field is 0, codepoints has the same value as GL, and GR if 1. For example, in case of a 16 dots font corresponding to JIS X 0208, it is @@ -997,8 +997,8 @@ recommended to test with an alternative one. For proper integration with Vim's |+multi_byte_ime| system, changes in the input method's status must be detectable by the `ImmGetOpenStatus()` function -in Vims source code. Currently, some input methods that support multi-language -input may have internal state changes that gVim cannot capture. +in Vim's source code. Currently, some input methods that support +multi-language input may have internal state changes that gVim cannot capture. Cursor color when IME or XIM is on *CursorIM* diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt index 33b8fbdfee..cbbd3f4c34 100644 --- a/runtime/doc/message.txt +++ b/runtime/doc/message.txt @@ -1,7 +1,7 @@ -*message.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*message.txt* For Vim version 9.1. Last change: 2025 Dec 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar This file contains an alphabetical list of messages and error messages that @@ -644,6 +644,22 @@ Set the 'autoread' option if you want to do this automatically. This message is not given when 'buftype' is not empty. Also see the |FileChangedShell| autocommand. +You will be given a dialog with the following options: + +"OK": Dismiss the warning and continue editing. No changes are + loaded, the buffer remains as it is. + +"Load File": Reload the file from disk, replacing the current buffer + contents. Any changes you made in Vim that haven't been saved + will be lost. + +"Load File and Options": + Reload the file from disk and, in addition, apply relevant + file settings, such as indentation, syntax highlighting, text + width, and other filetype-specific options. This ensures the + buffer matches the file's intended configuration according to + your current settings and autocommands. + There is one situation where you get this message even though there is nothing wrong: If you save a file in Windows on the day the daylight saving time starts. It can be fixed in one of these ways: @@ -832,6 +848,8 @@ and the screen is about to be redrawn: like pressing . This makes it impossible to select text though. -> For the GUI clicking the left mouse button in the last line works like pressing . +-> |q| won't start recording into a register (rationale: it is often used as + "quit" prompt key by users) If you accidentally hit or and you want to see the displayed text then use |g<|. This only works when 'more' is set. diff --git a/runtime/doc/mlang.txt b/runtime/doc/mlang.txt index e98e15e1dd..4719126c76 100644 --- a/runtime/doc/mlang.txt +++ b/runtime/doc/mlang.txt @@ -1,7 +1,7 @@ -*mlang.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*mlang.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Multi-language features *multilang* *multi-lang* diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt index e0c9d8ba64..582712fbb0 100644 --- a/runtime/doc/motion.txt +++ b/runtime/doc/motion.txt @@ -1,7 +1,7 @@ -*motion.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*motion.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Cursor motions *cursor-motions* *navigation* diff --git a/runtime/doc/netbeans.txt b/runtime/doc/netbeans.txt index 871302616f..1332a8fb98 100644 --- a/runtime/doc/netbeans.txt +++ b/runtime/doc/netbeans.txt @@ -1,7 +1,7 @@ -*netbeans.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*netbeans.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Gordon Prieur et al. + VIM REFERENCE MANUAL by Gordon Prieur et al. *netbeans* *NetBeans* *netbeans-support* diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 0d8c668e3b..e0406f5fb2 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,7 +1,7 @@ -*options.txt* For Vim version 9.1. Last change: 2025 Oct 28 +*options.txt* For Vim version 9.1. Last change: 2026 Jan 07 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Options *options* @@ -1675,7 +1675,8 @@ A jump table for the options with a short description can be found at |Q_op|. a modified version of the following command in your vimrc file to override it: > :let &cdpath = ',' .. substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g') -< This option cannot be set from a |modeline| or in the |sandbox|, for +< Environment variables are expanded |:set_env|. + This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. (parts of 'cdpath' can be passed to the shell to expand file names). @@ -1819,13 +1820,19 @@ A jump table for the options with a short description can be found at |Q_op|. for X-windows, "" otherwise) global {only in GUI versions or when the |+xterm_clipboard| - or |+wayland_clipboard| features are included} + or |+wayland_clipboard| features or + |+clipboard_provider| features are included} This option is a list of comma-separated names. Note: if one of the items is "exclude:", then you can't add an item after that. Therefore do not append an item with += but use ^= to prepend, e.g.: > set clipboard^=unnamed < When using the GUI see |'go-A'|. + When using the |clipboard-providers| feature, only the "unnamed" and + "unnamedplus" features will be recognized If compiled without the + |+clipboard| feature but compiled with the |+clipboard_provider| + feature, then they will be the only values allowed and the other + values will be invalid. These names are recognized: *clipboard-unnamed* @@ -1847,11 +1854,10 @@ A jump table for the options with a short description can be found at |Q_op|. option, yank operations (but not delete, change or put) will additionally copy the text into register '*'. If Wayland is being used and the compositor does - not support the primary-selection-unstable-v1 - protocol, then the regular selection is used in its - place. Only available with the |+X11| or - |+wayland_clipboard| feature. Availability can be - checked with: > + not support the primary selection then the regular + selection is used in its place. Only available with + the |+X11| or |+wayland_clipboard| feature. + Availability can be checked with: > if has('unnamedplus') < *clipboard-autoselect* @@ -1916,18 +1922,22 @@ A jump table for the options with a short description can be found at |Q_op|. for VMS: "x11", otherwise: "") global - {only when the |+xterm_clipboard| or - |+wayland_clipboard| features are included} - Specifies which method of accessing the system clipboard is used, - depending on which method works first or is available. Supported - methods are: + {only when the |+xterm_clipboard|, |+wayland_clipboard|, + or |+eval| features are included} + Specifies which method of accessing the system clipboard (or clipboard + provider) is used. Methods are tried in the order given; the first + working method is used. Supported methods are: wayland Wayland selections x11 X11 selections + Use a clipboard provider with the given name Note: This option is ignored when either the GUI is running or if Vim is run on a system without Wayland or X11 support, such as Windows or - macOS. The GUI or system way of accessing the clipboard is always - used instead. + macOS. The GUI or system way of accessing the clipboard is used + instead, meaning |v:clipmethod| will be set to "none". The + exception to this is the |clipboard-providers| feature, in which if + a clipboard provider is being used, then it will override the existing + clipboard functionality. The option value is a list of comma separated items. The list is parsed left to right in order, and the first method that Vim @@ -2006,8 +2016,6 @@ A jump table for the options with a short description can be found at |Q_op|. *'commentstring'* *'cms'* *E537* 'commentstring' 'cms' string (default "/* %s */") local to buffer - {not available when compiled without the |+folding| - feature} A template for a comment. The "%s" in the value is replaced with the comment text, and should be padded with a space when possible. Currently used to add markers for folding, see |fold-marker|. Also @@ -2227,11 +2235,13 @@ A jump table for the options with a short description can be found at |Q_op|. *'completefuzzycollect'* *'cfc'* 'completefuzzycollect' 'cfc' string (default: empty) global - A comma-separated list of strings to enable fuzzy collection for - specific |ins-completion| modes, affecting how matches are gathered - during completion. For specified modes, fuzzy matching is used to - find completion candidates instead of the standard prefix-based - matching. This option can contain the following values: + DEPRECATED: This option is no longer used; changing it has no effect. + When 'completeopt' contains "fuzzy", Vim will internally use the + equivalent of: + "keyword,files,whole_line" + + The values below are kept for compatibility and for scripts that + may read this option: keyword keywords in the current file |i_CTRL-X_CTRL-N| keywords with flags ".", "w", |i_CTRL-N| |i_CTRL-P| @@ -2242,10 +2252,6 @@ A jump table for the options with a short description can be found at |Q_op|. whole_line whole lines |i_CTRL-X_CTRL-L| - When using the 'completeopt' "longest" option value, fuzzy collection - can identify the longest common string among the best fuzzy matches - and insert it automatically. - *'completeitemalign'* *'cia'* 'completeitemalign' 'cia' string (default: "abbr,kind,menu") global @@ -2265,12 +2271,7 @@ A jump table for the options with a short description can be found at |Q_op|. fuzzy Enable |fuzzy-matching| for completion candidates. This allows for more flexible and intuitive matching, where characters can be skipped and matches can be found even - if the exact sequence is not typed. Note: This option - does not affect the collection of candidate list, it only - controls how completion candidates are reduced from the - list of alternatives. If you want to use |fuzzy-matching| - to gather more alternatives for your candidate list, - see 'completefuzzycollect'. + if the exact sequence is not typed. longest When 'autocomplete' is not active, only the longest common @@ -3081,6 +3082,7 @@ A jump table for the options with a short description can be found at |Q_op|. To include a comma in a file name precede it with a backslash. Spaces after a comma are ignored, otherwise spaces are included in the file name. See |option-backslash| about using backslashes. + Environment variables are expanded |:set_env|. This has nothing to do with the |Dictionary| variable type. Where to find a list of words? - On FreeBSD, there is the file "/usr/share/dict/words". @@ -3224,9 +3226,10 @@ A jump table for the options with a short description can be found at |Q_op|. internal Use the internal diff library. This is ignored when 'diffexpr' is set. *E960* When running out of memory when writing a - buffer this item will be ignored for diffs - involving that buffer. Set the 'verbose' - option to see when this happens. + buffer or the diff is larger than 1 GB this + item will be ignored for diffs involving that + buffer. Set the 'verbose' option to see when + this happens. iwhite Ignore changes in amount of white space. Adds the "-b" flag to the "diff" command if @@ -4286,7 +4289,7 @@ A jump table for the options with a short description can be found at |Q_op|. *'fsync'* *'fs'* *'nofsync'* *'nofs'* 'fsync' 'fs' boolean (default on) - global + global or local to buffer |global-local| When on, the library function fsync() will be called after writing a file. This will flush a file to disk, ensuring that it is safely written even on filesystems which do metadata-only journaling. This @@ -4295,6 +4298,8 @@ A jump table for the options with a short description can be found at |Q_op|. turning this off increases the chances of data loss after a crash. On systems without an fsync() implementation, this variable is always off. + This is a |global-local| option, so it can be set per buffer, for + example when writing to a slow filesystem. Also see 'swapsync' for controlling fsync() on swap files. 'fsync' also applies to |writefile()| (unless a flag is used to overrule it) and when writing undo files (see |undo-persistence|). @@ -4626,11 +4631,11 @@ A jump table for the options with a short description can be found at |Q_op|. choices. *'go-C'* 'C' Use |hl-TitleBar| and |hl-TitleBarNC| if available. - Currently only works for MS-Window GUI. + Currently only works for MS-Windows GUI. See |gui-w32-title-bar| for details. *'go-d'* 'd' Use dark theme variant if available. Currently only works for - GTK+ GUI. + MS-Windows and GTK+ GUI. *'go-e'* 'e' Add tab pages when indicated with 'showtabline'. 'guitablabel' can be used to change the text in the labels. @@ -4668,6 +4673,12 @@ A jump table for the options with a short description can be found at |Q_op|. *'go-T'* 'T' Include Toolbar. Currently only in Win32, GTK+, Motif, Photon and MacVim GUIs. + *'go-s'* + 's' Enable fullscreen mode. Currently only supported in the + MS-Windows GUI version. When set, the window will occupy the + entire screen and remove window decorations. Define custom + mappings to toggle this mode conveniently. For detailed usage + instructions, see |gui-w32-fullscreen|. *'go-r'* 'r' Right-hand scrollbar is always present. *'go-R'* @@ -5335,23 +5346,6 @@ A jump table for the options with a short description can be found at |Q_op|. and there is a letter before it, the completed part is made uppercase. With 'noinfercase' the match is used as-is. - *'isexpand'* *'ise'* -'isexpand' 'ise' string (default: "") - local to buffer - Defines characters and patterns for completion in insert mode. Used - by the |complete_match()| function to determine the starting position - for completion. This is a comma-separated list of triggers. Each - trigger can be: - - A single character like "." or "/" - - A sequence of characters like "->", "/*", or "/**" - - Note: Use "\\," to add a literal comma as trigger character, see - |option-backslash|. - - Examples: > - set isexpand=.,->,/*,\\, -< - *'insertmode'* *'im'* *'noinsertmode'* *'noim'* 'insertmode' 'im' boolean (default off) global @@ -6183,7 +6177,8 @@ A jump table for the options with a short description can be found at |Q_op|. When the number of matches exceeds this value, Vim shows ">" instead of the exact count to keep searching fast. Note: larger values may impact performance. - The value must be between 1 and 9999. + The value must be between 1 and 9999. See also the |searchcount()| + function. *'menuitems'* *'mis'* 'menuitems' 'mis' number (default 25) @@ -6254,7 +6249,7 @@ A jump table for the options with a short description can be found at |Q_op|. :set mkspellmem=900000,3000,800 < If you have less than 512 Mbyte |:mkspell| may fail for some languages, no matter what you set 'mkspellmem' to. - + Environment variables are expanded |:set_env|. This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. @@ -6677,6 +6672,7 @@ A jump table for the options with a short description can be found at |Q_op|. *'packpath'* *'pp'* 'packpath' 'pp' string (default: see 'runtimepath') Directories used to find packages. See |packages|. + Environment variables are expanded |:set_env|. This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. @@ -7501,6 +7497,7 @@ A jump table for the options with a short description can be found at |Q_op|. runtime files. When Vim is started with |--clean| the home directory entries are not included. + Environment variables are expanded |:set_env|. This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. @@ -8002,7 +7999,8 @@ A jump table for the options with a short description can be found at |Q_op|. "search hit TOP, continuing at BOTTOM" messages are only indicated by a "W" (Mnemonic: Wrapped) letter before the search count statistics. The maximum limit can be set with - the 'maxsearchcount' option. + the 'maxsearchcount' option, see also |searchcount()| + function. This gives you the opportunity to avoid that a change between buffers requires you to hit , but still gives as useful a message as @@ -8279,7 +8277,7 @@ A jump table for the options with a short description can be found at |Q_op|. when it is turned off. It is also reset when 'compatible' is set. The 'L' flag in 'cpoptions' alters tab behavior when 'list' is - enabled. See also |ins-expandtab| ans user manual section |30.5| for + enabled. See also |ins-expandtab| and user manual section |30.5| for in-depth explanations. If Vim is compiled with the |+vartabs| feature then the value of @@ -8333,6 +8331,7 @@ A jump table for the options with a short description can be found at |Q_op|. name if you want to. However, it will then only be used when 'spellfile' is set to it, for entries in 'spelllang' only files without region name will be found. + Environment variables are expanded |:set_env|. This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. @@ -8460,7 +8459,7 @@ A jump table for the options with a short description can be found at |Q_op|. Only one of "best", "double" or "fast" may be used. The others may appear several times in any order. Example: > :set sps=file:~/.vim/sugg,best,expr:MySuggest() -< +< Environment variables are expanded |:set_env|. This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. @@ -9298,8 +9297,9 @@ A jump table for the options with a short description can be found at |Q_op|. name. See |option-backslash| about using backslashes. The use of |:set+=| and |:set-=| is preferred when adding or removing directories from the list. This avoids problems when a future version uses - another default. Backticks cannot be used in this option for security - reasons. + another default. + Environment variables are expanded |:set_env|. + Backticks cannot be used in this option for security reasons. *'thesaurusfunc'* *'tsrfu'* 'thesaurusfunc' 'tsrfu' string (default: empty) @@ -9639,6 +9639,7 @@ A jump table for the options with a short description can be found at |Q_op|. 'ttytype' 'tty' string (default from $TERM) global Alias for 'term', see above. + Environment variables are expanded |:set_env|. *'undodir'* *'udir'* 'undodir' 'udir' string (default ".") @@ -9656,6 +9657,7 @@ A jump table for the options with a short description can be found at |Q_op|. undo file that exists is used. When it cannot be read an error is given, no further entry is used. See |undo-persistence|. + Environment variables are expanded |:set_env|. This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. @@ -9807,6 +9809,7 @@ A jump table for the options with a short description can be found at |Q_op|. Setting 'verbosefile' to a new value is like making it empty first. The difference with |:redir| is that verbose messages are not displayed when 'verbosefile' is set. + Environment variables are expanded |:set_env|. This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. @@ -9821,6 +9824,7 @@ A jump table for the options with a short description can be found at |Q_op|. feature} Name of the directory where to store files for |:mkview|. For $XDG_CONFIG_HOME see |xdg-base-dir|. + Environment variables are expanded |:set_env|. This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. @@ -9976,6 +9980,7 @@ A jump table for the options with a short description can be found at |Q_op|. When equal to "NONE" no viminfo file will be read or written. This option can be set with the |-i| command line flag. The |--clean| command line flag sets it to "NONE". + Environment variables are expanded |:set_env|. This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. diff --git a/runtime/doc/os_390.txt b/runtime/doc/os_390.txt index b30c1b2b06..4d2b7e8a7b 100644 --- a/runtime/doc/os_390.txt +++ b/runtime/doc/os_390.txt @@ -1,7 +1,8 @@ -*os_390.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*os_390.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Ralf Schandl + VIM REFERENCE MANUAL by Ralf Schandl + *zOS* *z/OS* *OS390* *os390* *MVS* This file contains the particulars for the z/OS UNIX version of Vim. diff --git a/runtime/doc/os_amiga.txt b/runtime/doc/os_amiga.txt index 046a24fb94..1fc95cf84b 100644 --- a/runtime/doc/os_amiga.txt +++ b/runtime/doc/os_amiga.txt @@ -1,7 +1,7 @@ -*os_amiga.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*os_amiga.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *Amiga* diff --git a/runtime/doc/os_beos.txt b/runtime/doc/os_beos.txt index 5ac41597ff..5ad853e6ee 100644 --- a/runtime/doc/os_beos.txt +++ b/runtime/doc/os_beos.txt @@ -1,7 +1,7 @@ -*os_beos.txt* For Vim version 9.1. Last change: 2020 Jun 07 +*os_beos.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *beos* *BeOS* *BeBox* diff --git a/runtime/doc/os_dos.txt b/runtime/doc/os_dos.txt index 7e85f7145a..da11d53dc2 100644 --- a/runtime/doc/os_dos.txt +++ b/runtime/doc/os_dos.txt @@ -1,7 +1,7 @@ -*os_dos.txt* For Vim version 9.1. Last change: 2025 Aug 06 +*os_dos.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *dos* *DOS* diff --git a/runtime/doc/os_haiku.txt b/runtime/doc/os_haiku.txt index bdabbb14fa..8ad23c3fa6 100644 --- a/runtime/doc/os_haiku.txt +++ b/runtime/doc/os_haiku.txt @@ -1,7 +1,7 @@ -*os_haiku.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*os_haiku.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *Haiku* diff --git a/runtime/doc/os_mac.txt b/runtime/doc/os_mac.txt index a7760f373f..72759acb30 100644 --- a/runtime/doc/os_mac.txt +++ b/runtime/doc/os_mac.txt @@ -1,7 +1,7 @@ -*os_mac.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*os_mac.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar et al. + VIM REFERENCE MANUAL by Bram Moolenaar et al. *mac* *Mac* *macintosh* *Macintosh* diff --git a/runtime/doc/os_mint.txt b/runtime/doc/os_mint.txt index 4ad0399d79..67f999b553 100644 --- a/runtime/doc/os_mint.txt +++ b/runtime/doc/os_mint.txt @@ -1,7 +1,7 @@ -*os_mint.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*os_mint.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Jens M. Felderhoff + VIM REFERENCE MANUAL by Jens M. Felderhoff *MiNT* *Atari* diff --git a/runtime/doc/os_msdos.txt b/runtime/doc/os_msdos.txt index d6d67f0040..b2cdba4854 100644 --- a/runtime/doc/os_msdos.txt +++ b/runtime/doc/os_msdos.txt @@ -1,7 +1,7 @@ -*os_msdos.txt* For Vim version 9.1. Last change: 2016 Feb 26 +*os_msdos.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *msdos* *ms-dos* *MSDOS* *MS-DOS* diff --git a/runtime/doc/os_os2.txt b/runtime/doc/os_os2.txt index bd24d139ae..69faf08267 100644 --- a/runtime/doc/os_os2.txt +++ b/runtime/doc/os_os2.txt @@ -1,7 +1,7 @@ -*os_os2.txt* For Vim version 9.1. Last change: 2015 Dec 31 +*os_os2.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Paul Slootman + VIM REFERENCE MANUAL by Paul Slootman *os2* *OS2* *OS/2* diff --git a/runtime/doc/os_qnx.txt b/runtime/doc/os_qnx.txt index e55bdf82e3..d4e2f1ee86 100644 --- a/runtime/doc/os_qnx.txt +++ b/runtime/doc/os_qnx.txt @@ -1,7 +1,7 @@ -*os_qnx.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*os_qnx.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Julian Kinraid + VIM REFERENCE MANUAL by Julian Kinraid *QNX* *qnx* diff --git a/runtime/doc/os_risc.txt b/runtime/doc/os_risc.txt index dad3549b98..fb5d57caf3 100644 --- a/runtime/doc/os_risc.txt +++ b/runtime/doc/os_risc.txt @@ -1,7 +1,7 @@ -*os_risc.txt* For Vim version 9.1. Last change: 2011 May 10 +*os_risc.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Thomas Leonard + VIM REFERENCE MANUAL by Thomas Leonard *riscos* *RISCOS* *RISC-OS* diff --git a/runtime/doc/os_unix.txt b/runtime/doc/os_unix.txt index 90069a20b2..029f9998ed 100644 --- a/runtime/doc/os_unix.txt +++ b/runtime/doc/os_unix.txt @@ -1,7 +1,7 @@ -*os_unix.txt* For Vim version 9.1. Last change: 2022 Nov 25 +*os_unix.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *unix* *Unix* diff --git a/runtime/doc/os_vms.txt b/runtime/doc/os_vms.txt index 8a800c10c9..ab072d48b3 100644 --- a/runtime/doc/os_vms.txt +++ b/runtime/doc/os_vms.txt @@ -1,4 +1,4 @@ -*os_vms.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*os_vms.txt* For Vim version 9.1. Last change: 2025 Nov 09 VIM REFERENCE MANUAL diff --git a/runtime/doc/os_win32.txt b/runtime/doc/os_win32.txt index 53b967f896..4831ff43f6 100644 --- a/runtime/doc/os_win32.txt +++ b/runtime/doc/os_win32.txt @@ -1,7 +1,7 @@ -*os_win32.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*os_win32.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by George Reilly + VIM REFERENCE MANUAL by George Reilly *win32* *Win32* *MS-Windows* diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt index 3381694595..6cafb688a7 100644 --- a/runtime/doc/pattern.txt +++ b/runtime/doc/pattern.txt @@ -1,7 +1,7 @@ -*pattern.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*pattern.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Patterns and search commands *pattern-searches* diff --git a/runtime/doc/pi_gzip.txt b/runtime/doc/pi_gzip.txt index cb4fc6b3b8..23e2610da7 100644 --- a/runtime/doc/pi_gzip.txt +++ b/runtime/doc/pi_gzip.txt @@ -1,7 +1,7 @@ -*pi_gzip.txt* For Vim version 9.1. Last change: 2025 Mar 05 +*pi_gzip.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Editing compressed files with Vim *gzip* *bzip2* *compress* diff --git a/runtime/doc/pi_paren.txt b/runtime/doc/pi_paren.txt index 049889699d..81d941313c 100644 --- a/runtime/doc/pi_paren.txt +++ b/runtime/doc/pi_paren.txt @@ -1,7 +1,7 @@ -*pi_paren.txt* For Vim version 9.1. Last change: 2024 Nov 04 +*pi_paren.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Highlighting matching parens *matchparen* diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt index 41f4da5455..5a874552f4 100644 --- a/runtime/doc/popup.txt +++ b/runtime/doc/popup.txt @@ -1,10 +1,10 @@ -*popup.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*popup.txt* For Vim version 9.1. Last change: 2026 Jan 08 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar -Displaying text in a floating window. *popup* *popup-window* *popupwin* +Displaying text in a popup window. *popup* *popup-window* *popupwin* 1. Introduction |popup-intro| diff --git a/runtime/doc/print.txt b/runtime/doc/print.txt index 0c980a0691..845892cae2 100644 --- a/runtime/doc/print.txt +++ b/runtime/doc/print.txt @@ -1,7 +1,7 @@ -*print.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*print.txt* For Vim version 9.1. Last change: 2025 Dec 17 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Printing *printing* @@ -311,7 +311,7 @@ another font will be used as follows: if o: is missing, then use b: Some CJK fonts do not contain characters for codes in the ASCII code range. -Also, some characters in the CJK ASCII code ranges differ in a few code points +Also, some characters in the CJK ASCII code ranges differ in a few codepoints from traditional ASCII characters. There are two additional fields to control printing of characters in the ASCII code range. diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt index a3226020aa..73e4205d7b 100644 --- a/runtime/doc/quickfix.txt +++ b/runtime/doc/quickfix.txt @@ -1,7 +1,7 @@ -*quickfix.txt* For Vim version 9.1. Last change: 2025 Oct 28 +*quickfix.txt* For Vim version 9.1. Last change: 2025 Dec 27 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar This subject is introduced in section |30.1| of the user manual. @@ -1281,6 +1281,17 @@ For writing a compiler plugin, see |write-compiler-plugin|. Use the |compiler-make| plugin to undo the effect of a compiler plugin. +BIOME *compiler-biome* *quickfix-biome* + +Biome check lints JavaScript, TypeScript, JSX, TSX, JSON, JSONC, HTML, Vue, +Svelte, Astro, CSS, GraphQL and GritQL files. + +Commonly used compiler options can be added to 'makeprg' by setting the +b/g:biome_makeprg_params variable. For example (global default is ""): > + + let b:biome_makeprg_params = "--diagnostic-level=error --staged" + + CPPCHECK *quickfix-cppcheck* *compiler-cppcheck* Use g/b:`c_cppcheck_params` to set cppcheck parameters. The global @@ -1643,6 +1654,22 @@ b/g:mypy_makeprg_params variable. For example: > The global default is "--strict --ignore-missing-imports". +PYRIGHT TYPE CHECKER *compiler-pyright* + +Commonly used compiler options can be added to 'makeprg' by setting the +b/g:pyright_makeprg_params variable. + +The global default is "pyright". + +TY TYPE CHECKER *compiler-ty* + +Commonly used compiler options and executable can be set by the +b/g:ty_makeprg variable. For example: > + + let b:ty_makeprg = "uv run ty" + +The global default is "ty --no-progress --color=never". + RUFF LINTER *compiler-ruff* Commonly used compiler options can be added to 'makeprg' by setting the diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt index 99dcc3d0e5..cccf426e50 100644 --- a/runtime/doc/quickref.txt +++ b/runtime/doc/quickref.txt @@ -1,7 +1,8 @@ -*quickref.txt* For Vim version 9.1. Last change: 2025 Aug 23 +*quickref.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar + Quick reference guide diff --git a/runtime/doc/quotes.txt b/runtime/doc/quotes.txt index 0eeb1b6916..590aaae72d 100644 --- a/runtime/doc/quotes.txt +++ b/runtime/doc/quotes.txt @@ -1,7 +1,7 @@ -*quotes.txt* For Vim version 9.1. Last change: 2018 Mar 29 +*quotes.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *quotes* diff --git a/runtime/doc/recover.txt b/runtime/doc/recover.txt index b399b23933..3d919be498 100644 --- a/runtime/doc/recover.txt +++ b/runtime/doc/recover.txt @@ -1,7 +1,7 @@ -*recover.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*recover.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Recovery after a crash *crash-recovery* diff --git a/runtime/doc/remote.txt b/runtime/doc/remote.txt index 2c10813550..f2976577d2 100644 --- a/runtime/doc/remote.txt +++ b/runtime/doc/remote.txt @@ -1,7 +1,7 @@ -*remote.txt* For Vim version 9.1. Last change: 2025 Aug 22 +*remote.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Vim client-server communication *client-server* diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt index d1b2012ced..be31c098eb 100644 --- a/runtime/doc/repeat.txt +++ b/runtime/doc/repeat.txt @@ -1,7 +1,7 @@ -*repeat.txt* For Vim version 9.1. Last change: 2025 Oct 13 +*repeat.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Repeating commands, Vim scripts and debugging *repeating* @@ -328,6 +328,12 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|. you will need to write `filetype plugin indent on` AFTER all `packadd!` commands. + To programmatically decide if `!` is needed during + startup, check |v:vim_did_init|: use `!` if 0 (to not + duplicate |load-plugins| step), no `!` otherwise (to + force load plugin files as otherwise they won't be + loaded automatically). + Also see |pack-add|. {only available when compiled with |+eval|} diff --git a/runtime/doc/rileft.txt b/runtime/doc/rileft.txt index 8589bb6a35..108c996b36 100644 --- a/runtime/doc/rileft.txt +++ b/runtime/doc/rileft.txt @@ -1,7 +1,7 @@ -*rileft.txt* For Vim version 9.1. Last change: 2022 Oct 12 +*rileft.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Avner Lottem + VIM REFERENCE MANUAL by Avner Lottem updated by Nadim Shaikli diff --git a/runtime/doc/russian.txt b/runtime/doc/russian.txt index bf6493d5e3..24b96619dd 100644 --- a/runtime/doc/russian.txt +++ b/runtime/doc/russian.txt @@ -1,7 +1,7 @@ -*russian.txt* For Vim version 9.1. Last change: 2006 Apr 24 +*russian.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Vassily Ragosin + VIM REFERENCE MANUAL by Vassily Ragosin Russian language localization and support in Vim *russian* *Russian* diff --git a/runtime/doc/scroll.txt b/runtime/doc/scroll.txt index f0ec16b6f8..055f8254de 100644 --- a/runtime/doc/scroll.txt +++ b/runtime/doc/scroll.txt @@ -1,7 +1,7 @@ -*scroll.txt* For Vim version 9.1. Last change: 2024 Jul 06 +*scroll.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Scrolling *scrolling* diff --git a/runtime/doc/sign.txt b/runtime/doc/sign.txt index f49f74e944..12982d7e48 100644 --- a/runtime/doc/sign.txt +++ b/runtime/doc/sign.txt @@ -1,7 +1,7 @@ -*sign.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*sign.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Gordon Prieur + VIM REFERENCE MANUAL by Gordon Prieur and Bram Moolenaar diff --git a/runtime/doc/sponsor.txt b/runtime/doc/sponsor.txt index 8a35e29849..fbe67e8d03 100644 --- a/runtime/doc/sponsor.txt +++ b/runtime/doc/sponsor.txt @@ -1,7 +1,7 @@ -*sponsor.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*sponsor.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar @@ -28,30 +28,6 @@ If you would like to support MacVim development itself, visit: https://github.com/sponsors/macvim-dev -REGISTERED VIM USER *register* - -You can become a registered Vim user by sending at least 10 euro. This works -similar to sponsoring Vim, see |sponsor| above. Registration was made -possible for the situation where your boss or bookkeeper may be willing to -register software, but does not like the terms "sponsoring" and "donation". - -More explanations can be found in the |register-faq|. - - -VOTE FOR FEATURES *vote-for-features* - -Note: Voting for features has been discontinued since the passing of |Bram| in -2023. The following two links still work, but they are no longer updated. So -they now only provide a historic view as of summer 2023. - -The voting results appear on the results page, which is visible for everybody: -http://www.vim.org/sponsor/vote_results.php - -Additionally, once you have sent 100 euro or more in total, your name appears -in the "Vim hall of honour": http://www.vim.org/sponsor/hall_of_honour.php -But only if you enable this on your account page. - - HOW TO SEND MONEY *send-money* Credit card Through PayPal, see the PayPal site for information: @@ -64,77 +40,45 @@ Credit card Through PayPal, see the PayPal site for information: In Euro countries a bank transfer is preferred, this has lower costs. -Other methods See |iccf-donations|. +Other methods See |donate|. Include "Vim sponsor" or "Vim registration" in the comment of your money transfer. QUESTIONS AND ANSWERS *sponsor-faq* *register-faq* -Why should I give money? +Why should I give money?~ If you do not show your appreciation for Vim, the development team will be less motivated to fix bugs and add new features. They will do something else instead. -How much money should I send? +How much money should I send?~ That is up to you. The more you give, the more children will be helped. An indication for individuals that use Vim at home: 10 Euro per year. For professional use: 30 Euro per year per person. -How do I become a Vim sponsor or registered Vim user? - -Send money, as explained above |send-money| and include your e-mail address. -When the money has been received you will receive a unique registration key. -This key can be used on the Vim website to get an extra page where you can -choose whether others will be able to see that you donated. There is a link -to this page on your "My Account" page. - - -What is the difference between sponsoring and registering? - -It has a different name. Use the term "registration" if your boss doesn't -like "sponsoring" or "donation". The benefits are the same. - - -How can I send money? +How can I send money?~ See |send-money|. Check the web site for the most recent information: http://www.vim.org/sponsor/ -Why don't you use the SourceForge donation system? - -SourceForge takes 5% of the donations for themselves. If you want to support -SourceForge you can send money to them directly. - - -I cannot afford to send money, may I still use Vim? - -Yes. - - -I did not register Vim, can I use all available features? +I cannot afford to send money, may I still use Vim?~ Yes. -I noticed a bug, do I need to register before I can report it? - -No, suggestions for improving Vim can always be given. For improvements use -the developer |maillist|, for reporting bugs see |bugs|. - - -How about Charityware? +How about Charityware?~ Currently the Vim donations go to |uganda| anyway. Thus it doesn't matter if -you sponsor Vim or ICCF. +you sponsor Vim or Kuwasha. -I donated $$$, now please add feature XYZ! +I donated $$$, now please add feature XYZ!~ There is no direct relation between your donation and the work developers do. Otherwise you would be paying for work and we would have to pay tax over the @@ -142,15 +86,12 @@ donation. If you want to hire one of the developers for specific work, contact them directly, don't use the donation system. -Are the donations tax deductible? +Are the donations tax deductible?~ -That depends on your country. The donations to help the children in |Uganda| -are tax deductible in Holland, Germany, Canada and in the USA. See the ICCF -website https://iccf-holland.org/donate.html (Note: this process is currently -undergoing some changes and will be done differently in the future). +Possibly. Please refer to |Kuwasha| for this question. -Can you send me a bill? +Can you send me a bill?~ No, because there is no relation between the money you send and the work that is done. But a receipt is possible. diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt index 70e4875633..784536b3a1 100644 --- a/runtime/doc/starting.txt +++ b/runtime/doc/starting.txt @@ -1,7 +1,7 @@ -*starting.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*starting.txt* For Vim version 9.1. Last change: 2025 Dec 20 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Starting Vim *starting* @@ -843,6 +843,9 @@ accordingly. Vim proceeds in this order: If Vim was started in Ex mode with the "-s" argument, all following initializations until 4. are skipped. Only the "-u" option is interpreted. + + The |v:vim_did_init| variable is set to 1 after this step is finished. + *evim.vim* a. If Vim was started as |evim| or |eview| or with the |-y| argument, the script $VIMRUNTIME/evim.vim will be loaded. @@ -1285,7 +1288,7 @@ CTRL-Z Suspend Vim, like ":stop". Works in Normal and in Visual mode. In Insert and Command-line mode, the CTRL-Z is inserted as a normal character. In Visual mode Vim goes back to Normal - mode. + mode before suspending. Note: if CTRL-Z undoes a change see |mswin.vim|. diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index b443efe538..0a6e820c13 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -1,4 +1,4 @@ -*syntax.txt* For Vim version 9.1. Last change: 2025 Oct 14 +*syntax.txt* For Vim version 9.1. Last change: 2026 Jan 06 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1125,6 +1125,7 @@ new-generation language oriented to full-scenario intelligence. All highlighting is enabled by default. To disable highlighting for a specific group, set the corresponding variable to 0 in your |vimrc|. All options to disable highlighting are: > + :let g:cangjie_builtin_color = 0 :let g:cangjie_comment_color = 0 :let g:cangjie_identifier_color = 0 :let g:cangjie_keyword_color = 0 diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt index 590221bc36..73a9ddbc02 100644 --- a/runtime/doc/tabpage.txt +++ b/runtime/doc/tabpage.txt @@ -1,7 +1,7 @@ -*tabpage.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*tabpage.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Editing with windows in multiple tab pages. *tab-page* *tabpage* diff --git a/runtime/doc/tags b/runtime/doc/tags index 924e2bbb88..4e2373ff8f 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -9,6 +9,7 @@ $HOME-windows options.txt /*$HOME-windows* $MYGVIMRC gui.txt /*$MYGVIMRC* $MYVIMDIR starting.txt /*$MYVIMDIR* $MYVIMRC starting.txt /*$MYVIMRC* +$NoDefaultCurrentDirectoryInExePath builtin.txt /*$NoDefaultCurrentDirectoryInExePath* $VIM starting.txt /*$VIM* $VIM-use version5.txt /*$VIM-use* $VIMRUNTIME starting.txt /*$VIMRUNTIME* @@ -384,6 +385,7 @@ $quote eval.txt /*$quote* 'go-m' options.txt /*'go-m'* 'go-p' options.txt /*'go-p'* 'go-r' options.txt /*'go-r'* +'go-s' options.txt /*'go-s'* 'go-t' options.txt /*'go-t'* 'go-v' options.txt /*'go-v'* 'gp' options.txt /*'gp'* @@ -457,8 +459,6 @@ $quote eval.txt /*$quote* 'infercase' options.txt /*'infercase'* 'insertmode' options.txt /*'insertmode'* 'is' options.txt /*'is'* -'ise' options.txt /*'ise'* -'isexpand' options.txt /*'isexpand'* 'isf' options.txt /*'isf'* 'isfname' options.txt /*'isfname'* 'isi' options.txt /*'isi'* @@ -1431,6 +1431,7 @@ $quote eval.txt /*$quote* +cindent various.txt /*+cindent* +clientserver various.txt /*+clientserver* +clipboard various.txt /*+clipboard* ++clipboard_provider various.txt /*+clipboard_provider* +clipboard_working various.txt /*+clipboard_working* +cmd editing.txt /*+cmd* +cmdline_compl various.txt /*+cmdline_compl* @@ -3879,6 +3880,7 @@ $quote eval.txt /*$quote* motion.txt /** map.txt /** intro.txt /** + intro.txt /** scroll.txt /** scroll.txt /** map.txt /** @@ -4003,6 +4005,7 @@ $quote eval.txt /*$quote* term.txt /** -xterm term.txt /*-xterm* term.txt /** + intro.txt /** term.txt /** term.txt /** = change.txt /*=* @@ -4721,6 +4724,7 @@ E1433 vim9.txt /*E1433* E1434 vim9.txt /*E1434* E1435 vim9class.txt /*E1435* E1436 vim9class.txt /*E1436* +E1437 eval.txt /*E1437* E144 various.txt /*E144* E145 starting.txt /*E145* E146 change.txt /*E146* @@ -4806,6 +4810,8 @@ E1567 remote.txt /*E1567* E1568 options.txt /*E1568* E1569 builtin.txt /*E1569* E157 sign.txt /*E157* +E1570 builtin.txt /*E1570* +E1571 builtin.txt /*E1571* E158 sign.txt /*E158* E159 sign.txt /*E159* E16 cmdline.txt /*E16* @@ -5794,6 +5800,7 @@ KVim gui_x11.txt /*KVim* KeyInputPre autocmd.txt /*KeyInputPre* Kibaale uganda.txt /*Kibaale* Korean mbyte.txt /*Korean* +Kuwasha uganda.txt /*Kuwasha* L motion.txt /*L* Linux-backspace options.txt /*Linux-backspace* List eval.txt /*List* @@ -5873,7 +5880,6 @@ Neovim intro.txt /*Neovim* NetBSD-backspace options.txt /*NetBSD-backspace* NetBeans netbeans.txt /*NetBeans* NetUserPass() pi_netrw.txt /*NetUserPass()* -NoDefaultCurrentDirectoryInExePath builtin.txt /*NoDefaultCurrentDirectoryInExePath* None eval.txt /*None* Normal intro.txt /*Normal* Normal-mode intro.txt /*Normal-mode* @@ -6792,6 +6798,16 @@ clipboard-autoselectml options.txt /*clipboard-autoselectml* clipboard-autoselectplus options.txt /*clipboard-autoselectplus* clipboard-exclude options.txt /*clipboard-exclude* clipboard-html options.txt /*clipboard-html* +clipboard-providers eval.txt /*clipboard-providers* +clipboard-providers-available eval.txt /*clipboard-providers-available* +clipboard-providers-clipboard eval.txt /*clipboard-providers-clipboard* +clipboard-providers-clipmethod eval.txt /*clipboard-providers-clipmethod* +clipboard-providers-copy eval.txt /*clipboard-providers-copy* +clipboard-providers-define eval.txt /*clipboard-providers-define* +clipboard-providers-no-clipboard eval.txt /*clipboard-providers-no-clipboard* +clipboard-providers-paste eval.txt /*clipboard-providers-paste* +clipboard-providers-plus eval.txt /*clipboard-providers-plus* +clipboard-providers-textlock eval.txt /*clipboard-providers-textlock* clipboard-unnamed options.txt /*clipboard-unnamed* clipboard-unnamedplus options.txt /*clipboard-unnamedplus* clojure-indent indent.txt /*clojure-indent* @@ -6842,6 +6858,7 @@ compile-changes-7 version7.txt /*compile-changes-7* compile-changes-8 version8.txt /*compile-changes-8* compile-changes-9 version9.txt /*compile-changes-9* compile-changes-9.2 version9.txt /*compile-changes-9.2* +compiler-biome quickfix.txt /*compiler-biome* compiler-compaqada ft_ada.txt /*compiler-compaqada* compiler-cppcheck quickfix.txt /*compiler-cppcheck* compiler-decada ft_ada.txt /*compiler-decada* @@ -6859,6 +6876,7 @@ compiler-mypy quickfix.txt /*compiler-mypy* compiler-pandoc quickfix.txt /*compiler-pandoc* compiler-perl quickfix.txt /*compiler-perl* compiler-pylint quickfix.txt /*compiler-pylint* +compiler-pyright quickfix.txt /*compiler-pyright* compiler-pytest quickfix.txt /*compiler-pytest* compiler-pyunit quickfix.txt /*compiler-pyunit* compiler-ruff quickfix.txt /*compiler-ruff* @@ -6867,6 +6885,7 @@ compiler-spotbugs quickfix.txt /*compiler-spotbugs* compiler-tex quickfix.txt /*compiler-tex* compiler-tombi quickfix.txt /*compiler-tombi* compiler-tsc quickfix.txt /*compiler-tsc* +compiler-ty quickfix.txt /*compiler-ty* compiler-typst quickfix.txt /*compiler-typst* compiler-vaxada ft_ada.txt /*compiler-vaxada* compl-current insert.txt /*compl-current* @@ -6901,7 +6920,6 @@ complete_add() builtin.txt /*complete_add()* complete_check() builtin.txt /*complete_check()* complete_info() builtin.txt /*complete_info()* complete_info_mode builtin.txt /*complete_info_mode* -complete_match() builtin.txt /*complete_match()* completed_item-variable eval.txt /*completed_item-variable* completion-functions usr_41.txt /*completion-functions* complex-change change.txt /*complex-change* @@ -6918,6 +6936,7 @@ conversion-server mbyte.txt /*conversion-server* convert-to-HTML syntax.txt /*convert-to-HTML* convert-to-XHTML syntax.txt /*convert-to-XHTML* convert-to-XML syntax.txt /*convert-to-XML* +convert_:function_to_:def vim9.txt /*convert_:function_to_:def* convert_legacy_function_to_vim9 vim9.txt /*convert_legacy_function_to_vim9* copy() builtin.txt /*copy()* copy-diffs diff.txt /*copy-diffs* @@ -8340,6 +8359,7 @@ gui-vert-scroll gui.txt /*gui-vert-scroll* gui-w32 gui_w32.txt /*gui-w32* gui-w32-cmdargs gui_w32.txt /*gui-w32-cmdargs* gui-w32-dialogs gui_w32.txt /*gui-w32-dialogs* +gui-w32-fullscreen gui_w32.txt /*gui-w32-fullscreen* gui-w32-printing gui_w32.txt /*gui-w32-printing* gui-w32-start gui_w32.txt /*gui-w32-start* gui-w32-title-bar gui_w32.txt /*gui-w32-title-bar* @@ -8417,7 +8437,6 @@ help helphelp.txt /*help* help-TOC helphelp.txt /*help-TOC* help-buffer-options helphelp.txt /*help-buffer-options* help-context help.txt /*help-context* -help-curwin tips.txt /*help-curwin* help-notation helphelp.txt /*help-notation* help-summary usr_02.txt /*help-summary* help-tags tags 1 @@ -8708,7 +8727,6 @@ i` motion.txt /*i`* ia64.vim syntax.txt /*ia64.vim* ib motion.txt /*ib* iccf uganda.txt /*iccf* -iccf-donations uganda.txt /*iccf-donations* icon-changed version4.txt /*icon-changed* iconise starting.txt /*iconise* iconize starting.txt /*iconize* @@ -8806,6 +8824,7 @@ instanceof() builtin.txt /*instanceof()* intel-itanium syntax.txt /*intel-itanium* intellimouse-wheel-problems gui_w32.txt /*intellimouse-wheel-problems* interactive-functions usr_41.txt /*interactive-functions* +interface vim9class.txt /*interface* interfaces-5.2 version5.txt /*interfaces-5.2* internal-error message.txt /*internal-error* internal-variables eval.txt /*internal-variables* @@ -9774,6 +9793,7 @@ os_risc.txt os_risc.txt /*os_risc.txt* os_unix.txt os_unix.txt /*os_unix.txt* os_vms.txt os_vms.txt /*os_vms.txt* os_win32.txt os_win32.txt /*os_win32.txt* +osc52-install usr_05.txt /*osc52-install* other-features vi_diff.txt /*other-features* out_buf channel.txt /*out_buf* out_cb channel.txt /*out_cb* @@ -9791,12 +9811,14 @@ package-create repeat.txt /*package-create* package-doc repeat.txt /*package-doc* package-documentation repeat.txt /*package-documentation* package-editorconfig usr_05.txt /*package-editorconfig* +package-helpcurwin tips.txt /*package-helpcurwin* package-helptoc helphelp.txt /*package-helptoc* package-hlyank usr_05.txt /*package-hlyank* package-justify usr_25.txt /*package-justify* package-matchit usr_05.txt /*package-matchit* package-nohlsearch usr_05.txt /*package-nohlsearch* package-open eval.txt /*package-open* +package-osc52 usr_05.txt /*package-osc52* package-termdebug terminal.txt /*package-termdebug* package-translate_example repeat.txt /*package-translate_example* package-translation repeat.txt /*package-translation* @@ -10101,6 +10123,7 @@ quake.vim syntax.txt /*quake.vim* quickfix quickfix.txt /*quickfix* quickfix-6 version6.txt /*quickfix-6* quickfix-ID quickfix.txt /*quickfix-ID* +quickfix-biome quickfix.txt /*quickfix-biome* quickfix-buffer quickfix.txt /*quickfix-buffer* quickfix-changedtick quickfix.txt /*quickfix-changedtick* quickfix-context quickfix.txt /*quickfix-context* @@ -10186,6 +10209,8 @@ recovery recover.txt /*recovery* recursive_mapping map.txt /*recursive_mapping* redo undo.txt /*redo* redo-register undo.txt /*redo-register* +redraw_listener_add() builtin.txt /*redraw_listener_add()* +redraw_listener_remove() builtin.txt /*redraw_listener_remove()* reduce() builtin.txt /*reduce()* ref intro.txt /*ref* reference intro.txt /*reference* @@ -10194,7 +10219,6 @@ reg_executing() builtin.txt /*reg_executing()* reg_recording() builtin.txt /*reg_recording()* regexp pattern.txt /*regexp* regexp-changes-5.4 version5.txt /*regexp-changes-5.4* -register sponsor.txt /*register* register-faq sponsor.txt /*register-faq* register-functions usr_41.txt /*register-functions* register-variable eval.txt /*register-variable* @@ -11124,6 +11148,7 @@ termcap-cursor-shape term.txt /*termcap-cursor-shape* termcap-options term.txt /*termcap-options* termcap-title term.txt /*termcap-title* termda1-variable eval.txt /*termda1-variable* +termdebug terminal.txt /*termdebug* termdebug-commands terminal.txt /*termdebug-commands* termdebug-communication terminal.txt /*termdebug-communication* termdebug-customizing terminal.txt /*termdebug-customizing* @@ -11428,6 +11453,7 @@ v:char eval.txt /*v:char* v:charconvert_from eval.txt /*v:charconvert_from* v:charconvert_to eval.txt /*v:charconvert_to* v:clipmethod eval.txt /*v:clipmethod* +v:clipproviders eval.txt /*v:clipproviders* v:cmdarg eval.txt /*v:cmdarg* v:cmdbang eval.txt /*v:cmdbang* v:collate eval.txt /*v:collate* @@ -11533,6 +11559,7 @@ v:var eval.txt /*v:var* v:version eval.txt /*v:version* v:versionlong eval.txt /*v:versionlong* v:vim_did_enter eval.txt /*v:vim_did_enter* +v:vim_did_init eval.txt /*v:vim_did_init* v:warningmsg eval.txt /*v:warningmsg* v:wayland_display eval.txt /*v:wayland_display* v:windowid eval.txt /*v:windowid* @@ -11768,6 +11795,7 @@ vim9-access-modes vim9class.txt /*vim9-access-modes* vim9-autoload vim9.txt /*vim9-autoload* vim9-boolean vim9.txt /*vim9-boolean* vim9-class vim9class.txt /*vim9-class* +vim9-class-type vim9.txt /*vim9-class-type* vim9-classes vim9.txt /*vim9-classes* vim9-const vim9.txt /*vim9-const* vim9-curly vim9.txt /*vim9-curly* @@ -11775,14 +11803,18 @@ vim9-debug repeat.txt /*vim9-debug* vim9-declaration vim9.txt /*vim9-declaration* vim9-declarations usr_41.txt /*vim9-declarations* vim9-differences vim9.txt /*vim9-differences* +vim9-enum-type vim9.txt /*vim9-enum-type* +vim9-enumvalue-type vim9.txt /*vim9-enumvalue-type* vim9-export vim9.txt /*vim9-export* vim9-false-true vim9.txt /*vim9-false-true* vim9-final vim9.txt /*vim9-final* vim9-func-declaration vim9.txt /*vim9-func-declaration* +vim9-func-type vim9.txt /*vim9-func-type* vim9-function-defined-later vim9.txt /*vim9-function-defined-later* vim9-gotchas vim9.txt /*vim9-gotchas* vim9-ignored-argument vim9.txt /*vim9-ignored-argument* vim9-import vim9.txt /*vim9-import* +vim9-interface-type vim9.txt /*vim9-interface-type* vim9-lambda vim9.txt /*vim9-lambda* vim9-lambda-arguments vim9.txt /*vim9-lambda-arguments* vim9-line-continuation vim9.txt /*vim9-line-continuation* @@ -11791,15 +11823,19 @@ vim9-mix vim9.txt /*vim9-mix* vim9-namespace vim9.txt /*vim9-namespace* vim9-no-dict-function vim9.txt /*vim9-no-dict-function* vim9-no-shorten vim9.txt /*vim9-no-shorten* +vim9-object-type vim9.txt /*vim9-object-type* +vim9-partial-declaration vim9.txt /*vim9-partial-declaration* vim9-rationale vim9.txt /*vim9-rationale* vim9-reload vim9.txt /*vim9-reload* vim9-s-namespace vim9.txt /*vim9-s-namespace* vim9-scopes vim9.txt /*vim9-scopes* vim9-string-index vim9.txt /*vim9-string-index* +vim9-typealias-type vim9.txt /*vim9-typealias-type* vim9-types vim9.txt /*vim9-types* vim9-unpack-ignore vim9.txt /*vim9-unpack-ignore* vim9-user-command vim9.txt /*vim9-user-command* vim9-variable-arguments vim9.txt /*vim9-variable-arguments* +vim9-white-space vim9.txt /*vim9-white-space* vim9.txt vim9.txt /*vim9.txt* vim9class.txt vim9class.txt /*vim9class.txt* vim9script vim9.txt /*vim9script* @@ -11807,6 +11843,7 @@ vim: options.txt /*vim:* vim_announce intro.txt /*vim_announce* vim_dev intro.txt /*vim_dev* vim_did_enter-variable eval.txt /*vim_did_enter-variable* +vim_did_init-variable eval.txt /*vim_did_init-variable* vim_mac intro.txt /*vim_mac* vim_mac_group gui_mac.txt /*vim_mac_group* vim_starting builtin.txt /*vim_starting* @@ -11879,7 +11916,6 @@ vms-notes os_vms.txt /*vms-notes* vms-problems os_vms.txt /*vms-problems* vms-started os_vms.txt /*vms-started* vms-usage os_vms.txt /*vms-usage* -vote-for-features sponsor.txt /*vote-for-features* votes-for-changes todo.txt /*votes-for-changes* vreplace-mode insert.txt /*vreplace-mode* vt100-cursor-keys term.txt /*vt100-cursor-keys* diff --git a/runtime/doc/tagsrch.txt b/runtime/doc/tagsrch.txt index dcd6f05c3e..17f7234639 100644 --- a/runtime/doc/tagsrch.txt +++ b/runtime/doc/tagsrch.txt @@ -1,7 +1,7 @@ -*tagsrch.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*tagsrch.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Tags and special searches *tags-and-searches* diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt index 53a6fc0c9b..505b06a103 100644 --- a/runtime/doc/term.txt +++ b/runtime/doc/term.txt @@ -1,7 +1,7 @@ -*term.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*term.txt* For Vim version 9.1. Last change: 2025 Nov 11 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Terminal information *terminal-info* @@ -1167,7 +1167,8 @@ Mouse clicks can be mapped. The codes for mouse clicks are: The X1 and X2 buttons refer to the extra buttons found on some mice. The 'Microsoft Explorer' mouse has these buttons available to the right thumb. -Currently X1 and X2 only work on MacVim, Win32, and X11 environments. +Currently, X1 and X2 work only on MacVim, Win32 and X11 environments, and in +terminals that support xterm-like mouse functionality. Examples: > :noremap diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt index f7fe330167..8b7df8e406 100644 --- a/runtime/doc/terminal.txt +++ b/runtime/doc/terminal.txt @@ -1,4 +1,4 @@ -*terminal.txt* For Vim version 9.1. Last change: 2025 Oct 14 +*terminal.txt* For Vim version 9.1. Last change: 2026 Jan 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1263,7 +1263,7 @@ Alternatively, press "s" to swap the first and second dump. Do this several times so that you can spot the difference in the context of the text. ============================================================================== -6. Debugging *terminal-debug* *terminal-debugger* *package-termdebug* +6. Debugging *terminal-debug* *terminal-debugger* *package-termdebug* *termdebug* The Terminal debugging plugin can be used to debug a program with gdb and view the source code in a Vim window. Since this is completely contained inside @@ -1877,7 +1877,7 @@ Contributions for termdebug improvements are welcome. However, it is fairly common that during the development process you need some mechanisms like `echo` statements (or similar) to help you in your job. For this reason, you can set: > - let g:termdebug_config['debug'] = true + let g:termdebug_config['debug'] = v:true < This sets the `DEBUG` variable to `true`, which can be referenced in the source code. An example of its usage follows: > diff --git a/runtime/doc/textprop.txt b/runtime/doc/textprop.txt index fbef22842b..87374d6233 100644 --- a/runtime/doc/textprop.txt +++ b/runtime/doc/textprop.txt @@ -1,7 +1,7 @@ -*textprop.txt* For Vim version 9.1. Last change: 2025 Oct 14 +*textprop.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Displaying text with properties attached. *textprop* *text-properties* diff --git a/runtime/doc/tips.txt b/runtime/doc/tips.txt index c362bea164..8a0da14375 100644 --- a/runtime/doc/tips.txt +++ b/runtime/doc/tips.txt @@ -1,7 +1,7 @@ -*tips.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*tips.txt* For Vim version 9.1. Last change: 2025 Dec 02 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Tips and ideas for using Vim *tips* @@ -30,7 +30,7 @@ Executing shell commands in a window |shell-window| Hex editing |hex-editing| Using <> notation in autocommands |autocmd-<>| Highlighting matching parens |match-parens| -Opening help in the current window |help-curwin| +Opening help in the current window |package-helpcurwin| ============================================================================== Editing C programs *C-editing* @@ -544,28 +544,22 @@ A slightly more advanced version is used in the |matchparen| plugin. < ============================================================================== -Opening help in the current window *help-curwin* +Opening help in the current window *package-helpcurwin* -By default, help is displayed in a split window. If you prefer it opens in -the current window, try this custom `:HelpCurwin` command: -> - command -bar -nargs=? -complete=help HelpCurwin execute s:HelpCurwin() - let s:did_open_help = v:false - - function s:HelpCurwin(subject) abort - let mods = 'silent noautocmd keepalt' - if !s:did_open_help - execute mods .. ' help' - execute mods .. ' helpclose' - let s:did_open_help = v:true - endif - if !getcompletion(a:subject, 'help')->empty() - execute mods .. ' edit ' .. &helpfile - set buftype=help - endif - return 'help ' .. a:subject - endfunction -< +By default, help is displayed in a split window. In some scenarios, you may +prefer to open the help in the current window. The optional helpcurwin +package makes this possible. Load the package manually, or in your |vimrc|, +with: >vim + packadd helpcurwin +< +After it has loaded: +- The command `:HelpCurwin` {subject} can be used to open help in the current + window. +- If the current window contains a modified buffer, the plugin asks for + confirmation before replacing it. If confirmed, the buffer becomes + hidden |hidden-buffer|. +- The help file, |helpcurwin.txt|, will be available and describes the plugin + in more details. vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt index cdafaf05e9..14efc5731b 100644 --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 9.1. Last change: 2025 Sep 02 +*todo.txt* For Vim version 9.1. Last change: 2025 Dec 26 VIM REFERENCE MANUAL by Bram Moolenaar @@ -205,11 +205,8 @@ Popup windows: positioned? PopupNew? Could be used to set some options or move it out of the way. (#5737) However, it may also cause trouble, changing the popup of another plugin. -- Should popup_getoptions() also return the mask? #7774 - Add a way to use popup_menu() synchronously: instead of invoking the callback, return the choice. (Ben Jackson, #6534) -- When using a popup for the info of a completion menu, and there is not - enough space, let the popup overlap with the menu. (#4544) - Implement flip option. - Make redrawing more efficient and avoid flicker: - put popup menu also in popup_mask? @@ -309,8 +306,6 @@ Problem with Visual highlight when 'linebreak' and 'showbreak' are set. GUI Scroll test fails on FreeBSD when using Motif. See FIXME in Test_scrollbars in src/test_gui.vim -Support dark mode for MS-Windows: #12282 - Remote command escapes single quote with backslash, should be doubling the single quote in vim_strsave_escaped_ext() #12202. @@ -370,9 +365,6 @@ Can we not request XT key sequences, or reduce them drastically? Issue #10512: Dynamic loading broken with Perl 5.36 Damien has a patch (2022 Dec 4) -Request #11965: Allow several "%=" items in 'statusline', makes it possible -to have text in the center. - Add some kind of ":whathappend" command and functions to make visible what the last few typed keys and executed commands are. To be used when the user wonders what went wrong. Could also be used for statistics #12046. @@ -382,10 +374,6 @@ wonders what went wrong. Could also be used for statistics #12046. - executed command lines - with more verbosity: what scripts/functions/autocommands were executed -NFA regexp does not handle composing characters well: #10286 - [ɔ̃] matches both ɔ and ɔ̃ - \(ɔ\|ɔ̃\) matches ɔ and not ɔ̃ - Is there a way to make 'autowriteall' make a clean exit when the xterm is closed? (Dennis Nazic says files are preserved, okt 28). Perhaps handle TERM like HUP? @@ -419,8 +407,6 @@ In a timer callback, when using ":echo" and then input() the message is overwritten. Could use ":echowin" and call redraw_cmd() in get_user_input(). #11299 -Syntax include problem: #11277. Related to Patch 8.2.2761 - To avoid flicker: add an option that when a screen clear is requested, instead of clearing it draws everything and uses "clear to end of line" for every line. Resetting 't_ut' already causes this? @@ -519,8 +505,6 @@ there is a match do not scan the directory (possibly speeds up :find a lot). globpath() does not use 'wildignorecase' at all? (related to #8350) -mksession uses :buffer instead of :edit in one place but not another. #10629 - Add 'termguiattr' option, use "gui=" attributes in the terminal? Would work with 'termguicolors'. #1740 @@ -538,9 +522,6 @@ when redirecting to a local variable (function or script) storing the value won't work. At least give an error. Is there a way to make it work? #10616 -Completion for ":runtime" should show valid values, not what's in the current -directory. (#11447) - Add a "description" property to mappings. #12205 Add an option to start_timer() to return from the input loop with K_IGNORE. @@ -5786,7 +5767,6 @@ Argument list: Registers: -8 Don't display empty registers with ":display". (Etienne) 8 Add put command that overwrites existing text. Should also work for blocks. Useful to move text around in a table. Works like using "R ^R r" for every line. diff --git a/runtime/doc/uganda.txt b/runtime/doc/uganda.txt index 1abc2bd3ea..a8c7fffc1a 100644 --- a/runtime/doc/uganda.txt +++ b/runtime/doc/uganda.txt @@ -1,23 +1,35 @@ -*uganda.txt* For Vim version 9.1. Last change: 2025 Aug 10 +*uganda.txt* For Vim version 9.1. Last change: 2026 Jan 07 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *uganda* *Uganda* *copying* *copyright* *license* SUMMARY - *iccf* *ICCF* + *Kuwasha* Vim is Charityware. You can use and copy it as much as you like, but you are encouraged to make a donation for needy children in Uganda. Please see |kcc| -below or visit the ICCF web site, available at these URLs: +below or visit the Kuwasha web site, available at the following URL: - https://iccf-holland.org/ - https://www.vim.org/iccf/ - https://www.iccf.nl/ + https://www.kuwasha.net You can also sponsor the development of Vim, see |sponsor|. The money goes to Uganda anyway. + *iccf* *ICCF* +ICCF Holland and Kuwasha~ + +|Bram| Moolenaar's charity, ICCF Holland, has long supported the education of +children in Uganda through the Kibaale Children's Centre. Following Bram's +passing in 2023, ICCF Holland transferred all activities to its sister charity +Kuwasha in Canada and dissolved at the end of 2025. + +Donations from Vim users are still welcome and will continue to go directly to +Uganda. To continue supporting this cause, please send contributions to +Kuwasha. + +License~ + The Open Publication License applies to the Vim documentation, see |manual-copyright|. @@ -53,12 +65,14 @@ II) It is allowed to distribute a modified (or extended) version of Vim, 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 maintainers are listed here: https://github.com/orgs/vim/people. - If this changes it will be announced in appropriate places (most likely - vim.sf.net, www.vim.org and/or comp.editors). 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. + The current maintainers are listed here: + https://github.com/orgs/vim/people + If this changes it will be announced in appropriate places (most + likely vim.sf.net, www.vim.org and/or comp.editors). 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 Vim 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 @@ -185,84 +199,43 @@ medical help. Since 2020 a maternity ward was added and 24/7 service is available. When needed, transport to a hospital is offered. Immunization programs are carried out and help is provided when an epidemic is breaking out (measles and cholera have been a problem). - *donate* -Summer 1994 to summer 1995 I spent a whole year at the centre, working as a -volunteer. I have helped to expand the centre and worked in the area of water -and sanitation. I learned that the help that the KCC provides really helps. -When I came back to Holland, I wanted to continue supporting KCC. To do this -I'm raising funds and organizing the sponsorship program. Please consider one -of these possibilities: - -1. Sponsor a child in primary school: 17 euro a month (or more). -2. Sponsor a child in secondary school: 25 euro a month (or more). -3. Sponsor the clinic: Any amount a month or quarter -4. A one-time donation - -Compared with other organizations that do child sponsorship the amounts are -very low. This is because the money goes directly to the centre. Less than -5% is used for administration. This is possible because this is a small -organization that works with volunteers. If you would like to sponsor a -child, you should have the intention to do this for at least one year. - -How do you know that the money will be spent right? First of all you have my -personal guarantee as the author of Vim. I trust the people that are working -at the centre, I know them personally. Furthermore, the centre has been + +Summer 1994 to summer 1995 Bram spent a whole year at the centre, working as a +volunteer. Bram helped to expand the centre and worked in the area of water +and sanitation. Bram learned that the help that the KCC provides really +helps. When Bram came back to Holland, he wanted to continue supporting KCC. +To do this he has been raising funds and organizing the sponsorship program. + +How do you know that the money will be spent right? First of all you have the +personal guarantee of Bram as the author of Vim, who knew the people working +at the centre personally. Furthermore, the centre has been co-sponsored and inspected by World Vision, Save the Children Fund and is now -under the supervision of Pacific Academy Outreach Society. The centre is -visited about once a year to check the progress (at our own cost). I have -visited the centre myself many times, starting in 1993. The visit reports are -on the ICCF web site. +under the supervision of Pacific Academy Outreach Society. Bram has +visited the centre many times, starting in 1993. The visit reports are +have been shared on the ICCF web site (may no longer be available). -If you have any further questions, send e-mail: . +If you have any further questions, send an e-mail: info@kuwasha.net. The address of the centre is: Kibaale Children's Centre p.o. box 1658 Masaka, Uganda, East Africa -Sending money: *iccf-donations* - -Check the ICCF web site for the latest information! See |iccf| for the URL. - + *donate* +Sending money: -USA: The methods mentioned below can be used. - If you must send a check send it to our Canadian partner: - https://www.kuwasha.net/ +Check the Kuwasha web site for the latest information! -Canada: Contact Kuwasha in Surrey, Canada. They take care of the - Canadian sponsors for the children in Kibaale. Kuwasha - forwards 100% of the money to the project in Uganda. You can - send them a one time donation directly. Look on their site for information about sponsorship: - https://www.kuwasha.net/ + https://www.kuwasha.net/ If you make a donation to Kuwasha you will receive a tax receipt which can be submitted with your tax return. -Holland: Transfer to the account of "Stichting ICCF Holland" in - Amersfoort. This will allow for tax deduction if you live in - Holland. ING bank, IBAN: NL95 INGB 0004 5487 74 - -Germany: It is possible to make donations that allow for a tax return. - Check the ICCF web site for the latest information: - https://iccf-holland.org/germany.html - -Europe: Use a bank transfer if possible. See "Others" below for the - swift code and IBAN number. - Any other method should work. Ask for information about - sponsorship. - Credit Card: You can use PayPal to send money with a Credit card. This is the most widely used Internet based payment system. It's really simple to use. Use this link to find more info: https://www.paypal.com/en_US/mrb/pal=XAC62PML3GF8Q The e-mail address for sending the money to is: - Bram@iccf-holland.org - -Others: Transfer to this account if possible: - ING bank: IBAN: NL95 INGB 0004 5487 74 - Swift code: INGBNL2A - under the name "stichting ICCF Holland", Amersfoort - Checks are not accepted. - + info@kuwasha.net vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/doc/undo.txt b/runtime/doc/undo.txt index e8a0417eed..2726013460 100644 --- a/runtime/doc/undo.txt +++ b/runtime/doc/undo.txt @@ -1,4 +1,4 @@ -*undo.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*undo.txt* For Vim version 9.1. Last change: 2025 Nov 09 VIM REFERENCE MANUAL by Bram Moolenaar diff --git a/runtime/doc/userfunc.txt b/runtime/doc/userfunc.txt index aa8ed9ec8c..6ecfd26538 100644 --- a/runtime/doc/userfunc.txt +++ b/runtime/doc/userfunc.txt @@ -1,4 +1,4 @@ -*userfunc.txt* For Vim version 9.1. Last change: 2025 Oct 28 +*userfunc.txt* For Vim version 9.1. Last change: 2025 Dec 20 VIM REFERENCE MANUAL by Bram Moolenaar @@ -80,11 +80,11 @@ See |:verbose-cmd| for more information. matching |:endfunction|. *E1267* The name must be made of alphanumeric characters and - '_', and must start with a capital or "s:" (see - above). Note that using "b:" or "g:" is not allowed. - (since patch 7.4.260 E884 is given if the function - name has a colon in the name, e.g. for "foo:bar()". - Before that patch no error was given). + '_' and must start with a capital or "s:" (see above). + Note that using "b:", "l:", etc. is not allowed (since + patch 7.4.260 E884 is given if the function name has a + colon, e.g. for "foo:bar()"), while a leading "g:" is + skipped and still requires a following capital letter. {name} can also be a |Dictionary| entry that is a |Funcref|: > diff --git a/runtime/doc/usr_01.txt b/runtime/doc/usr_01.txt index 704c1d4774..3911eba3ca 100644 --- a/runtime/doc/usr_01.txt +++ b/runtime/doc/usr_01.txt @@ -1,7 +1,7 @@ -*usr_01.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_01.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar About the manuals @@ -194,7 +194,7 @@ manual. Not only by providing literal text, but also by setting the tone and style. If you make money through selling the manuals, you are strongly encouraged to -donate part of the profit to help AIDS victims in Uganda. See |iccf|. +donate part of the profit to help AIDS victims in Uganda. See |Kuwasha|. ============================================================================== diff --git a/runtime/doc/usr_02.txt b/runtime/doc/usr_02.txt index 6bb860fbed..b3cdabc9f8 100644 --- a/runtime/doc/usr_02.txt +++ b/runtime/doc/usr_02.txt @@ -1,7 +1,7 @@ -*usr_02.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_02.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar The first steps in Vim @@ -522,8 +522,8 @@ Summary: *help-summary* > < You can see the user guide topics |03.9| and |usr_27.txt| in the introduction. -3) Options are enclosed in single apostrophes. To go to the help topic for the - list option: > +3) Options are enclosed in single apostrophes. To go to the help topic for + the list option: > :help 'list' < If you only know you are looking for a certain option, you can also do: > :help options.txt diff --git a/runtime/doc/usr_03.txt b/runtime/doc/usr_03.txt index c5b5fe95e6..2155e3de4f 100644 --- a/runtime/doc/usr_03.txt +++ b/runtime/doc/usr_03.txt @@ -1,7 +1,7 @@ -*usr_03.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_03.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Moving around diff --git a/runtime/doc/usr_04.txt b/runtime/doc/usr_04.txt index 60fb09a215..6010979763 100644 --- a/runtime/doc/usr_04.txt +++ b/runtime/doc/usr_04.txt @@ -1,7 +1,7 @@ -*usr_04.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_04.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Making small changes diff --git a/runtime/doc/usr_05.txt b/runtime/doc/usr_05.txt index 1be470e132..c528c09a85 100644 --- a/runtime/doc/usr_05.txt +++ b/runtime/doc/usr_05.txt @@ -1,7 +1,7 @@ -*usr_05.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_05.txt* For Vim version 9.1. Last change: 2025 Dec 15 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Set your settings @@ -338,8 +338,8 @@ This only works in a Vim script file, not when typing commands at the command line. > - command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis - \ | wincmd p | diffthis + command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ + \ | diffthis | wincmd p | diffthis This adds the ":DiffOrig" command. Use this in a modified buffer to see the differences with the file it was loaded from. See |diff| and |:DiffOrig|. @@ -399,13 +399,17 @@ The ":map" command (with no arguments) lists your current mappings. At least the ones for Normal mode. More about mappings in section |40.1|. ============================================================================== -*05.5* Adding a package *add-package* *matchit-install* *package-matchit* +*05.5* Adding a package *add-package* A package is a set of files that you can add to Vim. There are two kinds of packages: optional and automatically loaded on startup. The Vim distribution comes with a few packages that you can optionally use. -For example, the matchit plugin. This plugin makes the "%" command jump to + +------------------------------------------------------------------------------ +Adding the matchit package *matchit-install* *package-matchit* +------------------------------------------------------------------------------ +For example, the matchit package This plugin makes the "%" command jump to matching HTML tags, if/else/endif in Vim scripts, etc. Very useful, although it's not backwards compatible (that's why it is not enabled by default). @@ -434,7 +438,9 @@ an archive or as a repository. For an archive you can follow these steps: Here "fancytext" is the name of the package, it can be anything else. +------------------------------------------------------------------------------ Adding the editorconfig package *editorconfig-install* *package-editorconfig* +------------------------------------------------------------------------------ Similar to the matchit package, to load the distributed editorconfig plugin when Vim starts, add the following line to your vimrc file: > @@ -444,7 +450,9 @@ After restarting your Vim, the plugin is active and you can read about it at: > :h editorconfig.txt +------------------------------------------------------------------------------ Adding the comment package *comment-install* *package-comment* +------------------------------------------------------------------------------ Load the plugin with this command: > packadd comment @@ -457,7 +465,9 @@ the package loaded. Once the package is loaded, read about it at: > :h comment.txt +------------------------------------------------------------------------------ Adding the nohlsearch package *nohlsearch-install* *package-nohlsearch* +------------------------------------------------------------------------------ Load the plugin with this command: > packadd nohlsearch @@ -471,7 +481,9 @@ To disable the effect of the plugin after it has been loaded: > au! nohlsearch < +------------------------------------------------------------------------------ Adding the highlight-yank package *hlyank-install* *package-hlyank* +------------------------------------------------------------------------------ Load the plugin with this command: > packadd hlyank @@ -497,6 +509,20 @@ To highlight in visual mode, use: > To disable the effect of the plugin after it has been loaded: > au! hlyank +------------------------------------------------------------------------------ +Adding the osc52 package *osc52-install* *package-osc52* +------------------------------------------------------------------------------ + +Load the plugin with this command: > + packadd osc52 +< +The osc52.vim package provides support for the OSC 52 terminal command, which +allows an application to access the clipboard by communicating directly with +your terminal. + +Once the package is loaded, read about it at: > + :h osc52.txt + More information about packages can be found here: |packages|. ============================================================================== @@ -539,7 +565,8 @@ when you use Vim. There are only two steps for adding a global plugin: GETTING A GLOBAL PLUGIN Where can you find plugins? -- Some are always loaded, you can see them in the directory $VIMRUNTIME/plugin. +- Some are always loaded, you can see them in the directory + $VIMRUNTIME/plugin. - Some come with Vim. You can find them in the directory $VIMRUNTIME/macros and its sub-directories and under $VIM/vimfiles/pack/dist/opt/. - Download from the net. There is a large collection on http://www.vim.org. diff --git a/runtime/doc/usr_06.txt b/runtime/doc/usr_06.txt index d84444db3f..2d20897f8f 100644 --- a/runtime/doc/usr_06.txt +++ b/runtime/doc/usr_06.txt @@ -1,7 +1,7 @@ -*usr_06.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_06.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Using syntax highlighting diff --git a/runtime/doc/usr_07.txt b/runtime/doc/usr_07.txt index 2ac30ec26b..d02a4a2f61 100644 --- a/runtime/doc/usr_07.txt +++ b/runtime/doc/usr_07.txt @@ -1,7 +1,7 @@ -*usr_07.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_07.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Editing more than one file diff --git a/runtime/doc/usr_08.txt b/runtime/doc/usr_08.txt index 1237c363fa..38eb6ec14a 100644 --- a/runtime/doc/usr_08.txt +++ b/runtime/doc/usr_08.txt @@ -1,7 +1,7 @@ -*usr_08.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_08.txt* For Vim version 9.1. Last change: 2025 Nov 26 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Splitting windows @@ -444,7 +444,8 @@ To go the other way use: > [c -Prepended a count to jump further away. +Prepend a count to jump further away. Thus "4]c" jumps to the fourth next +change, and "3[c" jumps to the third previous change. REMOVING CHANGES diff --git a/runtime/doc/usr_09.txt b/runtime/doc/usr_09.txt index 666dbd4e98..556d81c1a4 100644 --- a/runtime/doc/usr_09.txt +++ b/runtime/doc/usr_09.txt @@ -1,7 +1,7 @@ -*usr_09.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_09.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Using the GUI @@ -132,8 +132,8 @@ select text in a standard manner. The X Window system also has a standard system for using the mouse. Unfortunately, these two standards are not the same. Fortunately, you can customize Vim. You can make the behavior of the mouse -work like an X Window system mouse or a Microsoft Windows mouse. The following -command makes the mouse behave like an X Window mouse: > +work like an X Window system mouse or a Microsoft Windows mouse. The +following command makes the mouse behave like an X Window mouse: > :behave xterm diff --git a/runtime/doc/usr_10.txt b/runtime/doc/usr_10.txt index ebf4bab40f..d943c97390 100644 --- a/runtime/doc/usr_10.txt +++ b/runtime/doc/usr_10.txt @@ -1,7 +1,7 @@ -*usr_10.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_10.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Making big changes @@ -296,8 +296,8 @@ five lines before the last line in the file. USING MARKS -Instead of figuring out the line numbers of certain positions, remembering them -and typing them in a range, you can use marks. +Instead of figuring out the line numbers of certain positions, remembering +them and typing them in a range, you can use marks. Place the marks as mentioned in chapter 3. For example, use "mt" to mark the top of an area and "mb" to mark the bottom. Then you can use this range to specify the lines between the marks (including the lines with the marks): > @@ -736,9 +736,10 @@ of the program replaces these lines. line 44 line 55 last line last line -The "!!" command filters the current line through a filter. In Unix the "date" -command prints the current time and date. "!!date" replaces the current -line with the output of "date". This is useful to add a timestamp to a file. +The "!!" command filters the current line through a filter. In Unix the +"date" command prints the current time and date. "!!date" replaces the +current line with the output of "date". This is useful to add a timestamp to +a file. Note: There is a difference between "!cmd" (e.g. using it without any file range) and "{range}!cmd". While the former will simply execute the external diff --git a/runtime/doc/usr_11.txt b/runtime/doc/usr_11.txt index f33daf6821..c6081ad60d 100644 --- a/runtime/doc/usr_11.txt +++ b/runtime/doc/usr_11.txt @@ -1,7 +1,7 @@ -*usr_11.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_11.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Recovering from a crash diff --git a/runtime/doc/usr_12.txt b/runtime/doc/usr_12.txt index 4ca4a8c245..5aa688b8d8 100644 --- a/runtime/doc/usr_12.txt +++ b/runtime/doc/usr_12.txt @@ -1,7 +1,7 @@ -*usr_12.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_12.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Clever tricks diff --git a/runtime/doc/usr_20.txt b/runtime/doc/usr_20.txt index 7bd2faa3f6..8e999fc814 100644 --- a/runtime/doc/usr_20.txt +++ b/runtime/doc/usr_20.txt @@ -1,7 +1,7 @@ -*usr_20.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_20.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Typing command-line commands quickly diff --git a/runtime/doc/usr_21.txt b/runtime/doc/usr_21.txt index 8621887a49..7e5d361542 100644 --- a/runtime/doc/usr_21.txt +++ b/runtime/doc/usr_21.txt @@ -1,7 +1,7 @@ -*usr_21.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_21.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Go away and come back diff --git a/runtime/doc/usr_22.txt b/runtime/doc/usr_22.txt index d03cb53fe2..cb5700ac6a 100644 --- a/runtime/doc/usr_22.txt +++ b/runtime/doc/usr_22.txt @@ -1,7 +1,7 @@ -*usr_22.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_22.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Finding the file to edit @@ -30,15 +30,15 @@ Vim has a plugin that makes it possible to edit a directory. Try this: > Through the magic of autocommands and Vim scripts, the window will be filled with the contents of the directory. It looks like this (slightly cleaned up -so that it fits within 80 chars): > +so that it fits within 78 chars): > - " =========================================================================== - " Netrw Directory Listing (netrw v180) + " ========================================================================== + " Netrw Directory Listing (netrw v180) " /path/to/vim/runtime/doc " Sorted by name " Sort sequence: [\/]$,*,\(\.bak\|\~\|\.o\|\.h\|\.info\|\.swp\)[*@]\=$ " Quick Help: :help -:go up dir D:delete R:rename s:sort-by x:special - " =========================================================================== + " ========================================================================== ../ ./ check/ diff --git a/runtime/doc/usr_23.txt b/runtime/doc/usr_23.txt index e5ba25aee5..34b8fa0b19 100644 --- a/runtime/doc/usr_23.txt +++ b/runtime/doc/usr_23.txt @@ -1,7 +1,7 @@ -*usr_23.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_23.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Editing other files diff --git a/runtime/doc/usr_24.txt b/runtime/doc/usr_24.txt index 16a7063531..22b41f790e 100644 --- a/runtime/doc/usr_24.txt +++ b/runtime/doc/usr_24.txt @@ -1,7 +1,7 @@ -*usr_24.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_24.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Inserting quickly @@ -567,8 +567,8 @@ that combination. Thus CTRL-K dP also works. Since there is no digraph for Note: The digraphs depend on the character set that Vim assumes you are - using. Always use ":digraphs" to find out which digraphs are currently - available. + using. Always use ":digraphs" to find out which digraphs are + currently available. You can define your own digraphs by specifying the target character with a decimal number. Example: > diff --git a/runtime/doc/usr_25.txt b/runtime/doc/usr_25.txt index 71e96c7767..62aa55e108 100644 --- a/runtime/doc/usr_25.txt +++ b/runtime/doc/usr_25.txt @@ -1,7 +1,7 @@ -*usr_25.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_25.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Editing formatted text diff --git a/runtime/doc/usr_26.txt b/runtime/doc/usr_26.txt index 3dc54543aa..cda0a22bf2 100644 --- a/runtime/doc/usr_26.txt +++ b/runtime/doc/usr_26.txt @@ -1,7 +1,7 @@ -*usr_26.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_26.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Repeating diff --git a/runtime/doc/usr_27.txt b/runtime/doc/usr_27.txt index ab21e00b24..12facf84b2 100644 --- a/runtime/doc/usr_27.txt +++ b/runtime/doc/usr_27.txt @@ -1,7 +1,7 @@ -*usr_27.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_27.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Search commands and patterns diff --git a/runtime/doc/usr_28.txt b/runtime/doc/usr_28.txt index ad06cc0a69..746e03ee09 100644 --- a/runtime/doc/usr_28.txt +++ b/runtime/doc/usr_28.txt @@ -1,7 +1,7 @@ -*usr_28.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_28.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Folding diff --git a/runtime/doc/usr_29.txt b/runtime/doc/usr_29.txt index fe1a79f789..cb878ce5a6 100644 --- a/runtime/doc/usr_29.txt +++ b/runtime/doc/usr_29.txt @@ -1,7 +1,7 @@ -*usr_29.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_29.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Moving through programs diff --git a/runtime/doc/usr_30.txt b/runtime/doc/usr_30.txt index 8a3873c867..fc209041bc 100644 --- a/runtime/doc/usr_30.txt +++ b/runtime/doc/usr_30.txt @@ -1,7 +1,7 @@ -*usr_30.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_30.txt* For Vim version 9.1. Last change: 2025 Nov 28 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Editing programs @@ -37,9 +37,9 @@ you give) and captures the results: > If errors were generated, they are captured and the editor positions you where the first error occurred. - Take a look at an example ":make" session. (Typical :make sessions generate -far more errors and fewer stupid ones.) After typing ":make" the screen looks -like this: + Take a look at an example ":make" session. (Typical :make sessions +generate far more errors and fewer stupid ones.) After typing ":make" the +screen looks like this: :!make | &tee /tmp/vim215953.err ~ gcc -g -Wall -o prog main.c sub.c ~ @@ -544,7 +544,7 @@ reach the nearest soft tab stop. The following example uses a ------->a To maintain global coherence, one can `:set softtabstop=-1` so that -the value of 'shiftwidth' is use for the number of columns between two soft +the value of 'shiftwidth' is used for the number of columns between two soft tab stops. If you prefer to have different values for 'shiftwidth' and 'softtabstop', diff --git a/runtime/doc/usr_31.txt b/runtime/doc/usr_31.txt index 5e65f6827a..077398272f 100644 --- a/runtime/doc/usr_31.txt +++ b/runtime/doc/usr_31.txt @@ -1,7 +1,7 @@ -*usr_31.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_31.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Exploiting the GUI diff --git a/runtime/doc/usr_32.txt b/runtime/doc/usr_32.txt index ee3ad62a33..0194a9355c 100644 --- a/runtime/doc/usr_32.txt +++ b/runtime/doc/usr_32.txt @@ -1,7 +1,7 @@ -*usr_32.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_32.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar The undo tree diff --git a/runtime/doc/usr_40.txt b/runtime/doc/usr_40.txt index 6517f851e8..12a6069987 100644 --- a/runtime/doc/usr_40.txt +++ b/runtime/doc/usr_40.txt @@ -1,7 +1,7 @@ -*usr_40.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_40.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Make new commands @@ -385,8 +385,8 @@ Some of the other options and keywords are as follows: -count={number} The command can take a count whose default is {number}. The resulting count can be used through the keyword. - -bang You can use a !. If present, using will - result in a !. + -bang You can use a !. If present, using + will result in a !. -register You can specify a register. (The default is the unnamed register.) The register specification is available as @@ -563,9 +563,9 @@ for the cprograms group: > GROUPS -The {group} item, used when defining an autocommand, groups related autocommands -together. This can be used to delete all the autocommands in a certain group, -for example. +The {group} item, used when defining an autocommand, groups related +autocommands together. This can be used to delete all the autocommands in a +certain group, for example. When defining several autocommands for a certain group, use the ":augroup" command. For example, let's define autocommands for C programs: > diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt index aa4aed192e..1ea2fb3869 100644 --- a/runtime/doc/usr_41.txt +++ b/runtime/doc/usr_41.txt @@ -1,7 +1,7 @@ -*usr_41.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_41.txt* For Vim version 9.1. Last change: 2025 Dec 13 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Write a Vim script @@ -764,7 +764,8 @@ String manipulation: *string-functions* charclass() class of a character match() position where a pattern matches in a string matchbufline() all the matches of a pattern in a buffer - matchend() position where a pattern match ends in a string + matchend() position where a pattern match ends in a + string matchfuzzy() fuzzy matches a string in a list of strings matchfuzzypos() fuzzy matches a string in a list of strings matchstr() match of a pattern in a string @@ -841,7 +842,8 @@ List manipulation: *list-functions* indexof() index in a List where an expression is true max() maximum value in a List min() minimum value in a List - count() count number of times a value appears in a List + count() count number of times a value appears in a + List repeat() repeat a List multiple times flatten() flatten a List flattennew() flatten a copy of a List @@ -1135,8 +1137,6 @@ Insert mode completion: *completion-functions* complete_add() add to found matches complete_check() check if completion should be aborted complete_info() get current completion information - complete_match() get insert completion start match col and - trigger text preinserted() check if text is inserted after cursor pumvisible() check if the popup menu is displayed pum_getpos() position and size of popup menu if visible @@ -1246,7 +1246,8 @@ Mappings and Menus: *mapping-functions* Testing: *test-functions* assert_equal() assert that two expressions values are equal assert_equalfile() assert that two file contents are equal - assert_notequal() assert that two expressions values are not equal + assert_notequal() assert that two expressions values are not + equal assert_inrange() assert that an expression is inside a range assert_match() assert that a pattern matches the value assert_notmatch() assert that a pattern does not match the value @@ -1472,6 +1473,9 @@ Various: *various-functions* debugbreak() interrupt a program being debugged + redraw_listener_add() add callbacks to listen for redraws + redraw_listener_remove() remove a redraw listener + MacVim-specific functions showdefinition() look up and show definition of provided string diff --git a/runtime/doc/usr_42.txt b/runtime/doc/usr_42.txt index 9086a619f3..c47bc8207b 100644 --- a/runtime/doc/usr_42.txt +++ b/runtime/doc/usr_42.txt @@ -1,7 +1,7 @@ -*usr_42.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_42.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Add new menus diff --git a/runtime/doc/usr_43.txt b/runtime/doc/usr_43.txt index e7a52392bb..31413c6eba 100644 --- a/runtime/doc/usr_43.txt +++ b/runtime/doc/usr_43.txt @@ -1,7 +1,7 @@ -*usr_43.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_43.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Using filetypes diff --git a/runtime/doc/usr_44.txt b/runtime/doc/usr_44.txt index 12a32e507a..0dba0b0df3 100644 --- a/runtime/doc/usr_44.txt +++ b/runtime/doc/usr_44.txt @@ -1,7 +1,7 @@ -*usr_44.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_44.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Your own syntax highlighted @@ -629,10 +629,10 @@ be included in the next Vim version! ADDING TO AN EXISTING SYNTAX FILE -We were assuming you were adding a completely new syntax file. When an existing -syntax file works, but is missing some items, you can add items in a separate -file. That avoids changing the distributed syntax file, which will be lost -when installing a new version of Vim. +We were assuming you were adding a completely new syntax file. When an +existing syntax file works, but is missing some items, you can add items in a +separate file. That avoids changing the distributed syntax file, which will +be lost when installing a new version of Vim. Write syntax commands in your file, possibly using group names from the existing syntax. For example, to add new variable types to the C syntax file: > diff --git a/runtime/doc/usr_45.txt b/runtime/doc/usr_45.txt index 175d4fc394..cebf259a8c 100644 --- a/runtime/doc/usr_45.txt +++ b/runtime/doc/usr_45.txt @@ -1,7 +1,7 @@ -*usr_45.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_45.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Select your language (locale) diff --git a/runtime/doc/usr_50.txt b/runtime/doc/usr_50.txt index 6082ce2a0b..e846bc1300 100644 --- a/runtime/doc/usr_50.txt +++ b/runtime/doc/usr_50.txt @@ -1,7 +1,7 @@ -*usr_50.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_50.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Advanced Vim script writing diff --git a/runtime/doc/usr_51.txt b/runtime/doc/usr_51.txt index 3b43d2731d..293581e011 100644 --- a/runtime/doc/usr_51.txt +++ b/runtime/doc/usr_51.txt @@ -1,7 +1,7 @@ -*usr_51.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_51.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Write plugins diff --git a/runtime/doc/usr_52.txt b/runtime/doc/usr_52.txt index d013535aee..dc1919bacd 100644 --- a/runtime/doc/usr_52.txt +++ b/runtime/doc/usr_52.txt @@ -1,7 +1,7 @@ -*usr_52.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_52.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Write larger plugins diff --git a/runtime/doc/usr_90.txt b/runtime/doc/usr_90.txt index 2a9dd952ca..ca1b3c6ab5 100644 --- a/runtime/doc/usr_90.txt +++ b/runtime/doc/usr_90.txt @@ -1,7 +1,7 @@ -*usr_90.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_90.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Installing Vim diff --git a/runtime/doc/usr_toc.txt b/runtime/doc/usr_toc.txt index de2ec1dc66..61172d60d6 100644 --- a/runtime/doc/usr_toc.txt +++ b/runtime/doc/usr_toc.txt @@ -1,7 +1,7 @@ -*usr_toc.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*usr_toc.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM USER MANUAL by Bram Moolenaar + VIM USER MANUAL by Bram Moolenaar Table Of Contents *user-manual* *usr* diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt index 299a5ee63c..a11b441088 100644 --- a/runtime/doc/various.txt +++ b/runtime/doc/various.txt @@ -1,7 +1,7 @@ -*various.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*various.txt* For Vim version 9.1. Last change: 2025 Dec 11 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Various commands *various* @@ -379,6 +379,7 @@ T *+cindent* 'cindent', C indenting; Always enabled N *+clientserver* Unix and Win32: Remote invocation |clientserver| *+clipboard* |clipboard| support compiled-in *+clipboard_working* |clipboard| support compiled-in and working + *+clipboard_provider* |clipboard-providers| support compiled-in T *+cmdline_compl* command line completion |cmdline-completion| T *+cmdline_hist* command line history |cmdline-history| T *+cmdline_info* 'showcmd' and 'ruler'; Always enabled since diff --git a/runtime/doc/version4.txt b/runtime/doc/version4.txt index d911cce4ee..a54eded96b 100644 --- a/runtime/doc/version4.txt +++ b/runtime/doc/version4.txt @@ -1,7 +1,7 @@ -*version4.txt* For Vim version 9.1. Last change: 2025 Aug 06 +*version4.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar This document lists the incompatible differences between Vim 3.0 and Vim 4.0. diff --git a/runtime/doc/version5.txt b/runtime/doc/version5.txt index 2f30f8ec9a..d656e2446b 100644 --- a/runtime/doc/version5.txt +++ b/runtime/doc/version5.txt @@ -1,7 +1,7 @@ -*version5.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*version5.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Welcome to Vim Version 5.0! diff --git a/runtime/doc/version6.txt b/runtime/doc/version6.txt index 5f6f0c0e8f..4b98404d80 100644 --- a/runtime/doc/version6.txt +++ b/runtime/doc/version6.txt @@ -1,7 +1,7 @@ -*version6.txt* For Vim version 9.1. Last change: 2025 Jul 22 +*version6.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Welcome to Vim Version 6.0! A large number of features has been added. This diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt index 1aadff31d2..e42c679cdf 100644 --- a/runtime/doc/version7.txt +++ b/runtime/doc/version7.txt @@ -1,7 +1,7 @@ -*version7.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*version7.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *vim7* *version-7.0* *version7.0* diff --git a/runtime/doc/version8.txt b/runtime/doc/version8.txt index cfb6f1e3d7..03d1464504 100644 --- a/runtime/doc/version8.txt +++ b/runtime/doc/version8.txt @@ -1,7 +1,7 @@ -*version8.txt* For Vim version 9.1. Last change: 2025 Jul 21 +*version8.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *vim8* *vim-8* *version-8.0* *version8.0* diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index f40fe49fca..48200b9024 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,7 +1,7 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*version9.txt* For Vim version 9.1. Last change: 2026 Jan 07 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar *vim-9.0* *vim-9* *version-9.0* *version9.0* @@ -52,7 +52,7 @@ remember him! Vim version 9.1 is dedicated to Bram Moolenaar, who passed away on August 3rd 2023 while still working full-time on Vim. The Vim project would not exist without his ongoing passion to lead and develop Vim and the community for more -than 30 years. Bram was also passionate about his |ICCF| foundation to help +than 30 years. Bram was also passionate about his ICCF foundation to help children in Uganda. If you enjoy using Vim, please consider donating! We will miss his guidance, passion and leadership. @@ -41627,8 +41627,9 @@ Other new features ~ ------------------ - Support for Super key mappings in GTK using . -- The new packages |package-comment|, |package-nohlsearch|, |package-hlyank| and - |help-TOC| are included. +- The new optional packages |package-comment|, |package-nohlsearch|, + |package-hlyank|, |help-TOC|, |package-helpcurwin| and |package-osc52| are + included. - An interactive tutor plugin has been included |vim-tutor-mode| and can be started via |:Tutor|. @@ -41653,6 +41654,8 @@ Other new features ~ - |items()| function now supports Blob. +- The clipboard provider feature has been added |clipboard-providers|. + *changed-9.2* Changed~ ------- @@ -41692,6 +41695,8 @@ Completion: ~ - 'smartcase' applies to completion filtering Options: ~ +- 'commentstring' is now available in all builds and no longer requires the + |+folding| feature - the default for 'commentstring' contains whitespace padding to have automatic comments look nicer |comment-install| - 'completeopt' is now a |global-local| option. @@ -41717,7 +41722,12 @@ Options: ~ to ">" by default, indicating text that extends beyond the window width. - 'guioptions': New value |'go-C'| to style the title/caption bar on Windows 11 (see also the below platform specific change). +- 'guioptions': Support darkmode on MS-Windows for menu and title bar using + |'go-d'| (see also the below platform specific change). +- 'guioptions': New value |'go-s'| to support fullscreen on MS-Windows GUI + (see also the below platform specific change). - 'completepopup': Add more values to style popup windows. +- 'fsync' is now a |global-local| option. Ex commands: ~ - allow to specify a priority when defining a new sign |:sign-define| @@ -41746,6 +41756,8 @@ Functions: ~ - |sha256()| also accepts a |Blob| as argument. - |listener_add()| allows to register un-buffered listeners, so that changes are handled as soon as they happen. +- |redraw_listener_add()| and |redraw_listener_remove()| add/remove callbacks + for redrawing events. Plugins~ - |zip| plugin works with PowerShell Core. @@ -41754,7 +41766,13 @@ Platform specific ~ - MS-Winodws: Paths like "\Windows" and "/Windows" are now considered to be absolute paths (to the current drive) and no longer relative. - MS-Windows: The title bar follows the |hl-TitleBar| and |hl-TitleBarNC| - highlighting group |gui-w32-title-bar|. + highlighting group |gui-w32-title-bar| with |'go-C'| +- MS-Windows: Support darkmode for menu and title bar using |'go-d'| +- MS-Windows: Vim no longer searches the current directory for + executables when running external commands; prefix a relative or absolute + path if you want the old behavior |$NoDefaultCurrentDirectoryInExePath|. +- MS-Windows: New value |'go-s'| to support fullscreen on MS-Windows GUI + - macOS: increase default scheduler priority to TASK_DEFAULT_APPLICATION. Others: ~ @@ -41783,6 +41801,11 @@ Others: ~ - Vim triggers the |TermResponseAll| autocommand for any terminal OSC value. - Support CTRL-B and CTRL-F in the |more-prompt|. + +Not Vim related~ +- Updated sponsorship documentation to replace references to ICCF with Kuwasha + International Development Society as Vim's designated charity. + *added-9.2* Added ~ ----- @@ -41795,7 +41818,6 @@ Functions: ~ |blob2str()| convert a blob into a List of strings |bindtextdomain()| set message lookup translation base path |cmdcomplete_info()| get current cmdline completion info -|complete_match()| get completion and trigger info |diff()| diff two Lists of strings |filecopy()| copy a file {from} to {to} |foreach()| apply function to List items @@ -41809,12 +41831,15 @@ Functions: ~ |id()| get unique identifier for a Dict, List, Object, Channel or Blob variable |list2tuple()| turn a List of items into a Tuple +|listener_add()| add a callback to listen to changes |matchbufline()| all the matches of a pattern in a buffer |matchstrlist()| all the matches of a pattern in a List of strings |ngettext()| lookup single/plural message translation |popup_setbuf()| switch to a different buffer in a popup |preinserted()| whether preinserted text has been inserted during completion (see 'completeopt') +|redraw_listener_add()| add callbacks to listen for redraws +|redraw_listener_remove()| remove a redraw listener |str2blob()| convert a List of strings into a blob |test_null_tuple()| return a null tuple |tuple2list()| turn a Tuple of items into a List @@ -41858,11 +41883,13 @@ Commands: ~ Ex-Commands: ~ +|:clipreset| choose a new method for accessing the clipboard |:iput| like |:put| but adjust indent |:pbuffer| Edit buffer [N] from the buffer list in the preview window |:redrawtabpanel| Force updating the 'tabpanel'. |:uniq| Deduplicate text in the current buffer. +|:wlrestore| reinitialize the wayland compositor connection Options: ~ @@ -41871,8 +41898,6 @@ Options: ~ 'autocompletetimeout' initial decay timeout for autocompletion algorithm 'chistory' Size of the quickfix stack |quickfix-stack| 'clipmethod' How to access the clipboard -'completefuzzycollect' Enable fuzzy collection of candidates for (some) - |ins-completion| modes 'completeitemalign' Order of |complete-items| in Insert mode completion popup 'completetimeout' initial decay timeout for CTRL-N and CTRL-P @@ -41880,10 +41905,10 @@ Options: ~ 'eventignorewin' autocommand events that are ignored in a window 'findfunc' Vim function to obtain the results for a |:find| command -'isexpand' defines triggers for completion 'lhistory' Size of the location list stack |quickfix-stack| 'maxsearchcount' Set the maximum number for search-stat |shm-S| 'messagesopt' configure |:messages| and |hit-enter| prompt +'osctimeoutlen' OSC terminator receive timeout 'pumborder' define popup border and decorations 'pummaxwidth' maximum width for the completion popup menu 'showtabpanel' When to show the |tabpanel| @@ -41891,23 +41916,26 @@ Options: ~ 'tabpanel' Optional vertical panel for displaying tabpages |tabpanel| 'tabpanelopt' Optional settings for the |tabpanel| -'t_xo' Terminal uses XON/XOFF handshaking (e.g. vt420) 't_CF' Support for alternate font highlighting terminal code +'t_xo' Terminal uses XON/XOFF handshaking (e.g. vt420) 'winfixbuf' Keep buffer focused in a window 'wlseat' Specify Wayland seat to use for the |wayland| feature 'wlsteal' Steal focus to access the |wayland| clipboard -'wltimeout' Specify the connection timeout for the |wayland| +'wltimeoutlen' Specify the connection timeout for the |wayland| compositor Vim Variables: ~ |v:clipmethod| The current 'clipmethod'. +|v:clipproviders| A dictionary containing clipboard providers + configuration |clipboard-providers|. |v:stacktrace| The most recent caught exception. -|v:t_enumvalue| Value of |enumvalue|. |v:t_enum| Value of |enum| type. +|v:t_enumvalue| Value of |enumvalue|. |v:t_tuple| Value of |Tuple| type. |v:termda1| The escape sequence returned for the primary device attribute query (DA1). |v:termosc| The most recent received OSC response. +|v:vim_did_init| Set once Vim finishes startup initialization. |v:wayland_display| The name of the Wayland display Vim is connected to. Vim Arguments: ~ diff --git a/runtime/doc/vi_diff.txt b/runtime/doc/vi_diff.txt index 83558850eb..eb9a04b6b4 100644 --- a/runtime/doc/vi_diff.txt +++ b/runtime/doc/vi_diff.txt @@ -1,7 +1,7 @@ -*vi_diff.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*vi_diff.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Differences between Vim and Vi *vi-differences* diff --git a/runtime/doc/vietnamese.txt b/runtime/doc/vietnamese.txt index acd2099bda..df6fbf8b53 100644 --- a/runtime/doc/vietnamese.txt +++ b/runtime/doc/vietnamese.txt @@ -1,7 +1,7 @@ -*vietnamese.txt* For Vim version 9.1. Last change: 2025 Aug 06 +*vietnamese.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Phạm Bình An + VIM REFERENCE MANUAL by Phạm Bình An Vietnamese language support in Vim *vietnamese* *Vietnamese* diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt index 7941b83abf..57ebec375f 100644 --- a/runtime/doc/vim9.txt +++ b/runtime/doc/vim9.txt @@ -1,4 +1,4 @@ -*vim9.txt* For Vim version 9.1. Last change: 2025 Oct 06 +*vim9.txt* For Vim version 9.1. Last change: 2025 Dec 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -24,11 +24,12 @@ features in Vim9 script. ------------------------------------------------------------------------------ NOTE: In this vim9.txt help file, the Vim9 script code blocks beginning - with `vim9script` are Vim9 script syntax highlighted. Also, they are - sourceable, meaning you can run them to see what they output. To - source them, use `:'<,'>source` (see |:source-range|), which is done - by visually selecting the line(s) with |V| and typing `:so`. - For example, try it on the following Vim9 script: >vim9 + with `vim9script` (and individual lines starting with `vim9cmd`) are + Vim9 script syntax highlighted. Also, they are sourceable, meaning + you can run them to see what they output. To source them, use + `:'<,'>source` (see |:source-range|), which is done by visually + selecting the line(s) with |V| and typing `:so`. For example, try it + on the following Vim9 script: >vim9 vim9script echowindow "Welcome to Vim9 script!" @@ -63,7 +64,7 @@ dictionary adds quite a lot of overhead. In a Vim9 function this dictionary is not available. Other differences are more subtle, such as how errors are handled. -The Vim9 script syntax and semantics are used in: +Vim9 script syntax, semantics, and behavior apply in: - a function defined with the `:def` command - a script file where the first command is `vim9script` - an autocommand defined in the context of the above @@ -77,18 +78,72 @@ Vim9 script and legacy Vim script can be mixed. There is no requirement to rewrite old scripts, they keep working as before. You may want to use a few `:def` functions for code that needs to be fast. -:vim9[cmd] {cmd} *:vim9* *:vim9cmd* *E1164* - Evaluate and execute {cmd} using Vim9 script syntax and - semantics. Useful when typing a command and in a legacy - script or function. +:vim9[cmd] {cmd} *:vim9* *:vim9cmd* + Evaluate and execute {cmd} using Vim9 script syntax, + semantics, and behavior. Useful when typing a command, + in a `:function`, or a legacy Vim script. + + The following short example shows how a legacy Vim script + command and a :vim9cmd (so Vim9 script context) may appear + similar, though may differ not just syntactically, but also + semantically and behaviorally. >vim + + call popup_notification('entrée'[5:] + \ ->str2list()->string(), #{time: 7000}) + vim9cmd popup_notification('entrée'[5 :] + ->str2list()->string(), {time: 7000}) +< + Notes: 1) The reason for the different output is Vim9 script + uses character indexing whereas legacy Vim script + uses byte indexing - see |vim9-string-index|. + 2) Syntax is different too. In Vim9 script: + - The space in "[5 :]" is mandatory (see + |vim9-white-space|). + - Line continuation with "\" is not required. + - The "#" (to avoid putting quotes around dictionary + keys) is neither required nor allowed - see |#{}|. + + *E1164* + `:vim9cmd` cannot stand alone; it must be followed by a command. + +:leg[acy] {cmd} *:leg* *:legacy* + Evaluate and execute {cmd} using legacy Vim script syntax, + semantics, and behavior. It is only applicable in a Vim9 + script or a `:def` function. Using an equivalent script to + the one, above (see its notes for why the output differs): >vim9 + + vim9script + # Legacy context - so, this creates a popup with [769, 101] + legacy call popup_notification('entrée'[5:] + \ ->str2list()->string(), #{time: 7000}) + # Vim9 script context - so, this creates a pop up with [101] + popup_notification('entrée'[5 :] + ->str2list()->string(), {time: 7000}) +< + Vim9 script script-local variables may be used by prefixing + "s:", like in legacy Vim script. This example shows the + difference in syntax: "k" for the script-local variable in + Vim9 script, "s:k" in the legacy Vim script context. >vim9 + + vim9script + var k: string = "Okay" + echo k + legacy echo s:k +< *E1189* + Using `:legacy` is not allowed in compiled Vim9 script + control flow contexts. For example: >vim9 + + vim9script + def F_1189() + if v:version == 900 + # E1189: Cannot use :legacy with this command: endif + legacy endif + enddef + F_1189() +< *E1234* + `:legacy` cannot stand alone; it must be followed by a command. -:leg[acy] {cmd} *:leg* *:legacy* *E1189* *E1234* - Evaluate and execute {cmd} using legacy script syntax and - semantics. Only useful in a Vim9 script or a :def function. - Note that {cmd} cannot use local variables, since it is parsed - with legacy expression syntax. -See some examples of Vim9 script at |52.6|. ============================================================================== 2. Differences from legacy Vim script *vim9-differences* @@ -103,7 +158,8 @@ script and `:def` functions; details are below: echo "hello " .. yourName .. ", how are you?" -- White space is required in many places to improve readability. +- White space is required in many places to improve readability, + see |vim9-white-space|. - Assign values without `:let` *E1126* , declare variables with `:var`: > var count = 0 count += 3 @@ -231,7 +287,7 @@ You can call a legacy dict function though: > var d = {func: Legacy, value: 'text'} d.func() enddef -< *E1096* *E1174* *E1175* + The argument types and return type need to be specified. The "any" type can be used, type checking will then be done at runtime, like with legacy functions. @@ -274,7 +330,7 @@ script "export" needs to be used for those to be used elsewhere. > def ThisFunction() # script-local def g:ThatFunction() # global export def Function() # for import and import autoload -< *E1058* *E1075* +< *E1075* When using `:function` or `:def` to specify a nested function inside a `:def` function and no namespace was given, this nested function is local to the code block it is defined in. It cannot be used in `function()` with a string @@ -841,7 +897,7 @@ Notes: White space ~ - *E1004* *E1068* *E1069* *E1074* *E1127* *E1202* + *vim9-white-space* *E1004* *E1068* *E1069* *E1074* *E1127* *E1202* Vim9 script enforces proper use of white space. This is no longer allowed: > var name=234 # Error! var name= 234 # Error! @@ -1235,69 +1291,245 @@ subtracting one: > Using ++var or --var in an expression is not supported yet. + ============================================================================== 3. New style functions *fast-functions* - *:def* *E1028* + *:def* :def[!] {name}([arguments])[: {return-type}] Define a new function by the name {name}. The body of the function follows in the next lines, until the - matching `:enddef`. *E1073* - *E1011* + matching `:enddef`. + *E1073* + The {name} cannot be reused at the script-local level: >vim9 + + vim9script + def F_1073() + enddef + def F_1073() # E1073: Name already defined: ... + enddef +< *E1011* The {name} must be less than 100 bytes long. - *E1003* *E1027* *E1056* *E1059* - The type of value used with `:return` must match - {return-type}. When {return-type} is omitted or is - "void" the function is not expected to return - anything. - *E1077* *E1123* + + *E1077* {arguments} is a sequence of zero or more argument declarations. There are three forms: {name}: {type} {name} = {value} {name}: {type} = {value} - The first form is a mandatory argument, the caller - must always provide them. - The second and third form are optional arguments. - When the caller omits an argument the {value} is used. + The first form is a mandatory argument. So, the + declaration must provide a type. Example: >vim9 + vim9script + def F_1077(x): void + # E1077: Missing argument type for x + enddef +< + For the second form, because the declaration does not + specify it, Vim infers the type. For both second and + third forms, a default {value} applies when the + caller omits it. Examples: >vim9 + + vim9script + def SecondForm(arg = "Hi"): void + echo $'2. arg is a "{arg->typename()}" type ' .. + $'and the default value of arg is "{arg}"' + enddef + SecondForm() + def ThirdForm(arg2: number = 9): void + echo $'3. default value of arg2 is {arg2}' + enddef + ThirdForm() +< *E1123* + Arguments in a builtin function called in a `:def` + function must have commas between arguments: >vim9 + + vim9script + def F_1123(a: number, b: number): void + echo max(a b) + # E1123: Missing comma before argument: b) + enddef + F_1123(1, 2) +< *E1003* *E1027* *E1096* + The type of value used with `:return` must match + {return-type}. When {return-type} is omitted or is + "void" the function is not allowed to return + anything. Examples: >vim9 + + vim9script + def F_1003(): bool + return # E1003: Missing return value + enddef + F_1003() +< >vim9 + vim9script + def F_1027(): bool + echo false # E1027: Missing return statement + enddef + F_1027() +< >vim9 + vim9script + def F_1096(): void + return false # E1096: Returning a value ... + enddef + F_1096() +< *E1056* *E1059* + When ": {return-type}" is specified, {return-type} + cannot be omitted (leaving a hanging colon). The ": " + also cannot be preceded by white space. Examples: >vim + + def F_1056(): + # E1056: Expected a type: + enddef + def F_1059() : bool + # E1059: No white space allowed before colon:... + enddef +< The function will be compiled into instructions when - called, or when `:disassemble` or `:defcompile` is - used. Syntax and type errors will be produced at that - time. + called or when either `:defcompile` or `:disassemble` is + used. (For an example, see |:disassemble|.) Syntax + and type errors will be produced at that time. + *E1058* It is possible to nest `:def` inside another `:def` or - `:function` up to about 50 levels deep. + `:function` only up to 49 levels deep. At 50 or more + levels, it is a |E1058| error. + *E1117* - [!] is used as with `:function`. Note that - script-local functions cannot be deleted or redefined - later in Vim9 script. They can only be removed by - reloading the same script. + [!] is allowed only in legacy Vim script because it + permits function redefinition (as with `:function`!). + In Vim9 script, ! is not allowed because script-local + functions cannot be deleted or redefined, though they + can be removed by reloading the script. Also, nested + functions cannot use ! for redefinition. Examples: >vim + + " Legacy Vim script :def! example + def! LegacyFunc() + echo "def! is allowed in a legacy Vim script" + enddef + call LegacyFunc() +< >vim9 + vim9script + def Func() + def! InnerFunc() + # E1117: Cannot use ! with nested :def + enddef + enddef + Func() +< >vim9 + vim9script + def! F_477(): void # E477: No ! allowed + enddef +< >vim9 + vim9script + def F_1084(): void + enddef + delfunction! F_1084 + # E1084: Cannot delete Vim9 script function F_1084 +< + Note: The generic error *E1028* ("Compiling :def + function failed") indicates an undeterminable error + during compilation. If reproducible, it may be + reported at https://github.com/vim/vim/issues as + it could represent a gap in Vim's error reporting. *:enddef* *E1057* *E1152* *E1173* -:enddef End of a function defined with `:def`. It should be on - a line by its own. +:enddef End of a function defined with `:def`. It should be on + a line by itself. Examples: >vim9 + vim9script + def MyFunc() + echo 'Do Something' | enddef + # E1057: Missing :enddef +< >vim9 + vim9script + def F_1173() + enddef echo 'X' + # E1173: Text found after enddef: echo 'X' +< >vim9 + vim9script + def F_1152() + function X() + enddef # E1152: Mismatched enddef + enddef +< You may also find this wiki useful. It was written by an early adopter of Vim9 script: https://github.com/lacygoill/wiki/blob/master/vim/vim9.md -If the script the function is defined in is Vim9 script, then script-local -variables can be accessed without the "s:" prefix. They must be defined -before the function is compiled. If the script the function is defined in is -legacy script, then script-local variables must be accessed with the "s:" -prefix if they do not exist at the time of compiling. - *E1269* -Script-local variables in a |Vim9| script must be declared at the script -level. They cannot be created in a function, also not in a legacy function. +If the script the `:def` function is defined in is Vim9 script, script-local +variables must be accessed without using the "s:" prefix. They must be +defined before the function is compiled and there is no way to avoid errors +(e.g., by using |exists()|) to conditionally skip undeclared variables. +For example: >vim9 + + vim9script + def MyVim9def() + echo unus # Echoes 1 + # echo s:unus # This would be E1268 (Cannot use s: in Vim9) + if exists('duo') + # echo duo # This would be E1001 (Variable not found: duo) + endif + enddef + var unus: number = 1 + MyVim9def() # MyVim9def is compiled ("duo" does not exist yet) + var duo: number = 2 +< +If the script the `:def` function is defined in is legacy Vim script, +script-local variables may be accessed with or without the "s:" prefix. +However, using "s:" may defer variable resolution to runtime, avoiding +compilation errors for variables that may not exist yet, as this example +explains: >vim + + " legacy Vim script + def! MyLegacyDef(): void + echo [unus, s:unus] # Echoes [1, 1] + # (If uncommented) First sourcing of 'echo s:duo' is E121 and + # causes a compilation error; subsequent sourcing echoes 2: + # echo s:duo + if exists("s:duo") + # First sourcing: skips echo; subsequent sourcing: echoes 2 + echo s:duo + endif + if exists("duo") + # (If uncommented) First sourcing of 'echo duo' is E1001 and + # causes a compilation error; subsequent sourcing echoes 2: + # echo duo + endif + enddef + let s:unus = 1 + call MyLegacyDef() " Calls MyLegacyDef() and compiles if not already + let s:duo = 2 +< *E1269* +Script-local variables in a Vim9 script must be declared at the script +level. They cannot be created in a `:def` function and may not be declared +in a legacy function with the "s:" prefix. For example: >vim9 + vim9script + function F_1269() + let s:i_wish = v:true + endfunction + F_1269() + # E1269: Cannot create a Vim9 script variable in a function: s:i_wish +< *:defc* *:defcompile* :defc[ompile] Compile functions and classes (|class-compile|) defined in the current script that were not compiled yet. This will report any errors found during compilation. -:defc[ompile] MyClass Compile all methods in a class. |class-compile| + Example: When the three lines (up to and including + `enddef`) are sourced, there is no error because the + Vim9 `:def` function is not compiled. However, if all + four lines are sourced, compilation fails: >vim9 + + vim9script + def F_1027(): string + enddef + defcompile F_1027 # E1027: Missing return statement + +:defc[ompile] MyClass Compile all methods in a class. (See |:disassemble| + for an example.) :defc[ompile] {func} :defc[ompile] debug {func} @@ -1305,16 +1537,35 @@ level. They cannot be created in a function, also not in a legacy function. Compile function {func}, if needed. Use "debug" and "profile" to specify the compilation mode. This will report any errors found during compilation. - {func} call also be "ClassName.functionName" to + {func} can also be "ClassName.functionName" to compile a function or method in a class. - {func} call also be "ClassName" to compile all + {func} can also be "ClassName" to compile all functions and methods in a class. *:disa* *:disassemble* :disa[ssemble] {func} Show the instructions generated for {func}. - This is for debugging and testing. *E1061* - Note that for command line completion of {func} you - can prepend "s:" to find script-local functions. + This is for debugging and testing. + If {func} is not found, error *E1061* occurs. + {func} can also be "ClassName.functionName" to + disassemble a function in a class. + The following example demonstrates using `:defcompile` + with a |class| and `:disassemble` with a + "ClassName.functionName" (positioning the cursor on + the last line of the visually sourced script): >vim9 + + vim9script + class Line + var lnum: number + def new(this.lnum) + enddef + def SetLnum() + cursor(this.lnum, 52) + enddef + endclass + defcompile Line + disassemble Line.SetLnum + var vlast: Line = Line.new(line("'>")) + vlast.SetLnum() # Cursor is positioned here->_ :disa[ssemble] profile {func} Like `:disassemble` but with the instructions used for @@ -1324,192 +1575,304 @@ level. They cannot be created in a function, also not in a legacy function. Like `:disassemble` but with the instructions used for debugging. + Note: For command line completion of {func}, script-local functions + are shown with their . Depending on options, including + |wildmenumode()|, completion may work with "s:", " - def MapList(): list - var list = ['aa', 'bb', 'cc', 'dd'] - return range(1, 2)->map('list[v:val]') - enddef +Variables local to `:def` functions are not visible to string evaluation. +The following example shows that the script-local constant "SCRIPT_LOCAL" is +visible whereas the function-local constant "DEF_LOCAL" is not: >vim9 + vim9script + const SCRIPT_LOCAL = ['A', 'script-local', 'list'] + def MapList(scope: string): list + const DEF_LOCAL: list = ['A', 'def-local', 'list'] + if scope == 'script local' + return [1]->map('SCRIPT_LOCAL[v:val]') + else + return [1]->map('DEF_LOCAL[v:val]') + endif + enddef + echo 'script local'->MapList() # Echoes ['script-local'] + echo 'def local'->MapList() # E121: Undefined variable: DEF_LOCAL +< The map argument is a string expression, which is evaluated without the -function scope. Instead, use a lambda: > +function scope. Instead, in Vim9 script, use a lambda: >vim9 + + vim9script def MapList(): list - var list = ['aa', 'bb', 'cc', 'dd'] - return range(1, 2)->map((_, v) => list[v]) + const DEF_LOCAL: list = ['A', 'def-local', 'list'] + return [1]->map((_, v) => DEF_LOCAL[v]) enddef + echo MapList() # Echoes ['def-local'] +< +For commands that are not compiled, such as `:edit`, |backtick-expansion| can +be used and it can use the local scope. Example: >vim9 -For commands that are not compiled, such as `:edit`, backtick expansion can be -used and it can use the local scope. Example: > - def Replace() - var fname = 'blah.txt' - edit `=fname` + vim9script + def EditNewBlah() + var fname: string = 'blah.txt' + split + edit `=fname` enddef + EditNewBlah() # A new split is created as buffer 'blah.txt' +< +Closures defined in a loop can either share a variable or each have their own +copy, depending on where the variable is declared. With a variable declared +outside the loop, all closures reference the same shared variable. +The following example demonstrates the consequences, with the "outloop" +variable existing only once: >vim9 -Closures defined in a loop will share the same context. For example: > + vim9script var flist: list - for i in range(5) - var inloop = i - flist[i] = () => inloop - endfor - echo range(5)->map((i, _) => flist[i]()) - # Result: [4, 4, 4, 4, 4] + def ClosureEg(n: number): void + var outloop: number = 0 # outloop is declared outside the loop! + for i in range(n) + outloop = i + flist[i] = (): number => outloop # Closures ref the same var + endfor + echo range(n)->map((i, _) => flist[i]()) + enddef + ClosureEg(4) # Echoes [3, 3, 3, 3] +< +All closures put in the list refer to the same instance, which, in the end, +is 3. + +However, when the variable is declared inside the loop, each closure gets its +own copy, as shown in this example: >vim9 + + vim9script + var flist: list + def ClosureEg(n: number): void + for i in range(n) + var inloop: number = i # inloop is declared inside the loop + flist[i] = (): number => inloop # Closures ref each inloop + endfor + echo range(n)->map((i, _) => flist[i]()) + enddef + ClosureEg(4) # Echoes [0, 1, 2, 3] + +Another way to have a separate context for each closure is to call a +function to define it: >vim9 + + vim9script + def GetClosure(i: number): func + var infunc: number = i + return (): number => infunc + enddef + var flist: list + def ClosureEg(n: number): void + for i in range(n) + flist[i] = GetClosure(i) + endfor + echo range(n)->map((i, _) => flist[i]()) + enddef + ClosureEg(4) # Echoes [0, 1, 2, 3] < *E1271* A closure must be compiled in the context that it is defined in, so that -variables in that context can be found. This mostly happens correctly, except -when a function is marked for debugging with `:breakadd` after it was compiled. -Make sure to define the breakpoint before compiling the outer function. - -The "inloop" variable will exist only once, all closures put in the list refer -to the same instance, which in the end will have the value 4. This is -efficient, also when looping many times. If you do want a separate context -for each closure, call a function to define it: > - def GetClosure(i: number): func - var infunc = i - return () => infunc +variables in that context can be found. This mostly happens correctly, +except when a function is marked for debugging with `:breakadd` after it was +compiled. Make sure to define the breakpoint before compiling the outer +function. + *E1248* +In some situations, such as when a Vim9 closure which captures local variables +is converted to a string and then executed, an error occurs. This happens +because the string execution context cannot access the local variables from +the original context where the closure was defined. For example: >vim9 + + vim9script + def F_1248(): void + var n: number + var F: func = () => { + n += 1 + } + try + execute printf("call %s()", F) + catch + echo v:exception + endtry enddef + F_1248() # Vim(call):E1248: Closure called from invalid context - var flist: list - for i in range(5) - flist[i] = GetClosure(i) - endfor - echo range(5)->map((i, _) => flist[i]()) - # Result: [0, 1, 2, 3, 4] - -In some situations, especially when calling a Vim9 closure from legacy -context, the evaluation will fail. *E1248* - -Note that at the script level the loop variable will be invalid after the -loop, also when used in a closure that is called later, e.g. with a timer. -This will generate error |E1302|: > - for n in range(4) - timer_start(500 * n, (_) => { - echowin n - }) - endfor +In Vim9 script, a loop variable is invalid after the loop is closed. +For example, this timer will echo 0 to 2 on separate lines. However, if +the variable "n" is used after the `:endfor`, that is an |E121| error: >vim9 -You need to use a block and define a variable there, and use that one in the -closure: > - for n in range(4) - { - var nr = n - timer_start(500 * n, (_) => { - echowin nr - }) - } + vim9script + for n in range(3) + var nr: number = n + timer_start(1000 * n, (_) => { + echowindow nr + }) endfor - -Using `:echowindow` is useful in a timer, the messages go into a popup and will -not interfere with what the user is doing when it triggers. + try + echowindow n + catch + echo v:exception + endtry +< + Note: Using `:echowindow` is useful in a timer because messages go + into a popup and will not interfere with what the user is + doing when it triggers. -Converting a function from legacy to Vim9 ~ +Converting a :function to a :def~ *convert_legacy_function_to_vim9* -These are the most changes that need to be made to convert a legacy function -to a Vim9 function: + *convert_:function_to_:def* +There are many changes that need to be made to convert a `:function` to +a `:def` function. The following are some of them: +- Change `let` used to declare variables to one of `var`, `const`, or `final`, + and remove the "s:" from each |script-variable|. - Change `func` or `function` to `def`. - Change `endfunc` or `endfunction` to `enddef`. -- Add types to the function arguments. -- If the function returns something, add the return type. -- Change comments to start with # instead of ". +- Add the applicable type (or "any") to each function argument. +- Remove "a:" from each |function-argument|. +- Remove inapplicable options such as |:func-range|, |:func-abort|, + |:func-dict|, and |:func-closure|. +- If the function returns something, add the return type. (Ideally, add + "void" if it does not return anything.) +- Remove line continuation backslashes from places they are not required. +- Remove `let` for assigning values to |g:|, |b:|, |w:|, |t:|, or |l:| variables. +- Rewrite |lambda| expressions in Vim9 script syntax (see |vim9-lambda|). +- Change comments to start with # (preceded by white space) instead of ". +- Insert white space in expressions where required (see |vim9-white-space|). +- Change "." used for string concatenation to " .. ". (Alternatively, use + an |interpolated-string|.) + +The following legacy Vim script and Vim9 script examples demonstrate all +those differences. First, legacy Vim script: >vim + + let s:lnum=0 + function Leg8(arg) abort + let l:pre=['Result', + \': '] + let b:arg=a:arg + let s:lnum+=2 + let b:arg*=4 + let l:result={pre->join(pre,'')}(l:pre) + return l:result.(b:arg+s:lnum)"no space before comment + endfunction + call Leg8(10)->popup_notification(#{time: 3000})" Pops up 'Result: 42' + +The equivalent in Vim9 script: >vim9 - For example, a legacy function: > - func MyFunc(text) - " function body - endfunc -< Becomes: > - def MyFunc(text: string): number - # function body + vim9script + var lnum: number + def Vim9(arg: number): string + final pre = ['Result', + ': '] + b:arg = arg + lnum += 2 + b:arg *= 4 + const RESULT: string = ((lpre) => join(lpre, ''))(pre) + return RESULT .. (b:arg + lnum) # space required before # comment enddef + Vim9(10)->popup_notification({time: 3000}) # Pops up 'Result: 42' -- Remove "a:" used for arguments. E.g.: > - return len(a:text) -< Becomes: > - return len(text) - -- Change `let` used to declare a variable to `var`. -- Remove `let` used to assign a value to a variable. This is for local - variables already declared and b: w: g: and t: variables. - - For example, legacy function: > - let lnum = 1 - let lnum += 3 - let b:result = 42 -< Becomes: > - var lnum = 1 - lnum += 3 - b:result = 42 - -- Insert white space in expressions where needed. -- Change "." used for concatenation to "..". - - For example, legacy function: > - echo line(1).line(2) -< Becomes: > - echo line(1) .. line(2) - -- line continuation does not always require a backslash: > - echo ['one', - \ 'two', - \ 'three' - \ ] -< Becomes: > - echo ['one', - 'two', - 'three' - ] +< Note: This example also demonstrates (outside the `:def` function): + - Removing "#" from the legacy |#{}| - see |vim9-literal-dict| + - Omitting `:call` (allowed, though unnecessary in Vim9 script) -Calling a function in an expr option ~ +Calling a :def function in an expr option ~ *expr-option-function* The value of a few options, such as 'foldexpr', is an expression that is evaluated to get a value. The evaluation can have quite a bit of overhead. -One way to minimize the overhead, and also to keep the option value very -simple, is to define a compiled function and set the option to call it -without arguments. Example: > +One way to minimize the overhead, and also to keep the option value simple, +is to define a compiled function and set the option to call it without +arguments. For example: >vim9 + vim9script - def MyFoldFunc(): any - ... compute fold level for line v:lnum - return level + def MyFoldFunc(): string + # This matches start of line (^), followed by a digit, a full stop + # a space or tab, an uppercase character, with an empty next line + return getline(v:lnum) =~ '^[[:digit:]]\.[[:blank:]][[:upper:]]' + && getline(v:lnum + 1)->empty() ? '>1' : '1' enddef - set foldexpr=s:MyFoldFunc() + set foldexpr=MyFoldFunc() + set foldmethod=expr + norm! zM +< + Warning: This script creates and applies folds at the "Heading 1" level of + this vim9.txt help buffer. (You can use |zR|, in Normal mode, to + open all the folds after sourcing the script.) + ============================================================================== 4. Types *vim9-types* - *E1008* *E1009* *E1010* *E1012* - *E1013* *E1029* *E1030* -The following builtin types are supported: - bool - number - float - string - blob - list<{type}> - dict<{type}> - object<{type}> - job - channel - tuple<{type}> - tuple<{type}, {type}, ...> - tuple<...list<{type}>> - tuple<{type}, ...list<{type}>> - func - func: {type} - func({type}, ...) - func({type}, ...): {type} + +The following types, each shown with its corresponding internal |v:t_TYPE| +variable, are supported: + + number |v:t_number| + string |v:t_string| + func |v:t_func| + func: {type} |v:t_func| + func({type}, ...) |v:t_func| + func({type}, ...): {type} |v:t_func| + list<{type}> |v:t_list| + dict<{type}> |v:t_dict| + float |v:t_float| + bool |v:t_bool| + none |v:t_none| + job |v:t_job| + channel |v:t_channel| + blob |v:t_blob| + class |v:t_class| + object |v:t_object| + typealias |v:t_typealias| + enum |v:t_enum| + enumvalue |v:t_enumvalue| + tuple<{type}> |v:t_tuple| + tuple<{type}, {type}, ...> |v:t_tuple| + tuple<...list<{type}>> |v:t_tuple| + tuple<{type}, ...list<{type}>> |v:t_tuple| void -These types can be used in declarations, but no simple value will actually -have the "void" type. Trying to use a void (e.g. a function without a -return value) results in error *E1031* *E1186* . + *E1031* *E1186* +These types can be used in declarations, though no simple value can have the +"void" type. Trying to use a void as a value results in an error. Examples: >vim9 + + vim9script + def NoReturnValue(): void + enddef + try + const X: any = NoReturnValue() + catch + echo v:exception # E1031: Cannot use void value + try + echo NoReturnValue() + catch + echo v:exception # E1186: Expression does not result in a ... + endtry + endtry +< *E1008* *E1009* *E1010* *E1012* +Ill-formed declarations and mismatching types result in errors. The following +are examples of errors E1008, E1009, E1010, and E1012: >vim9 + + vim9cmd var l: list + vim9cmd var l: list + vim9cmd var l: list = ['42'] +< +There is no array type. Instead, use either a list or a tuple. Those types +may also be literals (constants). In the following example, [5, 6] is a list +literal and (7, ) a tuple literal. The echoed list is a list literal too: >vim9 -There is no array type, use list<{type}> instead. For a list constant an -efficient implementation is used that avoids allocating a lot of small pieces -of memory. + vim9script + var l: list = [1, 2] + var t: tuple<...list> = (3, 4) + echo [l, t, [5, 6], (7, )] +< *tuple-type* -A tuple type can be declared in more or less specific ways: +A tuple type may be declared in the following ways: tuple a tuple with a single item of type |Number| tuple a tuple with two items of type |Number| and |String| @@ -1535,7 +1898,9 @@ variadic tuple must end with a list type. Examples: > var myTuple: tuple<...list> = () < *vim9-func-declaration* *E1005* *E1007* -A partial and function can be declared in more or less specific ways: + *vim9-partial-declaration* + *vim9-func-type* +A function (or partial) may be declared in the following ways: func any kind of function reference, no type checking for arguments or return value func: void any number and type of arguments, no return @@ -1567,352 +1932,891 @@ If the return type is "void" the function does not return a value. The reference can also be a |Partial|, in which case it stores extra arguments and/or a dictionary, which are not visible to the caller. Since they are -called in the same way the declaration is the same. - -Custom types can be defined with `:type`: > - :type MyList list -Custom types must start with a capital letter, to avoid name clashes with -builtin types added later, similarly to user functions. +called in the same way, the declaration is the same. This interactive example +prompts for a circle's radius and returns its area to two decimal places, +using a partial: >vim9 -And classes and interfaces can be used as types: > - :class MyClass - :var mine: MyClass + vim9script + def CircleArea(pi: float, radius: float): float + return pi * radius->pow(2) + enddef + const AREA: func(float): float = CircleArea->function([3.14]) + const RADIUS: float = "Enter a radius value: "->input()->str2float() + echo $"\nThe area of a circle with a radius of {RADIUS} is " .. + $"{AREA(RADIUS)} (π to two d.p.)" +< + *vim9-typealias-type* +Custom types (|typealias|) can be defined with `:type`. They must start with +a capital letter (which avoids name clashes with either current or future +builtin types) similar to user functions. This example creates a list of +perfect squares and reports on |type()| (14, a typealias) and the |typename()|: >vim9 - :interface MyInterface - :var mine: MyInterface + vim9script + type Ln = list + final perfect_squares: Ln = [1, 4, 9, 16, 25] + echo "Typename (Ln): " .. + $"type() is {Ln->type()} and typename() is {Ln->typename()}" +< + *E1105* +A typealias itself cannot be converted to a string: >vim9 - :class MyTemplate - :var mine: MyTemplate - :var mine: MyTemplate + vim9script + type Ln = list + const FAILS: func = (): string => { + echo $"{Ln}" # E1105: Cannot convert typealias to string + } +< + *vim9-class-type* *vim9-interface-type* + *vim9-object-type* +A |class|, |object|, and |interface| may all be used as types. The following +interactive example prompts for a float value and returns the area of two +different shapes. It also reports on the |type()| and |typename()| of the +classes, objects, and interface: >vim9 - :class MyInterface - :var mine: MyInterface - :var mine: MyInterface -{not implemented yet} + vim9script + interface Shape + def InfoArea(): tuple + endinterface + class Circle implements Shape + var radius: float + def InfoArea(): tuple + return ('Circle (π × r²)', 3.141593 * this.radius->pow(2)) + enddef + endclass + class Square implements Shape + var side: float + def InfoArea(): tuple + return ('Square (s²)', this.side->pow(2)) + enddef + endclass + const INPUT: float = "Enter a float value: "->input()->str2float() + echo "\nAreas of shapes:" + var myCircle: object = Circle.new(INPUT) + var mySquare: object = Square.new(INPUT) + final shapes: list = [myCircle, mySquare] + for shape in shapes + const [N: string, A: float] = shape.InfoArea() + echo $"\t- {N} has area of {A}" + endfor + echo "\n\t\ttype()\ttypename()\n\t\t------\t----------" + echo $"Circle\t\t{Circle->type()}\t{Circle->typename()}" + echo $"Square\t\t{Square->type()}\t{Square->typename()}" + echo $"Shape\t\t{Shape->type()}\t{Shape->typename()}" + echo $"MyCircle\t{myCircle->type()}\t{myCircle->typename()}" + echo $"MySquare\t{mySquare->type()}\t{mySquare->typename()}" + echo $"shapes\t\t{shapes->type()}\t{shapes->typename()}" +< + *vim9-enum-type* *vim9-enumvalue-type* +An |enum| may be used as a type (|v:t_enum|). Variables holding enum values +have the enumvalue type (|v:t_enumvalue|) at runtime. The following +interactive example prompts for a character and returns information about +either a square or a rhombus. It also reports on the |type()| and |typename()| +of the enum and enumvalue: >vim9 + vim9script + enum Quad + Square('four', 'only'), + Rhombus('opposite', 'no') + var eq: string + var ra: string + def string(): string + return $"\nA {this.name} has " .. + $"{this.eq} equal sides and {this.ra} right angles\n\n" + enddef + endenum + echo "Rhombus (r) or Square (s)?" + var myQuad: Quad = getcharstr() =~ '\c^R' ? Quad.Rhombus : Quad.Square + echo myQuad.string() .. "\ttype()\ttypename()" + echo $"Quad \t{Quad->type()} \t{Quad->typename()}" + echo $"myQuad\t{myQuad->type()}\t{myQuad->typename()}" +< + Notes: This script uses builtin method "string()" (|object-string()|). + The typename() of Quad and myQuad are the same ("enum") + whereas the type() is distinguished (myQuad returns 16, + enumvalue, whereas Quad returns 15, enum). Variable types and type casting ~ *variable-types* Variables declared in Vim9 script or in a `:def` function have a type, either specified explicitly or inferred from the initialization. -Global, buffer, window and tab page variables do not have a specific type, the -value can be changed at any time, possibly changing the type. Therefore, in -compiled code the "any" type is assumed. - -This can be a problem when the "any" type is undesired and the actual type is -expected to always be the same. For example, when declaring a list: > - var l: list = [1, g:two] -At compile time Vim doesn't know the type of "g:two" and the expression type -becomes list. An instruction is generated to check the list type before -doing the assignment, which is a bit inefficient. - *type-casting* *E1104* -To avoid this, use a type cast: > - var l: list = [1, g:two] -The compiled code will then only check that "g:two" is a number and give an -error if it isn't. This is called type casting. - -The syntax of a type cast is: "<" {type} ">". There cannot be white space -after the "<" or before the ">" (to avoid them being confused with -smaller-than and bigger-than operators). - -The semantics is that, if needed, a runtime type check is performed. The -value is not actually changed. If you need to change the type, e.g. to change -it to a string, use the |string()| function. Or use |str2nr()| to convert a +Global, buffer, window and tab page variables do not have a specific type. +Consequently, their values may change at any time, possibly changing the type. +Therefore, in compiled code, the "any" type is assumed. + +This can be a problem when stricter typing is desired, for example, when +declaring a list: > + var l: list = [1, b:two] +Since Vim doesn't know the type of "b:two", the expression becomes list. +A runtime check verifies the list matches the declared type before assignment. + + *type-casting* +To get more specific type checking, use type casting. This checks the +variable's type before building the list, rather than checking whether +list items match the declared type. For example: > + var l: list = [1, b:two] +< +So, here the type cast checks whether "b:two" is a number and gives an error +if it isn't. + +The difference is demonstrated in the following example. With funcref +variable "NTC", Vim infers the expression type "[1, b:two]" as list, then +verifies whether it can be assigned to the list return type. With +funcref variable "TC", the type cast means Vim first checks whether "b:two" is +a type: >vim9 + + vim9script + b:two = '2' + const NTC: func = (): list => { + return [1, b:two] + } + disassemble NTC # 3 CHECKTYPE list stack [-1] + try + NTC() + catch + echo v:exception .. "\n\n" # expected list but... + endtry + const TC: func = (): list => { + return [1, b:two] + } + disassemble TC # 2 CHECKTYPE number stack [-1] + try + TC() + catch + echo v:exception # expected number but got string + endtry +< + Note: Notice how the error messages differ, showing when + type checking occurs. + + *E1104* +The syntax of a type cast is "<{type}>". An error occurs if either the +opening "<" (|E121|) or closing ">" (E1104) is omitted. Also, white space +is not allowed either after the "<" (|E15|) or before the ">" (|E1068|), which +avoids ambiguity with smaller-than and greater-than operators. + +Although a type casting forces explicit type checking, it neither changes the +value of, nor the type of, a variable. If you need to alter the type, use a +function such as |string()| to convert to a string, or |str2nr()| to convert a string to a number. -If a type is given where it is not expected you can get *E1272* . +If type casting is applied to a chained expression, it must be compatible with +the final result. Examples: >vim9 + + vim9script + # These type casts work + echo >[3, 2, 1]->extend(['Go!']) + echo [3, 2, 1]->extend(['Go!'])->string() + echo >>[3, 2, 1]->list2tuple() + # This type cast fails + echo [3, 2, 1]->extend(['Go!'])->string() +< + *E1272* +If a type is used in a context where types are not expected you can get +E1272. For example: > + :vim9cmd echo islocked('x: string') +< Note: This must be executed from Vim's command line, not sourced. + + *E1363* +If a type is incomplete, such as when an object's class is unknown, E1363 +results. For example: >vim9 + + vim9script + var E1363 = null_class.member # E1363: Incomplete type +< +Another null object-related error is |E1360|: >vim9 -If a type is incomplete you get *E1363* , e.g. when you have an object for -which the class is not known (usually that is a null object). + vim9script + var obj = null_object + var E1360 = obj.MyMethod() # E1360: Using a null object +< Type inference ~ *type-inference* -In general: Whenever the type is clear it can be omitted. For example, when -declaring a variable and giving it a value: > - var name = 0 # infers number type - var name = 'hello' # infers string type - -The type of a list and dictionary comes from the common type of the values. -If the values all have the same type, that type is used for the list or -dictionary. If there is a mix of types, the "any" type is used. > - [1, 2, 3] list - ['a', 'b', 'c'] list - [1, 'x', 3] list - -The common type of function references, if they do not all have the same -number of arguments, uses "(...)" to indicate the number of arguments is not -specified. For example: > - def Foo(x: bool) +Declaring types explicitly provides many benefits, including targeted type +checking and clearer error messages. Nonetheless, Vim often can infer types +automatically when they are omitted. For example, each of these variables' +types are inferred, with the |type()| and |typename()| echoed showing those +inferred types: >vim9 + + vim9script + echo "\t type()\t typename()" + var b = true | echo $"{b} \t {b->type()} \t {b->typename()}" + var f = 4.2 | echo $"{f} \t {f->type()} \t {f->typename()}" + var l = [1, 2] | echo $"{l} \t {l->type()} \t {l->typename()}" + var n = 42 | echo $"{n} \t {n->type()} \t {n->typename()}" + var s = 'yes' | echo $"{s} \t {s->type()} \t {s->typename()}" + var t = (42, ) | echo $"{t} \t {t->type()} \t {t->typename()}" +< +The type of a list, tuple, or dictionary is inferred from the common type of +its values. When the values are all the same type, that type is used. +If there is a mix of types, the "any" type is used. In the following example, +the echoed |typename()| for each literal demonstrates these points: >vim9 + + vim9script + echo [1, 2]->typename() # list + echo [1, 'x']->typename() # list + echo {ints: [1, 2], bools: [false]}->typename() # dict> + echo (true, false)->typename() # tuple +< +The common type of function references, when they do not all have the same +number of arguments, is indicated with "(...)", meaning the number of +arguments is unequal. This script demonstrates a "list": >vim9 + + vim9script + def Foo(x: bool): void enddef - def Bar(x: bool, y: bool) + def Bar(x: bool, y: bool): void enddef var funclist = [Foo, Bar] echo funclist->typename() -Results in: - list +< +Script-local variables in a Vim9 script are type checked. The type is +also checked for variables declared in a legacy function. For example: >vim9 -For script-local variables in Vim9 script the type is checked, also when the -variable was declared in a legacy function. + vim9script + var my_local = (1, 2) + function Legacy() + let b:legacy = [1, 2] + endfunction + Legacy() + echo $"{my_local} is type {my_local->type()} ({my_local->typename()})" + echo $"{b:legacy} is type {b:legacy->type()} ({b:legacy->typename()})" +< + *E1013* +When a type is declared for a List, Tuple, or Dictionary, the type is attached +to it. Similarly, if a type is not declared, the type Vim infers is attached. +In either case, if an expression attempts to change the type, E1013 results. +This example has its type inferred and demonstrates E1013: >vim9 -When a type has been declared this is attached to a List or Dictionary. When -later some expression attempts to change the type an error will be given: > - var ll: list = [1, 2, 3] - ll->extend(['x']) # Error, 'x' is not a number + vim9script + var lb = [true, true] # Two bools, so Vim infers list type + echo lb->typename() # Echoes list + lb->extend([0]) # E1013 Argument 2: type mismatch, ... +< +If you want a permissive list, either explicitly use or declare an +empty list initially (or both, i.e., `list = []`). Examples: >vim9 -If the type is not declared then it is allowed to change: > - [1, 2, 3]->extend(['x']) # result: [1, 2, 3, 'x'] + vim9script + final la: list = [] + echo la->extend(['two', 1]) + final le = [] + echo le->extend(la) +< +Similarly for a permissive dictionary: >vim9 -For a variable declaration an inferred type matters: > - var ll = [1, 2, 3] - ll->extend(['x']) # Error, 'x' is not a number -That is because the declaration looks like a list of numbers, thus is -equivalent to: > - var ll: list = [1, 2, 3] -If you do want a more permissive list you need to declare the type: > - var ll: list = [1, 2, 3] - ll->extend(['x']) # OK + vim9script + final da: dict = {} + echo da->extend({2: 2, 1: 'One'}) + final de = {} + echo de->extend(da)->string() +< +And, although tuples themselves are immutable, permissive tuple concatenation +can be achieved with either "any" or an empty tuple: >vim9 + vim9script + var t_any: tuple<...list> = (3, '2') + t_any = t_any + (true, ) + echo t_any + var t_dec_empty = () + t_dec_empty = t_dec_empty + (3, '2', true) + echo t_dec_empty +< +If a list literal or dictionary literal is not bound to a variable, its type +may change, as this example shows: >vim9 + + vim9script + echo [3, 2, 1]->typename() # list + echo [3, 2, 1]->extend(['Zero'])->typename() # list + echo {1: ['One']}->typename() # dict> + echo {1: ['One']}->extend({2: [2]})->typename() # dict> +< Stricter type checking ~ - *type-checking* + *type-checking* In legacy Vim script, where a number was expected, a string would be automatically converted to a number. This was convenient for an actual number such as "123", but leads to unexpected problems (and no error message) if the string doesn't start with a number. Quite often this leads to hard-to-find -bugs. e.g.: > +bugs. For example, in legacy Vim script this echoes "1": >vim + echo 123 == '123' -< 1 ~ -With an accidental space: > +< +However, if an unintended space is included, "0" is echoed: >vim + echo 123 == ' 123' -< 0 ~ - *E1206* *E1210* *E1212* +< + *E1206* In Vim9 script this has been made stricter. In most places it works just as -before if the value used matches the expected type. There will sometimes be -an error, thus breaking backwards compatibility. For example: -- Using a number other than 0 or 1 where a boolean is expected. *E1023* -- Using a string value when setting a number option. -- Using a number where a string is expected. *E1024* *E1105* +before if the value used matches the expected type. For example, in both +legacy Vim script and Vim9 script trying to use anything other than a +dictionary when it is required: >vim + + echo [8, 9]->keys() + vim9cmd echo [8, 9]->keys() # E1206: Dictionary required +< + *E1023* *E1024* *E1029* *E1030* + *E1174* *E1175* *E1210* *E1212* +However, sometimes there will be an error in Vim9 script, which breaks +backwards compatibility. The following examples illustrate various places +this happens. The legacy Vim script behavior, which does not fail, is shown +first. It is followed by the error that occurs if the same command is used +in Vim9 script. + + - Using a number (except 0 or 1) where a bool is expected: >vim + + echo v:version ? v:true : v:false + vim9cmd echo v:version ? true : false # E1023: Using a Number as a... +< + - Using a number where a string is expected: >vim + + echo filter([1, 2], 0) + vim9cmd echo filter([1, 2], 0) # E1024: Using a Number as a String +< + - Not using a number where a number is expected: >vim + + " In this example, Vim script treats v:false as 0 + function Not1029() + let b:l = [42] | unlet b:l[v:false] + endfunction + call Not1029() | echo b:l +< >vim9 + vim9script + def E1029(): void + b:l = [42] | unlet b:l[false] + enddef + E1029() # E1029: Expected number but got bool +< + - Using a string as a number: >vim + + let b:l = [42] | unlet b:l['#'] | echo b:l + vim9cmd b:l = [42] | vim9cmd unlet b:l['#'] # E1030: Using a string... +< + - Not using a string where an argument requires a string: >vim9 + + echo substitute('Hallo', 'a', 'e', v:true) + vim9cmd echo substitute('Hallo', 'a', 'e', true) # E1174: String... +< + - Using an empty string in an argument that requires a non-empty string: >vim9 + + echo exepath('') + vim9cmd echo exepath('') # E1175: Non-empty string required for arg... +< + - Not using a number when it is required: >vim + + echo gettabinfo('a') + vim9cmd echo gettabinfo('a') # E1210: Number required for argument 1 +< + - Not using a bool when it is required: >vim + + echo char2nr('¡', 2) + vim9cmd echo char2nr('¡', 2) # E1212: Bool required for argument 2 +< + - Not using a number when a number is required (|E521|): >vim + + let &laststatus='2' + vim9cmd &laststatus = '2' +< + - Not using a string when a string is required (|E928|): >vim + + let &langmenu = 42 + vim9cmd &langmenu = 42 # E928: String required +< + - Comparing a |Special| with 'is' fails in some instances (|E1037|, |E1072|): >vim + + " 1 is echoed because these are both true + echo v:null is v:null && v:none is v:none + " 0 is echoed because all these expressions are false + echo v:none is v:null || v:none is 8 || v:true is v:none + " All these are errors in Vim9 script + vim9cmd echo v:null is v:null # E1037: Cannot use 'is' with special + vim9cmd echo v:none is v:none # E1037: Cannot use 'is' with special + vim9cmd echo v:none is v:null # E1037: Cannot use 'is' with special + vim9cmd echo v:none is 8 # E1072: Cannot compare special with numb + vim9cmd echo v:true is v:none # E1072: Cannot compare bool with special +< + Note: Although the last two Vim9 script examples above error using + `v:none`, they return `false` using `null` (which is the same + as `v:null` - see |v:null|): >vim9 + + vim9script + echo null is 8 # false + echo true is null # false +< + - Using a string where a bool is required (|E1135|): >vim + echo '42' ? v:true : v:false + vim9cmd echo '42' ? true : false # E1135: Using a String as a Bool +< + - Using a bool as a number (|E1138|): >vim + + let &laststatus=v:true + vim9cmd &laststatus = true +< + - Not using a string where an argument requires a string (|E1174|) >vim + + echo substitute('Hallo', 'a', 'e', v:true) + vim9cmd echo substitute('Hallo', 'a', 'e', true) # E1174: String... +< One consequence is that the item type of a list or dict given to |map()| must -not change, if the type was declared. This will give an error in Vim9 -script: > - var mylist: list = [1, 2, 3] - echo map(mylist, (i, v) => 'item ' .. i) -< E1012: Type mismatch; expected number but got string in map() ~ - -Instead use |mapnew()|, it creates a new list: > - var mylist: list = [1, 2, 3] - echo mapnew(mylist, (i, v) => 'item ' .. i) -< ['item 0', 'item 1', 'item 2'] ~ - -If the item type was not declared or determined to be "any" it can change to a -more specific type. E.g. when a list of mixed types gets changed to a list of -strings: > - var mylist = [1, 2.0, '3'] - # typename(mylist) == "list" - map(mylist, (i, v) => 'item ' .. i) - # typename(mylist) == "list", no error - -There is a subtle difference between using a list constant directly and -through a variable declaration. Because of type inference, when using a list -constant to initialize a variable, this also sets the declared type: > - var mylist = [1, 2, 3] - # typename(mylist) == "list" - echo map(mylist, (i, v) => 'item ' .. i) # Error! - -When using the list constant directly, the type is not declared and is allowed -to change: > - echo map([1, 2, 3], (i, v) => 'item ' .. i) # OK - -The reasoning behind this is that when a type is declared and the list is -passed around and changed, the declaration must always hold. So that you can -rely on the type to match the declared type. For a constant this is not -needed. - - *E1158* -Same for |extend()|, use |extendnew()| instead, and for |flatten()|, use -|flattennew()| instead. Since |flatten()| is intended to always change the -type, it can not be used in Vim9 script. +not change when its type is either declared or inferred. For example, this +gives an error in Vim9 script, whereas in legacy Vim script it is allowed: >vim + + " legacy Vim script changes s:mylist to ['item 0', 'item 1'] + let s:mylist = [0, 1] + call map(s:mylist, {i -> $"item {i}"}) + echo s:mylist +< >vim9 + vim9script + var mylist = [0, 1] # Vim infers mylist is list + map(mylist, (i, _) => $"item {i}") # E1012: type mismatch... +< +The error occurs because `map()` tries to modify the list elements to strings, +which conflicts with the declared type. + +Use |mapnew()| instead. It creates a new list, and Vim infers its type if it +is not specified. Inferred and declared types are shown in this example: >vim9 + + vim9script + var mylist = [0, 1] + var infer = mylist->mapnew((i, _) => $"item {i}") + echo [infer, infer->typename()] + var declare: list = mylist->mapnew((i, _) => $"item {i}") + echo [declare, declare->typename()] +< +The key concept here is, variables with declared or inferred types cannot +have the types of the elements within their containers change. However, type +"changes" are allowed for either: + - a container literal (not bound to a variable), or + - a container where |copy()| or |deepcopy()| is used in method chaining. +Both are demonstrated in this example: >vim9 + + vim9script + # list literal + echo [1, 2]->map((_, v) => $"#{v}") + echo [1, 2]->map((_, v) => $"#{v}")->typename() + # deepcopy() in a method chain + var mylist = [1, 2] + echo mylist->deepcopy()->map((_, v) => $"#{v}") + echo mylist->deepcopy()->map((_, v) => $"#{v}")->typename() + echo mylist +< +The reasoning behind this is, when a type is either declared or inferred +and the list is passed around and changed, the declaration/inference must +always hold so that you can rely on the type to match the declared/inferred +type. For either a list literal or a fully copied list, that type safety is +not needed because the original list is unchanged (as "echo mylist" shows, +above). + +If the item type was not declared or determined to be "", it will not +change, even if all items later become the same type. However, when `mapnew()` +is used, inference means that the new list will reflect the type(s) present. +For example: >vim9 + + vim9script + # list + var mylist = [1, '2'] # mixed types, i.e., list + echo (mylist, mylist->typename()) # ([1, '2'], 'list') + mylist->map((_, v) => $"item {v}") # all items are now strings + echo (mylist, mylist->typename()) # both strings, but list + # mapnew() + var newlist = mylist->mapnew((_, v) => v) + echo (newlist, newlist->typename()) # newlist is a list +< +Using |extend()| and |extendnew()| is similar, i.e., a list literal may use +the former, so, this is okay: >vim9 + + vim9cmd echo [1, 2]->extend(['3']) # [1, 2, 3] +< +whereas, this is not: >vim9 + + vim9script + var mylist: list = [1, 2] + echo mylist->extend(['3']) # E1013: Argument 2: type mismatch +< +Using |extendnew()| is needed for extending an existing typed list, except +where the extension matches the list's type (or it is "any"). For example, +first extending with an element of the same type, then extending with a +different type: >vim9 + + vim9script + var mylist: list = [1, 2] + mylist->extend([3]) + echo mylist->extendnew(['4']) # [1, 2, 3, '4'] + +< *E1158* +Using |flatten()| is not allowed in Vim9 script, because it is intended +always to change the type. This even applies to a list literal +(unlike |map()| and |extend()|). Instead, use |flattennew()|: >vim9 + vim9cmd [1, [2, 3]]->flatten() # E1158: Cannot use flatten + vim9cmd echo [1, [2, 3]]->flattennew() # [1, 2, 3] +< Assigning to a funcref with specified arguments (see |vim9-func-declaration|) -does strict type checking of the arguments. For variable number of arguments -the type must match: > - var FuncRef: func(string, number, bool): number - FuncRef = (v1: string, v2: number, v3: bool) => 777 # OK - FuncRef = (v1: string, v2: number, v3: number) => 777 # Error! - # variable number of arguments must have same type - var FuncVA: func(...list): number - FuncVA = (...v: list): number => v # Error! - FuncVA = (...v: list): number => v # OK, `any` runtime check - FuncVA = (v1: string, v: string2): number => 333 # Error! - FuncVA = (v: list): number => 3 # Error! - -If the destination funcref has no specified arguments, then there is no -argument type checking: > - var FuncUnknownArgs: func: number - FuncUnknownArgs = (v): number => v # OK - FuncUnknownArgs = (v1: string, v2: string): number => 3 # OK - FuncUnknownArgs = (...v1: list): number => 333 # OK -< - *E1211* *E1217* *E1218* *E1219* *E1220* *E1221* - *E1222* *E1223* *E1224* *E1225* *E1226* *E1227* - *E1228* *E1235* *E1238* *E1250* *E1251* *E1252* - *E1253* *E1256* *E1297* *E1298* *E1301* *E1528* - *E1529* *E1530* *E1531* *E1534* +involves strict type checking of the arguments. For example, this works: >vim9 + + vim9script + var F_name_age: func(string, number): string + F_name_age = (n: string, a: number): string => $"Name: {n}, Age: {a}" + echo F_name_age('Bob', 42) +< +whereas this fails with error |E1012| (type mismatch): >vim9 + + vim9script + var F_name_age: func(string, number): string + F_name_age = (n: string, a: string): string => $"Name: {n}, Age: {a}" +< +If there is a variable number of arguments they must have the same type, as in +this example: >vim9 + + vim9script + var Fproduct: func(...list): number + Fproduct = (...v: list): number => reduce(v, (a, b) => a * b) + echo Fproduct(3, 2, 4) # Echoes 24 +< +And may be used to accommodate mixed types: >vim9 + + vim9script + var FlatSort: func(...list): any + FlatSort = (...v: list) => flattennew(v)->sort('n') + echo FlatSort(true, [[[5, 3], 2], 4]) # Echoes [true, 2, 3, 4, 5] +< + Note: Using in a lambda does not avoid type checking of the + funcref. It remains constrained by the declared funcref's + type and, as these examples show, a runtime or compiling error + occurs when the types mismatch: >vim9 + + vim9script + var FuncSN: func(string): number + FuncSN = (v: any): number => v->str2nr() + echo FuncSN('162')->nr2char() # Echoes ¢ + echo FuncSN(162)->nr2char()) # E1013 (runtime error) +< >vim9 + vim9script + var FuncSN: func(string): number + FuncSN = (v: any): number => v->str2nr() + def FuncSNfail(): void + echo FuncSN('162')->nr2char() # No echo because ... + echo FuncSN(162)->nr2char() # Error while compiling + enddef + FuncSNfail() +< +When the funcref has no arguments specified, there is no type checking. This +example shows FlexArgs has a string argument the first time and a list the +following time: >vim9 + + vim9script + var FlexArgs: func: string + FlexArgs = (s: string): string => $"It's countdown time {s}..." + echo FlexArgs("everyone") + FlexArgs = (...values: list): string => join(values, ', ') + echo FlexArgs('3', '2', '1', 'GO!') +< + *E1211* *E1217* *E1218* *E1219* *E1220* *E1221* *E1222* + *E1223* *E1224* *E1225* *E1226* *E1228* *E1235* *E1238* + *E1251* *E1253* *E1256* *E1297* *E1298* *E1301* *E1528* + *E1529* *E1530* *E1531* *E1534* Types are checked for most builtin functions to make it easier to spot -mistakes. +mistakes. The following one-line |:vim9| commands, calling builtin functions, +demonstrate many of those type-checking errors: >vim9 + + vim9 9->list2blob() # E1211: List required for argument 1 + vim9 9->ch_close() # E1217: Channel or Job required for + vim9 9->job_info() # E1218: Job required for argument 1 + vim9 [9]->cos() # E1219: Float or Number required for + vim9 {}->remove([]) # E1220: String or Number required + vim9 null_channel->ch_evalraw(9) # E1221: String or Blob required for + vim9 9->col() # E1222: String or List required for + vim9 9->complete_add() # E1223: String or Dictionary require + vim9 setbufline(9, 9, {}) # E1224: String, Number or List + vim9 9->count(9) # E1225: String, List, Tuple or Dict + vim9 9->add(9) # E1226: List or Blob required for + vim9 9->remove(9) # E1228: List, Dictionary, or Blob + vim9 getcharstr('9') # E1235: Bool or number required for + vim9 9->blob2list() # E1238: Blob required for argument 1 + vim9 9->filter(9) # E1251: List, Tuple, Dictionary, Blo + vim9 9->reverse() # E1253: String, List, Tuple or Blob + vim9 9->call(9) # E1256: String or Function required + vim9 null_dict->winrestview() # E1297: Non-NULL Dictionary required + vim9 {}->prop_add_list(null_list) # E1298: Non-NULL List required for + vim9 {}->repeat(9) # E1301: String, Number, List, Tuple + vim9 9->index(9) # E1528: List or Tuple or Blob + vim9 9->join() # E1529: List or Tuple required for + vim9 9->max() # E1530: List or Tuple or Dictionary + vim9 9->get(9) # E1531: Argument of get() must be a + vim9 9->tuple2list() # E1534: Tuple required for argument +< +Reserved for future use: *E1227* *E1250* *E1252* + E1227: List or Dictionary required for argument %d + E1250: Argument of %s must be a List, String, Dictionary or Blob + E1252: String, List or Blob required for argument %d + Categories of variables, defaults and null handling ~ - *variable-categories* *null-variables* -There are categories of variables: + *variable-categories* *null-variables* +There are three categories of variables: primitive number, float, boolean container string, blob, list, tuple, dict specialized function, job, channel, user-defined-object When declaring a variable without an initializer, an explicit type must be -provided. Each category has different default initialization semantics. Here's -an example for each category: > - var num: number # primitives default to a 0 equivalent - var cont: list # containers default to an empty container - var spec: job # specialized variables default to null -< -Vim does not have a familiar null value; it has various null_ predefined -values, for example |null_string|, |null_list|, |null_job|. Primitives do not -have a null_. The typical use cases for null_ are: -- to clear a variable and release its resources; -- as a default for a parameter in a function definition, see |null-compare|. +provided. Each category has different default initialization semantics. + +Primitives default to type-specific values. All primitives are empty but do +not equal `null`: >vim9 + + vim9script + var n: number | echo [n, n->empty(), n == null] # [0, 1, false] + var f: float | echo [f, f->empty(), f == null] # [0.0, 1, false] + var b: bool | echo [b, b->empty(), b == null] # [false, 1, false] +< +Containers default to an empty container. Only an empty string equals `null`: >vim9 + + vim9script + var s: string | echo [s, s->empty(), s == null] # ['', 1, true] + var z: blob | echo [z, z->empty(), z == null] # [0z, 1, false] + var l: list | echo [l, l->empty(), l == null] # [[], 1, false] + var t: tuple | echo [t, t->empty(), t == null] # [(), 1, false] + var d: dict | echo [d, d->empty(), d == null] # [{}, 1, false] +< +Specialized types default to equaling `null`: >vim9 + + vim9script + var F: func | echo [F, F == null] # [function(''), true] + var j: job | echo [j, j == null] # ['no process', true] + var c: channel | echo [c, c == null] # ['channel fail', true] + class Class + endclass + var o: Class | echo [o, o == null] # [object of [unknown], true] + enum Enum + endenum + var e: Enum | echo [e, e == null] # [object of [unknown], true] +< + Note: See |empty()| for explanations of empty job, empty channel, and + empty object types. + +Vim does not have a familiar null value. Instead, it has various null_ +predefined values including |null_string|, |null_list|, and |null_job|. +Primitives do not have a null_. Typical use cases for null_ are: + - to clear a variable and release its resources, + - as a default for a parameter in a function definition (for an example, + see |null_blob|), or + - assigned to a container or specialized variable to set it to null + for later comparison (for an example, see |null-compare|). For a specialized variable, like `job`, null_ is used to clear the -resources. For a container variable, resources can also be cleared by -assigning an empty container to the variable. For example: > - var j: job = job_start(...) - # ... job does its work - j = null_job # clear the variable and release the job's resources - - var l: list - # ... add lots of stuff to list - l = [] # clear the variable and release container resources -Using the empty container, rather than null_, to clear a container -variable may avoid null complications as described in |null-anomalies|. +resources. For example: >vim9 + + vim9script + var mydate: list + def Date(channel: channel, msg: string): void + mydate->add(msg) + enddef + var myjob = job_start([&shell, &shellcmdflag, 'date'], {out_cb: Date}) + echo [myjob, myjob->job_status()] + sleep 2 + echo $"The date and time is {mydate->join('')}" + echo [myjob, myjob->job_status()] + myjob = null_job # Clear the variable; release the job's resources. + echo myjob +< +For a container variable, resources may also be cleared by assigning an +empty container to the variable. For example: >vim9 + + vim9script + var perfect: list = [1, 4] + perfect->extend([9, 16, 25]) + perfect = [] + echo perfect + +Using an empty container, rather than null_, to clear a container +variable may avoid null complications - see |null-anomalies|. The initialization semantics of container variables and specialized variables -differ. An uninitialized container defaults to an empty container: > - var l1: list # empty container - var l2: list = [] # empty container - var l3: list = null_list # null container -"l1" and "l2" are equivalent and indistinguishable initializations; but "l3" -is a null container. A null container is similar to, but different from, an -empty container, see |null-anomalies|. - -Specialized variables default to null. These job initializations are -equivalent and indistinguishable: > +differ. For containers: + - An uninitialized container defaults to empty but does not equal `null` + (except for a uninitialized string). + - A container initialized to [], (), {}, "", or 0z is empty but does not + equal `null`. + - A container initialized as null_ defaults to empty and equals `null`. + +In the following example, the uninitialized list ("lu") and [] initialized +list ("li") are equivalent and indistinguishable whereas "ln" is a null +container, which is similar to, but not equivalent to, an empty container +(see |null-anomalies|). >vim9 + + vim9script + # uninitialized: empty container, not null + var lu: list + echo ['lu', $"empty={lu->empty()}", $"null={lu == null}"] + # initialized: empty container, not null + var li: list = [] + echo ['li', $"empty={li->empty()}", $"null={li == null}"] + # initialized: empty container, null + var ln: list = null_list + echo ['ln', $"empty={ln->empty()}", $"null={ln == null}"] +< +Specialized variables default to equaling null. These job initializations +are equivalent and indistinguishable: >vim9 + + vim9script var j1: job var j2: job = null_job var j3 = null_job + echo (j1 == j2) == (j2 == j3) # true (equivalent, indistinguishable) +< +When a list, tuple, or dict is declared, if the item type is not specified +it cannot be inferred. Consequently, the item type defaults to "any": >vim9 -When a list or dict is declared, if the item type is not specified and can not -be inferred, then the type is "any": > - var d1 = {} # type is "dict" - var d2 = null_dict # type is "dict" - -Declaring a function, see |vim9-func-declaration|, is particularly unique. + vim9script + var [t1, t2] = [(), null_tuple] + echo $'t1 is {t1->typename()} and t2 is {t2->typename()} too' +< +Tuples and functions (or partials) may be declared in various ways. +See |tuple-type|, |variadic-tuple|, and |vim9-func-declaration|. *null-compare* -For familiar null compare semantics, where a null container is not equal to -an empty container, do not use null_ in a comparison: > +For familiar null compare semantics, where an empty container is not equal to +a null container, do not use null_ in a comparison. That is because, +in Vim9 script, although null_ == `null`, comparing an: + + - empty container to `null` is `false`, but + - empty container to null_ is `true`. + +So, compare against `null`, not null_. For example: >vim9 + vim9script - def F(arg: list = null_list) - if arg == null - echo "null" - else - echo printf("not null, %sempty", empty(arg) ? '' : 'not ') - endif + var bonds: dict> = {g: ['007', '008'], o: ['007', '009']} + def Search(query: string): list + return query == "\r" ? null_list : bonds->get(query, []) enddef - F() # output: "null" - F(null_list) # output: "null" - F([]) # output: "not null, empty" - F(['']) # output: "not null, not empty" -The above function takes a list of strings and reports on it. -Change the above function signature to accept different types of arguments: > - def F(arg: list = null_list) # any type of list - def F(arg: any = null) # any type -< -In the above example, where the goal is to distinguish a null list from an -empty list, comparing against `null` instead of `null_list` is the correct -choice. The basic reason is because "null_list == null" and "[] != null". -Comparing to `null_list` fails since "[] == null_list". In the following section -there are details about comparison results. + echo "Goldfinger (g) or Octopussy (o)?: " + const C: string = getcharstr() + var result: list = C->Search() + if result == null # <<< DO NOT USE null_list HERE! + echo "Error: Nothing was entered" + else + echo result->empty() ? $"No matches for '{C}'" : $"{result}" + endif +< + NOTE: Using "result == null_list" instead of "result == null" would + fail to distinguish the error (nothing entered) and the valid + (nothing matched) result because [] == null_list whereas + [] != null. + +Conceptually, think of the null_ construct as a hybrid/bridge between +the general `null` and typed `empty` containers, having properties of both. +In the following section there are details about comparison results. *null-details* *null-anomalies* This section describes issues about using null and null_; included below -are the enumerated results of null comparisons. In some cases, if familiar -with vim9 null semantics, the programmer may chose to use null_ in +are the enumerated results of null comparisons. In some cases, if familiar +with vim9 null semantics, the programmer may choose to use null_ in comparisons and/or other situations. -Elsewhere in the documentation it says: - Quite often a null value is handled the same as an empty value, but - not always -Here's an example: > - vim9script - var s1: list - var s2: list = null_list - echo s1 # output: "[]" - echo s2 # output: "[]" - - echo s1 + ['a'] # output: "['a']" - echo s2 + ['a'] # output: "['a']" - - echo s1->add('a') # output: "['a']" - echo s2->add('a') # E1130: Can not add to null list -< -Two values equal to a null_ are not necessarily equal to each other: > - vim9script - echo {} == null_dict # true - echo null_dict == null # true - echo {} == null # false -< -Unlike the other containers, an uninitialized string is equal to null. The -'is' operator can be used to determine if it is a null_string: > - vim9script - var s1: string - var s2 = null_string - echo s1 == null # true - this is unexpected - echo s2 == null # true - echo s2 is null_string # true - - var b1: blob - var b2 = null_blob - echo b1 == null # false - echo b2 == null # true -< -Any variable initialized to the null_ is equal to the null_ and is -also equal to null. For example: > - vim9script - var x = null_blob - echo x == null_blob # true - echo x == null # true -< -An uninitialized variable is usually equal to null; it depends on its type: - var s: string s == null - var b: blob b != null *** - var l: list l != null *** - var t: tuple t != null *** - var d: dict d != null *** - var f: func f == null - var j: job j == null - var c: channel c == null - var o: Class o == null - -A variable initialized to empty equals null_; but not null: - var s2: string = "" == null_string != null - var b2: blob = 0z == null_blob != null - var l2: list = [] == null_list != null - var t2: tuple = () == null_tuple != null - var d2: dict = {} == null_dict != null - -NOTE: the specialized variables, like job, default to null value and have no -corresponding empty value. +Elsewhere in the documentation it says, "often a null value is handled the +same as an empty value, but not always". For example, you cannot add to a +null container: >vim9 + + vim9script + var le: list = [] + le->add('Okay') # le is now ['Okay'] + var ln = null_list + ln->add("E1130") # E1130: Cannot add to null list +< +As explained in |null-compare|, there is a non-transitive relationship among +`null`, null_ containers, and `empty`. To recap, for example: >vim9 + + vim9cmd echo (null_dict == {}, null_dict == null, {} != null) +< +The exception is an uninitialized string. It is equal to `null` (and is the +same instance as `null_string`). The 'is' operator (|expr-is|) may be used to +determine whether a string is uninitialized: >vim9 + + vim9script + var s: string + echo s == null_string # true + echo s is null_string # true (the same instance) + echo s == null # true (unexpected, perhaps) + echo s is null # false (not the same instance) +< +However, don't do the same for the other containers because, when evaluated +against their applicable null_ with 'is', they return `false`: >vim9 + + vim9script + var d: dict + echo d == null_dict # true + echo d is null_dict # false (not the same instance) + echo d == null # false (as expected) + echo d is null # false (not the same instance) +< +The key distinction here is an uninitialized string is implemented as +`null_string`, while an uninitialized list, dict, tuple, or blob is +implemented as an empty container ([], {}, (), and 0z respectively). +So, those uninitialized types are equal to, but not the same instance as, +their null_ counterparts, as this example shows: >vim9 + + vim9script + var t: tuple + echo t == null_tuple # true + echo t is null_tuple # false + +However, a variable initialized to the null_ is equal not only to the +null_, it is also equal to null. For example: >vim9 + + vim9script + var t: tuple = null_tuple + echo t == null_tuple # true + echo t is null_tuple # true + echo t == null # true +< +An uninitialized container variable is not equal to null, except for an +uninitialized string, which is explained in an example, above. So, these +all echo `true`: >vim9 + + vim9script + var b: blob | echo b != null + var d: dict | echo d != null + var l: list | echo l != null + var t: tuple | echo t != null + var s: string | echo s == null + +An uninitialized specialized variable is equal to null so these all echo `true`: >vim9 + + vim9script + var c: channel | echo c == null + var F: func | echo F == null + var j: job | echo j == null + class Class + endclass + var nc: Class | echo nc == null + enum Enum + endenum + var ne: Enum | echo ne == null +< + Note: the specialized variables, like job, default to null and + no specialized variable has a corresponding empty value. + +A container variable initialized to empty equals null_, so these are all +`true`: >vim9 + + vim9script + var s: string = "" | echo s == null_string + var b: blob = 0z | echo b == null_blob + var l: list = [] | echo l == null_list + var t: tuple = () | echo t == null_tuple + var d: dict = {} | echo d == null_dict +< +However, a container variable initialized to empty does not equal null, so +these are all `true`: >vim9 + + vim9script + var s: string = "" | echo s != null + var b: blob = 0z | echo b != null + var l: list = [] | echo l != null + var t: tuple = () | echo t != null + var d: dict = {} | echo d != null +< ============================================================================== @@ -1972,13 +2876,13 @@ errors: >vim9 vim9script My1558() - # Vim(eval):E1558: Unknown generic function: My1558 + # E1558: Unknown generic function: My1558 < >vim9 vim9script def My1560(): void enddef My1560() - # Vim(echo):E1560: Not a generic function: My1560 + # E1560: Not a generic function: My1560 < *E1561* Type parameter names must not clash with other identifiers: >vim9 @@ -2496,7 +3400,8 @@ much overhead that cannot be avoided. Therefore the `:def` method to define a new-style function had to be added, which allows for a function with different semantics. Most things still work as before, but some parts do not. A new way to define a function was -considered the best way to separate the legacy style code from Vim9 style code. +considered the best way to separate the legacy style code from Vim9 style +code. Using "def" to define a function comes from Python. Other languages use "function" which clashes with legacy Vim script. diff --git a/runtime/doc/vim9class.txt b/runtime/doc/vim9class.txt index 0991c1b77a..98c04d3020 100644 --- a/runtime/doc/vim9class.txt +++ b/runtime/doc/vim9class.txt @@ -1,4 +1,4 @@ -*vim9class.txt* For Vim version 9.1. Last change: 2025 Aug 27 +*vim9class.txt* For Vim version 9.1. Last change: 2025 Nov 11 VIM REFERENCE MANUAL by Bram Moolenaar @@ -661,8 +661,8 @@ The basic idea is to build on top of an existing class, add properties to it. The extended class is called the "base class" or "super class". The new class is called the "child class". -Object variables from the base class are all taken over by the child class. It -is not possible to override them (unlike some other languages). +Object variables from the base class are all taken over by the child class. +It is not possible to override them (unlike some other languages). *E1356* *E1357* *E1358* Object methods of the base class can be overruled. The signature (arguments, @@ -766,7 +766,7 @@ The following builtin methods are supported: A class method cannot be used as a builtin method. Defining an interface ~ - *Interface* *:interface* *:endinterface* + *interface* *Interface* *:interface* *:endinterface* An interface is defined between `:interface` and `:endinterface`. It may be prefixed with `:export`: > diff --git a/runtime/doc/visual.txt b/runtime/doc/visual.txt index e65d1fe501..4360c378ac 100644 --- a/runtime/doc/visual.txt +++ b/runtime/doc/visual.txt @@ -1,7 +1,7 @@ -*visual.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*visual.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Visual mode *Visual* *Visual-mode* *visual-mode* diff --git a/runtime/doc/wayland.txt b/runtime/doc/wayland.txt index 300b9c5b96..b01f031e79 100644 --- a/runtime/doc/wayland.txt +++ b/runtime/doc/wayland.txt @@ -1,7 +1,7 @@ -*wayland.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*wayland.txt* For Vim version 9.1. Last change: 2025 Nov 25 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Wayland Protocol Support *wayland* @@ -16,7 +16,8 @@ Wayland Protocol Support *wayland* Functionality such as the clipboard for Wayland requires a seat to use. A Wayland seat can consist of a keyboard, pointer, and touch device(s). The seat to use can be set with the 'wlseat' option. Only useful if you use -multiple Wayland seats in the same Wayland session. +multiple Wayland seats in the same Wayland session. If you don't know what +this is means, then it likely does not matter for you. *wayland-gui* See |gui-wayland|. Please note that when using the GUI, Vim uses the toolkit @@ -63,17 +64,24 @@ should be bundled with libwayland on your system: > If you don't get any match, then please see |wayland-focus-steal| for more information. +Some compositors that are known to support either or both protocols: + 1. KWin (KDE) + 2. wlroots based (Sway, Labwc) + 3. Niri + 4. Hyprland + 5. Wayfire + If you come from X11, then the regular Wayland selection is equivalent to the CLIPBOARD selection in X11, and the primary Wayland selection equates to the -X11 primary selection. Accessing these selections is the same as X11 in Vim, +X11 PRIMARY selection. Accessing these selections is the same as X11 in Vim, in which the + register is the regular selection, and the * register is the -primary selection, note that your compositor may not support primary +primary selection. Note that your compositor may not support primary selections, see |wayland-primary-selection| for more details. *wayland-persist* If you use X11 cut buffers, no such things exist on Wayland. Instead to emulate such functionality, a separate clipboard manager must be used in order -to persist selection data when a Wayland client exists. +to persist selection data when a Wayland client exits. *wayland-and-x11* If your version of Vim comes compiled with both X11 and Wayland support, then diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt index 8dbc7f3ff7..7b82486558 100644 --- a/runtime/doc/windows.txt +++ b/runtime/doc/windows.txt @@ -1,7 +1,7 @@ -*windows.txt* For Vim version 9.1. Last change: 2025 Oct 26 +*windows.txt* For Vim version 9.1. Last change: 2025 Dec 03 - VIM REFERENCE MANUAL by Bram Moolenaar + VIM REFERENCE MANUAL by Bram Moolenaar Editing with multiple windows and buffers. *windows* *buffers* @@ -205,9 +205,9 @@ CTRL-W CTRL-N *CTRL-W_CTRL-N* :[N]new [++opt] [+cmd] *:new* Create a new window and start editing an empty file in it. Make new window N high (default is to use half the existing - height). Reduces the current window height to create room (and - others, if the 'equalalways' option is set and 'eadirection' - isn't "hor"). + height). Reduces the current window height to create room + (and others, if the 'equalalways' option is set and + 'eadirection' isn't "hor"). Also see |++opt| and |+cmd|. If 'fileformats' is not empty, the first format given will be used for the new buffer. If 'fileformats' is empty, the @@ -511,8 +511,8 @@ CTRL-W R Rotate windows upwards/leftwards. The second window becomes current window is in. CTRL-W x *CTRL-W_x* *CTRL-W_CTRL-X* -CTRL-W CTRL-X Without count: Exchange current window with next one. If there - is no next window, exchange with previous window. +CTRL-W CTRL-X Without count: Exchange current window with next one. If + there is no next window, exchange with previous window. With count: Exchange current window with Nth window (first window is 1). The cursor is put in the other window. When vertical and horizontal window splits are mixed, the @@ -659,11 +659,11 @@ times than |WinResized|, it may slow down editing a bit. The information provided by |WinScrolled| is a dictionary for each window that has changes, using the window ID as the key, and a total count of the changes -with the key "all". Example value for |v:event| (|Vim9| syntax): +with the key "all". Example value for |v:event| (|Vim9| syntax): > { - all: {width: 0, height: 2, leftcol: 0, skipcol: 0, topline: 1, topfill: 0}, + all: {width: 0, height: 2, leftcol: 0, skipcol: 0, topline: 1, topfill: 0}, 1003: {width: 0, height: -1, leftcol: 0, skipcol: 0, topline: 0, topfill: 0}, - 1006: {width: 0, height: 1, leftcol: 0, skipcol: 0, topline: 1, topfill: 0}, + 1006: {width: 0, height: 1, leftcol: 0, skipcol: 0, topline: 1, topfill: 0}, } Note that the "all" entry has the absolute values of the individual windows @@ -878,13 +878,15 @@ the buffer. The result is that all buffers will use the 'encoding' encoding *:sta* *:stag* :sta[g][!] [tagname] Does ":tag[!] [tagname]" and splits the window for the found - tag. See also |:tag|. + tag. Refer to 'switchbuf' to jump to a tag in a vertically + split window or a new tab page. See also |:tag|. CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]* CTRL-W CTRL-] Split current window in two. Use identifier under cursor as a tag and jump to it in the new upper window. In Visual mode uses the Visually selected text as a tag. - Make new window N high. + Make new window N high. Refer to 'switchbuf' to jump to a tag + in a vertically split window or a new tab page. *CTRL-W_g]* CTRL-W g ] Split current window in two. Use identifier under cursor as a @@ -996,13 +998,13 @@ CTRL-W CTRL-Z *CTRL-W_CTRL-Z* *:pc* *:pclose* CTRL-W } *CTRL-W_}* Use identifier under cursor as a tag and perform a :ptag on - it. Make the new Preview window (if required) N high. If N is - not given, 'previewheight' is used. + it. Make the new Preview window (if required) N high. If N + is not given, 'previewheight' is used. CTRL-W g } *CTRL-W_g}* Use identifier under cursor as a tag and perform a :ptjump on - it. Make the new Preview window (if required) N high. If N is - not given, 'previewheight' is used. + it. Make the new Preview window (if required) N high. If N + is not given, 'previewheight' is used. *:pb* *:pbuffer* :[N]pb[uffer][!] [+cmd] [N] @@ -1145,10 +1147,10 @@ list of buffers. |unlisted-buffer| or "N CTRL-^", where N is the buffer number. For the file name these special values are used: - [Prompt] |prompt-buffer| - [Popup] buffer of a |popup-window| - [Scratch] 'buftype' is "nofile" - [No Name] no file name specified + "[Prompt]" |prompt-buffer| + "[Popup]" buffer of a |popup-window| + "[Scratch]" 'buftype' is "nofile" + "[No Name]" no file name specified For a |terminal-window| buffer the status is used. Indicators (chars in the same column are mutually exclusive): @@ -1325,8 +1327,8 @@ list of buffers. |unlisted-buffer| buffer (if there is one). Similarly, if you are in a normal (non-help) buffer, this takes you to the next normal buffer. This is so that if you have invoked help, it doesn't get in - the way when you're browsing code/text buffers. The next three - commands also work like this. + the way when you're browsing code/text buffers. The next + three commands also work like this. *:sbn* *:sbnext* :[N]sbn[ext] [+cmd] [N] diff --git a/runtime/doc/workshop.txt b/runtime/doc/workshop.txt index 9ec30da950..25ea2ddbc6 100644 --- a/runtime/doc/workshop.txt +++ b/runtime/doc/workshop.txt @@ -1,7 +1,7 @@ -*workshop.txt* For Vim version 9.1. Last change: 2019 Jan 17 +*workshop.txt* For Vim version 9.1. Last change: 2025 Nov 09 - VIM REFERENCE MANUAL by Gordon Prieur + VIM REFERENCE MANUAL by Gordon Prieur Sun Visual WorkShop Features *workshop* *workshop-support* diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 9a6febdb2a..b6e4ac1bca 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types " " Maintainer: The Vim Project -" Last Change: 2025 Oct 09 +" Last Change: 2026 Jan 02 " Former Maintainer: Bram Moolenaar " If the filetype can be detected from extension or file name(the final path component), @@ -427,11 +427,15 @@ au BufNewFile,BufRead *.e,*.E call dist#ft#FTe() " Elm Filter Rules file au BufNewFile,BufRead filter-rules setf elmfilt +" Erlang Application Resource Files +au BufNewFile,BufRead *.app.src setf erlang +au BufNewFile,BufRead *.app call dist#ft#FTapp() + " ESMTP rc file au BufNewFile,BufRead *esmtprc setf esmtprc " Fennel -au BufNewFile,BufRead *.fnl,{,.}fennelrc setf fennel +au BufNewFile,BufRead {,.}fennelrc setf fennel " Flatpak config au BufNewFile,BufRead */flatpak/repo/config setf dosini @@ -774,12 +778,13 @@ au BufNewFile,BufRead */neofetch/config.conf setf sh " Nginx au BufNewFile,BufRead *.nginx,nginx*.conf,*nginx.conf,*/nginx/*.conf setf nginx -" Nroff/Troff (*.ms and *.t are checked below) +" Nroff/Groff/Troff (*.ms and *.t are checked below) au BufNewFile,BufRead *.me \ if expand("") != "read.me" && expand("") != "click.me" | \ setf nroff | \ endif -au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom setf nroff +au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac setf nroff +au BufNewFile,BufRead *.groff,*.mom setf groff au BufNewFile,BufRead *.[0-9],*.[013]p,*.[1-8]x,*.3{am,perl,pm,posix,type},*.n call dist#ft#FTnroff() " Nroff or Objective C++ @@ -1122,6 +1127,15 @@ au BufNewFile,BufRead */etc/systemd/system/*.d/.#* setf systemd au BufNewFile,BufRead */etc/systemd/system/.#* setf systemd au BufNewFile,BufRead */.config/systemd/user/*.d/.#* setf systemd au BufNewFile,BufRead */.config/systemd/user/.#* setf systemd +" Podman Quadlet files +au BufNewFile,BufRead */containers/systemd/*.{artifact,build,container,image,kube,network,pod,volume} setf systemd +" Podman Quadlet rootless files not already captured by previous line +au BufNewFile,BufRead */etc/containers/systemd/users/*/*.{artifact,build,container,image,kube,network,pod,volume} setf systemd +au BufNewFile,BufRead */etc/containers/systemd/users/*.{artifact,build,container,image,kube,network,pod,volume} setf systemd +" Podman Quadlet overrides +au BufNewFile,BufRead */containers/systemd/*.d/*.conf setf systemd +au BufNewFile,BufRead */etc/containers/systemd/users/*/*.d/*.conf setf systemd +au BufNewFile,BufRead */etc/containers/systemd/users/*.d/*.conf setf systemd " Sudoers au BufNewFile,BufRead */etc/sudoers,sudoers.tmp setf sudoers diff --git a/runtime/ftplugin/bicep-params.vim b/runtime/ftplugin/bicep-params.vim new file mode 100644 index 0000000000..7cc2d85126 --- /dev/null +++ b/runtime/ftplugin/bicep-params.vim @@ -0,0 +1,3 @@ +" Placeholder for maximum compatibility. While bicepparam files are treated as distinct filetypes, +" they are should share the same ftplugin settings as bicep files. +runtime! ftplugin/bicep.vim diff --git a/runtime/ftplugin/bicep.vim b/runtime/ftplugin/bicep.vim new file mode 100644 index 0000000000..f142daf135 --- /dev/null +++ b/runtime/ftplugin/bicep.vim @@ -0,0 +1,14 @@ +" Vim filetype plugin +" Language: Bicep +" Maintainer: Scott McKendry +" Last Change: 2025 Dec 27 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s + +let b:undo_ftplugin = "setlocal comments< commentstring<" diff --git a/runtime/ftplugin/bpftrace.vim b/runtime/ftplugin/bpftrace.vim new file mode 100644 index 0000000000..73772b103d --- /dev/null +++ b/runtime/ftplugin/bpftrace.vim @@ -0,0 +1,16 @@ +" Vim filetype plugin +" Language: bpftrace +" Maintainer: Stanislaw Gruszka +" Last Change: 2025 Dec 23 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s + +setlocal formatoptions-=t formatoptions+=croql + +let b:undo_ftplugin = "setlocal comments< commentstring< formatoptions<" diff --git a/runtime/ftplugin/hog.vim b/runtime/ftplugin/hog.vim index 4ee0a9f934..61714f2db9 100644 --- a/runtime/ftplugin/hog.vim +++ b/runtime/ftplugin/hog.vim @@ -2,13 +2,14 @@ " Language: hog (snort.conf) " Maintainer: . Victor Roemer, . " Last Change: Mar 1, 2013 +" 2025 Dec 03 by Vim Project: set undo_ftplugin correctly #18727 if exists("b:did_ftplugin") finish endif let b:did_ftplugin = 1 -let s:undo_ftplugin = "setl fo< com< cms< def< inc<" +let b:undo_ftplugin = "setl fo< com< cms< def< inc<" let s:cpo_save = &cpo set cpo&vim @@ -19,8 +20,8 @@ setlocal commentstring=\c#\ %s setlocal define=\c^\s\{-}var setlocal include=\c^\s\{-}include -" Move around configurations -let s:hog_keyword_match = '\c^\s*\<\(preprocessor\\|config\\|output\\|include\\|ipvar\\|portvar\\|var\\|dynamicpreprocessor\\|' . +" Move around configurations +let s:hog_keyword_match = '\c^\s*\<\(preprocessor\\|config\\|output\\|include\\|ipvar\\|portvar\\|var\\|dynamicpreprocessor\\|' . \ 'dynamicengine\\|dynamicdetection\\|activate\\|alert\\|drop\\|block\\|dynamic\\|log\\|pass\\|reject\\|sdrop\\|sblock\)\>' exec "nnoremap ]] :call search('" . s:hog_keyword_match . "', 'W' )" @@ -28,9 +29,9 @@ exec "nnoremap [[ :call search('" . s:hog_keyword_match . "', ' if exists("loaded_matchit") let b:match_words = - \ '^\s*\<\%(preprocessor\|config\|output\|include\|ipvar\|portvar' . - \ '\|var\|dynamicpreprocessor\|dynamicengine\|dynamicdetection' . - \ '\|activate\|alert\|drop\|block\|dynamic\|log\|pass\|reject' . + \ '^\s*\<\%(preprocessor\|config\|output\|include\|ipvar\|portvar' . + \ '\|var\|dynamicpreprocessor\|dynamicengine\|dynamicdetection' . + \ '\|activate\|alert\|drop\|block\|dynamic\|log\|pass\|reject' . \ '\|sdrop\|sblock\>\):$,\::\,:;' let b:match_skip = 'r:\\.\{-}$\|^\s*#.\{-}$\|^\s*$' endif diff --git a/runtime/ftplugin/julia.vim b/runtime/ftplugin/julia.vim index b65cf99711..e2e7342822 100644 --- a/runtime/ftplugin/julia.vim +++ b/runtime/ftplugin/julia.vim @@ -3,7 +3,7 @@ " Maintainer: Carlo Baldassi " Homepage: https://github.com/JuliaEditorSupport/julia-vim " Last Change: 2021 Aug 04 -" adapted from upstream 2021 Aug 4 +" 2025 Dec 9 sync with upstream repo #18894 if exists("b:did_ftplugin") finish @@ -11,12 +11,12 @@ endif let b:did_ftplugin = 1 let s:save_cpo = &cpo -set cpo-=C +set cpo&vim setlocal include=^\\s*\\%(reload\\\|include\\)\\> setlocal suffixesadd=.jl setlocal comments=:# -setlocal commentstring=#\ %s +setlocal commentstring=#=%s=# setlocal cinoptions+=#1 setlocal define=^\\s*macro\\> setlocal fo-=t fo+=croql @@ -24,7 +24,7 @@ setlocal fo-=t fo+=croql let b:julia_vim_loaded = 1 let b:undo_ftplugin = "setlocal include< suffixesadd< comments< commentstring<" - \ . " define< fo< shiftwidth< expandtab< indentexpr< indentkeys< cinoptions< completefunc<" + \ . " define< fo< cinoptions< completefunc<" \ . " | unlet! b:julia_vim_loaded" " MatchIt plugin support @@ -68,7 +68,7 @@ if exists("loaded_matchit") elseif attr == 'juliaBlKeyword' return b:julia_begin_keywordsm . ':' . b:julia_end_keywords elseif attr == 'juliaException' - return b:julia_begin_keywordsm . ':\<\%(catch\|finally\)\>:' . b:julia_end_keywords + return b:julia_begin_keywordsm . ':\<\%(catch\|else\|finally\)\>:' . b:julia_end_keywords endif return '\<\>:\<\>' endfunction diff --git a/runtime/ftplugin/leex.vim b/runtime/ftplugin/leex.vim new file mode 100644 index 0000000000..1d5ce06ff2 --- /dev/null +++ b/runtime/ftplugin/leex.vim @@ -0,0 +1,14 @@ +" Vim ftplugin file +" Language: Leex (Erlang Lexical Analyzer Generator) +" Maintainer: Jon Parise +" Last Change: 2025 Nov 29 +" Filenames: *.xrl +" +" References: +" - https://www.erlang.org/doc/apps/parsetools/leex.html + +if exists('b:did_ftplugin') + finish +endif + +runtime! ftplugin/erlang.vim diff --git a/runtime/ftplugin/logtalk.dict b/runtime/ftplugin/logtalk.dict index 0d076b7b3e..386cf1f2ab 100644 --- a/runtime/ftplugin/logtalk.dict +++ b/runtime/ftplugin/logtalk.dict @@ -72,6 +72,7 @@ deprecated discontiguous div domain_error +consistency_error duplicated_directives dynamic dynamic_declarations @@ -144,6 +145,7 @@ min missing_directives mod mode +mode_non_terminal modules multifile nl diff --git a/runtime/ftplugin/perl.vim b/runtime/ftplugin/perl.vim index 03368a7af3..f2d39161b6 100644 --- a/runtime/ftplugin/perl.vim +++ b/runtime/ftplugin/perl.vim @@ -1,6 +1,6 @@ " Vim filetype plugin file " Language: Perl -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues " License: Vim License (see :help license) diff --git a/runtime/ftplugin/plsql.vim b/runtime/ftplugin/plsql.vim old mode 100755 new mode 100644 diff --git a/runtime/ftplugin/pod.vim b/runtime/ftplugin/pod.vim index 81b0011bc5..5431fb9923 100644 --- a/runtime/ftplugin/pod.vim +++ b/runtime/ftplugin/pod.vim @@ -1,6 +1,6 @@ " Vim filetype plugin file " Language: Perl POD format -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Author: Doug Kearns " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues diff --git a/runtime/ftplugin/quarto.vim b/runtime/ftplugin/quarto.vim index a76bcc2c7e..f8b27a1a58 100644 --- a/runtime/ftplugin/quarto.vim +++ b/runtime/ftplugin/quarto.vim @@ -1 +1,5 @@ +if exists("b:did_ftplugin") + finish +endif + runtime ftplugin/rmd.vim diff --git a/runtime/ftplugin/raku.vim b/runtime/ftplugin/raku.vim index f57427e323..4eb2619fd9 100644 --- a/runtime/ftplugin/raku.vim +++ b/runtime/ftplugin/raku.vim @@ -1,6 +1,6 @@ " Vim filetype plugin file " Language: Raku -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Homepage: https://github.com/Raku/vim-raku " Bugs/requests: https://github.com/Raku/vim-raku/issues " Last Change: 2021 Apr 16 diff --git a/runtime/ftplugin/rust.vim b/runtime/ftplugin/rust.vim index 3e2741f919..4765f81704 100644 --- a/runtime/ftplugin/rust.vim +++ b/runtime/ftplugin/rust.vim @@ -3,6 +3,7 @@ " Maintainer: Chris Morgan " Last Change: 2024 Mar 17 " 2024 May 23 by Riley Bruins +" Last Change: 2025 Nov 04 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +let b:undo_ftplugin = 'setl com< cms< fo<' + +setlocal formatoptions+=croql formatoptions-=t +setlocal commentstring=(*\ %s\ *) +setlocal comments=sr:(*,mb:*,ex:*) + +if exists('loaded_matchit') + let b:match_ignorecase = 0 + let b:match_words = '\<\%(abstype\|let\|local\|sig\|struct\)\>:\<\%(in\|with\)\>:\' + let b:undo_ftplugin ..= ' | unlet! b:match_ignorecase b:match_words' +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "SML Source Files (*.sml)\t*.sml\n" .. + \ "SML Signature Files (*.sig)\t*.sig\n" + if has("win32") + let b:browsefilter ..= "All Files (*.*)\t*\n" + else + let b:browsefilter ..= "All Files (*)\t*\n" + endif + let b:undo_ftplugin ..= " | unlet! b:browsefilter" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/tap.vim b/runtime/ftplugin/tap.vim index c165c0ce68..9f656f74b4 100644 --- a/runtime/ftplugin/tap.vim +++ b/runtime/ftplugin/tap.vim @@ -1,6 +1,6 @@ " Vim filetype plugin file " Language: Verbose TAP Output -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues " License: Vim License (see :help license) diff --git a/runtime/ftplugin/tt2html.vim b/runtime/ftplugin/tt2html.vim index 0407dbba4e..195a232e07 100644 --- a/runtime/ftplugin/tt2html.vim +++ b/runtime/ftplugin/tt2html.vim @@ -1,6 +1,6 @@ " Vim filetype plugin file " Language: TT2 embedded with HTML -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues " License: Vim License (see :help license) diff --git a/runtime/ftplugin/xml.vim b/runtime/ftplugin/xml.vim index 83c528eff2..6256d171ed 100644 --- a/runtime/ftplugin/xml.vim +++ b/runtime/ftplugin/xml.vim @@ -1,12 +1,11 @@ " Vim filetype plugin file " Language: xml " Maintainer: Christian Brabandt -" Last Changed: Dec 07th, 2018 -" 2024 Jan 14 by Vim Project (browsefilter) -" 2024 May 23 by Riley Bruins ('commentstring') -" Repository: https://github.com/chrisbra/vim-xml-ftplugin -" Previous Maintainer: Dan Sharp -" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin +" Last Changed: 2024 May 24 +" Repository: https://github.com/chrisbra/vim-xml-ftplugin +" Previously +" Maintainer: Dan Sharp +" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin if exists("b:did_ftplugin") | finish | endif let b:did_ftplugin = 1 @@ -54,12 +53,8 @@ command! -nargs=? XMLent call xmlcomplete#CreateEntConnection() if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") let b:browsefilter="XML Files (*.xml)\t*.xml\n" . \ "DTD Files (*.dtd)\t*.dtd\n" . - \ "XSD Files (*.xsd)\t*.xsd\n" - if has("win32") - let b:browsefilter .= "All Files (*.*)\t*\n" - else - let b:browsefilter .= "All Files (*)\t*\n" - endif + \ "XSD Files (*.xsd)\t*.xsd\n" . + \ "All Files (*.*)\t*.*\n" endif " Undo the stuff we changed. diff --git a/runtime/ftplugin/xs.vim b/runtime/ftplugin/xs.vim index 206fbc2713..d51c411298 100644 --- a/runtime/ftplugin/xs.vim +++ b/runtime/ftplugin/xs.vim @@ -1,6 +1,6 @@ " Vim filetype plugin file " Language: XS (Perl extension interface language) -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues " License: Vim License (see :help license) diff --git a/runtime/ftplugin/zsh.vim b/runtime/ftplugin/zsh.vim index 65e9f377bf..850bef055c 100644 --- a/runtime/ftplugin/zsh.vim +++ b/runtime/ftplugin/zsh.vim @@ -2,11 +2,9 @@ " Language: Zsh shell script " Maintainer: Christian Brabandt " Previous Maintainer: Nikolai Weibull -" Latest Revision: 2024 Sep 19 +" Latest Revision: 2025 Jul 23 " License: Vim (see :h license) " Repository: https://github.com/chrisbra/vim-zsh -" Last Change: -" 2025 Jul 23 by Vim Project (use :hor term #17822) if exists("b:did_ftplugin") finish @@ -20,9 +18,14 @@ setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql let b:undo_ftplugin = "setl com< cms< fo< " +if get(g:, 'zsh_fold_enable', 0) + setlocal foldmethod=syntax + let b:undo_ftplugin .= "fdm< " +endif + if executable('zsh') && &shell !~# '/\%(nologin\|false\)$' if exists(':terminal') == 2 - command! -buffer -nargs=1 ZshKeywordPrg silent exe ':hor term zsh -c "autoload -Uz run-help; run-help "' + command! -buffer -nargs=1 ZshKeywordPrg silent exe ':hor :term zsh -c "autoload -Uz run-help; run-help "' else command! -buffer -nargs=1 ZshKeywordPrg echo system('MANPAGER= zsh -c "autoload -Uz run-help; run-help 2>/dev/null"') endif diff --git a/runtime/indent/bpftrace.vim b/runtime/indent/bpftrace.vim new file mode 100644 index 0000000000..f00549778e --- /dev/null +++ b/runtime/indent/bpftrace.vim @@ -0,0 +1,19 @@ +" Vim indent file +" Language: bpftrace +" Author: Stanislaw Gruszka +" Last Change: 2025 Dec 27 + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal noautoindent nosmartindent + +setlocal cindent +setlocal cinoptions=+0,(0,[0,Ws,J1,j1,m1,>s +setlocal cinkeys=0{,0},!^F,o,O,#0 +setlocal cinwords= + +let b:undo_indent = "setlocal autoindent< smartindent< cindent< cinoptions< cinkeys< cinwords<" diff --git a/runtime/indent/julia.vim b/runtime/indent/julia.vim index efc98a2851..d01aa965df 100644 --- a/runtime/indent/julia.vim +++ b/runtime/indent/julia.vim @@ -4,6 +4,7 @@ " Homepage: https://github.com/JuliaEditorSupport/julia-vim " Last Change: 2022 Jun 14 " 2023 Aug 28 by Vim Project (undo_indent) +" 2025 Dec 08 by Vim Project (update indent script from upstream #18894) " Notes: originally based on Bram Moolenaar's indent file for vim " Only load this indent file when no other was loaded. @@ -22,7 +23,7 @@ setlocal indentkeys-=0{ setlocal indentkeys-=0} setlocal nosmartindent -let b:undo_indent = "setl ai< inde< indk< si<" +let b:undo_indent = "setlocal autoindent< indentexpr< indentkeys< smartindent<" " Only define the function once. if exists("*GetJuliaIndent") @@ -96,7 +97,7 @@ function GetJuliaNestingStruct(lnum, ...) let i = JuliaMatch(a:lnum, line, '\', s) if i >= 0 && i == fb let s = i+1 - if len(blocks_stack) > 0 && blocks_stack[-1] =~# '\<\%(else\)\=if\>' + if len(blocks_stack) > 0 && blocks_stack[-1] =~# '\<\%(\%(else\)\=if\|catch\)\>' let blocks_stack[-1] = 'else' else call add(blocks_stack, 'else') @@ -114,7 +115,7 @@ function GetJuliaNestingStruct(lnum, ...) let i = JuliaMatch(a:lnum, line, '\', s) if i >= 0 && i == fb let s = i+1 - if len(blocks_stack) > 0 && blocks_stack[-1] == 'try' + if len(blocks_stack) > 0 && blocks_stack[-1] =~# '\<\%(try\|finally\)\>' let blocks_stack[-1] = 'catch' else call add(blocks_stack, 'catch') @@ -125,7 +126,7 @@ function GetJuliaNestingStruct(lnum, ...) let i = JuliaMatch(a:lnum, line, '\', s) if i >= 0 && i == fb let s = i+1 - if len(blocks_stack) > 0 && (blocks_stack[-1] == 'try' || blocks_stack[-1] == 'catch') + if len(blocks_stack) > 0 && blocks_stack[-1] =~# '\<\%(try\|catch\|else\)\>' let blocks_stack[-1] = 'finally' else call add(blocks_stack, 'finally') @@ -298,7 +299,7 @@ function IsInContinuationImportLine(lnum) if len(stack) == 0 return 0 endif - return JuliaMatch(a:lnum, getline(a:lnum), '\<\%(import\|using\|export\)\>', indent(a:lnum)) == -1 + return JuliaMatch(a:lnum, getline(a:lnum), '\<\%(import\|using\|export\|public\)\>', indent(a:lnum)) == -1 endfunction function IsFunctionArgPar(lnum, c) @@ -314,7 +315,7 @@ function JumpToMatch(lnum, last_closed_bracket) " otherwise resorts to vim's default, which is buggy but better than " nothing) call cursor(a:lnum, a:last_closed_bracket) - let percmap = maparg("%", "n") + let percmap = maparg("%", "n") if exists("g:loaded_matchit") && percmap =~# 'Match\%(it\|_wrapper\)' normal % else @@ -448,10 +449,10 @@ function GetJuliaIndent() " Decrease indentation for each closed block in the current line let ind -= shiftwidth() * num_closed_blocks - " Additional special case: multiline import/using/export statements + " Additional special case: multiline import/using/export/public statements let prevline = getline(lnum) - " Are we in a multiline import/using/export statement, right below the + " Are we in a multiline import/using/export/public statement, right below the " opening line? if IsInContinuationImportLine(v:lnum) && !IsInContinuationImportLine(lnum) if get(g:, 'julia_indent_align_import', 1) @@ -465,9 +466,9 @@ function GetJuliaIndent() return cind + 2 endif else - " if the opening line is not a naked import/using/export statement, use + " if the opening line is not a naked import/using/export/public statement, use " it as reference - let iind = JuliaMatch(lnum, prevline, '\', indent(lnum), lim) + let iind = JuliaMatch(lnum, prevline, '\', indent(lnum), lim) if iind >= 0 " assuming whitespace after using... so no `using(XYZ)` please! let nonwhiteind = JuliaMatch(lnum, prevline, '\S', iind+6, -1, 'basic') @@ -479,7 +480,7 @@ function GetJuliaIndent() endif let ind += shiftwidth() - " Or did we just close a multiline import/using/export statement? + " Or did we just close a multiline import/using/export/public statement? elseif !IsInContinuationImportLine(v:lnum) && IsInContinuationImportLine(lnum) " find the starting line of the statement let ilnum = 0 diff --git a/runtime/indent/lf.vim b/runtime/indent/lf.vim new file mode 100644 index 0000000000..5997592883 --- /dev/null +++ b/runtime/indent/lf.vim @@ -0,0 +1,10 @@ +" Vim indent file +" Language: lf file manager configuration file (lfrc) +" Maintainer: Andis Sprinkis +" URL: https://github.com/andis-sprinkis/lf-vim +" Last Change: 26 Oct 2025 + +if exists("b:did_indent") | finish | endif + +" Correctly indent embedded shell commands. +runtime! indent/sh.vim diff --git a/runtime/indent/perl.vim b/runtime/indent/perl.vim index a97c34da53..636d646d4d 100644 --- a/runtime/indent/perl.vim +++ b/runtime/indent/perl.vim @@ -1,6 +1,6 @@ " Vim indent file " Language: Perl -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues " License: Vim License (see :help license) diff --git a/runtime/indent/php.vim b/runtime/indent/php.vim index 377ffd5afb..89d4afa0d0 100644 --- a/runtime/indent/php.vim +++ b/runtime/indent/php.vim @@ -1,10 +1,9 @@ -" Vim indent file " Language: PHP " Author: John Wellesz " URL: https://www.2072productions.com/vim/indent/php.vim " Home: https://github.com/2072/PHP-Indenting-for-VIm -" Last Change: 2023 August 18th -" Version: 1.75 +" Last Change: 2025 November 16th +" Version: 1.76 " " " Type :help php-indent for available options @@ -839,13 +838,15 @@ function! GetPhpIndent() continue else - let isSingleLineBlock = 0 - if getline(last_line_num) =~# '^\s*else\%(if\)\=\>' + if getline(last_line_num) =~# '^\s*else\%(if\)\=\>' && !isSingleLineBlock let last_line_num = FindTheIfOfAnElse(last_line_num, 0) + let isSingleLineBlock = 0 continue endif + let isSingleLineBlock = 0 + let last_match = last_line_num diff --git a/runtime/indent/raku.vim b/runtime/indent/raku.vim index 753a2b04be..35922aaedc 100644 --- a/runtime/indent/raku.vim +++ b/runtime/indent/raku.vim @@ -1,6 +1,6 @@ " Vim indent file " Language: Perl 6 -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues " Last Change: 2020 Apr 15 diff --git a/runtime/indent/rust.vim b/runtime/indent/rust.vim index a96650d419..30206be435 100644 --- a/runtime/indent/rust.vim +++ b/runtime/indent/rust.vim @@ -2,7 +2,9 @@ " Language: Rust " Author: Chris Morgan " Last Change: 2023-09-11 -" 2024 Jul 04 by Vim Project: use shiftwidth() instead of hard-coding shifted values (#15138) +" 2024 Jul 04 by Vim Project: use shiftwidth() instead of hard-coding shifted values #15138 +" 2025 Dec 29 by Vim Project: clean up +" 2025 Dec 31 by Vim Project: correcly indent after nested array literal #19042 " For bugs, patches and license go to https://github.com/rust-lang/rust.vim " Note: upstream seems umaintained: https://github.com/rust-lang/rust.vim/issues/502 @@ -86,16 +88,6 @@ function! s:is_string_comment(lnum, col) endif endfunction -if exists('*shiftwidth') - function! s:shiftwidth() - return shiftwidth() - endfunc -else - function! s:shiftwidth() - return &shiftwidth - endfunc -endif - function GetRustIndent(lnum) " Starting assumption: cindent (called at the end) will do it right " normally. We just want to fix up a few cases. @@ -204,6 +196,22 @@ function GetRustIndent(lnum) endif endif + " Prevent cindent from becoming confused when pairing square brackets, as + " in + " + " let arr = [[u8; 4]; 2] = [ + " [0; 4], + " [1, 3, 5, 9], + " ]; + " | ← indentation placed here + " + " for which it calculates too much indentation in the line following the + " close of the array. + if prevline =~# '^\s*\]' && l:last_prevline_character ==# ';' + \ && line !~# '^\s*}' + return indent(prevlinenum) + endif + if l:last_prevline_character ==# "," \ && s:get_line_trimmed(a:lnum) !~# '^\s*[\[\]{})]' \ && prevline !~# '^\s*fn\s' @@ -240,43 +248,6 @@ function GetRustIndent(lnum) return indent(prevlinenum) endif - if !has("patch-7.4.355") - " cindent before 7.4.355 doesn't do the module scope well at all; e.g.:: - " - " static FOO : &'static [bool] = [ - " true, - " false, - " false, - " true, - " ]; - " - " uh oh, next statement is indented further! - - " Note that this does *not* apply the line continuation pattern properly; - " that's too hard to do correctly for my liking at present, so I'll just - " start with these two main cases (square brackets and not returning to - " column zero) - - call cursor(a:lnum, 1) - if searchpair('{\|(', '', '}\|)', 'nbW', - \ 's:is_string_comment(line("."), col("."))') == 0 - if searchpair('\[', '', '\]', 'nbW', - \ 's:is_string_comment(line("."), col("."))') == 0 - " Global scope, should be zero - return 0 - else - " At the module scope, inside square brackets only - "if getline(a:lnum)[0] == ']' || search('\[', '', '\]', 'nW') == a:lnum - if line =~# "^\\s*]" - " It's the closing line, dedent it - return 0 - else - return shiftwidth() - endif - endif - endif - endif - " Fall back on cindent, which does it mostly right return cindent(a:lnum) endfunction diff --git a/runtime/indent/sh.vim b/runtime/indent/sh.vim index a1abd1d0af..daf9170bf3 100644 --- a/runtime/indent/sh.vim +++ b/runtime/indent/sh.vim @@ -7,6 +7,7 @@ " License: Vim (see :h license) " Repository: https://github.com/chrisbra/vim-sh-indent " Changelog: +" 20250906 - indent function closing properly on multiline commands " 20250318 - Detect local arrays in functions " 20241411 - Detect dash character in function keyword for " bash mode (issue #16049) @@ -186,6 +187,15 @@ function! GetShIndent() endif endif + " Special case: if the current line is a closing '}', align with matching '{' + if curline =~ '^\s*}\s*$' + let match_lnum = searchpair('{', '', '}', 'bnW', + \ 'synIDattr(synID(line("."),col("."), 1),"name") =~? "comment\\|quote"') + if match_lnum > 0 + return indent(match_lnum) + endif + endif + return ind > 0 ? ind : 0 endfunction diff --git a/runtime/indent/sml.vim b/runtime/indent/sml.vim index a0b0c3e911..189452f477 100644 --- a/runtime/indent/sml.vim +++ b/runtime/indent/sml.vim @@ -1,17 +1,18 @@ " Vim indent file " Language: SML -" Maintainer: Saikat Guha -" Hubert Chao +" Maintainer: Saikat Guha +" Hubert Chao " Original OCaml Version: -" Jean-Francois Yuen +" Jean-Francois Yuen " Mike Leary " Markus Mottl " OCaml URL: http://www.oefai.at/~markus/vim/indent/ocaml.vim " Last Change: 2022 Apr 06 -" 2002 Nov 06 - Some fixes (JY) +" 2002 Nov 06 - Some fixes (JY) " 2002 Oct 28 - Fixed bug with indentation of ']' (MM) " 2002 Oct 22 - Major rewrite (JY) -" 2022 April: b:undo_indent added by Doug Kearns +" 2022 Apr 08 - b:undo_indent added by Doug Kearns +" 2025 Nov 04 - Move comments and formatoptions to ftplugin " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -29,12 +30,6 @@ setlocal shiftwidth=2 let b:undo_indent = "setl et< inde< indk< lisp< si< sw< tw<" -" Comment formatting -if (has("comments")) - set comments=sr:(*,mb:*,ex:*) - set fo=cqort -endif - " Only define the function once. "if exists("*GetSMLIndent") "finish diff --git a/runtime/indent/testdir/rust.in b/runtime/indent/testdir/rust.in new file mode 100644 index 0000000000..28a68924f6 --- /dev/null +++ b/runtime/indent/testdir/rust.in @@ -0,0 +1,42 @@ +// vim: set ft=rust ts=8 sw=4 sts=4 et : +// START_INDENT +use std::fs::File; +use std::io::prelude::*; +use std::path::Path; + +fn main() { + // Create a path to the desired file + let path = Path::new("hello.txt"); + let display = path.display(); + + // Open the path in read-only mode, returns `io::Result` + let mut file = match File::open(&path) { + Err(why) => panic!("couldn't open {}: {}", display, why), + Ok(file) => file, + }; + + // Start doing nothing forever + loop { + let arr1 = [[u8; 4]; 2] = [ + [0; 4], + [1, 3, 5, 9], + ]; + } + + // Plan for a future that will never come + let arr2 = [[u8; 4]; 2] = [ + [1; 4], + [2, 4, 6, 8], + ]; + let arr2_ref = &arr2; + + // Read the file contents into a string, returns `io::Result` + let mut s = String::new(); + match file.read_to_string(&mut s) { + Err(why) => panic!("couldn't read {}: {}", display, why), + Ok(_) => print!("{} contains:\n{}", display, s), + } + + // file goes out of scope, and the "hello.txt" file gets closed +} +// END_INDENT diff --git a/runtime/indent/testdir/rust.ok b/runtime/indent/testdir/rust.ok new file mode 100644 index 0000000000..04808e224f --- /dev/null +++ b/runtime/indent/testdir/rust.ok @@ -0,0 +1,42 @@ +// vim: set ft=rust ts=8 sw=4 sts=4 et : +// START_INDENT +use std::fs::File; +use std::io::prelude::*; +use std::path::Path; + +fn main() { + // Create a path to the desired file + let path = Path::new("hello.txt"); + let display = path.display(); + + // Open the path in read-only mode, returns `io::Result` + let mut file = match File::open(&path) { + Err(why) => panic!("couldn't open {}: {}", display, why), + Ok(file) => file, + }; + + // Start doing nothing forever + loop { + let arr1 = [[u8; 4]; 2] = [ + [0; 4], + [1, 3, 5, 9], + ]; + } + + // Plan for a future that will never come + let arr2 = [[u8; 4]; 2] = [ + [1; 4], + [2, 4, 6, 8], + ]; + let arr2_ref = &arr2; + + // Read the file contents into a string, returns `io::Result` + let mut s = String::new(); + match file.read_to_string(&mut s) { + Err(why) => panic!("couldn't read {}: {}", display, why), + Ok(_) => print!("{} contains:\n{}", display, s), + } + + // file goes out of scope, and the "hello.txt" file gets closed +} +// END_INDENT diff --git a/runtime/indent/testdir/yaml.in b/runtime/indent/testdir/yaml.in index bf99668da2..32b56a73f8 100644 --- a/runtime/indent/testdir/yaml.in +++ b/runtime/indent/testdir/yaml.in @@ -18,3 +18,11 @@ map: | line1 line2 # END_INDENT + +# START_INDENT +list: + - element1: + foo: bar + - element2: + foo: bar +# END_INDENT diff --git a/runtime/indent/testdir/yaml.ok b/runtime/indent/testdir/yaml.ok index 8b38633e71..0bfabfc166 100644 --- a/runtime/indent/testdir/yaml.ok +++ b/runtime/indent/testdir/yaml.ok @@ -18,3 +18,11 @@ map: | line1 line2 # END_INDENT + +# START_INDENT +list: + - element1: + foo: bar + - element2: + foo: bar +# END_INDENT diff --git a/runtime/indent/xml.vim b/runtime/indent/xml.vim index 5bf53ad1f8..db71fc03ca 100644 --- a/runtime/indent/xml.vim +++ b/runtime/indent/xml.vim @@ -88,7 +88,9 @@ endfun " [-- return the sum of indents of a:lnum --] fun! XmlIndentSum(line, style, add) - if IsXMLContinuation(a:line) && a:style == 0 && !IsXMLEmptyClosingTag(a:line) + if IsXMLContinuation(a:line) && + \ a:style == 0 && + \ !IsXMLEmptyClosingTag(a:line) " no complete tag, add one additional indent level " but only for the current line return a:add + shiftwidth() @@ -157,6 +159,17 @@ fun! XmlIndentGet(lnum, use_syntax_check) " no extra indent, looks like a text continuation line return pind endif + elseif empty(syn_name_start) && syn_name_end =~? 'xmlTag' + " Special case: such a line, shouldn't be indented, just because it + " ends with a tag + " 'foobar inline tags' + if (match(curline, '<\([:a-zA-Z_]\+\)[^>]*>.*') > -1) + return pind + endif + endif + + if curline =~ '^\s*' + return ReturnIndentForMatchingTag(curline) endif " Get indent from previous tag line @@ -181,6 +194,21 @@ func! IsXMLEmptyClosingTag(line) return a:line =~? '<[^>]*/>\s*$' endfunc +func! ReturnIndentForMatchingTag(line) + " For a line with just a simple closing tag + " get the indent from a matching opening tag + if a:line =~? '^\s*' + let _c = getcursorpos() + let pat = matchstr(a:line, '^\s*') + " position cursor before the opening tag + norm! 0 + " get the indent from the matching opening tag + let match_line = searchpair('<' .. pat .. '>', '', '', 'bn') + call setpos('.', _c) + return indent(match_line) + endif +endfunc + " return indent for a commented line, " the middle part might be indented one additional level func! XmlIndentComment(lnum) diff --git a/runtime/indent/yaml.vim b/runtime/indent/yaml.vim index c38712745d..fb0f055dce 100644 --- a/runtime/indent/yaml.vim +++ b/runtime/indent/yaml.vim @@ -5,6 +5,7 @@ " Last Change: 2022 Jun 17 " 2024 Feb 29 by Vim project: disable mulitline indent by default " 2024 Aug 14 by Vim project: fix re-indenting when commenting out lines +" 2026 Jan 08 by Vim project: fix object indentation in array " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -114,7 +115,13 @@ function GetYAMLIndent(lnum) " " - |- " Block scalar without indentation indicator - return previndent+shiftwidth() + if prevline =~# '^\s*-\s.*:$' + " Special case: list item with mapping key (- key:) + " Need to account for the "- " prefix + return previndent + 2 + shiftwidth() + else + return previndent+shiftwidth() + endif elseif prevline =~# '\v[:-]\ [|>]%(\d+[+\-]?|[+\-]?\d+)%(\#.*|\s*)$' " - |+2 " block scalar with indentation indicator @@ -136,7 +143,10 @@ function GetYAMLIndent(lnum) let prevmapline = s:FindPrevLEIndentedLineMatchingRegex(a:lnum, \ s:mapkeyregex) if getline(prevmapline) =~# '^\s*- ' - return indent(prevmapline) + 2 + " Previous mapping key is in a list item (- key:) + " The key effectively starts at indent + 2 (after "- ") + " Content under it should be indented relative to the key position + return indent(prevmapline) + 2 + shiftwidth() else return indent(prevmapline) endif diff --git a/runtime/lang/menu_ru_ru.cp1251.vim b/runtime/lang/menu_ru_ru.cp1251.vim index fd5ad73bf6..0ffab52325 100644 --- a/runtime/lang/menu_ru_ru.cp1251.vim +++ b/runtime/lang/menu_ru_ru.cp1251.vim @@ -2,15 +2,14 @@ " Maintainer: Restorer, " Previous Maintainer: Sergey Alyoshin, " vassily ragosin, -" Last Change: 23 Aug 2023 -" Generated from menu_ru_ru.utf-8.vim, DO NOT EDIT +" Last Change: 28 Dec 2025 " URL: https://github.com/RestorerZ/RuVim " -" " Adopted for RuVim project by Vassily Ragosin. " First translation: Tim Alexeevsky, , " based on ukrainian translation by Bohdan Vlasyuk, " +" Generated from menu_ru_ru.utf-8.vim, DO NOT EDIT " " Quit when menu translations have already been done. " @@ -44,7 +43,7 @@ menutrans &Find\.\.\. & "-------------------- menutrans &Credits Ñî&àâòîðû menutrans Co&pying &Ëèöåíçèÿ -menutrans &Sponsor/Register Ñîä&åéñòâèå\ è\ ðåãèñòðàöèÿ +menutrans &Sponsor Ñîä&åéñòâèå\ ïðîåêòó menutrans O&rphans &Áëàãîòâîðèòåëüíîñòü "-------------------- menutrans &Version &Òåêóùàÿ\ âåðñèÿ @@ -264,7 +263,7 @@ menutrans Cu&t & menutrans &Copy &Êîïèðîâàòü menutrans &Paste Âñò&àâèòü menutrans &Delete &Óäàëèòü -menutrans Select\ Blockwise Áëîêîâîå\ âûäåëåíèå +menutrans Select\ Blockwise Áëî÷íîå\ âûäåëåíèå menutrans Select\ &Word Âûäåëèòü\ ñ&ëîâî menutrans Select\ &Line Âûäåëèòü\ ñ&òðîêó menutrans Select\ &Block Âûäåëèòü\ &áëîê @@ -347,7 +346,7 @@ let menutrans_no_file = "[ " Menus to handle Russian encodings " Thanks to Pavlo Bohmat for the idea -" vassily ragosin +" vassily ragosin, " an 10.355 &File.-SEP- an 10.360.20 &File.Îòêðûòü\ â\ êîäèðîâêå\.\.\..CP1251 :browse e ++enc=cp1251 diff --git a/runtime/lang/menu_ru_ru.koi8-r.vim b/runtime/lang/menu_ru_ru.koi8-r.vim index a6e8bdad3b..712731c229 100644 --- a/runtime/lang/menu_ru_ru.koi8-r.vim +++ b/runtime/lang/menu_ru_ru.koi8-r.vim @@ -2,15 +2,14 @@ " Maintainer: Restorer, " Previous Maintainer: Sergey Alyoshin, " vassily ragosin, -" Last Change: 23 Aug 2023 -" Generated from menu_ru_ru.utf-8.vim, DO NOT EDIT +" Last Change: 28 Dec 2025 " URL: https://github.com/RestorerZ/RuVim " -" " Adopted for RuVim project by Vassily Ragosin. " First translation: Tim Alexeevsky, , " based on ukrainian translation by Bohdan Vlasyuk, " +" Generated from menu_ru_ru.utf-8.vim, DO NOT EDIT " " Quit when menu translations have already been done. " @@ -44,7 +43,7 @@ menutrans &Find\.\.\. & "-------------------- menutrans &Credits óÏ&Á×ÔÏÒÙ menutrans Co&pying &ìÉÃÅÎÚÉÑ -menutrans &Sponsor/Register óÏÄ&ÅÊÓÔ×ÉÅ\ É\ ÒÅÇÉÓÔÒÁÃÉÑ +menutrans &Sponsor óÏÄ&ÅÊÓÔ×ÉÅ\ ÐÒÏÅËÔÕ menutrans O&rphans &âÌÁÇÏÔ×ÏÒÉÔÅÌØÎÏÓÔØ "-------------------- menutrans &Version &ôÅËÕÝÁÑ\ ×ÅÒÓÉÑ @@ -264,7 +263,7 @@ menutrans Cu&t & menutrans &Copy &ëÏÐÉÒÏ×ÁÔØ menutrans &Paste ÷ÓÔ&Á×ÉÔØ menutrans &Delete &õÄÁÌÉÔØ -menutrans Select\ Blockwise âÌÏËÏ×ÏÅ\ ×ÙÄÅÌÅÎÉÅ +menutrans Select\ Blockwise âÌÏÞÎÏÅ\ ×ÙÄÅÌÅÎÉÅ menutrans Select\ &Word ÷ÙÄÅÌÉÔØ\ Ó&ÌÏ×Ï menutrans Select\ &Line ÷ÙÄÅÌÉÔØ\ Ó&ÔÒÏËÕ menutrans Select\ &Block ÷ÙÄÅÌÉÔØ\ &ÂÌÏË @@ -347,7 +346,7 @@ let menutrans_no_file = "[ " Menus to handle Russian encodings " Thanks to Pavlo Bohmat for the idea -" vassily ragosin +" vassily ragosin, " an 10.355 &File.-SEP- an 10.360.20 &File.ïÔËÒÙÔØ\ ×\ ËÏÄÉÒÏ×ËÅ\.\.\..CP1251 :browse e ++enc=cp1251 diff --git a/runtime/lang/menu_ru_ru.utf-8.vim b/runtime/lang/menu_ru_ru.utf-8.vim index 92e05f259c..499b3b34a1 100644 --- a/runtime/lang/menu_ru_ru.utf-8.vim +++ b/runtime/lang/menu_ru_ru.utf-8.vim @@ -2,15 +2,14 @@ " Maintainer: Restorer, " Previous Maintainer: Sergey Alyoshin, " vassily ragosin, -" Last Change: 23 Aug 2023 -" Original translations +" Last Change: 28 Dec 2025 " URL: https://github.com/RestorerZ/RuVim " -" " Adopted for RuVim project by Vassily Ragosin. " First translation: Tim Alexeevsky, , " based on ukrainian translation by Bohdan Vlasyuk, " +" Original translations " " Quit when menu translations have already been done. " @@ -44,7 +43,7 @@ menutrans &Find\.\.\. &Найти\.\.\. "-------------------- menutrans &Credits Со&авторы menutrans Co&pying &Лицензия -menutrans &Sponsor/Register Сод&ействие\ и\ регистрация +menutrans &Sponsor Сод&ействие\ проекту menutrans O&rphans &Благотворительность "-------------------- menutrans &Version &Текущая\ версия @@ -264,7 +263,7 @@ menutrans Cu&t &Вырезать menutrans &Copy &Копировать menutrans &Paste Вст&авить menutrans &Delete &Удалить -menutrans Select\ Blockwise Блоковое\ выделение +menutrans Select\ Blockwise Блочное\ выделение menutrans Select\ &Word Выделить\ с&лово menutrans Select\ &Line Выделить\ с&троку menutrans Select\ &Block Выделить\ &блок @@ -347,7 +346,7 @@ let menutrans_no_file = "[Безымянный]" " Menus to handle Russian encodings " Thanks to Pavlo Bohmat for the idea -" vassily ragosin +" vassily ragosin, " an 10.355 &File.-SEP- an 10.360.20 &File.Открыть\ в\ кодировке\.\.\..CP1251 :browse e ++enc=cp1251 diff --git a/runtime/menu.vim b/runtime/menu.vim index e3c78a6417..19bc7e4d7a 100644 --- a/runtime/menu.vim +++ b/runtime/menu.vim @@ -2,7 +2,7 @@ " You can also use this as a start for your own set of menus. " " Maintainer: The Vim Project -" Last Change: 2025 Aug 10 +" Last Change: 2025 Dec 15 " Former Maintainer: Bram Moolenaar " Note that ":an" (short for ":anoremenu") is often used to make a menu work @@ -123,7 +123,7 @@ an 9999.40 &Help.&Find\.\.\. :call Helpfind() an 9999.45 &Help.-sep1- an 9999.50 &Help.&Credits :help credits an 9999.60 &Help.Co&pying :help copying -an 9999.70 &Help.&Sponsor/Register :help sponsor +an 9999.70 &Help.&Sponsor :help sponsor an 9999.70 &Help.O&rphans :help kcc an 9999.75 &Help.-sep2- an 9999.80 &Help.&Version :version diff --git a/runtime/optwin.vim b/runtime/optwin.vim index 10e4beb1be..5cc135d0d5 100644 --- a/runtime/optwin.vim +++ b/runtime/optwin.vim @@ -1,7 +1,7 @@ " These commands create the option window. " " Maintainer: The Vim Project -" Last Change: 2025 Oct 07 +" Last Change: 2025 Nov 27 " Former Maintainer: Bram Moolenaar " If there already is an option window, jump to that one. @@ -879,6 +879,8 @@ call append("$", " \tset bs=" . &bs) call AddOption("comments", gettext("definition of what comment lines look like")) call append("$", "\t" .. s:local_to_buffer) call OptionL("com") +call AddOption("commentstring", gettext("template for comments; used to put the marker in")) +call OptionL("cms") call AddOption("formatoptions", gettext("list of flags that tell how automatic formatting works")) call append("$", "\t" .. s:local_to_buffer) call OptionL("fo") @@ -907,8 +909,6 @@ if has("insert_expand") call OptionL("cot") call AddOption("completeitemalign", gettext(" \npopup menu item align order")) call OptionG("cia", &cia) - call AddOption("completefuzzycollect", gettext(" \nuse fuzzy collection for specific completion modes")) - call OptionL("cfc") if exists("+completepopup") call AddOption("completepopup", gettext("options for the Insert mode completion info popup")) call OptionG("cpp", &cpp) @@ -1058,8 +1058,6 @@ if has("folding") call AddOption("foldminlines", gettext("minimum number of screen lines for a fold to be closed")) call append("$", "\t" .. s:local_to_window) call OptionL("fml") - call AddOption("commentstring", gettext("template for comments; used to put the marker in")) - call OptionL("cms") call AddOption("foldmethod", gettext("folding type: \"manual\", \"indent\", \"expr\", \"marker\",\n\"syntax\" or \"diff\"")) call append("$", "\t" .. s:local_to_window) call OptionL("fdm") @@ -1306,8 +1304,6 @@ call AddOption("isfname", gettext("specifies the characters in a file name" call OptionG("isf", &isf) call AddOption("isident", gettext("specifies the characters in an identifier")) call OptionG("isi", &isi) -call AddOption("isexpand", gettext("defines trigger strings for complete_match()")) -call append("$", "\t" .. s:local_to_buffer) call AddOption("iskeyword", gettext("specifies the characters in a keyword")) call append("$", "\t" .. s:local_to_buffer) call OptionL("isk") diff --git a/runtime/pack/dist/opt/editorconfig/LICENSE.PSF b/runtime/pack/dist/opt/editorconfig/LICENSE.PSF old mode 100755 new mode 100644 diff --git a/runtime/pack/dist/opt/helpcurwin/autoload/helpcurwin.vim b/runtime/pack/dist/opt/helpcurwin/autoload/helpcurwin.vim new file mode 100644 index 0000000000..52a2d4f7cf --- /dev/null +++ b/runtime/pack/dist/opt/helpcurwin/autoload/helpcurwin.vim @@ -0,0 +1,42 @@ +vim9script + +# Open Vim help on {subject} in the current window (rather than a new split) +# +# Maintainer: The Vim Project +# Last change: 2025 Dec 02 + +export def Open(subject: string): void + + const HELPCURWIN: func = (): string => { + if !getcompletion(subject, 'help')->empty() || subject->empty() + if &buftype != 'help' + execute 'silent noautocmd keepalt enew' + setlocal buftype=help noswapfile + endif + endif + return $'help {subject}' + } + + var contmod: bool = true + if &modified + echohl MoreMsg + echo $'Buffer {bufname()} is modified - continue? (y/n)' + echohl None + contmod = (getcharstr() == 'y') + endif + if contmod + try + execute HELPCURWIN() + catch + echohl Error + # {subject} invalid - Echo 'helpcurwin: E149:' (omit 'Vim(help):') + echo $'helpcurwin: {v:exception->substitute("^[^:]\+:", "", "")}' + echohl None + endtry + else + echo $'Aborted opening in current window, :help {subject}' + endif + +enddef + +# vim: ts=8 sts=2 sw=2 et diff --git a/runtime/pack/dist/opt/helpcurwin/doc/helpcurwin.txt b/runtime/pack/dist/opt/helpcurwin/doc/helpcurwin.txt new file mode 100644 index 0000000000..2bca8d0341 --- /dev/null +++ b/runtime/pack/dist/opt/helpcurwin/doc/helpcurwin.txt @@ -0,0 +1,59 @@ +*helpcurwin.txt* For Vim version 9.1. Last change: 2025 Dec 02 + +The helpcurwin optional package enables opening help in the current window. + +1. :HelpCurwin |helpcurwin-command| +2. helpcurwin#Open() |helpcurwin-function| +3. HelpCurwin; |helpcurwin-mapping| + + +============================================================================== +1. :HelpCurwin *:HelpCurwin* *helpcurwin-command* + +:HelpCurwin Use the current window to display the help file, + |help.txt| in read-only mode. It leaves any other + windows as-is (including when there is another + help window(s)). + +:HelpCurwin {subject} Like ":HelpCurwin" but, additionally open the + applicable help file at the tag {subject}. + For example: > + + :HelpCurwin version9.2 +< + It should otherwise behave like :help {subject}. + +You may also want to save typing with a command line abbreviation, +for example: >vi + + cnoreabbrev hc getcmdtype() == ":" && + \ getcmdline() == 'hc' ? 'HelpCurwin' : 'hc' +< + +============================================================================== +2. helpcurwin#Open() *helpcurwin-function* + +The underlying `:def` function may also be used, for example: >vim + + :vim9cmd helpcurwin#Open('version9.2') +< +This may be useful from other scripts where you want to bring up help on +{subject} in the current window. + + +============================================================================== +3. HelpCurwin; *helpcurwin-mapping* + +There may be times when you want to get the help for a WORD, such as when it +is in a Vim9 script. If you want to open it in the same window, you can map +HelpCurwin; to keys of your choosing to enable that. For example: >vim9 + + nnoremap hc HelpCurwin; + +Once sourced (in this instance, when hc is typed), the applicable +help file will be opened in the current window at the tag for (that +is, the |WORD| under the cursor), if it exists. + + +============================================================================== + vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/pack/dist/opt/helpcurwin/doc/tags b/runtime/pack/dist/opt/helpcurwin/doc/tags new file mode 100644 index 0000000000..c552ad5fac --- /dev/null +++ b/runtime/pack/dist/opt/helpcurwin/doc/tags @@ -0,0 +1,5 @@ +:HelpCurwin helpcurwin.txt /*:HelpCurwin* +helpcurwin-command helpcurwin.txt /*helpcurwin-command* +helpcurwin-function helpcurwin.txt /*helpcurwin-function* +helpcurwin-mapping helpcurwin.txt /*helpcurwin-mapping* +helpcurwin.txt helpcurwin.txt /*helpcurwin.txt* diff --git a/runtime/pack/dist/opt/helpcurwin/plugin/helpcurwin.vim b/runtime/pack/dist/opt/helpcurwin/plugin/helpcurwin.vim new file mode 100644 index 0000000000..97631d348f --- /dev/null +++ b/runtime/pack/dist/opt/helpcurwin/plugin/helpcurwin.vim @@ -0,0 +1,20 @@ +vim9script + +# Open Vim help on {subject} in the current window (rather than a new split) +# +# Maintainer: The Vim Project +# Last change: 2025 Dec 02 + +# Exit when the helpcurwin plugin is loaded already +if exists('g:loaded_helpcurwin') + finish +endif +g:loaded_helpcurwin = true + +import autoload 'helpcurwin.vim' + +command -bar -nargs=? -complete=help HelpCurwin helpcurwin.Open() + +nnoremap HelpCurwin; helpcurwin.Open(expand('')) + +# vim: ts=8 sts=2 sw=2 et diff --git a/runtime/pack/dist/opt/matchit/autoload/matchit.vim b/runtime/pack/dist/opt/matchit/autoload/matchit.vim index aa977488e5..904c2cce1f 100644 --- a/runtime/pack/dist/opt/matchit/autoload/matchit.vim +++ b/runtime/pack/dist/opt/matchit/autoload/matchit.vim @@ -1,6 +1,6 @@ " matchit.vim: (global plugin) Extended "%" matching " autload script of matchit plugin, see ../plugin/matchit.vim -" Last Change: May 20, 2024 +" Last Change: Jan 06, 2025 " Neovim does not support scriptversion if has("vimscript-4") @@ -69,6 +69,26 @@ function matchit#Match_wrapper(word, forward, mode) range let startpos = [line("."), col(".")] endif + " Check for custom match function hook + if exists("b:match_function") + let MatchFunc = b:match_function + try + let result = call(MatchFunc, [a:forward]) + if !empty(result) + call cursor(result) + return s:CleanUp(restore_options, a:mode, startpos) + endif + catch /.*/ + if exists("b:match_debug") + echohl WarningMsg + echom 'matchit: b:match_function error: ' .. v:exception + echohl NONE + endif + return s:CleanUp(restore_options, a:mode, startpos) + endtry + " Empty result: fall through to regular matching + endif + " First step: if not already done, set the script variables " s:do_BR flag for whether there are backrefs " s:pat parsed version of b:match_words @@ -91,7 +111,7 @@ function matchit#Match_wrapper(word, forward, mode) range let default = escape(&mps, '[$^.*~\\/?]') .. (strlen(&mps) ? "," : "") .. \ '\/\*:\*\/,#\s*if\%(n\=def\)\=:#\s*else\>:#\s*elif\%(n\=def\)\=\>:#\s*endif\>' " s:all = pattern with all the keywords - let match_words = match_words .. (strlen(match_words) ? "," : "") .. default + let match_words = s:Append(match_words, default) let s:last_words = match_words if match_words !~ s:notslash .. '\\\d' let s:do_BR = 0 @@ -101,8 +121,8 @@ function matchit#Match_wrapper(word, forward, mode) range let s:pat = s:ParseWords(match_words) endif let s:all = substitute(s:pat, s:notslash .. '\zs[,:]\+', '\\|', 'g') - " un-escape \, to , - let s:all = substitute(s:all, '\\,', ',', 'g') + " un-escape \, and \: to , and : + let s:all = substitute(s:all, s:notslash .. '\zs\\\(:\|,\)', '\1', 'g') " Just in case there are too many '\(...)' groups inside the pattern, make " sure to use \%(...) groups, so that error E872 can be avoided let s:all = substitute(s:all, '\\(', '\\%(', 'g') @@ -341,6 +361,18 @@ fun! s:InsertRefs(groupBR, prefix, group, suffix, matchline) return ini .. ":" .. tailBR endfun +" String append item2 to item and add ',' in between items +fun! s:Append(item, item2) + if a:item == '' + return a:item2 + endif + " there is already a trailing comma, don't add another one + if a:item[-1:] == ',' + return a:item .. a:item2 + endif + return a:item .. ',' .. a:item2 +endfun + " Input a comma-separated list of groups with backrefs, such as " a:groups = '\(foo\):end\1,\(bar\):end\1' " and return a comma-separated list of groups with backrefs replaced: @@ -538,8 +570,8 @@ fun! s:Choose(patterns, string, comma, branch, prefix, suffix, ...) else let currpat = substitute(current, s:notslash .. a:branch, '\\|', 'g') endif - " un-escape \, to , - let currpat = substitute(currpat, '\\,', ',', 'g') + " un-escape \, and \: to , and : + let currpat = substitute(currpat, s:notslash .. '\zs\\\(:\|,\)', '\1', 'g') while a:string !~ a:prefix .. currpat .. a:suffix let tail = strpart(tail, i) let i = matchend(tail, s:notslash .. a:comma) @@ -552,6 +584,8 @@ fun! s:Choose(patterns, string, comma, branch, prefix, suffix, ...) else let currpat = substitute(current, s:notslash .. a:branch, '\\|', 'g') endif + " un-escape \, and \: to , and : + let currpat = substitute(currpat, s:notslash .. '\zs\\\(:\|,\)', '\1', 'g') if a:0 let alttail = strpart(alttail, j) let j = matchend(alttail, s:notslash .. a:comma) @@ -621,7 +655,7 @@ fun! matchit#MultiMatch(spflag, mode) let default = escape(&mps, '[$^.*~\\/?]') .. (strlen(&mps) ? "," : "") .. \ '\/\*:\*\/,#\s*if\%(n\=def\)\=:#\s*else\>:#\s*elif\>:#\s*endif\>' let s:last_mps = &mps - let match_words = match_words .. (strlen(match_words) ? "," : "") .. default + let match_words = s:Append(match_words, default) let s:last_words = match_words if match_words !~ s:notslash .. '\\\d' let s:do_BR = 0 diff --git a/runtime/pack/dist/opt/matchit/doc/matchit.txt b/runtime/pack/dist/opt/matchit/doc/matchit.txt index ba748540b4..0d505f8557 100644 --- a/runtime/pack/dist/opt/matchit/doc/matchit.txt +++ b/runtime/pack/dist/opt/matchit/doc/matchit.txt @@ -1,13 +1,7 @@ -*matchit.txt* Extended "%" matching +*matchit.txt* Extended "%" matching Last change: 2026 Jan 06 -For instructions on installing this file, type - `:help matchit-install` -inside Vim. + VIM REFERENCE MANUAL by Benji Fisher et al -For Vim version 9.1. Last change: 2024 May 20 - - - VIM REFERENCE MANUAL by Benji Fisher et al *matchit* *matchit.vim* @@ -174,7 +168,7 @@ defined automatically. 2.1 Temporarily disable the matchit plugin *matchit-disable* *:MatchDisable* -To temporarily disable the matchit plugin, after it hat been loaded, +To temporarily disable the matchit plugin, after it has been loaded, execute this command: > :MatchDisable @@ -259,6 +253,45 @@ Examples: See the $VIMRUNTIME/ftplugin/vim.vim for an example that uses both syntax and a regular expression. + *b:match_function* +If b:match_function is defined, matchit.vim will first call this function to +perform matching. This is useful for languages with an indentation-based block +structure (such as Python) or other complex matching requirements that cannot +be expressed with regular expression patterns. + +The function should accept one argument: + forward - 1 for forward search (% command) + 0 for backward search (g% command) + +The function should return a list with one of these values: + [line, col] - Match found at the specified position + [] - No match found; fall through to regular matching + (|b:match_words|, matchpairs, etc.) + +The cursor position is not changed by the function; matchit handles cursor +movement based on the returned position. + +If the function throws an error, matchit gives up and doesn't continue. +Enable |b:match_debug| to see error messages from custom match functions. + +Python example (simplified): > + let s:keywords = {'if': 'elif\|else', 'elif': 'elif\|else'} + + function! s:PythonMatch(forward) abort + let keyword = matchstr(getline('.'), '^\s*\zs\w\+') + let pattern = get(s:keywords, keyword, '') + if empty(pattern) | return [] | endif + + let flags = a:forward ? 'nW' : 'nbW' + let [lnum, col] = searchpos('^\s*\%(' . pattern . '\)\>', flags, 0, 0, + \ 'indent(".") != ' . indent('.')) + return lnum > 0 ? [lnum, col] : [] + endfunction + + let b:match_function = function('s:PythonMatch') +< +See |matchit-newlang| below for more details on supporting new languages. + ============================================================================== 4. Supporting a New Language *matchit-newlang* *b:match_words* @@ -270,9 +303,9 @@ Vim's |regular-expression|s. The format for |b:match_words| is similar to that of the 'matchpairs' option: it is a comma (,)-separated list of groups; each group is a colon(:)-separated -list of patterns (regular expressions). Commas and backslashes that are part -of a pattern should be escaped with backslashes ('\:' and '\,'). It is OK to -have only one group; the effect is undefined if a group has only one pattern. +list of patterns (regular expressions). Commas and colons that are part of a +pattern should be escaped with backslashes ('\:' and '\,'). It is OK to have +only one group; the effect is undefined if a group has only one pattern. A simple example is > :let b:match_words = '\:\,' \ . '\:\:\:\' @@ -315,7 +348,7 @@ expression > if keywords are only recognized after the start of a line or after a semicolon (;), with optional white space. - *matchit-backref* *matchit-\1* + *matchit-backref* In any group, the expressions |\1|, |\2|, ..., |\9| refer to parts of the INITIAL pattern enclosed in |\(|escaped parentheses|\)|. These are referred to as back references, or backrefs. For example, > diff --git a/runtime/pack/dist/opt/matchit/doc/tags b/runtime/pack/dist/opt/matchit/doc/tags index e684fb1161..008c5686d1 100644 --- a/runtime/pack/dist/opt/matchit/doc/tags +++ b/runtime/pack/dist/opt/matchit/doc/tags @@ -6,6 +6,7 @@ MatchError matchit.txt /*MatchError* ]% matchit.txt /*]%* b:match_col matchit.txt /*b:match_col* b:match_debug matchit.txt /*b:match_debug* +b:match_function matchit.txt /*b:match_function* b:match_ignorecase matchit.txt /*b:match_ignorecase* b:match_ini matchit.txt /*b:match_ini* b:match_iniBR matchit.txt /*b:match_iniBR* @@ -20,7 +21,6 @@ b:match_words matchit.txt /*b:match_words* g% matchit.txt /*g%* matchit matchit.txt /*matchit* matchit-% matchit.txt /*matchit-%* -matchit-\1 matchit.txt /*matchit-\\1* matchit-activate matchit.txt /*matchit-activate* matchit-backref matchit.txt /*matchit-backref* matchit-bugs matchit.txt /*matchit-bugs* diff --git a/runtime/pack/dist/opt/matchit/plugin/matchit.vim b/runtime/pack/dist/opt/matchit/plugin/matchit.vim index 08fee09642..947f530261 100644 --- a/runtime/pack/dist/opt/matchit/plugin/matchit.vim +++ b/runtime/pack/dist/opt/matchit/plugin/matchit.vim @@ -1,6 +1,6 @@ " matchit.vim: (global plugin) Extended "%" matching " Maintainer: Christian Brabandt -" Version: 1.20 +" Version: 1.21 " Last Change: 2024 May 20 " Repository: https://github.com/chrisbra/matchit " Previous URL:http://www.vim.org/script.php?script_id=39 diff --git a/runtime/pack/dist/opt/netrw/autoload/netrw.vim b/runtime/pack/dist/opt/netrw/autoload/netrw.vim index 37adbf9209..0d73de9ac1 100644 --- a/runtime/pack/dist/opt/netrw/autoload/netrw.vim +++ b/runtime/pack/dist/opt/netrw/autoload/netrw.vim @@ -12,6 +12,11 @@ " 2025 Oct 01 by Vim Project fix navigate to parent folder #18464 " 2025 Oct 26 by Vim Project fix parsing of remote user names #18611 " 2025 Oct 27 by Vim Project align comment after #18611 +" 2025 Nov 01 by Vim Project fix NetrwChgPerm #18674 +" 2025 Nov 13 by Vim Project don't wipe unnamed buffers #18740 +" 2025 Nov 18 by Vim Project use UNC paths when using scp and Windows paths #18764 +" 2025 Nov 28 by Vim Project fix undefined variable in *NetrwMenu #18829 +" 2025 Dec 26 by Vim Project fix use of g:netrw_cygwin #19015 " Copyright: Copyright (C) 2016 Charles E. Campbell {{{1 " Permission is hereby granted to use and distribute this code, " with or without modifications, provided that this copyright @@ -209,7 +214,7 @@ call s:NetrwInit("g:netrw_dirhistmax" , 10) call s:NetrwInit("g:netrw_fastbrowse" , 1) call s:NetrwInit("g:netrw_ftp_browse_reject", '^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$') if !exists("g:netrw_ftp_list_cmd") - if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin) + if has("unix") || g:netrw_cygwin let g:netrw_ftp_list_cmd = "ls -lF" let g:netrw_ftp_timelist_cmd = "ls -tlF" let g:netrw_ftp_sizelist_cmd = "ls -slF" @@ -316,7 +321,7 @@ call s:NetrwInit("g:netrw_menu" , 1) call s:NetrwInit("g:netrw_mkdir_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir") call s:NetrwInit("g:netrw_mousemaps" , (exists("+mouse") && &mouse =~# '[anh]')) call s:NetrwInit("g:netrw_retmap" , 0) -if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin) +if has("unix") || g:netrw_cygwin call s:NetrwInit("g:netrw_chgperm" , "chmod PERM FILENAME") elseif has("win32") call s:NetrwInit("g:netrw_chgperm" , "cacls FILENAME /e /p PERM") @@ -438,7 +443,7 @@ function netrw#Explore(indx,dosplit,style,...) " record current directory let curdir = simplify(b:netrw_curdir) - if !exists("g:netrw_cygwin") && has("win32") + if !g:netrw_cygwin && has("win32") let curdir= substitute(curdir,'\','/','g') endif let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e') @@ -516,7 +521,7 @@ function netrw#Explore(indx,dosplit,style,...) NetrwKeepj norm! 0 if a:0 > 0 - if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)) + if a:1 =~ '^\~' && (has("unix") || g:netrw_cygwin) let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),'')) elseif a:1 == '.' let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd()) @@ -1699,10 +1704,10 @@ function netrw#NetRead(mode,...) else let useport= "" endif - " 'C' in 'C:\path\to\file' is handled as hostname on windows. + " Using UNC notation in windows to get a unix like path. " This is workaround to avoid mis-handle windows local-path: if g:netrw_scp_cmd =~ '^scp' && has("win32") - let tmpfile_get = substitute(tr(tmpfile, '\', '/'), '^\(\a\):[/\\]\(.*\)$', '/\1/\2', '') + let tmpfile_get = substitute(tr(tmpfile, '\', '/'), '^\(\a\):[/\\]\(.*\)$', '//' .. $COMPUTERNAME .. '/\1$/\2', '') else let tmpfile_get = tmpfile endif @@ -3230,7 +3235,7 @@ function s:NetrwFile(fname) let b:netrw_curdir= getcwd() endif - if !exists("g:netrw_cygwin") && has("win32") + if !g:netrw_cygwin && has("win32") if fname =~ '^\' || fname =~ '^\a:\' " windows, but full path given let ret= fname @@ -4211,11 +4216,12 @@ function s:NetrwChgPerm(islocal,curdir) call inputsave() let newperm= input("Enter new permission: ") call inputrestore() - let chgperm= substitute(g:netrw_chgperm,'\',netrw#os#Escape(expand("")),'') + let fullpath = fnamemodify(netrw#fs#PathJoin(a:curdir, expand("")), ':p') + let chgperm= substitute(g:netrw_chgperm,'\',netrw#os#Escape(fullpath),'') let chgperm= substitute(chgperm,'\',netrw#os#Escape(newperm),'') call system(chgperm) if v:shell_error != 0 - NetrwKeepj call netrw#ErrorMsg(1,"changing permission on file<".expand("")."> seems to have failed",75) + NetrwKeepj call netrw#msg#Notify('WARNING', printf('changing permission on file<%s> seems to have failed', fullpath)) endif if a:islocal NetrwKeepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./',0)) @@ -4591,7 +4597,7 @@ function s:NetrwServerEdit(islocal,fname) endif else - call netrw#ErrorMsg(s:ERROR,"you need a gui-capable vim and client-server to use ",98) + call netrw#msg#Notify('ERROR', 'you need a gui-capable vim and client-server to use ') endif endfunction @@ -6397,6 +6403,7 @@ function s:NetrwMenu(domenu) exe 'sil! menu '.g:NetrwMenuPriority.'.14.8 '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmdmx mx' exe 'sil! menu '.g:NetrwMenuPriority.'.14.9 '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Targetmm mm' exe 'sil! menu '.g:NetrwMenuPriority.'.14.10 '.g:NetrwTopLvlMenu.'Marked\ Files.ObtainO O' + exe 'sil! menu '.g:NetrwMenuPriority.'.14.11 '.g:NetrwTopLvlMenu.'Marked\ Files.Printmp mp' exe 'sil! menu '.g:NetrwMenuPriority.'.14.12 '.g:NetrwTopLvlMenu.'Marked\ Files.ReplaceR R' exe 'sil! menu '.g:NetrwMenuPriority.'.14.13 '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Targetmt mt' exe 'sil! menu '.g:NetrwMenuPriority.'.14.14 '.g:NetrwTopLvlMenu.'Marked\ Files.TagmT mT' @@ -6424,14 +6431,13 @@ function s:NetrwMenu(domenu) let s:netrwcnt = 0 let curwin = winnr() windo if getline(2) =~# "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif - endif - exe curwin."wincmd w" + exe curwin."wincmd w" - if s:netrwcnt <= 1 - exe 'sil! unmenu '.g:NetrwTopLvlMenu - sil! unlet s:netrw_menu_enabled + if s:netrwcnt <= 1 + exe 'sil! unmenu '.g:NetrwTopLvlMenu + sil! unlet s:netrw_menu_enabled + endif endif - endif return endif @@ -8313,7 +8319,7 @@ function netrw#LocalBrowseCheck(dirname) let ibuf = 1 let buflast = bufnr("$") while ibuf <= buflast - if bufwinnr(ibuf) == -1 && isdirectory(s:NetrwFile(bufname(ibuf))) + if bufwinnr(ibuf) == -1 && !empty(bufname(ibuf)) && isdirectory(s:NetrwFile(bufname(ibuf))) exe "sil! keepj keepalt ".ibuf."bw!" endif let ibuf= ibuf + 1 diff --git a/runtime/pack/dist/opt/osc52/autoload/osc52.vim b/runtime/pack/dist/opt/osc52/autoload/osc52.vim new file mode 100644 index 0000000000..3471329d7f --- /dev/null +++ b/runtime/pack/dist/opt/osc52/autoload/osc52.vim @@ -0,0 +1,97 @@ +vim9script + +export var allowed: bool = false + +export def Available(): bool + if get(g:, 'osc52_force_avail', 0) + return true + endif + return allowed +enddef + +var sent_message: bool = false + +def OSCMessage(id: number) + echo "Waiting for OSC52 response... Press CTRL-C to cancel" + sent_message = true +enddef + +export def Paste(reg: string): tuple> + # Check if user has indicated that the terminal does not support OSC 52 paste + # (or has disabled it) + if get(g:, 'osc52_disable_paste', 0) + return ("c", []) + endif + + # Some terminals like Kitty respect the selection type parameter on both X11 + # and Wayland. If the terminal doesn't then the selection type parameter + # should be ignored (no-op) + if reg == "+" + echoraw("\]52;c;?\\\") + else + echoraw("\]52;p;?\\\") + endif + + var timerid: number = timer_start(1000, OSCMessage) + var interrupt: bool = false + + # Wait for response from terminal. If we got interrupted (Ctrl-C), then do a + # redraw if we already sent the message, and return an empty string. + try + while true + var key: string = getcharstr(-1, {cursor: "hide"}) + + if key == "\" && match(v:termosc, '52;') != -1 + break + elseif key == "\" + interrupt = true + break + endif + endwhile + + # This doesn't seem to catch Ctrl-C sent via term_sendkeys(), which is used in + # tests. So also check the result of getcharstr()/getchar(). + catch /^Vim:Interrupt$/ + interrupt = true + finally + timer_stop(timerid) + if sent_message + sent_message = false + :redraw! + endif + endtry + + if interrupt + echo "Interrupted while waiting for OSC 52 response" + return ("c", [""]) + endif + + # Extract the base64 stuff + var stuff: string = matchstr(v:termosc, '52;.*;\zs[A-Za-z0-9+/=]*') + + if len(stuff) == 0 + return ("c", []) + endif + + var ret: list + + # "stuff" may be an invalid base64 string, so catch any errors + try + ret = blob2str(base64_decode(stuff)) + catch /E\(475\|1515\)/ + echo "Invalid OSC 52 response received" + return ("c", [""]) + endtry + + return ("", ret) +enddef + +export def Copy(reg: string, type: string, lines: list): void + if reg == "+" + echoraw("\]52;c;" .. base64_encode(str2blob(lines)) .. "\\\") + else + echoraw("\]52;p;" .. base64_encode(str2blob(lines)) .. "\\\") + endif +enddef + +# vim: set sw=2 sts=2 : diff --git a/runtime/pack/dist/opt/osc52/doc/osc52.txt b/runtime/pack/dist/opt/osc52/doc/osc52.txt new file mode 100644 index 0000000000..97a63289ce --- /dev/null +++ b/runtime/pack/dist/opt/osc52/doc/osc52.txt @@ -0,0 +1,70 @@ +*osc52.txt* For Vim version 9.1. Last change: 2025 Dec 18 + + + VIM REFERENCE MANUAL + +Use the OSC 52 terminal command for clipboard support +============================================================================== + +1. OVERVIEW *osc52-overview* + +The osc52.vim plugin provides support for the OSC 52 terminal command, which +allows an application to access the clipboard by communicating with the +terminal. This is useful in situations such as if you are in a SSH session. + + *osc52-support* +In order for this plugin to work, the terminal Vim is running in must +recognize and handle the OSC 52 escape sequence. You can easily check this +online. Additionally, while yanking is guaranteed to work, some terminals +don't implement the paste functionality. If the terminal doesn't support +pasting, then Vim will just block waiting for the data which will never come. +In this case just press Ctrl-C to cancel the operation. + + *osc52-selections* +Note that this only applies to users on Wayland or X11 platforms + +Some terminals support the selection type parameter in the OSC 52 command. +This originates from X11, and some terminals check this parameter and handle +it accordingly. If your terminal handles this parameter, then the "+" +register corresponds to the regular selection, and the "*" register +corresponds to the primary selection. If your terminal does not handle it, +then it is up to the terminal to handle what selection to use. + +2. HOW TO USE THE PLUGIN *osc52-how-to-use* + +The osc52.vim package relies on Vim's clipboard provider functionality, see +|clipboard-providers|. To enable it, add the following to your |vimrc|: >vim + packadd osc52 + set clipmethod+=osc52 +< +This appends "osc52" to |clipmethod|, causing Vim to try it only after any +earlier clipboard methods. This allows Vim to use the system clipboard +directly when available, and automatically fall back to OSC 52 method when it +is not (for example, when running over SSH). + +Note: that this fallback behavior applies only on platforms that use +|clipmethod| for accessing the clipboard. On macOS and Windows, Vim does not +use |clipmethod|, so this behaviour won't happen. Instead if OSC 52 support is +detected and "osc52" is the only value in |clipmethod|, then it will always be +used. + +You can check whether the osc52.vim provider is active by inspecting +|v:clipmethod|. If it contains "osc52", the plugin is enabled. + +Note: terminal multiplexers such as tmux may interfere with automatic OSC 52 +detection. + + *g:osc52_force_avail* +In most cases, the plugin should automatically detect and work if your +terminal supports the OSC 52 command. Internally, it does this by sending the +Primary Device Attributes (DA1) query. You may force enable the plugin by +setting |g:osc52_force_avail| to true. + + *g:osc52_disable_paste* +If your terminal does not support pasting via OSC 52, or has it disabled, then +it is a good idea to set g:osc52_disable_paste to TRUE. This will cause an +empty string to be returned when Vim attempts to query the osc52.vim provider, +instead of doing a blocking wait, as said in |osc52-support|. + +============================================================================== +vim:tw=78:ts=8:fo=tcq2:ft=help: diff --git a/runtime/pack/dist/opt/osc52/doc/tags b/runtime/pack/dist/opt/osc52/doc/tags new file mode 100644 index 0000000000..9d723973b6 --- /dev/null +++ b/runtime/pack/dist/opt/osc52/doc/tags @@ -0,0 +1,7 @@ +g:osc52_disable_paste osc52.txt /*g:osc52_disable_paste* +g:osc52_force_avail osc52.txt /*g:osc52_force_avail* +osc52-how-to-use osc52.txt /*osc52-how-to-use* +osc52-overview osc52.txt /*osc52-overview* +osc52-selections osc52.txt /*osc52-selections* +osc52-support osc52.txt /*osc52-support* +osc52.txt osc52.txt /*osc52.txt* diff --git a/runtime/pack/dist/opt/osc52/plugin/osc52.vim b/runtime/pack/dist/opt/osc52/plugin/osc52.vim new file mode 100644 index 0000000000..66b5752e53 --- /dev/null +++ b/runtime/pack/dist/opt/osc52/plugin/osc52.vim @@ -0,0 +1,52 @@ +vim9script + +# Vim plugin for OSC52 clipboard support +# +# Maintainer: The Vim Project +# Last Change: 2025 Dec 18 + +if !has("timers") + finish +endif + +import autoload "../autoload/osc52.vim" as osc + +v:clipproviders["osc52"] = { + "available": osc.Available, + "paste": { + "*": osc.Paste, + "+": osc.Paste + }, + "copy": { + "*": osc.Copy, + "+": osc.Copy + }, +} + +def SendDA1(): void + if !has("gui_running") && !get(g:, 'osc52_force_avail', 0) + && !get(g:, 'osc52_no_da1', 0) + echoraw("\[c") + endif +enddef + +if v:vim_did_enter + SendDA1() +endif + +augroup VimOSC52Plugin + autocmd! + # Query support for OSC 52 using a DA1 query + autocmd TermResponseAll da1 { + if match(v:termda1, '?\zs.*52\ze') != -1 + osc.allowed = true + :silent! clipreset + else + osc.allowed = false + :silent! clipreset + endif + } + autocmd VimEnter * SendDA1() +augroup END + +# vim: set sw=2 sts=2 : diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim index cefa1a0855..6627bf4b4f 100644 --- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -4,7 +4,7 @@ vim9script # Author: Bram Moolenaar # Copyright: Vim license applies, see ":help license" -# Last Change: 2025 Oct 08 +# Last Change: 2025 Dec 26 # Converted to Vim9: Ubaldo Tiberi # WORK IN PROGRESS - The basics works stable, more to come @@ -454,7 +454,7 @@ def GetRemotePtyCmd(gdb_cmd: list): list term_cmd = gdb_cmd[0 : gdb_pos - 1] # roundtrip to check if socat is available on the remote side silent call system(join(term_cmd, ' ') .. ' socat -h') - if v:shell_error + if v:shell_error != 0 Echowarn('Install socat on the remote machine for a program window better experience') else # create a devoted tty slave device and link to stdin/stdout diff --git a/runtime/syntax/bpftrace.vim b/runtime/syntax/bpftrace.vim new file mode 100644 index 0000000000..4e23bcbde5 --- /dev/null +++ b/runtime/syntax/bpftrace.vim @@ -0,0 +1,66 @@ +" Vim syntax file +" Language: bpftrace +" Maintainer: Stanislaw Gruszka +" Last Change: 2025 Dec 22 + +" Quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn keyword bpftraceConditional if else +syn keyword bpftraceRepeat while for unroll +syn keyword bpftraceStatement break continue return +syn keyword bpftraceKeyword let macro import config +syn keyword bpftraceOperator sizeof offsetof + +syn keyword bpftraceProbe BEGIN END begin end +syn match bpftraceProbe "\v<(bench|self|test)\ze:" +syn match bpftraceProbe "\v<(fentry|fexit|kfunc|kretfunc|kprobe|kretprobe)\ze:" +syn match bpftraceProbe "\v<(profile|interval|iterator|hardware|software|uprobe|uretprobe)\ze:" +syn match bpftraceProbe "\v<(usdt|tracepoint|rawtracepoint|watchpoint|asyncwatchpoint)\ze:" +syn match bpftraceProbe "\v(^|[^:])<\zs(h|i|it|f|fr|k|kr|p|rt|s|t|u|ur|U|w|aw)\ze:" + +syn keyword bpftraceType bool int8 int16 int32 int64 +syn keyword bpftraceType uint8 uint16 uint32 uint64 +syn keyword bpftraceType struct + +syn match bpftraceMacro "\<\h\w*\ze\_s*(" + +syn match bpftraceNumber display "[+-]\=\<\d\+\>" +syn match bpftraceNumber display "\<0x\x\+\>" + +syn keyword bpftraceBoolean true false + +syn region bpftraceString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell extend + +syn keyword bpftraceTodo contained TODO FIXME XXX +syn match bpftraceShebang /\%^#![^[].*/ +syn region bpftraceCommentLine start="//" end="$" contains=bpftraceTodo,@Spell +syn region bpftraceCommentBlock matchgroup=bpftraceCommentBlock start="/\*" end="\*/" contains=bpftraceTodo,@Spell + +" Define the default highlighting. +hi def link bpftraceConditional Conditional +hi def link bpftraceMacro Macro +hi def link bpftraceRepeat Repeat +hi def link bpftraceKeyword Keyword +hi def link bpftraceNumber Number +hi def link bpftraceBoolean Boolean +hi def link bpftraceShebang Comment +hi def link bpftraceCommentLine Comment +hi def link bpftraceCommentBlock Comment +hi def link bpftraceString String +hi def link bpftraceType Type +hi def link bpftraceProbe Identifier + +syn sync minlines=100 + +let b:current_syntax = "bpftrace" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 sw=8 noexpandtab diff --git a/runtime/syntax/c.vim b/runtime/syntax/c.vim index 68b6778c73..d2f2b85b42 100644 --- a/runtime/syntax/c.vim +++ b/runtime/syntax/c.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: C " Maintainer: The Vim Project -" Last Change: 2025 Jan 18 +" Last Change: 2025 Nov 18 " Former Maintainer: Bram Moolenaar " Quit when a (custom) syntax file was already loaded @@ -421,8 +421,10 @@ if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu") syn keyword cConstant NDEBUG " POSIX 2001 syn keyword cConstant SIGBUS SIGPOLL SIGPROF SIGSYS SIGURG SIGVTALRM SIGXCPU SIGXFSZ + " POSIX Issue 8 (post 2017) + syn keyword cConstant SIGWINCH " non-POSIX signals - syn keyword cConstant SIGWINCH SIGINFO + syn keyword cConstant SIGINFO SIGIO " Add POSIX errors as well. List comes from: " http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html syn keyword cConstant E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF diff --git a/runtime/syntax/cangjie.vim b/runtime/syntax/cangjie.vim index 1e8b872198..d8194a9274 100644 --- a/runtime/syntax/cangjie.vim +++ b/runtime/syntax/cangjie.vim @@ -2,7 +2,7 @@ " Language: Cangjie " Maintainer: Wu Junkai " URL: https://github.com/WuJunkai2004/cangjie.vim -" Last Change: 2025 Oct 12 +" Last Change: 2026 Jan 5 " " The Cangjie programming language is a new-generation programming " language oriented to full-scenario intelligence. It features @@ -33,9 +33,13 @@ endfunction syn case match " 1. comments -syn keyword cangjieTodo TODO FIXME XXX NOTE BUG contained -syn match cangjieComment /\v\/\/.*/ contains=cangjieTodo -syn region cangjieComment start=/\/\*/ end=/\*\// contains=cangjieTodo,@Spell +syn keyword cangjieTodo TODO FIXME XXX NOTE BUG contained +syn match cangjieDocKeyword /\v\c\@(brief|param|return|note|warning|deprecated)/ contained +syn match cangjieDocKeyword /\v\c\@(author|version|date|since|file|copyright)/ contained +syn match cangjieDocKeyword /\v\c\@(details|link|see|throws|exception|example)/ contained +syn match cangjieDocKeyword /\v\c\@(private|protected|public|internal)/ contained +syn match cangjieComment /\v\/\/.*/ contains=cangjieTodo,cangjieDocKeyword +syn region cangjieComment start=/\/\*/ end=/\*\// contains=cangjieTodo,cangjieDocKeyword,@spell " 2. keywords syn keyword cangjieDeclaration abstract extend macro foreign @@ -65,27 +69,48 @@ syn match cangjieTypeName /\h\w*/ contained syn region cangjieSpIdentifier start=/`/ end=/`/ oneline " 6. types -syn keyword cangjieSpType Any Nothing Range Unit Iterable -syn keyword cangjieArrayType Array ArrayList VArray -syn keyword cangjieHashType HashMap HashSet +syn keyword cangjieSpType Nothing Range Unit LibC Duration DefaultHasher +syn keyword cangjieArrayType Array VArray syn keyword cangjieCommonType Bool Byte Rune String syn keyword cangjieFloatType Float16 Float32 Float64 -syn keyword cangjieIntType Int8 Int16 Int32 Int64 IntNative -syn keyword cangjieUIntType UInt8 UInt16 UInt32 UInt64 UIntNative +syn keyword cangjieIntType Int Int8 Int16 Int32 Int64 IntNative +syn keyword cangjieUIntType UInt UInt8 UInt16 UInt32 UInt64 UIntNative +syn keyword cangjieFFIType CPointer CPointerHandle CPointerResource CString CStringResource syn cluster cangjieTypeCluster contains= \ cangjieSpType, \ cangjieArrayType, - \ cangjieHashType, \ cangjieCommonType, \ cangjieFloatType, \ cangjieIntType, - \ cangjieUIntType + \ cangjieUIntType, + \ cangjieFFIType + +" 6.1. builtin function/interface/class +syn keyword cangjieCoreFunc acquireArrayRawData alignOf eprint eprintln ifNone ifSome max min +syn keyword cangjieCoreFunc print println readln refEq releaseArrayRawData sizeOf sleep zeroValue +syn keyword cangjieCoreItf Any Hasher ThreadContext Countable Collection Less Greater +syn keyword cangjieCoreItf LessOrEqual GreaterOrEqual Comparable Equal NotEqual Equatable +syn keyword cangjieCoreItf Hashable Iterable Resource ToString CType +syn keyword cangjieCoreClass ArrayIterator Box Future Iterator Object RangeIterator +syn keyword cangjieCoreClass StackTraceElement StringBuilder Thread ThreadLocal +syn keyword cangjieCoreError ArithmeticException Error Exception IllegalArgumentException +syn keyword cangjieCoreError IllegalFormatException IllegalMemoryException IllegalStateException +syn keyword cangjieCoreError IncompatiblePackageException IndexOutOfBoundsException InternalError +syn keyword cangjieCoreError NegativeArraySizeException NoneValueException OutOfMemoryError +syn keyword cangjieCoreError OverflowException SpawnException StackOverflowError +syn keyword cangjieCoreError TimeoutException UnsupportedException +syn cluster cangjieBuiltinCluster contains= + \ cangjieCoreFunc, + \ cangjieCoreItf, + \ cangjieCoreClass, + \ cangjieCoreError " 7. character and strings syn cluster cangjieInterpolatedPart contains= \ @cangjieKeywordCluster, \ cangjieSpIdentifier, \ @cangjieTypeCluster, + \ @cangjieBuiltinCluster, \ @cangjieNumberCluster, \ cangjieOperator syn region cangjieInterpolation contained keepend start=/\${/ end=/}/ contains=@cangjieInterpolatedPart @@ -139,6 +164,7 @@ syn region cangjieFoldBrackets transparent fold start='\[' end='\]' contains=ALL " finally, link the syntax groups to the highlight groups if s:enabled('comment') hi def link cangjieTodo Todo + hi def link cangjieDocKeyword SpecialComment hi def link cangjieComment Comment endif if s:enabled('identifier') @@ -151,6 +177,12 @@ if s:enabled('keyword') hi def link cangjieVariable Keyword hi def link cangjieOption Keyword endif +if s:enabled('builtin') + hi def link cangjieCoreFunc Function + hi def link cangjieCoreItf Type + hi def link cangjieCoreClass Type + hi def link cangjieCoreError Structure +endif if s:enabled('macro') hi def link cangjieMacro PreProc endif @@ -178,11 +210,11 @@ if s:enabled('type') hi def link cangjieTypeName Type hi def link cangjieSpType Type hi def link cangjieArrayType Type - hi def link cangjieHashType Type hi def link cangjieCommonType Type hi def link cangjieFloatType Type hi def link cangjieIntType Type hi def link cangjieUIntType Type + hi def link cangjieFFIType Type endif let b:current_syntax = "cangjie" diff --git a/runtime/syntax/cpp.vim b/runtime/syntax/cpp.vim index ff1226b7b0..5ea52ec502 100644 --- a/runtime/syntax/cpp.vim +++ b/runtime/syntax/cpp.vim @@ -1,9 +1,12 @@ " Vim syntax file " Language: C++ -" Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp) -" Previous Maintainer: Ken Shan +" Maintainer: This runtime file is looking for a new maintainer. +" Previous Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp) +" Ken Shan " Last Change: 2024 May 04 -" 2024 May 04 by Vim Project (fix digit separator in octals and floats) +" 2024 May 04 by Vim Project fix digit separator in octals and floats +" 2026 Jan 06 by Vim Project orphaning announcement +" 2026 Jan 08 by Vim Project highlight capital letter prefixes for numbers " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -57,11 +60,11 @@ if !exists("cpp_no_cpp14") syn match cppNumber display contained "\<0\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" syn match cppNumber display contained "\<0\('\=\o\+\)\+\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" - syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" - syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" - syn match cppFloat display contained "\<\d\('\=\d\+\)*\.\(\d\('\=\d\+\)*\)\=\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" - syn match cppFloat display contained "\.\d\('\=\d\+\)*\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" - syn match cppFloat display contained "\<\d\+e[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppNumber display contained "\<0[Bb][01]\('\=[01]\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppNumber display contained "\<0[Xx]\x\('\=\x\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\<\d\('\=\d\+\)*\.\(\d\('\=\d\+\)*\)\=\([Ee][-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\.\d\('\=\d\+\)*\([Ee][-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\<\d\+[Ee][-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" syn region cppString start=+\(L\|u\|u8\|U\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"\(sv\|s\|_\i*\)\=+ end='$' contains=cSpecial,cFormat,@Spell endif @@ -69,8 +72,8 @@ endif if !exists("cpp_no_cpp17") syn match cppCast "\" - syn match cppFloat display contained "\<0x\x\+\.\=p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\<0[Xx]\x*\.\x\+p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" + syn match cppFloat display contained "\<0[Xx]\x\+\.\=p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" " TODO: push this up to c.vim if/when supported in C23 syn match cppCharacter "u8'[^\\]'" @@ -92,8 +95,8 @@ if !exists("cpp_no_cpp20") syn match cppNumber display contained "\<0\(y\|d\)\>" syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\(y\|d\)\>" syn match cppNumber display contained "\<0\o\+\(y\|d\)\>" - syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\(y\|d\)\>" - syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\(y\|d\)\>" + syn match cppNumber display contained "\<0[Bb][01]\('\=[01]\+\)*\(y\|d\)\>" + syn match cppNumber display contained "\<0[Xx]\x\('\=\x\+\)*\(y\|d\)\>" syn keyword cppStatement co_await co_return co_yield requires syn keyword cppStorageClass consteval constinit syn keyword cppStructure concept diff --git a/runtime/syntax/css.vim b/runtime/syntax/css.vim index f4d09cfa4e..da3f3c73f1 100644 --- a/runtime/syntax/css.vim +++ b/runtime/syntax/css.vim @@ -8,6 +8,7 @@ " URL: https://github.com/vim-language-dept/css-syntax.vim " Maintainer: Jay Sitter " Last Change: 2024 Mar 2 +" 2025 Nov 11: improve support for cssBoxProperties #18717 " quit when a syntax file was already loaded if !exists("main_syntax") @@ -197,7 +198,7 @@ syn keyword cssBorderAttr contained clone slice syn match cssBoxProp contained "\" syn match cssBoxProp contained "\" -syn match cssBoxProp contained "\<\(margin\|padding\)\(-\(inline\|block\)\(-\(start\|end\)\)\)\=\>" +syn match cssBoxProp contained "\<\(margin\|padding\)\(-\(inline\|block\)\(-\(start\|end\)\)\=\)\=\>" syn match cssBoxProp contained "\" syn match cssBoxProp contained "\" syn keyword cssBoxAttr contained visible hidden scroll auto diff --git a/runtime/syntax/erlang.vim b/runtime/syntax/erlang.vim index 3ef2c8d410..bbb03d52cd 100644 --- a/runtime/syntax/erlang.vim +++ b/runtime/syntax/erlang.vim @@ -3,7 +3,7 @@ " Maintainer: Csaba Hoch " Contributor: Adam Rutkowski " Johannes Christ -" Last Update: 2025-Jul-06 +" Last Update: 2025-Nov-12 " License: Vim license " URL: https://github.com/vim-erlang/vim-erlang-runtime @@ -217,7 +217,7 @@ syn match erlangInnerDocAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(moduledoc\|doc\)\> syn match erlangInclude '^\s*-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment syn match erlangRecordDef '^\s*-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment syn match erlangDefine '^\s*-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment -syn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment +syn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|if\|elif\|endif\)\>' contains=erlangComment syn match erlangType '^\s*-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|nominal\|callback\)\>' contains=erlangComment " Keywords diff --git a/runtime/syntax/fvwm.vim b/runtime/syntax/fvwm.vim index 2f96bab5bc..cb974a2daf 100644 --- a/runtime/syntax/fvwm.vim +++ b/runtime/syntax/fvwm.vim @@ -3,6 +3,7 @@ " Maintainer: Gautam Iyer " Previous Maintainer: Haakon Riiser " Last Change: Sat 29 Sep 2007 11:08:34 AM PDT +" 2025 Dec 14: Update fvwm2 keywords #18924 " " Thanks to David Necas (Yeti) for adding Fvwm 2.4 support. " @@ -157,7 +158,7 @@ else \ PrintInfo Repeat Schedule State WindowFont \ XSync XSynchronize AnimatedMove \ HideGeometryWindow Layer Lower Move - \ MoveToDesk MoveThreshold MoveToPage + \ MoveToDesk MoveThreshold MoveToPage Resize \ MoveToScreen OpaqueMoveSize PlaceAgain Raise \ RaiseLower ResizeMaximize ResizeMove \ ResizeMoveMaximize RestackTransients @@ -166,7 +167,7 @@ else \ FlipFocus Focus WarpToWindow Close Delete \ Destroy Iconify Recapture RecaptureWindow \ Refresh RefreshWindow Stick StickAcrossPages - \ StickAcrossDesks WindowShade + \ StickAcrossDesks WindowShade Maximize GotoDesk \ WindowShadeAnimate IgnoreModifiers \ EdgeCommand EdgeLeaveCommand GnomeButton \ Stroke StrokeFunc FocusStyle DestroyStyle @@ -186,6 +187,7 @@ else \ QuitSession Restart SaveSession \ SaveQuitSession KeepRc NoWindow Break \ CleanupColorsets EchoFuncDefinition + \ InfoStoreAdd DesktopConfiguration " Conditional commands syn keyword fvwmKeyword nextgroup=fvwmCondition skipwhite @@ -276,7 +278,7 @@ else \ BackColor Colorset HilightFore HilightBack \ HilightColorset BorderColorset \ HilightBorderColorset IconTitleColorset - \ HilightIconTitleColorset + \ HilightIconTitleColorset IconTitleFormat \ IconBackgroundColorset IconTitleRelief \ IconBackgroundRelief IconBackgroundPadding \ Font IconFont StartsOnDesk StartsOnPage @@ -382,6 +384,7 @@ else \ MinOverlapPlacementPenalties \ MinOverlapPercentPlacementPenalties \ MinWindowSize StartShaded + \ EdgeMoveDelay EdgeMoveResistance " Cursor styles syn keyword fvwmKeyword nextgroup=fvwmCursorStyle skipwhite @@ -441,7 +444,8 @@ else syn keyword fvwmBStyleNames contained \ Simple Default Solid Colorset Vector Pixmap \ AdjustedPixmap ShrunkPixmap StretchedPixmap - \ TiledPixmap MiniIcon + \ TiledPixmap MiniIcon MwmDecorMenu MwmDecorMin + \ MwmDecorMax MwmDecorShade MwmDecorStick MwmDecorLayer syn keyword fvwmBStyleFlags contained \ Raised Sunk Flat UseTitleStyle \ UseBorderStyle diff --git a/runtime/syntax/generator/gen_syntax_vim.vim b/runtime/syntax/generator/gen_syntax_vim.vim index 579dbbc396..3e7fe1bc2d 100644 --- a/runtime/syntax/generator/gen_syntax_vim.vim +++ b/runtime/syntax/generator/gen_syntax_vim.vim @@ -1,7 +1,7 @@ " Vim syntax file generator " Language: Vim script " Maintainer: Hirohito Higashi (h_east) -" Last Change: 2025 Oct 11 +" Last Change: 2025 Dec 04 let s:keepcpo= &cpo set cpo&vim @@ -31,6 +31,9 @@ function s:parse_vim_option(opt, missing_opt, term_out_code) for line in getline(1, line('$')) let list = matchlist(line, '^\s*{\s*"\(\w\+\)"\s*,\s*\%("\(\w\+\)"\|NULL\)\s*,\s*\%([^,]*\(P_BOOL\)[^,]*\|[^,]*\)\s*,\s*\([^,]*NULL\)\?.*') + if list[1] == 'completefuzzycollect' + continue + endif let item.name = list[1] let item.short_name = list[2] let item.is_bool = empty(list[3]) ? 0 : 1 @@ -288,6 +291,7 @@ function s:get_vim_command_type(cmd_name) " 6: unmap " 7: abclear " 8: modifiers + " 9: cd " 99: (Exclude registration of "syn keyword") let ab_prefix = '^[ci]\?' let menu_prefix = '^\%([acinostvx]\?\|tl\)' @@ -299,13 +303,20 @@ function s:get_vim_command_type(cmd_name) Print X abstract + argdo append augroup autocmd behave + breakadd + breakdel + breaklist browse + bufdo call catch + cdo + cfdo chdir change class @@ -313,6 +324,7 @@ function s:get_vim_command_type(cmd_name) confirm const copy + debug debuggreedy def defer @@ -343,19 +355,26 @@ function s:get_vim_command_type(cmd_name) filetype filter final + folddoopen + folddoclosed for function grep grepadd + help helpgrep highlight + history if import interface insert join k + language let + ldo + lfdo loadkeymap lhelpgrep lgrep @@ -381,6 +400,8 @@ function s:get_vim_command_type(cmd_name) popup profdel profile + promptfind + promptrepl public python pyfile @@ -411,6 +432,7 @@ function s:get_vim_command_type(cmd_name) swapname syntax syntime + tabdo tcl tcldo tclfile @@ -428,6 +450,7 @@ function s:get_vim_command_type(cmd_name) vimgrepadd while wincmd + windo EOL " Required for original behavior " \ 'global', 'vglobal' @@ -447,6 +470,9 @@ function s:get_vim_command_type(cmd_name) let ret = 6 elseif index(s:get_cmd_modifiers(), a:cmd_name) != -1 let ret = 8 + " :chdir handled specially for command/function distinction + elseif a:cmd_name =~# '^\%([lt]\?cd\|[lt]chdir\)$' + let ret = 9 else let ret = 0 endif @@ -914,6 +940,9 @@ function s:update_syntax_vim_file(vim_info) " vimCommand - modifier let lnum = s:search_and_check(kword . ' modifier', base_fname, str_info) let lnum = s:append_syn_vimcmd(lnum, str_info, li, 8) + " vimCommand - cd + let lnum = s:search_and_check(kword . ' cd', base_fname, str_info) + let lnum = s:append_syn_vimcmd(lnum, str_info, li, 9) update quit! diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index 40139de24b..754ddb0539 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Oct 27 +" Last Change: 2025 Dec 04 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -36,7 +36,7 @@ syn cluster vimCommentGroup contains=vimTodo,@Spell " GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang' " Lower priority :syn-match to allow for :command/function() distinction -syn match vimCommand "\" nextgroup=vimBang +" :chdir is handled specially elsewhere syn match vimCommand "\" nextgroup=vimBang syn match vimCommand "\" nextgroup=vimBang syn match vimCommand "\" nextgroup=vimBang @@ -246,7 +246,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vi syn case match " All vimCommands are contained by vimIsCommand. {{{2 -syn cluster vimCmdList contains=vimAbb,vimAddress,vimAt,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimCommandModifier,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDefer,vimDelcommand,vimDelFunction,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimEval,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSyntime,vimSynColor,vimSynLink,vimTerminal,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimWincmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAt,vimAutocmd,vimAugroup,vimBehave,vimBreakadd,vimBreakdel,vimBreaklist,vimCall,vimCatch,vimCd,vimCommandModifier,vimConst,vimDoautocmd,vimDebug,vimDebuggreedy,vimDef,vimDefFold,vimDefer,vimDelcommand,vimDelFunction,vimDoCommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimEval,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelp,vimHelpgrep,vimHighlight,vimHistory,vimImport,vimLanguage,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimPrompt,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSyntime,vimSynColor,vimSynLink,vimTerminal,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimWincmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var syn match vimCmdSep "\\\@1" nextgroup=vimBehaveBang,vimBehaveModel,vi syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite syn keyword vimBehaveModel contained mswin xterm +" Break* commands {{{2 +" =============== +syn keyword vimBreakaddFunc contained func skipwhite nextgroup=vimBreakpointFunctionLine,vimBreakpointFunction +syn keyword vimBreakaddFile contained file skipwhite nextgroup=vimBreakpointFileLine,vimBreakpointFilename +syn keyword vimBreakaddHere contained here skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn keyword vimBreakaddExpr contained expr skipwhite nextgroup=@vimExprList + +syn match vimBreakpointGlob contained "*" skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn match vimBreakpointNumber contained "\<\d\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep + +syn cluster vimBreakpointArg contains=vimBreakaddFunc,vimBreakaddFile,vimBreakaddHere,vimBreakaddExpr + +syn match vimBreakpointFunction contained "\<\%(\*\|\w\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn match vimBreakpointFilename contained "\<\%(\*\|\f\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn match vimBreakpointFunctionLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFunction +syn match vimBreakpointFileLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFilename + +syn keyword vimBreakadd breaka[dd] skipwhite nextgroup=@vimBreakpointArg +syn keyword vimBreakdel breakd[el] skipwhite nextgroup=@vimBreakpointArg,vimBreakpointNumber,vimBreakpointGlob +syn keyword vimBreaklist breakl[ist] skipwhite nextgroup=vimComment,vim9Comment,vimSep + " Call {{{2 " ==== syn match vimCall "\" skipwhite nextgroup=vimVar,@vimFunc +" Cd: {{{2 +" == +" GEN_SYN_VIM: vimCommand cd, START_STR='syn keyword vimCd', END_STR='skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep' +syn match vimCd "\" skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep +syn region vimCdArg contained + \ start=+["#|]\@!\S+ + \ end="\ze\s*$" + \ end=+\ze\s*\\\@1" contains=vimCount " ===== syn match vimDefer "\" skipwhite nextgroup=@vimFunc,vim9LambdaParams +" *Do commands {{{2 +" ============ +syn match vimDoCommandBang contained "\a\@1<=!" skipwhite nextgroup=@vimCmdList + +syn keyword vimDoCommand argdo bufd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand tabd[o] wind[o] skipwhite nextgroup=@vimCmdList +syn keyword vimDoCommand cdo cfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand ld[o] lfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand foldd[oopen] folddoc[losed] skipwhite nextgroup=@vimCmdList + " Exception Handling {{{2 syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern @@ -340,6 +389,16 @@ endif syn keyword vimFTCmd contained filet[ype] syn keyword vimFTOption contained detect indent off on plugin +" History {{{2 +" ======= +" TODO: handle Vim9 "history" variable assignment (like :wincmd, but a common variable name) +syn keyword vimHistory his[tory] skipwhite nextgroup=vimHistoryName,vimHistoryRange,vimCmdSep,vimComment,vim9Comment +syn keyword vimHistoryName contained c[md] s[earch] e[xpr] i[nput] d[ebug] a[ll] skipwhite nextgroup=vimHistoryRange,vimCmdSep,vimComment,vim9Comment +syn match vimHistoryName contained "[:/?=@>]" skipwhite nextgroup=vimHistoryRange,vimCmdSep,vimComment,vim9Comment +syn match vimHistoryRange contained "-\=\<\d\+\>\%(\s*,\)\=" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment +syn match vimHistoryRange contained ",\s*-\=\d\+\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment +syn match vimHistoryRange contained "-\=\<\d\+\s*,\s*-\=\d\+\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment + " Import {{{2 " ====== syn keyword vimImportAutoload contained autoload skipwhite nextgroup=vimImportFilename @@ -381,19 +440,29 @@ endif syn match vimImportName contained "\%(\" skipwhite nextgroup=@vimComment syn match vimImport "\" skipwhite nextgroup=vimImportAutoload,vimImportFilename +" Language {{{2 +" ======== +syn keyword vimLanguage lan[guage] skipwhite nextgroup=@vimLanguageName,vimLanguageCategory,vimSep,vimComment,vim9Comment +syn keyword vimLanguageCategory contained col[late] cty[pe] mes[sages] tim[e] skipwhite nextgroup=@vimLanguageName + +" [language[_territory][.codeset][@modifier]] and the reserved "C" and "POSIX" +syn match vimLanguageName contained "[[:alnum:]][[:alnum:]._@-]*[[:alnum:]]" nextgroup=vimSep,vimComment,vim9Comment +syn keyword vimLanguageNameReserved contained C POSIX nextgroup=vimSep,vimComment,vim9Comment +syn cluster vimLanguageName contains=vimLanguageName,vimLanguageNameReserved + " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking. syn cluster vimAugroupList contains=@vimCmdList,vimFilter,@vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue " define VimFolda syn region vimAugroup - \ start="\\ze\s\+\%([eE][nN][dD]\)\@!\S\+" + \ start="\\ze\s\+\%([eE][nN][dD]\%($\|[[:space:]|"#]\)\)\@!\S" \ matchgroup=vimAugroupKey - \ end="\\ze\s\+[eE][nN][dD]\>" + \ end="\\s\+[eE][nN][dD]\>" + syn match vimAugroupError "\" syn region vimCompoundType contained matchgroup=vimType start="\" -syn cluster vimType contains=vimType,vimTypeAny,vimCompoundType,vimUserType +syn cluster vimType contains=vimType,vimTypeAny,vimTypeObject,vimCompoundType,vimUserType " Classes, Enums And Interfaces: {{{2 " ============================= @@ -807,6 +884,10 @@ syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1 syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1 syn match vimSpecFileMod "\(:[phtre]\)\+" contained +syn match vimSpecFile contained "%[ \t:]"me=e-1 nextgroup=vimSpecFileMod +syn match vimSpecFile contained excludenl "%$" nextgroup=vimSpecFileMod +syn match vimSpecFile contained "%<"me=e-1 nextgroup=vimSpecFileMod + " User-Specified Commands: {{{2 " ======================= syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,@vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange @@ -1130,6 +1211,14 @@ syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@ syn match vim9VariableTypeSep contained "\S\@1<=:\%(\s\|\n\)\@=" skipwhite nextgroup=@vim9VariableType syn keyword vim9VariableType contained blob bool channel float job number string void skipwhite nextgroup=vimLetHeredoc syn keyword vim9VariableTypeAny contained any skipwhite nextgroup=vimLetHeredoc +syn match vim9VariableTypeObject contained "\" skipwhite nextgroup=vimLetHeredoc syn region vim9VariableCompoundType contained \ matchgroup=vim9VariableType @@ -1155,7 +1244,7 @@ syn region vim9VariableCompoundType contained \ transparent syn match vim9VariableUserType contained "\<\%(\h\w*\.\)*\u\w*\>" skipwhite nextgroup=vimLetHeredoc -syn cluster vim9VariableType contains=vim9VariableType,vim9VariableTypeAny,vim9VariableCompoundType,vim9VariableUserType +syn cluster vim9VariableType contains=vim9VariableType,vim9VariableTypeAny,vim9VariableTypeObject,vim9VariableCompoundType,vim9VariableUserType " Lockvar and Unlockvar: {{{2 " ===================== @@ -1366,11 +1455,23 @@ syn region vimMakeArgs contained syn match vimMakeBarEscape contained "\\|" syn match vimMakeBang contained "\a\@1<=!" skipwhite nextgroup=vimMakeArgs,vimCmdSep +" Help*: {{{2 +" ===== +syn match vimHelp "\" skipwhite nextgroup=vimHelpBang,vimHelpArg,vimHelpNextCommand +" TODO: match wildcards, ignoring exceptions? +syn region vimHelpArg contained + \ start="\S" + \ matchgroup=Special + \ end="\%(@\a\a\)\=\ze\s*\%($\|\%x0d\|\%x00\||\s*\S\)" + \ oneline +syn match vimHelpBang contained "\a\@1<=!" skipwhite nextgroup=vimHelpArg,vimHelpNextCommand +syn match vimHelpNextCommand contained "\ze|\s*\S" skipwhite nextgroup=vimCmdSep + syn match vimHelpgrep "\" skipwhite nextgroup=vimHelpgrepBang,vimHelpgrepPattern syn region vimHelpgrepPattern contained \ start="\S" \ matchgroup=Special - \ end="@\w\w\>" + \ end="@\a\a\>" \ end="$" \ contains=@vimSubstList \ oneline @@ -1565,6 +1666,15 @@ syn keyword vimProfdelArg contained file skipwhite nextgroup=vimProfilePattern syn keyword vimProfdelArg contained here skipwhite nextgroup=vimCmdSep,@vimComment syn match vimProfdel "\" skipwhite nextgroup=vimProfdelArg +" Prompt{find,repl}: {{{2 +" ================= +syn region vimPromptArg contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimContinue +syn keyword vimPrompt promptf[ind] promptr[epl] skipwhite nextgroup=vimPromptArg + " Redir: {{{2 " ===== syn match vimRedir "\" skipwhite nextgroup=vimRedirBang,vimRedirFileOperator,vimRedirVariableOperator,vimRedirRegister,vimRedirEnd @@ -1923,10 +2033,10 @@ VimFoldl syn region vimLuaHeredoc contained " [-- mzscheme --] {{{3 if s:interfaces =~# 'm' - let s:iskKeep = &isk + let s:iskKeep = &l:isk syn include @vimMzSchemeScript syntax/scheme.vim unlet b:current_syntax - let &isk = s:iskKeep + let &l:isk = s:iskKeep endif syn keyword vimMzScheme mz[scheme] skipwhite nextgroup=vimMzSchemeHeredoc,vimMzSchemeStatement @@ -2333,8 +2443,18 @@ if !exists("skip_vim_syntax_inits") hi def link vimBehaveModel vimBehave hi def link vimBehave vimCommand hi def link vimBracket Delimiter + hi def link vimBreakaddFunc Special + hi def link vimBreakaddFile Special + hi def link vimBreakaddHere Special + hi def link vimBreakaddExpr Special + hi def link vimBreakpointGlob Special + hi def link vimBreakadd vimCommand + hi def link vimBreakdel vimCommand + hi def link vimBreaklist vimCommand hi def link vimCall vimCommand hi def link vimCatch vimCommand + hi def link vimCd vimCommand + hi def link vimCdBang vimBang hi def link vimCmplxRepeat SpecialChar hi def link vimCommand Statement hi def link vimCommandModifier vimCommand @@ -2350,6 +2470,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimContinueString vimString hi def link vimCount Number hi def link vimCtrlChar SpecialChar + hi def link vimDebug vimCommand hi def link vimDebuggreedy vimCommand hi def link vimDef vimCommand hi def link vimDefBang vimBang @@ -2362,6 +2483,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimDelfunctionBang vimBang hi def link vimDoautocmd vimCommand hi def link vimDoautocmdMod Special + hi def link vimDoCommand vimCommand + hi def link vimDoCommandBang vimBang hi def link vimEcho vimCommand hi def link vimEchohlNone vimGroup hi def link vimEchohl vimCommand @@ -2402,6 +2525,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimGroupRem vimSynOption hi def link vimGroupSpecial Special hi def link vimGroup Type + hi def link vimHelp vimCommand + hi def link vimHelpBang vimBang hi def link vimHelpgrep vimCommand hi def link vimHiAttrib PreProc hi def link vimHiBang vimBang @@ -2422,6 +2547,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimHiStartStop vimHiTerm hi def link vimHiTerm Type hi def link vimHLGroup vimGroup + hi def link vimHistory vimCommand + hi def link vimHistoryName Special hi def link vimImport vimCommand hi def link vimImportAutoload Special hi def link vimImportAs vimImport @@ -2431,6 +2558,9 @@ if !exists("skip_vim_syntax_inits") hi def link vimKeymapTailComment vimComment hi def link vimLambdaBrace Delimiter hi def link vimLambdaOperator vimOper + hi def link vimLanguage vimCommand + hi def link vimLanguageCategory Special + hi def link vimLanguageNameReserved Constant hi def link vimLet vimCommand hi def link vimLetHeredoc vimString hi def link vimLetHeredocStart Special @@ -2491,6 +2621,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimProfileBang vimBang hi def link vimProfdel vimCommand hi def link vimProfdelArg vimSpecial + hi def link vimPrompt vimCommand hi def link vimPython vimCommand hi def link vimPython3 vimCommand hi def link vimPythonX vimCommand @@ -2586,6 +2717,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimTodo Todo hi def link vimType Type hi def link vimTypeAny vimType + hi def link vimTypeObject vimType + hi def link vimTypeObjectBracket vimTypeObject hi def link vimUniq vimCommand hi def link vimUniqBang vimBang hi def link vimUniqOptions Special @@ -2677,7 +2810,9 @@ if !exists("skip_vim_syntax_inits") hi def link vim9TypeEquals vimOper hi def link vim9Variable vimVar hi def link vim9VariableType vimType - hi def link vim9VariableTypeAny vimType + hi def link vim9VariableTypeAny vimTypeAny + hi def link vim9VariableTypeObject vimTypeObject + hi def link vim9VariableTypeObjectBracket vimTypeObjectBracket hi def link vim9Var vimCommand hi def link vim9Vim9ScriptArg Special hi def link vim9Vim9Script vimCommand diff --git a/runtime/syntax/haskell.vim b/runtime/syntax/haskell.vim index 509aa25122..f3c40cec8e 100644 --- a/runtime/syntax/haskell.vim +++ b/runtime/syntax/haskell.vim @@ -1,7 +1,9 @@ " Vim syntax file " Language: Haskell " Maintainer: Haskell Cafe mailinglist +" (need to be subscribed to post) " Last Change: 2024 Mar 28 by Enrico Maria De Angelis +" 2025 Nov 20 by Vim Project: Allow spaces in backticks #18776 " Original Author: John Williams " " Thanks to Ryan Crumley for suggestions and John Meacham for @@ -46,8 +48,8 @@ syn match VarId "\(\<[A-Z][a-zA-Z0-9_']*\.\)*\<[a-z][a-zA-Z0-9_']*\>" contains=@ " others are variables (e.g. functions). syn match hsVarSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[-!#$%&\*\+/<=>\?@\\^|~.][-!#$%&\*\+/<=>\?@\\^|~:.]*" syn match hsConSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=:[-!#$%&\*\+./<=>\?@\\^|~:]*" -syn match hsVarSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[a-z][a-zA-Z0-9_']*`" -syn match hsConSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[A-Z][a-zA-Z0-9_']*`" +syn match hsVarSym "` *\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[a-z][a-zA-Z0-9_']* *`" +syn match hsConSym "` *\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[A-Z][a-zA-Z0-9_']* *`" " (Non-qualified) identifiers which start with # are labels syn match hsLabel "#[a-z][a-zA-Z0-9_']*\>" diff --git a/runtime/syntax/help.vim b/runtime/syntax/help.vim index 8890f508cf..81ac28f845 100644 --- a/runtime/syntax/help.vim +++ b/runtime/syntax/help.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: Vim help file " Maintainer: Doug Kearns -" Last Change: 2025 Oct 19 +" Last Change: 2025 Nov 13 " Former Maintainer: Bram Moolenaar " Quit when a (custom) syntax file was already loaded @@ -62,20 +62,6 @@ if has_key(g:help_example_languages, "vim9") syn cluster helpExampleHighlight_vim9 add=vim9LegacyHeader_HelpExample endif -" builtin.txt -syn region helpReturnType - \ start="^\t\tReturn type: " - \ end="^$" - \ contains=@vimType,helpHyperTextJump,helpSpecial - \ transparent -syn match helpSpecial contained "{type}" containedin=vimCompoundType - -" various.txt -syn region helpExCommand_Version - \ start="^:ve\[rsion]\t\t" - \ end="\n\ze\n:ve\[rsion] {nr}" - \ contains=helpHyperTextEntry,helpHyperTextJump,helpOption - if has("ebcdic") syn match helpHyperTextJump "\\\@ 0 @@ -239,7 +245,6 @@ unlet s:i syn sync minlines=40 - " Define the default highlighting. " Only used when an item doesn't have highlighting yet hi def link helpIgnore Ignore diff --git a/runtime/syntax/i3config.vim b/runtime/syntax/i3config.vim index c95cb879ad..fdd6438be2 100644 --- a/runtime/syntax/i3config.vim +++ b/runtime/syntax/i3config.vim @@ -1,9 +1,10 @@ " Vim syntax file " Language: i3 config file -" Original Author: Josef Litos (JosefLitos/i3config.vim) -" Maintainer: Quentin Hibon (github user hiqua) -" Version: 1.2.4 -" Last Change: 2024-05-24 +" Original Author: Josef Litos (litoj/i3config.vim) +" Maintainer: Josef Litos (litoj) +" Previous maintainer: Quentin Hibon (github user hiqua) +" Version: 1.2.7 +" Last Change: 2025-12-02 " References: " http://i3wm.org/docs/userguide.html#configuring @@ -51,8 +52,8 @@ syn match i3ConfigComment /#.*$/ contained contains=i3ConfigTodo " 4.3 Fonts syn match i3ConfigFontSize / \d\+\(px\)\?$/ contained syn match i3ConfigColonOperator /:/ contained -syn match i3ConfigFontNamespace /pango:/ contained contains=i3ConfigColonOperator -syn region i3ConfigParamLine matchgroup=i3ConfigKeyword start=/font / skip=/\\$/ end=/$/ contained contains=i3ConfigFontNamespace,i3ConfigFontSize,i3ConfigSeparator keepend containedin=i3ConfigBarBlock +syn match i3ConfigFontNamespace /\(pango\|xft\):/ contained contains=i3ConfigColonOperator +syn region i3ConfigFont matchgroup=i3ConfigKeyword start=/font / skip=/\\$/ end=/$/ contained contains=i3ConfigFontNamespace,i3ConfigFontSize,i3ConfigSeparator keepend " 4.4-4.5 Keyboard/Mouse bindings syn match i3ConfigBindArgument /--\(release\|border\|whole-window\|exclude-titlebar\) / contained nextgroup=i3ConfigBindArgument,i3ConfigBindCombo @@ -64,7 +65,9 @@ syn region i3ConfigBind start=/\zs/ skip=/\\$/ end=/$/ contained contains=@i3Con syn keyword i3ConfigBindKeyword bindsym bindcode contained skipwhite nextgroup=i3ConfigBindArgument,i3ConfigBindCombo " 4.6 Binding modes -syn region i3ConfigModeBlock matchgroup=i3ConfigKeyword start=/mode\ze\( --pango_markup\)\? \([^'" {]\+\|'[^']\+'\|".\+"\)\s\+{$/ end=/^}\zs$/ contained contains=i3ConfigShParam,@i3ConfigStrVar,i3ConfigBindKeyword,i3ConfigComment,i3ConfigParen fold keepend extend +syn region i3ConfigModeBlock matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ contained contains=i3ConfigComment,i3ConfigBindKeyword fold keepend +syn match i3ConfigModeIdent /[^ ,;]\+/ contained contains=@i3ConfigStrVar extend skipwhite nextgroup=i3ConfigModeBlock +syn match i3ConfigKeyword /mode\( --pango_markup\)\?/ contained contains=i3ConfigShParam skipwhite nextgroup=i3ConfigModeIdent " 4.7 Floating modifier syn match i3ConfigKeyword /floating_modifier [$A-Z][0-9A-Za-z]*$/ contained contains=i3ConfigVariable,i3ConfigBindModkey @@ -120,17 +123,15 @@ syn region i3ConfigKeyword start=/assign / end=/$/ contained contains=i3ConfigAs syn region i3ConfigShCommand matchgroup=i3ConfigShDelim start=/\$(/ end=/)/ contained contains=i3ConfigExecAction,i3ConfigShCommand,i3ConfigShDelim,i3ConfigShOper,i3ConfigShParam,i3ConfigString,i3ConfigNumber,i3ConfigVariable extend syn match i3ConfigShDelim /[[\]{}();`]\+/ contained syn match i3ConfigShOper /[<>&|+=~^*!.?]\+/ contained -syn match i3ConfigShParam /\<-[A-Za-z-][0-9A-Za-z_-]*\>/ contained -syn cluster i3ConfigSh contains=@i3ConfigIdent,i3ConfigShOper,i3ConfigShDelim,i3ConfigShParam,i3ConfigShCommand +syn match i3ConfigShParam /\s\zs-[A-Za-z-][0-9A-Za-z_-]*\>/ contained +syn cluster i3ConfigSh contains=@i3ConfigIdent,i3ConfigShOper,i3ConfigShDelim,i3ConfigShParam,i3ConfigShCommand,i3ConfigComment syn region i3ConfigExec start=/ \ze[^{]/ skip=/\\$/ end=/$/ contained contains=i3ConfigExecAction,@i3ConfigSh keepend syn keyword i3ConfigKeyword exec_always exec contained nextgroup=i3ConfigExec " 4.21 Workspaces per output -syn match i3ConfigOutputIdent /[^'",; ]\+/ contained contains=@i3ConfigIdent,i3ConfigColonOperator skipwhite nextgroup=i3ConfigOutputIdent -syn region i3ConfigOutputIdent start=/['"]/ end=/\ze/ contained contains=@i3ConfigIdent skipwhite nextgroup=i3ConfigOutputIdent +syn match i3ConfigOutputIdent /[^ ,;]\+/ contained contains=@i3ConfigIdent,i3ConfigColonOperator skipwhite nextgroup=i3ConfigOutputIdent extend syn keyword i3ConfigOutput output contained skipwhite nextgroup=i3ConfigOutputIdent -syn match i3ConfigWorkspaceIdent /[^'",; ]\+/ contained contains=@i3ConfigIdent skipwhite nextgroup=i3ConfigGaps,i3ConfigOutput -syn region i3ConfigWorkspaceIdent start=/['"]/ end=/\ze/ contained contains=@i3ConfigIdent skipwhite nextgroup=i3ConfigGaps,i3ConfigOutput +syn match i3ConfigWorkspaceIdent /[^ ,;]\+/ contained contains=@i3ConfigIdent skipwhite nextgroup=i3ConfigGaps,i3ConfigOutput extend syn keyword i3ConfigKeyword workspace contained skipwhite nextgroup=i3ConfigWorkspaceIdent " 4.22 Changing colors @@ -151,7 +152,9 @@ syn keyword i3ConfigKeyword mouse_warping contained skipwhite nextgroup=i3Config " 4.26 Popups while fullscreen syn keyword i3ConfigPopupFullscreenOpts smart ignore leave_fullscreen contained -syn keyword i3ConfigKeyword popup_during_fullscreen contained skipwhite nextgroup=i3ConfigPopupFullscreenOpts +syn keyword i3ConfigPopupFullscreenOptsExtra all contained +syn cluster i3ConfigPopupFullscreenOpts contains=i3ConfigPopupFullscreenOpts,i3ConfigPopupFullscreenOptsExtra +syn keyword i3ConfigKeyword popup_during_fullscreen contained skipwhite nextgroup=@i3ConfigPopupFullscreenOpts " 4.27 Focus wrapping syn keyword i3ConfigFocusWrappingOpts force workspace contained @@ -189,7 +192,9 @@ syn keyword i3ConfigBarOpts modifier contained skipwhite nextgroup=i3ConfigBindC syn keyword i3ConfigBarOpts i3bar_command status_command workspace_command contained skipwhite nextgroup=@i3ConfigSh syn keyword i3ConfigBarOpts mode hidden_state id position output tray_output tray_padding separator_symbol workspace_buttons workspace_min_width strip_workspace_numbers strip_workspace_name binding_mode_indicator padding contained skipwhite nextgroup=i3ConfigBarOptVals,@i3ConfigValue,i3ConfigShOper syn keyword i3ConfigBarOptVals dock hide invisible show none top bottom primary nonprimary contained -syn region i3ConfigBarBlock matchgroup=i3ConfigKeyword start=/bar\ze {$/ end=/^\s*}\zs$/ contained contains=i3ConfigBarOpts,i3ConfigComment,i3ConfigParen,i3ConfigBindKeyword,i3ConfigColorsBlock fold keepend extend + +syn region i3ConfigBarBlock matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=i3ConfigBarOpts,i3ConfigComment,i3ConfigBindKeyword,i3ConfigColorsBlock,i3ConfigFont fold keepend +syn keyword i3ConfigKeyword bar contained nextgroup=i3ConfigBarBlock " 5.16 Color block syn match i3ConfigColorSeq /#[0-9A-Fa-f]\{3,8}\|\$[0-9A-Za-z_:|[\]-]\+/ contained contains=@i3ConfigColVar skipwhite nextgroup=i3ConfigColorSeq @@ -260,9 +265,9 @@ syn match i3ConfigMarkOpt /--\(add\|replace\)\( --toggle\)\?/ contained contains syn keyword i3ConfigActionKeyword mark contained skipwhite nextgroup=i3ConfigMarkOpt,i3ConfigOutputIdent " Commands usable for direct config calls - for enforcing start of line for Commands -syn match i3ConfigTopLevelDirective /^\s*/ nextgroup=i3ConfigComment,i3ConfigKeyword,i3ConfigCommand,i3ConfigBindKeyword,i3ConfigParamLine,i3ConfigModeBlock,i3ConfigBarBlock,i3ConfigError +syn match i3ConfigTopLevelDirective /^\s*/ nextgroup=i3ConfigComment,i3ConfigKeyword,i3ConfigCommand,i3ConfigBindKeyword,i3ConfigParamLine,i3ConfigFont,i3ConfigError -" Commands useable in keybinds +" Commands usable in keybinds syn keyword i3ConfigActionKeyword mode append_layout kill open fullscreen sticky split floating swap unmark title_window_icon title_format border restart reload exit scratchpad nop bar contained skipwhite nextgroup=i3ConfigOption,@i3ConfigValue syn keyword i3ConfigOption default enable disable toggle key restore current horizontal vertical auto none normal pixel show container with id con_id padding hidden_state hide dock invisible contained skipwhite nextgroup=i3ConfigOption,@i3ConfigValue " Commands usable at runtime (outside loading config) @@ -281,15 +286,18 @@ hi def link i3ConfigBoolean Boolean hi def link i3ConfigString String hi def link i3ConfigColor Constant hi def link i3ConfigNumber Number +hi def link i3ConfigIdent Identifier hi def link i3ConfigComment Comment hi def link i3ConfigColonOperator i3ConfigOperator hi def link i3ConfigFontNamespace i3ConfigOption hi def link i3ConfigFontSize i3ConfigNumber +hi def link i3ConfigFont i3ConfigParamLine hi def link i3ConfigBindArgument i3ConfigShParam hi def link i3ConfigBindModifier i3ConfigOperator hi def link i3ConfigBindModkey Special hi def link i3ConfigBindCombo SpecialChar hi def link i3ConfigBindKeyword i3ConfigKeyword +hi def link i3ConfigModeIdent i3ConfigIdent hi def link i3ConfigSizeSpecial i3ConfigOperator hi def link i3ConfigOrientationOpts i3ConfigOption hi def link i3ConfigWorkspaceLayoutOpts i3ConfigOption @@ -303,14 +311,15 @@ hi def link i3ConfigShParam PreProc hi def link i3ConfigShDelim Delimiter hi def link i3ConfigShOper Operator hi def link i3ConfigShCommand Normal -hi def link i3ConfigOutputIdent i3ConfigParamLine +hi def link i3ConfigOutputIdent i3ConfigIdent hi def link i3ConfigOutput i3ConfigMoveType -hi def link i3ConfigWorkspaceIdent i3ConfigParamLine +hi def link i3ConfigWorkspaceIdent i3ConfigIdent hi def link i3ConfigDotOperator i3ConfigOperator hi def link i3ConfigClientOpts i3ConfigOption hi def link i3ConfigFocusFollowsMouseOpts i3ConfigOption hi def link i3ConfigMouseWarpingOpts i3ConfigOption hi def link i3ConfigPopupFullscreenOpts i3ConfigOption +hi def link i3ConfigPopupFullscreenOptsExtra i3ConfigPopupFullscreenOpts hi def link i3ConfigFocusWrappingOpts i3ConfigOption hi def link i3ConfigTimeUnit i3ConfigNumber hi def link i3ConfigFocusOnActivationOpts i3ConfigOption @@ -340,6 +349,7 @@ hi def link i3ConfigResizeExtra i3ConfigOption hi def link i3ConfigResizeDir i3ConfigOption hi def link i3ConfigResizeType i3ConfigOption hi def link i3ConfigMark i3ConfigCommand +hi def link i3ConfigMarkOpt i3ConfigOption hi def link i3ConfigActionKeyword i3ConfigCommand hi def link i3ConfigOption Type diff --git a/runtime/syntax/julia.vim b/runtime/syntax/julia.vim index ec7eabf109..99a0a1a8c8 100644 --- a/runtime/syntax/julia.vim +++ b/runtime/syntax/julia.vim @@ -3,6 +3,7 @@ " Maintainer: Carlo Baldassi " Homepage: https://github.com/JuliaEditorSupport/julia-vim " Last Change: 2021 Aug 04 +" 2025 Dec 08 by Vim Project (update syntax script from upstream #18894) if version < 600 syntax clear @@ -41,8 +42,8 @@ let s:julia_highlight_operators = get(g:, "julia_highlight_operators", 1) " because those may or may not be valid in the lookbehind on a case-by-case " basis. let s:nonid_chars = '\U00-\U08' . '\U0A-\U1F' - \ . '\U21-\U28' . '\U2A-\U2F' . '\U3A-\U40' . '\U5B-\U5E' . '\U60' . '\U7B\U7C' - \ . '\U7E-\UA1' . '\UA7\UA8' . '\UAB-\UAD' . '\UAF\UB1\UB4' . '\UB6-\UB8' . '\UBB\UBF' . '\UD7\UF7' + \ . '\U21-\U28' . '\U2A-\U2F' . '\U3A-\U40' . '\U5B\U5C\U5E' . '\U60' . '\U7B\U7C' + \ . '\U7E-\UA1' . '\UA7\UA8' . '\UAB-\UAD' . '\UAF\UB1\UB4' . '\UB6-\UB8' . '\UBB\UBF' . '\UD7\UF7' " The complete list let s:nonidS_chars = '[:space:])\U5D}' . s:nonid_chars @@ -59,12 +60,6 @@ let s:op_chars = '\U25\U26\U2A\U2B\U2D\U2F\U3C-\U3E\U5C\U5E\U7C\U7E\UAC\UB1\UD7\ " The list contains the following characters: '…⁝⅋←↑→↓↔↚↛↜↝↞↠↢↣↤↦↩↪↫↬↮↶↷↺↻↼↽⇀⇁⇄⇆⇇⇉⇋⇌⇍⇎⇏⇐⇒⇔⇚⇛⇜⇝⇠⇢⇴⇵⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿∈∉∊∋∌∍∓∔∗∘∙√∛∜∝∤∥∦∧∨∩∪∷∸∺∻∽∾≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊞⊟⊠⊡⊢⊣⊩⊬⊮⊰⊱⊲⊳⊴⊵⊶⊷⊻⊼⊽⋄⋅⋆⋇⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌿▷⟂⟈⟉⟑⟒⟕⟖⟗⟰⟱⟵⟶⟷⟹⟺⟻⟼⟽⟾⟿⤀⤁⤂⤃⤄⤅⤆⤇⤈⤉⤊⤋⤌⤍⤎⤏⤐⤑⤒⤓⤔⤕⤖⤗⤘⤝⤞⤟⤠⥄⥅⥆⥇⥈⥉⥊⥋⥌⥍⥎⥏⥐⥑⥒⥓⥔⥕⥖⥗⥘⥙⥚⥛⥜⥝⥞⥟⥠⥡⥢⥣⥤⥥⥦⥧⥨⥩⥪⥫⥬⥭⥮⥯⥰⦷⦸⦼⦾⦿⧀⧁⧡⧣⧤⧥⧴⧶⧷⧺⧻⨇⨈⨝⨟⨢⨣⨤⨥⨦⨧⨨⨩⨪⨫⨬⨭⨮⨰⨱⨲⨳⨴⨵⨶⨷⨸⨹⨺⨻⨼⨽⩀⩁⩂⩃⩄⩅⩊⩋⩌⩍⩎⩏⩐⩑⩒⩓⩔⩕⩖⩗⩘⩚⩛⩜⩝⩞⩟⩠⩡⩢⩣⩦⩧⩪⩫⩬⩭⩮⩯⩰⩱⩲⩳⩴⩵⩶⩷⩸⩹⩺⩻⩼⩽⩾⩿⪀⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚⪛⪜⪝⪞⪟⪠⪡⪢⪣⪤⪥⪦⪧⪨⪩⪪⪫⪬⪭⪮⪯⪰⪱⪲⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿⫀⫁⫂⫃⫄⫅⫆⫇⫈⫉⫊⫋⫌⫍⫎⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫛⫷⫸⫹⫺⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿⭀⭁⭂⭃⭄⭇⭈⭉⭊⭋⭌←↑→↓' let s:op_chars_wc = '\U2026\U205D\U214B\U2190-\U2194\U219A-\U219E\U21A0\U21A2-\U21A4\U21A6\U21A9-\U21AC\U21AE\U21B6\U21B7\U21BA-\U21BD\U21C0\U21C1\U21C4\U21C6\U21C7\U21C9\U21CB-\U21D0\U21D2\U21D4\U21DA-\U21DD\U21E0\U21E2\U21F4-\U21FF\U2208-\U220D\U2213\U2214\U2217-\U221D\U2224-\U222A\U2237\U2238\U223A\U223B\U223D\U223E\U2240-\U228B\U228D-\U229C\U229E-\U22A3\U22A9\U22AC\U22AE\U22B0-\U22B7\U22BB-\U22BD\U22C4-\U22C7\U22C9-\U22D3\U22D5-\U22FF\U233F\U25B7\U27C2\U27C8\U27C9\U27D1\U27D2\U27D5-\U27D7\U27F0\U27F1\U27F5-\U27F7\U27F9-\U27FF\U2900-\U2918\U291D-\U2920\U2944-\U2970\U29B7\U29B8\U29BC\U29BE-\U29C1\U29E1\U29E3-\U29E5\U29F4\U29F6\U29F7\U29FA\U29FB\U2A07\U2A08\U2A1D\U2A1F\U2A22-\U2A2E\U2A30-\U2A3D\U2A40-\U2A45\U2A4A-\U2A58\U2A5A-\U2A63\U2A66\U2A67\U2A6A-\U2AD9\U2ADB\U2AF7-\U2AFA\U2B30-\U2B44\U2B47-\U2B4C\UFFE9-\UFFEC' -" Full operators regex -let s:operators = '\%(' . '\.\%([-+*/^÷%|&⊻]\|//\|\\\|>>\|>>>\?\)\?=' . - \ '\|' . '[:<>]=\|||\|&&\||>\|<|\|[<>:]:\|<<\|>>>\?\|//\|[-=]>\|\.\.\.\?' . - \ '\|' . '\.\?[!' . s:op_chars . s:op_chars_wc . ']' . - \ '\)' - " Characters that can be used to start an identifier. Above \UBF we don't " bother checking. (If a UTF8 operator is used, it will take precedence anyway.) @@ -77,6 +72,12 @@ let s:id_charsW = '\%([0-9A-Za-z_!\UA2-\UA6\UA9\UAA\UAE-\UB0\UB2-\UB5\UB8-\UBA\U " A valid julia identifier, more or less let s:idregex = '\%(' . s:id_charsH . s:id_charsW . '*\)' +" Full operators regex +let s:operators = '\%(' . '\.\%([-+*/^÷%|&⊻]\|//\|\\\|>>\|>>>\?\)\?=' + \ . '\|' . '[!:<>]=\|||\|&&\||>\|<|\|[<>:]:\|<<\|>>>\?\|//\|[-=]>\|\.\.\.\?' + \ . '\|' . '\.!' . '\|'.s:id_charsW.'\@'.s:d(1).'" syntax match juliaInfixKeyword display "\%(=\s*\)\@\S\@!\%(\s*=\)\@!" -" The import/export/using keywords introduce a sort of special parsing +" The import/export/using/public keywords introduce a sort of special parsing " environment with its own rules -exec 'syntax region juliaImportLine matchgroup=juliaKeyword excludenl start="\<\%(import\|using\|export\)\>" skip="\%(\%(\<\%(import\|using\|export\)\>\)\|^\)\@'.s:d(6).'<=$" end="$" end="\%([])}]\)\@=" contains=@juliaExpressions,juliaAsKeyword,@juliaContinuationItems,juliaMacroName' +exec 'syntax region juliaImportLine matchgroup=juliaKeyword excludenl start="\<\%(import\|using\|export\|public\)\>" skip="\%(\%(\<\%(import\|using\|export\|public\)\>\)\|^\)\@'.s:d(6).'<=$" end="$" end="\%([])}]\)\@=" contains=@juliaExpressions,juliaAsKeyword,@juliaContinuationItems,juliaMacroName' syntax match juliaAsKeyword display contained "\" syntax match juliaRepKeyword display "\<\%(break\|continue\)\>" @@ -180,8 +181,9 @@ syntax region juliaLetBlock matchgroup=juliaBlKeyword start="\" end="\\|im\>\|\ze\X\)' -let s:float_regex = '\%(' . s:float_regex3 . - \ '\|' . s:float_regex2 . - \ '\|' . s:float_regex1 . - \ '\|' . s:hexfloat_regex2 . - \ '\|' . s:hexfloat_regex1 . - \ '\)' +let s:float_regex = '\%(' . s:float_regex3 + \ . '\|' . s:float_regex2 + \ . '\|' . s:float_regex1 + \ . '\|' . s:hexfloat_regex2 + \ . '\|' . s:hexfloat_regex1 + \ . '\)' exec 'syntax match juliaNumber contained "' . s:int_regex . '" contains=juliaComplexUnit' exec 'syntax match juliaFloat contained "' . s:float_regex . '" contains=juliaComplexUnit' @@ -386,13 +388,13 @@ syntax keyword juliaTodo contained TODO FIXME XXX " detect an end-of-line with only whitespace or comments before it let s:eol = '\s*\%(\%(\%(#=\%(=#\@!\|[^=]\|\n\)\{-}=#\)\s*\)\+\)\?\%(#=\@!.*\)\?\n' -" a trailing comma, or colon, or an empty line in an import/using/export +" a trailing comma, or colon, or an empty line in an import/using/export/public " multi-line command. Used to recognize the as keyword, and for indentation " (this needs to take precedence over normal commas and colons, and comments) syntax cluster juliaContinuationItems contains=juliaContinuationComma,juliaContinuationColon,juliaContinuationNone exec 'syntax region juliaContinuationComma matchgroup=juliaComma contained start=",\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems' exec 'syntax region juliaContinuationColon matchgroup=juliaColon contained start=":\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems' -exec 'syntax region juliaContinuationNone matchgroup=NONE contained start="\%(\<\%(import\|using\|export\)\>\|^\)\@'.s:d(6).'<=\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems,juliaAsKeyword' +exec 'syntax region juliaContinuationNone matchgroup=NONE contained start="\%(\<\%(import\|using\|export\|public\)\>\|^\)\@'.s:d(6).'<=\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems,juliaAsKeyword' exec 'syntax match juliaMacroName contained "@' . s:idregex . '\%(\.' . s:idregex . '\)*"' " the following are disabled by default, but diff --git a/runtime/syntax/leex.vim b/runtime/syntax/leex.vim new file mode 100644 index 0000000000..05f92c3748 --- /dev/null +++ b/runtime/syntax/leex.vim @@ -0,0 +1,63 @@ +" Vim syntax file +" Language: Leex (Erlang Lexical Analyzer Generator) +" Maintainer: Jon Parise +" Last Change: 2025 Nov 30 +" Filenames: *.xrl +" +" References: +" - https://www.erlang.org/doc/apps/parsetools/leex.html + +if exists('b:current_syntax') + finish +endif + +syn include @leexErlang syntax/erlang.vim +unlet! b:current_syntax + +syn match leexComment "%.*$" contains=@Spell display + +syn match leexRegexOperator "[|*+?]" contained display +syn match leexRegexDelimiter "[()[\]]" contained display +syn match leexRegexSpecial "[.^$\\]" contained display +syn match leexRegexEscape '\\\%([bfnrtevsd]\|\o\{1,3}\|x\x\{2}\|x{\x\+}\|.\)' contained display +syn match leexRegexRange "\[[^\]]*\]" contains=leexRegexDelimiter,leexRegexEscape contained display + +" Macro definitions: NAME = VALUE +syn match leexMacroName "^\s*\zs\h\w*\ze\s\+=\s\+" contained nextgroup=leexMacroEquals skipwhite display +syn match leexMacroEquals "=" contained nextgroup=leexMacroValue skipwhite display +syn match leexMacroValue "\S\+" contained contains=leexRegexOperator,leexRegexDelimiter,leexRegexSpecial,leexRegexEscape,leexRegexRange,leexMacroRef display +syn match leexMacroRef "{\h\w*}" contained display + +" Rule definitions: : . +syn match leexRuleRegex "^\s*\zs[^%].\{-}\ze\s\+:" contained contains=leexRegexOperator,leexRegexDelimiter,leexRegexSpecial,leexRegexEscape,leexRegexRange,leexMacroRef nextgroup=leexRuleColon skipwhite display +syn match leexRuleColon ":" contained nextgroup=leexRuleCode skipwhite skipnl display +syn region leexRuleCode start="" end="\.\s*\%(%.*\)\?$" skip="^\s*%.*$" contained contains=@leexErlang keepend skipnl skipwhite + +" Sections +syn match leexHeading "^\%(Definitions\|Rules\|Erlang code\)\.$" contained display +syn region leexDefinitions start="^Definitions\.$" end="^[A-Z][A-Za-z ]*\.$"me=s-1 end="\%$" keepend fold + \ contains=leexHeading,leexComment,leexMacroName +syn region leexRules start="^Rules\.$" end="^[A-Z][A-Za-z ]*\.$"me=s-1 end="\%$" keepend fold + \ contains=leexHeading,leexComment,leexRuleRegex +syn region leexErlangCode start="^Erlang code\.$" end="^[A-Z][A-Za-z ]*\.$"me=s-1 end="\%$" keepend fold + \ contains=leexHeading,@leexErlang + +hi def link leexComment Comment +hi def link leexHeading PreProc + +hi def link leexRegexOperator Operator +hi def link leexRegexDelimiter Delimiter +hi def link leexRegexSpecial Special +hi def link leexRegexRange String +hi def link leexRegexEscape SpecialChar + +hi def link leexMacroName Identifier +hi def link leexMacroEquals Operator +hi def link leexMacroValue String +hi def link leexMacroRef Macro + +hi def link leexRuleColon Operator + +syn sync fromstart + +let b:current_syntax = 'leex' diff --git a/runtime/syntax/lf.vim b/runtime/syntax/lf.vim index 20219ecd23..0910bbd3bc 100644 --- a/runtime/syntax/lf.vim +++ b/runtime/syntax/lf.vim @@ -3,10 +3,10 @@ " Maintainer: Andis Sprinkis " Former Maintainer: Cameron Wright " URL: https://github.com/andis-sprinkis/lf-vim -" Last Change: 7 Sep 2025 +" Last Change: 26 Oct 2025 " " The shell syntax highlighting is configurable. See $VIMRUNTIME/doc/syntax.txt -" lf version: 38 +" lf version: 39 if exists("b:current_syntax") | finish | endif @@ -63,6 +63,7 @@ syn keyword lfOptions \ cmd-menu-accept \ cmd-menu-complete \ cmd-menu-complete-back + \ cmd-menu-discard \ cmd-right \ cmd-transpose \ cmd-transpose-word @@ -148,6 +149,7 @@ syn keyword lfOptions \ paste \ period \ pre-cd + \ preload \ preserve \ preview \ previewer @@ -162,6 +164,7 @@ syn keyword lfOptions \ rename \ reverse \ roundbox + \ rulerfile \ rulerfmt \ scroll-down \ scroll-up diff --git a/runtime/syntax/lhaskell.vim b/runtime/syntax/lhaskell.vim index cf1f126a3c..a6d98bf031 100644 --- a/runtime/syntax/lhaskell.vim +++ b/runtime/syntax/lhaskell.vim @@ -3,6 +3,7 @@ " Markdown style, TeX style and plain text surrounding " \begin{code} \end{code} blocks " Maintainer: Haskell Cafe mailinglist +" (need to be subscribed to post) " Original Author: Arthur van Leeuwen " Last Change: 2020 Feb 25 " Version: 1.05 diff --git a/runtime/syntax/log.vim b/runtime/syntax/log.vim index f1d70cfc3d..abf3d716c2 100644 --- a/runtime/syntax/log.vim +++ b/runtime/syntax/log.vim @@ -2,7 +2,7 @@ " Language: Generic log file " Maintainer: Mao-Yining " Former Maintainer: MTDL9 -" Latest Revision: 2025-10-03 +" Latest Revision: 2025-10-31 if exists('b:current_syntax') finish @@ -12,150 +12,211 @@ syntax case ignore " Operators "--------------------------------------------------------------------------- -syn match logOperator display '[;,\?\:\.\<=\>\~\/\@\!$\%&\+\-\|\^(){}\*#]' -syn match logBrackets display '[][]' -syn match logSeparator display '-\{3,}' -syn match logSeparator display '\*\{3,}' -syn match logSeparator display '=\{3,}' -syn match logSeparator display '- - ' +syn match logOperator display '[;,\?\:\.\<=\>\~\/\@\!$\%&\+\-\|\^(){}\*#]' +syn match logBrackets display '[][]' - -" Constants +" For Visual Separator and Apache CLF "--------------------------------------------------------------------------- -syn match logNumber '\<-\?\d\+\>' -syn match logHexNumber '\<0[xX]\x\+\>' -syn match logHexNumber '\<\d\x\+\>' -syn match logBinaryNumber '\<0[bB][01]\+\>' -syn match logFloatNumber '\<\d.\d\+[eE]\?\>' +syn match logSeparator display '-\{3,}\|=\{3,}\|#\{3,}\|\*\{3,}\|<\{3,}\|>\{3,}' +syn match logSeparator display '- - ' -syn keyword logBoolean true false -syn keyword logNull null nil nullptr none +" Strings +" ------------------------------ +syn region LogString start=/"/ end=/"/ end=/$/ skip=/\\./ contains=logJavaError +syn region LogString start=/`/ end=/`/ end=/$/ skip=/\\./ contains=logJavaError +" Quoted strings, but no match on quotes like `don't`, possessive `s'` and `'s` +syn region LogString start=/\(s\)\@' +syn match logNumberFloat display '\<\d\+\.\d\+\([eE][-+]\=\d\+\)\=\>' +syn match logNumberFloat display '\<\d\+[eE][-+]\=\d\+\>' +syn match logNumberBin display '\<0[bB][01]\+\>' +syn match logNumberOct display '\<0[oO]\o\+\>' +syn match logNumberHex display '\<0[xX]\x\+\>' + +" Possible hex numbers without the '0x' prefix +syn match logNumberHex display '\<\x\{4,}\>' + +" Numbers in Hardware Description Languages e.g. Verilog +" These must be placed after LogString to ensure they take precedence +syn match logNumber display '\'d\d\+\>' +syn match logNumberBin display '\'b[01]\+\>' +syn match logNumberOct display '\'o\o\+\>' +syn match logNumberHex display '\'h\x\+\>' +" Constants +"--------------------------------------------------------------------------- +syn keyword logBoolean true false +syn keyword logNull null nil none " Dates and Times "--------------------------------------------------------------------------- -" Matches 2018-03-12T or 12/03/2018 or 12/Mar/2018 or 27 Nov 2023 -syn match logDate '\d\{2,4}[-/ ]\(\d\{2}\|Jan\|Feb\|Mar\|Apr\|May\|Jun\|Jul\|Aug\|Sep\|Oct\|Nov\|Dec\)[-/ ]\d\{2,4}T\?' -" Matches 8 digit numbers at start of line starting with 20 -syn match logDate '^20\d\{6}' -" Matches Fri Jan 09 or Feb 11 or Apr 3 or Sun 3 -syn keyword logDate Mon Tue Wed Thu Fri Sat Sun Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec nextgroup=logDateDay -syn match logDateDay '\s\{1,2}\d\{1,2}' contained - +" MM-DD, DD-MM, MM/DD, DD/MM +syn match logDate display '\<\d\{2}[-\/]\d\{2}\>' +" YYYY-MM-DD, YYYY/MM/DD +syn match logDate display '\<\d\{4}[-\/]\d\{2}[-\/]\d\{2}\>' +" DD-MM-YYYY, DD/MM/YYYY +syn match logDate display '\<\d\{2}[-\/]\d\{2}[-\/]\d\{4}\>' +" First half of RFC3339 e.g. 2023-01-01T +syn match logDate display '\<\d\{4}-\d\{2}-\d\{2}T' +" 'Dec 31', 'Dec 31, 2023', 'Dec 31 2023' +syn match logDate display '\<\a\{3} \d\{1,2}\(,\? \d\{4}\)\?\>' +" '31-Dec-2023', '31 Dec 2023' +syn match logDate display '\<\d\{1,2}[- ]\a\{3}[- ]\d\{4}\>' +" Weekday string +syn keyword logDate Mon Tue Wed Thu Fri Sat Sun " Matches 12:09:38 or 00:03:38.129Z or 01:32:12.102938 +0700 or 01:32:12.1234567890 or 21:14:18+11:00 -syn match logTime '\d\{2}:\d\{2}:\d\{2}\(\.\d\{2,9}\)\?\(\s\?[-+]\(\d\{1,2\}:\d\{2\}\|\d\{2,4}\)\|Z\)\?\>' nextgroup=logTimeZone,logSysColumns skipwhite - -" Follows logTime, matches UTC or PDT 2019 or 2019 EDT -syn match logTimeZone '[A-Z]\{2,5}\>\( \d\{4}\)\?' contained -syn match logTimeZone '\d\{4} [A-Z]\{2,5}\>' contained +syn match logTime display '\d\{2}:\d\{2}:\d\{2}\(\.\d\{2,9}\)\?\(\s\?[-+]\(\d\{1,2\}:\d\{2\}\|\d\{2,4}\)\|Z\)\?\>' nextgroup=logTimeZone,logSysColumns skipwhite +" Time zone e.g. Z, +08:00, PST +syn match logTimeZone display 'Z\|[+-]\d\{2}:\d\{2}\|\a\{3}\>' contained skipwhite nextgroup=logSysColumns +" Matches time durations like 1ms or 1y 2d 23ns 3.14s 1.2e4s 3E+20h +syn match logDuration display '\(\(\(\d\+d\)\?\d\+h\)\?\d\+m\)\?\d\+\(\.\d\+\)\?[mun]\?s\>' -" Matches time durations like 1ms or 1y 2d 23ns -syn match logDuration '\(^\|\s\)\@<=\d\+\s*[mn]\?[ywdhms]\(\s\|$\)\@=' - -" Entities +" Objects "--------------------------------------------------------------------------- -syn match logUrl 'http[s]\?:\/\/\S\+' -syn match logUUID '\w\{8}-\w\{4}-\w\{4}-\w\{4}-\w\{12}' -syn match logMD5 '\<[a-z0-9]\{32}\>' -syn match logIPV4 '\<\d\{1,3}\(\.\d\{1,3}\)\{3}\>' -syn match logIPV6 '\<\x\{1,4}\(:\x\{1,4}\)\{7}\>' -syn match logMacAddress '\<\x\{2}\(:\x\{2}\)\{5}' -syn match logFilePath '\<\w:\\\f\+' -syn match logFilePath '[^a-zA-Z0-9"']\@<=/\f\+' +syn match logUrl display '\' +syn match logIPv4 display '\<\d\{1,3}\(\.\d\{1,3}\)\{3}\(\/\d\+\)\?\>' +syn match logIPv6 display '\<\x\{1,4}\(:\x\{1,4}\)\{7}\(\/\d\+\)\?\>' +syn match logUUID display '\<\x\{8}-\x\{4}-\x\{4}-\x\{4}-\x\{12}\>' +syn match logMD5 display '\<\x\{32}\>' +syn match logSHA display '\<\(\x\{40}\|\x\{56}\|\x\{64}\|\x\{96}\|\x\{128}\)\>' + +" Only highlight a path which is at the start of a line, or preceded by a space +" or an equal sign (for env vars, e.g. PATH=/usr/bin) +" POSIX-style path e.g. '/var/log/system.log', './run.sh', '../a/b', '~/c'. +syn match logFilePath display '\(^\|\s\|=\)\zs\(\.\{0,2}\|\~\)\/\f\+\ze' +" Windows drive path e.g. 'C:\Users\Test' +syn match logFilePath display '\(^\|\s\|=\)\zs\a:\\\f\+\ze' +" Windows UNC path e.g. '\\server\share' +syn match logFilePath display '\(^\|\s\|=\)\zs\\\\\f\+\ze' " Java Errors "--------------------------------------------------------------------------- -syn match logJavaError '\%(\%(Error\|Exception\):\s*\)\zs\w.\{-}\ze\(\\n\|$\)' contained - +syn match logJavaError '\%(\%(Error\|Exception\):\s*\)\zs\w.\{-}\ze\(\\n\|$\)' contained " Syslog Columns "--------------------------------------------------------------------------- " Syslog hostname, program and process number columns -syn match logSysColumns '\w\(\w\|\.\|-\)\+ \(\w\|\.\|-\)\+\(\[\d\+\]\)\?:' contains=logOperator,logSysProcess contained -syn match logSysProcess '\(\w\|\.\|-\)\+\(\[\d\+\]\)\?:' contains=logOperator,logNumber,logBrackets contained - +syn match logSysColumns '\w\(\w\|\.\|-\)\+ \(\w\|\.\|-\)\+\(\[\d\+\]\)\?:' contains=logOperator,@logLvs,LogSysProcess contained +syn match logSysProcess '\(\w\|\.\|-\)\+\(\[\d\+\]\)\?:' contains=logOperator,logNumber,logBrackets contained " XML Tags "--------------------------------------------------------------------------- " Simplified matches, not accurate with the spec to avoid false positives -syn match logXmlHeader // contains=logString,logXmlAttribute,logXmlNamespace -syn match logXmlDoctype /]*>/ contains=logString,logXmlAttribute,logXmlNamespace -syn match logXmlTag /<\/\?\(\(\w\|-\)\+:\)\?\(\w\|-\)\+\(\(\n\|\s\)\+\(\(\w\|-\)\+:\)\?\(\w\|-\)\+\(="[^"]*"\|='[^']*'\)\?\)*\s*\/\?>/ contains=logString,logXmlAttribute,logXmlNamespace -syn match logXmlAttribute contained "\w\+=" contains=logOperator -syn match logXmlAttribute contained "\(\n\|\s\)\(\(\w\|-\)\+:\)\?\(\w\|-\)\+\(=\)\?" contains=logXmlNamespace,logOperator -syn match logXmlNamespace contained "\(\w\|-\)\+:" contains=logOperator -syn region logXmlComment start=// -syn match logXmlCData // -syn match logXmlEntity /&#\?\w\+;/ - +syn match logXmlHeader // contains=logString,logXmlAttribute,logXmlNamespace +syn match logXmlDoctype /]*>/ contains=logString,logXmlAttribute,logXmlNamespace +syn match logXmlTag /<\/\?\(\(\w\|-\)\+:\)\?\(\w\|-\)\+\(\(\n\|\s\)\+\(\(\w\|-\)\+:\)\?\(\w\|-\)\+\(="[^"]*"\|='[^']*'\)\?\)*\s*\/\?>/ contains=logString,logXmlAttribute,logXmlNamespace +syn match logXmlAttribute contained "\w\+=" contains=logOperator +syn match logXmlAttribute contained "\(\n\|\s\)\(\(\w\|-\)\+:\)\?\(\w\|-\)\+\(=\)\?" contains=logXmlNamespace,logOperator +syn match logXmlNamespace contained "\(\w\|-\)\+:" contains=logOperator +syn region logXmlComment start=// +syn match logXmlCData // +syn match logXmlEntity /&#\?\w\+;/ " Levels "--------------------------------------------------------------------------- -syn keyword logLevelEmergency EMERGENCY EMERG -syn keyword logLevelAlert ALERT -syn keyword logLevelCritical CRITICAL CRIT FATAL -syn keyword logLevelError ERROR ERR FAILURE SEVERE -syn keyword logLevelWarning WARNING WARN -syn keyword logLevelNotice NOTICE -syn keyword logLevelInfo INFO -syn keyword logLevelDebug DEBUG FINE -syn keyword logLevelTrace TRACE FINER FINEST - +syn keyword logLvFatal FATAL Fatal fatal +syn keyword logLvEmergency EMERG[ENCY] Emerg[ency] emerg[ency] +syn keyword logLvAlert ALERT Alert alert +syn keyword logLvCritical CRIT[ICAL] Crit[ical] crit[ical] +syn keyword logLvError E ERR[ORS] Err[ors] err[ors] +syn keyword logLvFail F FAIL[ED] Fail[ed] fail[ed] FAILURE Failure failure +syn keyword logLvFault FAULT Fault fault +syn keyword logLvNack NACK Nack nack NAK Nak nak +syn keyword logLvWarning W WARN[ING] Warn[ing] warn[ing] +syn keyword logLvBad BAD Bad bad +syn keyword logLvNotice NOTICE Notice notice +syn keyword logLvInfo I INFO Info info +syn keyword logLvDebug D DEBUG Debug debug DBG Dbg dbg +syn keyword logLvTrace TRACE Trace trace +syn keyword logLvVerbose V VERBOSE Verbose verbose +syn keyword logLvPass PASS[ED] Pass[ed] pass[ed] +syn keyword logLvSuccess SUCCEED[ED] Succeed[ed] succeed[ed] SUCCESS Success success + +" Composite log levels e.g. *_INFO +syn match logLvFatal display '\<\u\+_FATAL\>' +syn match logLvEmergency display '\<\u\+_EMERG\(ENCY\)\?\>' +syn match logLvAlert display '\<\u\+_ALERT\>' +syn match logLvCritical display '\<\u\+_CRIT\(ICAL\)\?\>' +syn match logLvError display '\<\u\+_ERR\(OR\)\?\>' +syn match logLvFail display '\<\u\+_FAIL\(URE\)\?\>' +syn match logLvWarning display '\<\u\+_WARN\(ING\)\?\>' +syn match logLvNotice display '\<\u\+_NOTICE\>' +syn match logLvInfo display '\<\u\+_INFO\>' +syn match logLvDebug display '\<\u\+_DEBUG\>' +syn match logLvTrace display '\<\u\+_TRACE\>' + +syn cluster logLvs contains=LogLvFatal,LogLvEmergency,LogLvAlert,LogLvCritical,LogLvError,LogLvFail,LogLvFault,LogLvNack,LogLvWarning,LogLvBad,LogLvNotice,LogLvInfo,LogLvDebug,LogLvTrace,LogLvVerbose,LogLvPass,LogLvSuccess " Highlight links "--------------------------------------------------------------------------- -hi def link logNumber Number -hi def link logHexNumber Number -hi def link logBinaryNumber Number -hi def link logFloatNumber Float -hi def link logBoolean Boolean -hi def link logNull Constant -hi def link logString String - -hi def link logDate Identifier -hi def link logDateDay Identifier -hi def link logTime Function -hi def link logTimeZone Identifier -hi def link logDuration Identifier - -hi def link logUrl Underlined -hi def link logUUID Label -hi def link logMD5 Label -hi def link logIPV4 Label -hi def link logIPV6 ErrorMsg -hi def link logMacAddress Label -hi def link logFilePath Conditional - -hi def link logJavaError ErrorMsg - -hi def link logSysColumns Conditional -hi def link logSysProcess Include - -hi def link logXmlHeader Function -hi def link logXmlDoctype Function -hi def link logXmlTag Identifier +hi def link logNumber Number +hi def link logNumberHex Number +hi def link logNumberBin Number +hi def link logNumberOct Number +hi def link logNumberFloat Float + +hi def link logBoolean Boolean +hi def link logNull Constant +hi def link logString String + +hi def link logDate Type +hi def link logTime Operator +hi def link logTimeZone Operator +hi def link logDuration Operator + +hi def link logUrl Underlined +hi def link logIPV4 Underlined +hi def link logIPV6 Underlined +hi def link logMacAddress Underlined +hi def link logUUID Label +hi def link logMD5 Label +hi def link logSHA Label +hi def link logFilePath Structure + +hi def link logJavaError ErrorMsg + +hi def link logSysColumns Statement +hi def link logSysProcess Function + +hi def link logXmlHeader Function +hi def link logXmlDoctype Function +hi def link logXmlTag Identifier hi def link logXmlAttribute Type hi def link logXmlNamespace Include -hi def link logXmlComment Comment -hi def link logXmlCData String -hi def link logXmlEntity Special - -hi def link logOperator Operator -hi def link logBrackets Comment -hi def link logSeparator Comment - -hi def link logLevelEmergency ErrorMsg -hi def link logLevelAlert ErrorMsg -hi def link logLevelCritical ErrorMsg -hi def link logLevelError ErrorMsg -hi def link logLevelWarning WarningMsg -hi def link logLevelNotice Character -hi def link logLevelInfo Repeat -hi def link logLevelDebug Debug -hi def link logLevelTrace Comment +hi def link logXmlComment Comment +hi def link logXmlCData String +hi def link logXmlEntity Special + +hi def link logOperator Special +hi def link logBrackets Special +hi def link logSeparator Comment + +hi def link LogLvFatal ErrorMsg +hi def link LogLvEmergency ErrorMsg +hi def link LogLvAlert ErrorMsg +hi def link LogLvCritical ErrorMsg +hi def link LogLvError ErrorMsg +hi def link LogLvFail ErrorMsg +hi def link LogLvFault ErrorMsg +hi def link LogLvNack ErrorMsg +hi def link LogLvWarning WarningMsg +hi def link LogLvBad WarningMsg +hi def link LogLvNotice Exception +hi def link LogLvInfo LogBlue +hi def link LogLvDebug Debug +hi def link LogLvTrace Special +hi def link LogLvVerbose Special +hi def link LogLvPass LogGreen +hi def link LogLvSuccess LogGreen + +" Custom highlight group +" ------------------------------ +hi logGreen ctermfg=lightgreen guifg=#a4c672 +hi logBlue ctermfg=lightblue guifg=#92bcfc + let b:current_syntax = 'log' diff --git a/runtime/syntax/logtalk.vim b/runtime/syntax/logtalk.vim index 2c6c82aaa0..366f888b66 100644 --- a/runtime/syntax/logtalk.vim +++ b/runtime/syntax/logtalk.vim @@ -2,7 +2,7 @@ " " Language: Logtalk " Maintainer: Paulo Moura -" Last Change: December 16, 2023 +" Last Change: October 6, 2025 @@ -37,7 +37,7 @@ syn region logtalkAtom start=+'+ skip=+\\'+ end=+'+ contains=logtalkEscapeSequ syn match logtalkEscapeSequence contained "\\\([\\abfnrtv\"\']\|\(x[a-fA-F0-9]\+\|[0-7]\+\)\\\)" -" Logtalk message sending operators +" Logtalk message-sending operators syn match logtalkOperator "::" syn match logtalkOperator "\(0'\)\@" syn match logtalkOperator "->" syn match logtalkKeyword "\" -syn match logtalkKeyword "\<\(uninstantiation\|type\|domain\|existence\|permission\|representation\|evaluation\|resource\|syntax\)_error\ze(" +syn match logtalkKeyword "\<\(uninstantiation\|type\|domain\|consistency\|existence\|permission\|representation\|evaluation\|resource\|syntax\)_error\ze(" " Term unification diff --git a/runtime/syntax/make.vim b/runtime/syntax/make.vim index 338150fa94..8af09954be 100644 --- a/runtime/syntax/make.vim +++ b/runtime/syntax/make.vim @@ -7,6 +7,8 @@ " 2025 Apr 15 by Vim project: rework Make flavor detection (#17089) " 2025 Oct 12 by Vim project: update makeDefine highlighting (#18403) " 2025 Oct 25 by Vim project: update makeTargetinDefine highlighting (#18570) +" 2025 Dec 23 by Vim project: fix too greedy match (#18938) +" 2025 Dec 23 by Vim project: wrong highlight with paranthesis inside quotes (#18818) " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -40,21 +42,21 @@ syn match makeIdent "\$\$\w*" syn match makeIdent "\$\$\$\$\w*" containedin=makeDefine syn match makeIdent "\$[^({]" syn match makeIdent "\$\$[^({]" containedin=makeDefine +if get(b:, 'make_flavor', s:make_flavor) == 'microsoft' + syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent,makeDString,makeSString + syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent,makeDString,makeSString + syn region makeIdent start="\$\$(" end=")" containedin=makeDefine contains=makeStatement,makeIdent,makeDString,makeSString + syn region makeIdent start="\$\${" end="}" containedin=makeDefine contains=makeStatement,makeIdent,makeDString,makeSString +else + syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent,makeDString,makeSString + syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent,makeDString,makeSString + syn region makeIdent start="\$\$(" skip="\\)\|\\\\" end=")" containedin=makeDefine contains=makeStatement,makeIdent,makeDString,makeSString + syn region makeIdent start="\$\${" skip="\\}\|\\\\" end="}" containedin=makeDefine contains=makeStatement,makeIdent,makeDString,makeSString +endif syn match makeIdent "^ *[^:#= \t]*\s*[:+?!*]="me=e-2 syn match makeIdent "^ *[^:#= \t]*\s*::="me=e-3 syn match makeIdent "^ *[^:#= \t]*\s*="me=e-1 syn match makeIdent "%" -if get(b:, 'make_flavor', s:make_flavor) == 'microsoft' - syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent - syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent - syn region makeIdent start="\$\$(" end=")" containedin=makeDefine contains=makeStatement,makeIdent - syn region makeIdent start="\$\${" end="}" containedin=makeDefine contains=makeStatement,makeIdent -else - syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent - syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent - syn region makeIdent start="\$\$(" skip="\\)\|\\\\" end=")" containedin=makeDefine contains=makeStatement,makeIdent - syn region makeIdent start="\$\${" skip="\\}\|\\\\" end="}" containedin=makeDefine contains=makeStatement,makeIdent -endif " Makefile.in variables syn match makeConfig "@[A-Za-z0-9_]\+@" diff --git a/runtime/syntax/mason.vim b/runtime/syntax/mason.vim index e1638ece75..cfc0278011 100644 --- a/runtime/syntax/mason.vim +++ b/runtime/syntax/mason.vim @@ -1,6 +1,6 @@ " Vim syntax file " Language: Mason (Perl embedded in HTML) -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues " License: Vim License (see :help license) diff --git a/runtime/syntax/odin.vim b/runtime/syntax/odin.vim index 7f6b0ba654..41d6ca1c47 100644 --- a/runtime/syntax/odin.vim +++ b/runtime/syntax/odin.vim @@ -4,7 +4,7 @@ vim9script # Language: Odin # Maintainer: Maxim Kim # Website: https://github.com/habamax/vim-odin -# Last Change: 2025-03-28 +# Last Change: 2025-12-06 if exists("b:current_syntax") finish @@ -53,12 +53,12 @@ syntax region odinAttribute \ start="@\ze(" end="\ze)" \ transparent oneline -syntax match odinInteger "\-\?\<\d\+\>" display -syntax match odinFloat "\-\?\<[0-9][0-9_]*\%(\.[0-9][0-9_]*\)\%([eE][+-]\=[0-9_]\+\)\=" display -syntax match odinHex "\<0[xX][0-9A-Fa-f]\+\>" display -syntax match odinDoz "\<0[zZ][0-9a-bA-B]\+\>" display -syntax match odinOct "\<0[oO][0-7]\+\>" display -syntax match odinBin "\<0[bB][01]\+\>" display +syntax match odinInteger "\v-?<[0-9]+%(_[0-9]+)*>" display +syntax match odinFloat "\v-?<[0-9]+%(_[0-9]+)*%(\.[0-9]+%(_[0-9]+)*)%([eE][+-]=[0-9]+%(_[0-9]+)*)=" display +syntax match odinHex "\v<0[xX][0-9A-Fa-f]+%(_[0-9A-Fa-f]+)*>" display +syntax match odinDoz "\v<0[zZ][0-9A-Ba-b]+%(_[0-9A-Ba-b]+)*>" display +syntax match odinOct "\v<0[oO][0-7]+%(_[0-7]+)*>" display +syntax match odinBin "\v<0[bB][01]+%(_[01]+)*>" display syntax match odinAddressOf "&" display syntax match odinDeref "\^" display diff --git a/runtime/syntax/perl.vim b/runtime/syntax/perl.vim index 73f967a183..c5dced9b39 100644 --- a/runtime/syntax/perl.vim +++ b/runtime/syntax/perl.vim @@ -1,6 +1,6 @@ " Vim syntax file " Language: Perl -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues " License: Vim License (see :help license) diff --git a/runtime/syntax/pod.vim b/runtime/syntax/pod.vim index 90c9b99a3e..16189611ff 100644 --- a/runtime/syntax/pod.vim +++ b/runtime/syntax/pod.vim @@ -1,6 +1,6 @@ " Vim syntax file " Language: Perl POD format -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Previously: Scott Bigham " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues diff --git a/runtime/syntax/privoxy.vim b/runtime/syntax/privoxy.vim index 9e6ff1df9f..b83ba4667b 100644 --- a/runtime/syntax/privoxy.vim +++ b/runtime/syntax/privoxy.vim @@ -1,10 +1,9 @@ " Vim syntax file " Language: Privoxy actions file " Maintainer: Doug Kearns -" URL: http://gus.gscit.monash.edu.au/~djkea2/vim/syntax/privoxy.vim -" Last Change: 2007 Mar 30 +" Last Change: 2026 Jan 07 -" Privoxy 3.0.6 +" Privoxy 4.1.0 if exists("b:current_syntax") finish @@ -13,59 +12,172 @@ endif let s:cpo_save = &cpo set cpo&vim -setlocal iskeyword=@,48-57,_,- - -syn keyword privoxyTodo contained TODO FIXME XXX NOTE +syn region privoxyActionsBlock matchgroup=privoxyBraces start="^\s*\zs{" end="}" + \ contains=@privoxyActionPrefix,privoxyLineContinuation + +" Actions {{{ +let s:actions =<< trim END + add-header + block + change-x-forwarded-for + client-header-filter + client-body-filter + client-body-tagger + client-header-tagger + content-type-overwrite + crunch-client-header + crunch-if-none-match + crunch-incoming-cookies + crunch-outgoing-cookies + crunch-server-header + deanimate-gifs + delay-response + downgrade-http-version + external-filter + fast-redirects + filter + filter-client-headers + filter-server-headers + force-text-mode + forward-override + handle-as-empty-document + handle-as-image + hide-accept-language + hide-content-disposition + hide-forwarded-for-headers + hide-from-header + hide-if-modified-since + hide-referrer + hide-referer + hide-user-agent + https-inspection + ignore-certificate-errors + limit-connect + limit-cookie-lifetime + prevent-compression + prevent-keeping-cookies + overwrite-last-modified + redirect + server-header-filter + server-header-tagger + suppress-tag + session-cookies-only + set-image-blocker +END + +for s:action in s:actions + exe 'syn match privoxyAction "\<' .. s:action .. '\>" contained nextgroup=privoxyParams' +endfor +unlet s:action s:actions + +syn region privoxyParams matchgroup=privoxyParamBraces start="{" end="}" contained + +syn match privoxyFilterAction "\-\@!" contained nextgroup=privoxyFilterParams +syn region privoxyFilterParams matchgroup=privoxyParamBraces start="{" end="}" contained contains=privoxyFilterArg + +syn cluster privoxyAction contains=privoxyAction,privoxyFilterAction +" }}} + +" Filters {{{ +let s:filters =<< trim END + allow-autocompletion + all-popups + banners-by-link + banners-by-size + blogspot + bundeswehr + content-cookies + crude-parental + demoronizer + frameset-borders + fun + github + google + html-annoyances + ie-exploits + iframes + imdb + img-reorder + js-annoyances + js-events + jumping-windows + msn + no-ping + quicktime-kioskmode + refresh-tags + shockwave-flash + site-specifics + sourceforge + tiny-textforms + unsolicited-popups + webbugs + yahoo + x-httpd-php-to-html + html-to-xml + xml-to-html + less-download-windows + privoxy-control + hide-tor-exit-notation + no-brotli-accepted + privoxy-control + remove-first-byte + remove-test + overwrite-test-value +END + +for s:filter in s:filters + exe 'syn match privoxyFilterArg "\<' .. s:filter .. '\>" contained"' +endfor +unlet s:filter s:filters +" }}} + +syn match privoxyEnablePrefix "\%(^\|\s\|{\)\@1<=+\l\@=" nextgroup=privoxy.*Action contained +syn match privoxyDisablePrefix "\%(^\|\s\|{\)\@1<=-\l\@=" nextgroup=privoxy.*Action contained +syn cluster privoxyActionPrefix contains=privoxyDisablePrefix,privoxyEnablePrefix + +syn match privoxySettingsHeader "^\s*\zs{{settings\}}" contains=privoxyBraces nextgroup=privoxySettingsSection skipnl skipwhite +syn match privoxyDescriptionHeader "^\s*\zs{{description\}}" contains=privoxyBraces nextgroup=privoxyDescriptionSection skipnl +syn match privoxyAliasHeader "^\s*\zs{{alias\}}" contains=privoxyBraces nextgroup=privoxyAliasSection skipnl + +syn region privoxySettingsSection start="." end="^\s*\ze{" contained contains=privoxyComment,privoxySettingName +syn region privoxyDescriptionSection start="." end="^\s*\ze{" contained +syn region privoxyAliasSection start="." end="^\s*\ze{" contained contains=privoxyComment,privoxyAliasName + +syn match privoxySettingName "\<[a-z][a-z-]*" contained nextgroup=privoxySettingEqual +syn match privoxySettingEqual "=" contained nextgroup=privoxySettingValue +syn match privoxySettingValue ".*" contained + +syn match privoxyAliasName "[+-]\<[a-z][a-z-]*" contained nextgroup=privoxyAliasEqual skipwhite +syn match privoxyAliasEqual "=" contained nextgroup=privoxyAliasValue skipwhite +syn region privoxyAliasValue start="\S" skip="\\$" end="$" contained contains=@privoxyAction,@privoxyActionPrefix,privoxyLineContinuation + +syn match privoxyBraces "[{}]" contained +syn match privoxyLineContinuation "\\$" contained + +syn keyword privoxyTodo TODO FIXME XXX NOTE contained syn match privoxyComment "#.*" contains=privoxyTodo,@Spell -syn region privoxyActionLine matchgroup=privoxyActionLineDelimiter start="^\s*\zs{" end="}\ze\s*$" - \ contains=privoxyEnabledPrefix,privoxyDisabledPrefix - -syn match privoxyEnabledPrefix "\%(^\|\s\|{\)\@<=+\l\@=" nextgroup=privoxyAction,privoxyFilterAction contained -syn match privoxyDisabledPrefix "\%(^\|\s\|{\)\@<=-\l\@=" nextgroup=privoxyAction,privoxyFilterAction contained - -syn match privoxyAction "\%(add-header\|block\|content-type-overwrite\|crunch-client-header\|crunch-if-none-match\)\>" contained -syn match privoxyAction "\%(crunch-incoming-cookies\|crunch-outgoing-cookies\|crunch-server-header\|deanimate-gifs\)\>" contained -syn match privoxyAction "\%(downgrade-http-version\|fast-redirects\|filter-client-headers\|filter-server-headers\)\>" contained -syn match privoxyAction "\%(filter\|force-text-mode\|handle-as-empty-document\|handle-as-image\)\>" contained -syn match privoxyAction "\%(hide-accept-language\|hide-content-disposition\|hide-forwarded-for-headers\)\>" contained -syn match privoxyAction "\%(hide-from-header\|hide-if-modified-since\|hide-referrer\|hide-user-agent\|inspect-jpegs\)\>" contained -syn match privoxyAction "\%(kill-popups\|limit-connect\|overwrite-last-modified\|prevent-compression\|redirect\)\>" contained -syn match privoxyAction "\%(send-vanilla-wafer\|send-wafer\|session-cookies-only\|set-image-blocker\)\>" contained -syn match privoxyAction "\%(treat-forbidden-connects-like-blocks\)\>" - -syn match privoxyFilterAction "filter{[^}]*}" contained contains=privoxyFilterArg,privoxyActionBraces -syn match privoxyActionBraces "[{}]" contained -syn keyword privoxyFilterArg js-annoyances js-events html-annoyances content-cookies refresh-tags unsolicited-popups all-popups - \ img-reorder banners-by-size banners-by-link webbugs tiny-textforms jumping-windows frameset-borders demoronizer - \ shockwave-flash quicktime-kioskmode fun crude-parental ie-exploits site-specifics no-ping google yahoo msn blogspot - \ x-httpd-php-to-html html-to-xml xml-to-html hide-tor-exit-notation contained - -" Alternative spellings -syn match privoxyAction "\%(kill-popup\|hide-referer\|prevent-keeping-cookies\)\>" contained - -" Pre-3.0 compatibility -syn match privoxyAction "\%(no-cookie-read\|no-cookie-set\|prevent-reading-cookies\|prevent-setting-cookies\)\>" contained -syn match privoxyAction "\%(downgrade\|hide-forwarded\|hide-from\|image\|image-blocker\|no-compression\)\>" contained -syn match privoxyAction "\%(no-cookies-keep\|no-cookies-read\|no-cookies-set\|no-popups\|vanilla-wafer\|wafer\)\>" contained - -syn match privoxySetting "\" - -syn match privoxyHeader "^\s*\zs{{\%(alias\|settings\)}}\ze\s*$" - hi def link privoxyAction Identifier -hi def link privoxyFilterAction Identifier -hi def link privoxyActionLineDelimiter Delimiter -hi def link privoxyDisabledPrefix SpecialChar -hi def link privoxyEnabledPrefix SpecialChar -hi def link privoxyHeader PreProc -hi def link privoxySetting Identifier -hi def link privoxyFilterArg Constant - +hi def link privoxyAliasEqual Operator +hi def link privoxyAliasHeader Title +hi def link privoxyBraces Delimiter hi def link privoxyComment Comment +hi def link privoxyDescriptionHeader Title +hi def link privoxyDisablePrefix Added +hi def link privoxyEnablePrefix Removed +hi def link privoxyFilterAction privoxyAction +hi def link privoxyFilterArg Constant +hi def link privoxyLineContinuation Special +hi def link privoxyParamBraces privoxyBraces +hi def link privoxySettingEqual Operator +hi def link privoxySettingName Keyword +hi def link privoxySettingsHeader Title +hi def link privoxySettingValue Constant hi def link privoxyTodo Todo let b:current_syntax = "privoxy" let &cpo = s:cpo_save unlet s:cpo_save + +" vim: ts=8 fdm=marker diff --git a/runtime/syntax/python.vim b/runtime/syntax/python.vim index 05c965ec64..301fb84802 100644 --- a/runtime/syntax/python.vim +++ b/runtime/syntax/python.vim @@ -3,6 +3,7 @@ " Maintainer: Zvezdan Petkovic " Last Change: 2025 Sep 08 " 2025 Sep 25 by Vim Project: fix wrong type highlighting #18394 +" 2025 Dec 03 by Vim Project: highlight t-strings #18679 " Credits: Neil Schemenauer " Dmitry Vasiliev " Rob B @@ -168,27 +169,29 @@ syn region pythonRawString matchgroup=pythonTripleQuotes " Formatted string literals (f-strings) " https://docs.python.org/3/reference/lexical_analysis.html#f-strings +" Template string literals (t-strings) +" https://docs.python.org/3/reference/lexical_analysis.html#template-string-literals syn region pythonFString \ matchgroup=pythonQuotes - \ start=+\cF\z(['"]\)+ + \ start=+\c[FT]\z(['"]\)+ \ end="\z1" \ skip="\\\\\|\\\z1" \ contains=pythonFStringField,pythonFStringSkip,pythonEscape,pythonUnicodeEscape,@Spell syn region pythonFString \ matchgroup=pythonTripleQuotes - \ start=+\cF\z('''\|"""\)+ + \ start=+\c[FT]\z('''\|"""\)+ \ end="\z1" \ keepend \ contains=pythonFStringField,pythonFStringSkip,pythonEscape,pythonUnicodeEscape,pythonSpaceError,pythonDoctest,@Spell syn region pythonRawFString \ matchgroup=pythonQuotes - \ start=+\c\%(FR\|RF\)\z(['"]\)+ + \ start=+\c\%([FT]R\|R[FT]\)\z(['"]\)+ \ end="\z1" \ skip="\\\\\|\\\z1" \ contains=pythonFStringField,pythonFStringSkip,@Spell syn region pythonRawFString \ matchgroup=pythonTripleQuotes - \ start=+\c\%(FR\|RF\)\z('''\|"""\)+ + \ start=+\c\%([FT]R\|R[FT]\)\z('''\|"""\)+ \ end="\z1" \ keepend \ contains=pythonFStringField,pythonFStringSkip,pythonSpaceError,pythonDoctest,@Spell diff --git a/runtime/syntax/racket.vim b/runtime/syntax/racket.vim index e9b70a1b0c..1405e4b2d6 100644 --- a/runtime/syntax/racket.vim +++ b/runtime/syntax/racket.vim @@ -4,7 +4,7 @@ " Previous Maintainer: Will Langstroth " URL: https://github.com/benknoble/vim-racket " Description: Contains all of the keywords in #lang racket -" Last Change: 2025 Aug 09 +" Last Change: 2026 Jan 07 " Initializing: if exists("b:current_syntax") @@ -605,13 +605,21 @@ syntax match racketUnquote ",@" " Comments syntax match racketSharpBang "\%^#![ /].*" display syntax match racketComment /;.*$/ contains=racketTodo,racketNote,@Spell -syntax region racketMultilineComment start=/#|/ end=/|#/ contains=racketMultilineComment,racketTodo,racketNote,@Spell syntax match racketFormComment "#;" nextgroup=@racketTop +syntax cluster racketTop add=racketFormComment + +if exists("racket_no_comment_fold") + syntax region racketBlockComment start=/#|/ end=/|#/ contains=racketBlockComment,racketTodo,racketNote,@Spell +else + syntax region racketBlockComment start=/#|/ end=/|#/ contains=racketBlockComment,racketTodo,racketNote,@Spell fold + syntax region racketMultilineComment start="^\s*;" end="^\%(\s*;\)\@!" contains=racketComment transparent keepend fold +endif syntax match racketTodo /\C\<\(FIXME\|TODO\|XXX\)\ze:\?\>/ contained syntax match racketNote /\CNOTE\ze:\?/ contained -syntax cluster racketTop add=racketQuote,racketUnquote,racketComment,racketMultilineComment,racketFormComment +syntax cluster racketComments contains=racketComment,racketBlockComment,racketMultilineComment +syntax cluster racketTop add=racketQuote,racketUnquote,@racketComments " Synchronization and the wrapping up... syntax sync match matchPlace grouphere NONE "^[^ \t]" @@ -644,7 +652,7 @@ highlight default link racketLit Type highlight default link racketRe Type highlight default link racketComment Comment -highlight default link racketMultilineComment Comment +highlight default link racketBlockComment Comment highlight default link racketFormComment SpecialChar highlight default link racketSharpBang Comment highlight default link racketTodo Todo diff --git a/runtime/syntax/raku.vim b/runtime/syntax/raku.vim index 1bf9b4994c..c77dfb3a44 100644 --- a/runtime/syntax/raku.vim +++ b/runtime/syntax/raku.vim @@ -1,6 +1,6 @@ " Vim syntax file " Language: Raku -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Homepage: https://github.com/Raku/vim-raku " Bugs/requests: https://github.com/Raku/vim-raku/issues " Last Change: 2021-04-16 diff --git a/runtime/syntax/sml.vim b/runtime/syntax/sml.vim index 8f1af3f9bd..5d80ebe475 100644 --- a/runtime/syntax/sml.vim +++ b/runtime/syntax/sml.vim @@ -2,9 +2,10 @@ " Language: SML " Filenames: *.sml *.sig " Maintainer: Markus Mottl -" Previous Maintainer: Fabrizio Zeno Cornelli -" (invalid) -" Last Change: 2022 Apr 01 +" Previous Maintainer: Fabrizio Zeno Cornelli (invalid) +" Last Change: 2025 Nov 11 - Improve special constant matching (Doug Kearns) +" 2025 Nov 07 - Update Number Regex +" 2022 Apr 01 " 2015 Aug 31 - Fixed opening of modules (Ramana Kumar) " 2006 Oct 23 - Fixed character highlighting bug (MM) @@ -137,9 +138,25 @@ syn match smlConstructor "\u\(\w\|'\)*\>" " Module prefix syn match smlModPath "\u\(\w\|'\)*\."he=e-1 -syn match smlCharacter +#"\\""\|#"."\|#"\\\d\d\d"+ -syn match smlCharErr +#"\\\d\d"\|#"\\\d"+ -syn region smlString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell +" Strings and Characters +syn match smlEscapeErr "\\." contained +syn match smlEscape "\\[abtnvfr"\\]" contained +syn match smlEscapeErr "\\^." contained +syn match smlEscape "\\^[@A-Z[\\\]^_]" contained +syn match smlEscapeErr "\\\d\{1,2}" contained +syn match smlEscape "\\\d\{3}" contained +syn match smlEscapeErr "\\u\x\{0,3}" contained +syn match smlEscape "\\u\x\{4}" contained +syn match smlEscape "\\\_[[:space:]]\+\\" contained +syn cluster smlEscape contains=smlEscape,smlEscapeErr + +syn region smlString start=+"+ end=+"+ contains=@smlEscape,@Spell + +syn match smlCharacter +#"[^\\"]"+ +syn match smlCharacter +#"\\."+ contains=@smlEscape +syn match smlCharacter +#"\\^."+ contains=@smlEscape +syn match smlCharacter +#"\\\d\{3}"+ contains=@smlEscape +syn match smlCharacter +#"\\u\x\{4}"+ contains=@smlEscape syn match smlFunDef "=>" syn match smlRefAssign ":=" @@ -152,9 +169,12 @@ syn match smlKeyChar ";" syn match smlKeyChar "\*" syn match smlKeyChar "=" -syn match smlNumber "\<-\=\d\+\>" -syn match smlNumber "\<-\=0[x|X]\x\+\>" -syn match smlReal "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>" +syn match smlNumber "\~\=\<\d\+\>" +syn match smlNumber "\~\=\<0x\x\+\>" +syn match smlWord "\<0w\d\+\>" +syn match smlWord "\<0wx\x\+\>" +syn match smlReal "\~\=\<\d\+\.\d\+\>" +syn match smlReal "\~\=\<\d\+\%(\.\d\+\)\=[eE]\~\=\d\+\>" " Synchronization syn sync minlines=20 @@ -179,7 +199,7 @@ hi def link smlCommentErr Error hi def link smlEndErr Error hi def link smlThenErr Error -hi def link smlCharErr Error +hi def link smlEscapeErr Error hi def link smlComment Comment @@ -208,8 +228,10 @@ hi def link smlOperator Keyword hi def link smlBoolean Boolean hi def link smlCharacter Character hi def link smlNumber Number +hi def link smlWord Number hi def link smlReal Float hi def link smlString String +hi def link smlEscape Special hi def link smlType Type hi def link smlTodo Todo hi def link smlEncl Keyword diff --git a/runtime/syntax/spec.vim b/runtime/syntax/spec.vim index 944bdcaa37..bbd6d395ba 100644 --- a/runtime/syntax/spec.vim +++ b/runtime/syntax/spec.vim @@ -6,6 +6,7 @@ " Last Change: 2020 May 25 " 2024 Sep 10 by Vim Project: add file triggers support, #15569 " 2025 May 05 by Vim Project: update for rpm 4.2 #17258 +" 2025 Nov 09 by Vim Project: support for more distributions and tags #18703 " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -22,7 +23,7 @@ syn match specVariables contained '\$\h\w*' contains=specSpecialVariablesNames syn match specVariables contained '\${\w*}' contains=specSpecialVariablesNames,specSpecialChar syn match specMacroIdentifier contained '%\h\w*' contains=specMacroNameLocal,specMacroNameOther,specPercent -syn match specMacroIdentifier contained '%{\w*}' contains=specMacroNameLocal,specMacroNameOther,specPercent,specSpecialChar +syn match specMacroIdentifier contained '%{?\?\w*}' contains=specMacroNameLocal,specMacroNameOther,specPercent,specSpecialChar syn match specSpecialVariables contained '\$[0-9]\|\${[0-9]}' syn match specCommandOpts contained '\s\(-\w\+\|--\w[a-zA-Z_-]\+\)'ms=s+1 @@ -60,17 +61,17 @@ syn cluster specListedFiles contains=specListedFilesBin,specListedFilesLib,specL "specCommands syn match specConfigure contained '\./configure' -syn match specTarCommand contained '\' +syn keyword specMacroNameOther contained buildroot buildsubdir distribution disturl ix86 name nil optflags perl_sitearch release requires_eq vendor version dist fedora rhel rocky rhl centos +syn match specMacroNameOther contained '\<\(PATCH\|SOURCE\|el\|fc\)\d*\>' "valid _macro names from /usr/lib/rpm/macros syn keyword specMacroNameLocal contained _arch _binary_payload _bindir _build _build_alias _build_cpu _build_os _build_vendor _builddir _buildshell _buildsubdir _bzip2bin _datadir _dbpath _dbpath_rebuild _defaultdocdir _defaultlicensedir _docdir _excludedocs _exec_prefix _fixgroup _fixowner _fixperms _ftpport _ftpproxy _gpg_path _group_path _gzipbin _host _host_alias _host_cpu _host_os _host_vendor _httpport _httpproxy _iconsdir _includedir _infodir _install_langs _install_script_path _instchangelog _keyring _keyringpath _langpatt _lib _libdir _libexecdir _localstatedir _mandir _netsharedpath _oldincludedir _os _passwd_path _pgp_path _pgpbin _preScriptEnvironment _prefix _provides _rpmconfigdir _rpmdir _rpmfilename _rpmformat _rpmluadir _rpmmacrodir _sbindir _sharedstatedir _signature _source_payload _sourcedir _specdir _srcrpmdir _sysconfdir _sysusersdir _target _target_alias _target_cpu _target_os _target_platform _target_vendor _timecheck _tmppath _topdir _unitdir _usr _usrsrc _var _vendor @@ -104,7 +105,7 @@ syn case ignore "%% PreAmble Section %% "Copyright and Serial were deprecated by License and Epoch syn region specPreAmbleDeprecated oneline matchgroup=specError start='^\(Copyright\|Serial\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier -syn region specPreAmble oneline matchgroup=specCommand start='^\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Recommends\|Suggests\|Supplements\|Enhances\|Icon\|URL\|SourceLicense\|Source\d*\|Patch\d*\|Prefix\|Packager\|Group\|License\|Release\|BuildRoot\|Distribution\|Vendor\|Provides\|ExclusiveArch\|ExcludeArch\|ExclusiveOS\|Obsoletes\|BuildArch\|BuildArchitectures\|BuildRequires\|BuildConflicts\|BuildPreReq\|Conflicts\|AutoRequires\|AutoReq\|AutoReqProv\|AutoProv\|Epoch\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier +syn region specPreAmble oneline matchgroup=specCommand start='^\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Recommends\|Suggests\|Supplements\|Enhances\|Icon\|URL\|SourceLicense\|Source\d*\|Patch\d*\|Prefix\|Packager\|Group\|License\|Release\|BuildRoot\|Distribution\|DistTag\|Vendor\|Provides\|ExclusiveArch\|ExcludeArch\|ExclusiveOS\|Obsoletes\|BuildArch\|BuildArchitectures\|BuildRequires\|BuildConflicts\|BuildPreReq\|Conflicts\|AutoRequires\|AutoReq\|AutoReqProv\|AutoProv\|Epoch\|ModularityLabel\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier "%% Description Section %% syn region specDescriptionArea matchgroup=specSection start='^%description' end='^%'me=e-1 contains=specDescriptionOpts,specEmail,specURL,specNumber,specMacroIdentifier,specComment diff --git a/runtime/syntax/sqloracle.vim b/runtime/syntax/sqloracle.vim index 0907b48f0e..d523a4528a 100644 --- a/runtime/syntax/sqloracle.vim +++ b/runtime/syntax/sqloracle.vim @@ -4,7 +4,7 @@ " Repository: https://github.com/chrisbra/vim-sqloracle-syntax " License: Vim " Previous Maintainer: Paul Moore -" Last Change: 2018 June 24 +" Last Change: 2022 February 10 " Changes: " 02.04.2016: Support for when keyword @@ -12,6 +12,7 @@ " 22.07.2016: Support Oracle Q-Quote-Syntax " 25.07.2016: Support for Oracle N'-Quote syntax " 22.06.2018: Remove skip part for sqlString (do not escape strings) +" 10.02.2022: Add some more Oracle SQLKeywords https://github.com/vim/vim/issues/9737 " (https://web.archive.org/web/20150922065035/https://mariadb.com/kb/en/sql-99/character-string-literals/) if exists("b:current_syntax") @@ -33,7 +34,7 @@ syn keyword sqlKeyword maxextents maxtrans mode modify monitoring syn keyword sqlKeyword nocache nocompress nologging noparallel nowait of offline on online start syn keyword sqlKeyword parallel successful synonym table tablespace then to trigger uid syn keyword sqlKeyword unique user validate values view when whenever -syn keyword sqlKeyword where with option order pctfree pctused privileges procedure +syn keyword sqlKeyword where with within option order pctfree pctused privileges procedure syn keyword sqlKeyword public resource return row rowlabel rownum rows syn keyword sqlKeyword session share size smallint type using syn keyword sqlKeyword join cross inner outer left right @@ -86,7 +87,7 @@ syn sync ccomment sqlComment " (Oracle 11g) " Aggregate Functions syn keyword sqlFunction avg collect corr corr_s corr_k count covar_pop covar_samp cume_dist dense_rank first -syn keyword sqlFunction group_id grouping grouping_id last max median min percentile_cont percentile_disc percent_rank rank +syn keyword sqlFunction group_id grouping grouping_id last listagg max median min percentile_cont percentile_disc percent_rank rank syn keyword sqlFunction regr_slope regr_intercept regr_count regr_r2 regr_avgx regr_avgy regr_sxx regr_syy regr_sxy syn keyword sqlFunction stats_binomial_test stats_crosstab stats_f_test stats_ks_test stats_mode stats_mw_test syn keyword sqlFunction stats_one_way_anova stats_t_test_one stats_t_test_paired stats_t_test_indep stats_t_test_indepu @@ -95,7 +96,7 @@ syn keyword sqlFunction sys_xmlagg var_pop var_samp variance xmlagg " Char Functions syn keyword sqlFunction ascii chr concat initcap instr length lower lpad ltrim syn keyword sqlFunction nls_initcap nls_lower nlssort nls_upper regexp_instr regexp_replace -syn keyword sqlFunction regexp_substr replace rpad rtrim soundex substr translate treat trim upper +syn keyword sqlFunction regexp_substr replace rpad rtrim soundex substr translate treat trim upper wm_concat " Comparison Functions syn keyword sqlFunction greatest least " Conversion Functions diff --git a/runtime/syntax/swayconfig.vim b/runtime/syntax/swayconfig.vim index 6da4c6e51a..5dd9760f56 100644 --- a/runtime/syntax/swayconfig.vim +++ b/runtime/syntax/swayconfig.vim @@ -1,10 +1,9 @@ " Vim syntax file " Language: sway config file -" Original Author: Josef Litos (JosefLitos/i3config.vim) +" Original Author: Josef Litos (litoj/i3config.vim) " Maintainer: James Eapen -" Version: 1.2.4 -" Last Change: 2024 Oct 17 -" 2025 Sep 23 by Vim Project update swayconfig syntax #18293 +" Version: 1.2.7 +" Last Change: 2025-12-02 " References: " http://i3wm.org/docs/userguide.html#configuring @@ -22,6 +21,9 @@ syn cluster i3ConfigCommand contains=i3ConfigCommand,i3ConfigAction,i3ConfigActi runtime! syntax/i3config.vim +" In sway, popup_during_fullscreen does not have options like all option. +syn cluster i3ConfigPopupFullscreenOpts remove=i3ConfigPopupFullscreenOptsExtra + " Sway extensions to i3 syn keyword i3ConfigActionKeyword opacity urgent shortcuts_inhibitor splitv splith splitt contained contained skipwhite nextgroup=i3ConfigOption syn keyword i3ConfigOption set plus minus allow deny csd v h t contained contained skipwhite nextgroup=i3ConfigOption,@i3ConfigValue @@ -37,6 +39,7 @@ syn region i3ConfigBindCombo matchgroup=i3ConfigParen start=/{$/ end=/^\s*}$/ co " hack for blocks with start outside parsing range syn region swayConfigBlockOrphan start=/^\s\+\(--[a-z-]\+ \)*\([$A-Z][$0-9A-Za-z_+]\+\|[a-z]\) [a-z[]/ skip=/\\$\|$\n^\s*}$/ end=/$/ contains=i3ConfigBindArgument,i3ConfigBindCombo,i3ConfigParen keepend extend +" Note: braces highlighted by @i3ConfigSh already syn region i3ConfigExec start=/ {$/ end=/^\s*}$/ contained contains=i3ConfigExecAction,@i3ConfigSh,i3ConfigComment fold keepend extend syn keyword swayConfigFloatingModifierOpts normal inverse none contained @@ -45,6 +48,10 @@ syn match i3ConfigKeyword /floating_modifier \(none\|[$A-Z][0-9A-Za-z]\+ \(norma syn match swayConfigI3Param /--i3/ contains=i3ConfigShParam skipwhite nextgroup=i3ConfigEdgeOpts syn keyword i3ConfigKeyword hide_edge_borders contained skipwhite nextgroup=swayConfigI3Param,i3ConfigEdgeOpts +" accept bar ids in the form: bar { ... } +syn match swayConfigBarIdent /[^{ ,;]\+/ contained contains=@i3ConfigStrVar skipwhite nextgroup=i3ConfigBarBlock +syn keyword i3ConfigKeyword bar contained skipwhite nextgroup=swayConfigBarIdent,i3ConfigBarBlock + syn keyword i3ConfigBarOpts swaybar_command contained skipwhite nextgroup=@i3ConfigSh syn region i3ConfigBarOpts matchgroup=i3ConfigBarOpts start=/gaps/ end=/$/ contained contains=@i3ConfigNumVar syn keyword i3ConfigBarOpts height pango_markup status_edge_padding status_padding wrap_scroll tray_bindcode tray_bindsym icon_theme contained skipwhite nextgroup=i3ConfigBarOptVals,@i3ConfigValue,i3ConfigShOper @@ -62,8 +69,7 @@ syn keyword swayConfigInhibitOpts focus fullscreen open none visible contained syn keyword i3ConfigActionKeyword inhibit_idle contained skipwhite nextgroup=swayConfigInhibitOpts " Primary selection -" Allow tearing -syn keyword i3ConfigKeyword primary_selection allow_tearing contained skipwhite nextgroup=i3ConfigBoolean +syn keyword i3ConfigKeyword primary_selection contained skipwhite nextgroup=i3ConfigBoolean " Swaybg command " Swaynag command @@ -109,43 +115,46 @@ syn match swayConfigInputAngle /\(3[0-5][0-9]\|[1-2]\?[0-9]\{1,2\}\)\(\.[0-9]\+\ syn keyword swayConfigInputOpts rotation_angle contained skipwhite nextgroup=swayConfigInputAngle syn region swayConfigInput start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigInputOpts,@i3ConfigValue keepend -syn region swayConfigInput matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigInputOpts,@i3ConfigValue,i3ConfigComment keepend extend -syn keyword swayConfigInputType touchpad pointer keyboard touch tablet_tool tablet_pad switch contained nextgroup=swayConfigInput -syn match swayConfigInputIdent /type:!\?/ contained contains=swayConfigDeviceOper nextgroup=swayConfigInputType -syn match swayConfigInputIdent /[^t '"]\S*/ contained contains=i3ConfigOutputIdent nextgroup=swayConfigInput -syn region swayConfigInputIdent start=/['"]/ end=/\ze/ contained contains=i3ConfigOutputIdent nextgroup=swayConfigInput -syn keyword i3ConfigKeyword input contained skipwhite nextgroup=swayConfigInputIdent +syn region swayConfigInput matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigInputOpts,@i3ConfigValue,i3ConfigComment keepend +syn keyword swayConfigInputType touchpad pointer keyboard touch tablet_tool tablet_pad switch contained skipwhite nextgroup=swayConfigInput +syn match swayConfigInputTypeIdent /type:!\?/ contained contains=swayConfigDeviceOper skipwhite nextgroup=swayConfigInputType +syn match swayConfigInputIdent /[^t ,;][^ ,;]*/ contained contains=@i3ConfigStrVar skipwhite nextgroup=swayConfigInput extend +syn keyword i3ConfigKeyword input contained skipwhite nextgroup=swayConfigInputTypeIdent,swayConfigInputIdent " Seat syn keyword swayConfigSeatOpts cursor fallback hide_cursor keyboard_grouping shortcuts_inhibitor pointer_constraint xcursor_theme contained skipwhite nextgroup=swayConfigSeatOptVals,@i3ConfigValue -syn match swayConfigInputTypeSeq / \w\+/ contained contains=swayConfigInputType nextgroup=swayConfigInputTypeSeq,swayConfigSeatOpts +syn match swayConfigInputTypeSeq / \w\+/ contained contains=swayConfigInputType skipwhite nextgroup=swayConfigInputTypeSeq,swayConfigSeatOpts syn keyword swayConfigSeatOpts idle_inhibit idle_wake contained nextgroup=swayConfigInputTypeSeq syn keyword swayConfigSeatOpts attach contained skipwhite nextgroup=swayConfigSeatIdent syn match swayConfigSeatOptVals /when-typing/ contained skipwhite nextgroup=swayConfigSeatOptVals syn keyword swayConfigSeatOptVals move set press release none smart activate deactivate toggle escape enable disable contained skipwhite nextgroup=swayConfigSeatOpts syn region swayConfigSeat start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigSeatOpts,@i3ConfigValue keepend -syn region swayConfigSeat matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigSeatOpts,@i3ConfigValue,i3ConfigComment keepend extend -syn match swayConfigSeatIdent /[^ ]\+/ contained contains=i3ConfigOutputIdent skipwhite nextgroup=swayConfigSeat +syn region swayConfigSeat matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigSeatOpts,@i3ConfigValue,i3ConfigComment keepend +syn match swayConfigSeatIdent /[^ ,;]\+/ contained contains=@i3ConfigStrVar nextgroup=swayConfigSeat extend syn keyword i3ConfigKeyword seat contained skipwhite nextgroup=swayConfigSeatIdent " Output monitors -syn keyword swayConfigOutputOpts mode resolution res modeline position pos scale scale_filter subpixel transform disable enable power dpms max_render_time adaptive_sync render_bit_depth color_profile allow_tearing contained skipwhite nextgroup=swayConfigOutputOptVals,@i3ConfigValue,swayConfigOutputMode -syn keyword swayConfigOutputOptVals linear nearest smart rgb bgr vrgb vbgr none clockwise anticlockwise toggle srgb icc contained skipwhite nextgroup=swayConfigOutputOptVals,@i3ConfigValue,i3ConfigShOper +syn keyword swayConfigOutputOpts mode resolution res modeline position pos scale scale_filter subpixel transform disable enable toggle power dpms max_render_time adaptive_sync render_bit_depth color_profile allow_tearing contained skipwhite nextgroup=swayConfigOutputOptVals,@i3ConfigValue,swayConfigOutputMode +syn keyword swayConfigOutputOptVals linear nearest smart rgb bgr vrgb vbgr none toggle srgb contained skipwhite nextgroup=swayConfigOutputOptVals,@i3ConfigValue syn keyword swayConfigOutputBgVals solid_color fill stretch fit center tile contained skipwhite nextgroup=@i3ConfigColVar -syn match swayConfigOutputBg /[#$]\S\+ solid_color/ contained contains=@i3ConfigColVar,swayConfigOutputBgVals -syn match swayConfigOutputBg /[^b# '"]\S*/ contained contains=i3ConfigShOper skipwhite nextgroup=swayConfigOutputBgVals -syn region swayConfigOutputBg start=/['"]/ end=/\ze/ contained contains=@i3ConfigIdent skipwhite nextgroup=swayConfigOutputBgVals +syn match swayConfigOutputBg /[#$]\S\+ solid_color/ contained contains=@i3ConfigColVar,swayConfigOutputBgVals skipwhite nextgroup=swayConfigOutputOpts +syn match swayConfigOutputBg /[^b# ,;][^ ,;]*/ contained contains=@i3ConfigStrVar skipwhite nextgroup=swayConfigOutputBgVals extend syn keyword swayConfigOutputOpts bg background contained skipwhite nextgroup=swayConfigOutputBg syn match swayConfigOutputFPS /@[0-9.]\+Hz/ contained skipwhite nextgroup=swayConfigOutputOpts syn match swayConfigOutputMode /\(--custom \)\?[0-9]\+x[0-9]\+/ contained contains=i3ConfigShParam skipwhite nextgroup=swayConfigOutputFPS,swayConfigOutputOpts -syn match swayConfigOutputOptVals /\(flipped-\)\?\(90\|180\|270\)\|flipped\|normal/ contained contains=i3ConfigNumber skipwhite nextgroup=swayConfigOutputOptsVals +" clockwise and anticlockwise are relative -> only as bindings / user actions - not in config setup +syn match swayConfigOutputOptVals /\(\(flipped-\)\?\(90\|180\|270\)\|flipped\|normal\)\( \(anti\)\?clockwise\)\?/ contained contains=i3ConfigNumber skipwhite nextgroup=swayConfigOutputOpts +syn match swayConfigOutputICCPath /\S\+/ contained contains=@i3ConfigStrVar skipwhite nextgroup=swayConfigOutputOpts extend +syn keyword swayConfigOutputOptVals icc contained skipwhite nextgroup=swayConfigOutputICCPath syn region swayConfigOutput start=/\s/ skip=/\\$/ end=/\ze[,;]\|$/ contained contains=swayConfigOutputOpts,@i3ConfigValue keepend -syn region swayConfigOutput matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigOutputOpts,@i3ConfigValue,i3ConfigComment keepend extend -syn match swayConfigOutputIdent /[^ ]\+/ contained contains=i3ConfigOutputIdent skipwhite nextgroup=swayConfigOutput +syn region swayConfigOutput matchgroup=i3ConfigParen start=/ {$/ end=/^\s*}$/ contained contains=swayConfigOutputOpts,@i3ConfigValue,i3ConfigComment keepend +syn match swayConfigOutputIdent /[^ ,;]\+/ contained contains=@i3ConfigIdent skipwhite nextgroup=swayConfigOutput extend syn keyword i3ConfigKeyword output contained skipwhite nextgroup=swayConfigOutputIdent +syn keyword i3ConfigActionKeyword output contained skipwhite nextgroup=swayConfigOutputIdent " Define the highlighting. hi def link swayConfigFloatingModifierOpts i3ConfigOption +hi def link swayConfigBarIdent i3ConfigIdent hi def link swayConfigXOpt i3ConfigOption hi def link swayConfigInhibitOpts i3ConfigOption hi def link swayConfigBindswitchArgument i3ConfigBindArgument @@ -156,7 +165,8 @@ hi def link swayConfigBindgestureType i3ConfigMoveType hi def link swayConfigBindgestureDir i3ConfigMoveDir hi def link swayConfigDeviceOper i3ConfigOperator hi def link swayConfigInputType i3ConfigMoveType -hi def link swayConfigInputIdent i3ConfigMoveDir +hi def link swayConfigInputTypeIdent i3ConfigMoveDir +hi def link swayConfigInputIdent i3ConfigIdent hi def link swayConfigInputOptVals i3ConfigShParam hi def link swayConfigInputOpts i3ConfigOption hi def link swayConfigInputAngle i3ConfigNumber @@ -165,10 +175,14 @@ hi def link swayConfigXkbOptsPair i3ConfigShParam hi def link swayConfigXkbLayout i3ConfigParamLine hi def link swayConfigSeatOptVals swayConfigInputOptVals hi def link swayConfigSeatOpts swayConfigInputOpts +hi def link swayConfigSeatIdent i3ConfigIdent hi def link swayConfigOutputOptVals swayConfigInputOptVals hi def link swayConfigOutputBgVals swayConfigInputOptVals +hi def link swayConfigOutputBg i3ConfigString +hi def link swayConfigOutputICCPath i3ConfigString hi def link swayConfigOutputOpts swayConfigInputOpts hi def link swayConfigOutputFPS Constant hi def link swayConfigOutputMode i3ConfigNumber +hi def link swayConfigOutputIdent i3ConfigIdent let b:current_syntax = "swayconfig" diff --git a/runtime/syntax/testdir/dumps/cpp_numbers_00.dump b/runtime/syntax/testdir/dumps/cpp_numbers_00.dump new file mode 100644 index 0000000000..41a236a0e3 --- /dev/null +++ b/runtime/syntax/testdir/dumps/cpp_numbers_00.dump @@ -0,0 +1,20 @@ +>v+0#00e0003#ffffff0|o|i|d| +0#0000000&|f|o@1|(|)| @64 +|{| @73 +@4|{| @69 +@8|/+0#0000e05&@1| |S|e@1| |h|t@1|p|s|:|/@1|e|n|.|c|p@1|r|e|f|e|r|e|n|c|e|.|c|o|m|/|w|/|c|p@1|/|l|a|n|g|u|a|g|e|/|f|l|o|a|t|i|n|g|_|l|i|t|e|r|a|l| +0#0000000& +@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|a| |=| |1+0#e000002&|.|0|E|2|;+0#0000000&| @49 +@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|b| |=| |1+0#e000002&|.|0|e|2|;+0#0000000&| @49 +@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|c| |=| |1+0#e000002&|E|2|;+0#0000000&| @51 +@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|d| |=| |1+0#e000002&|e|2|;+0#0000000&| @51 +@75 +@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|e| |=| |0+0#e000002&|X|1|f@1|p|1|0|;+0#0000000&| @46 +@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|f| |=| |0+0#e000002&|x|1|f@1|p|1|0|;+0#0000000&| @46 +@4|}| @69 +@75 +@4|/+0#0000e05&@1| |S|e@1|:| |h|t@1|p|s|:|/@1|e|n|.|c|p@1|r|e|f|e|r|e|n|c|e|.|c|o|m|/|w|/|c|p@1|/|l|a|n|g|u|a|g|e|/|i|n|t|e|g|e|r|_|l|i|t|e|r|a|l| +0#0000000&@4 +@4|i+0#00e0003&|n|t| +0#0000000&|a| |=| |0+0#e000002&|X|1|2|3|;+0#0000000&| @56 +@4|i+0#00e0003&|n|t| +0#0000000&|b| |=| |0+0#e000002&|x|1|2|3|;+0#0000000&| @56 +@75 +@4|i+0#00e0003&|n|t| +0#0000000&|c| |=| |0+0#e000002&|B|1|0|1|;+0#0000000&| @56 +@4|i+0#00e0003&|n|t| +0#0000000&|d| |=| |0+0#e000002&|b|1|0|1|;+0#0000000&| @56 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/cpp_numbers_01.dump b/runtime/syntax/testdir/dumps/cpp_numbers_01.dump new file mode 100644 index 0000000000..85a85c1d8a --- /dev/null +++ b/runtime/syntax/testdir/dumps/cpp_numbers_01.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@3|/+0#0000e05&@1| |S|e@1|:| |h|t@1|p|s|:|/@1|e|n|.|c|p@1|r|e|f|e|r|e|n|c|e|.|c|o|m|/|w|/|c|p@1|/|l|a|n|g|u|a|g|e|/|i|n|t|e|g|e|r|_|l|i|t|e|r|a|l| +0#0000000&@4 +@4|i+0#00e0003&|n|t| +0#0000000&|a| |=| |0+0#e000002&|X|1|2|3|;+0#0000000&| @56 +@4|i+0#00e0003&|n|t| +0#0000000&|b| |=| |0+0#e000002&|x|1|2|3|;+0#0000000&| @56 +@75 +@4|i+0#00e0003&|n|t| +0#0000000&|c| |=| |0+0#e000002&|B|1|0|1|;+0#0000000&| @56 +@4>i+0#00e0003&|n|t| +0#0000000&|d| |=| |0+0#e000002&|b|1|0|1|;+0#0000000&| @56 +|}| @73 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|9|,|5| @9|B|o|t| diff --git a/runtime/syntax/testdir/dumps/css_1_00.dump b/runtime/syntax/testdir/dumps/css_1_00.dump new file mode 100644 index 0000000000..5590798ca3 --- /dev/null +++ b/runtime/syntax/testdir/dumps/css_1_00.dump @@ -0,0 +1,20 @@ +>d+0#af5f00255#ffffff0|i|v| +0#0000000&|{+0#00e0e07&| +0#0000000&@69 +@2|m+0#00e0003&|a|r|g|i|n|-|b|l|o|c|k|:+0#0000000&| |1+0#e000002&|p|x|;+0#0000000&| @54 +@2|m+0#00e0003&|a|r|g|i|n|-|b|l|o|c|k|-|s|t|a|r|t|:+0#0000000&| |1+0#e000002&|p|x|;+0#0000000&| @48 +@2|m+0#00e0003&|a|r|g|i|n|-|b|l|o|c|k|-|e|n|d|:+0#0000000&| |1+0#e000002&|p|x|;+0#0000000&| @50 +|}+0#00e0e07&| +0#0000000&@73 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|,|1| @10|A|l@1| diff --git a/runtime/syntax/testdir/dumps/haskell_00.dump b/runtime/syntax/testdir/dumps/haskell_00.dump new file mode 100644 index 0000000000..133f52f506 --- /dev/null +++ b/runtime/syntax/testdir/dumps/haskell_00.dump @@ -0,0 +1,20 @@ +>-+0#0000e05#ffffff0@1| |I|s@1|u|e| |#|1|8|7@1|6| |(|a|l@1|o|w| |s|p|a|c|e|s| |i|n| |b|a|c|k|t|i|c|k|e|d| |o|p|e|r|a|t|o|r|s|)| +0#0000000&@20 +@75 +|m|a|i|n| |=+0#af5f00255&| +0#0000000&|p|r|i|n|t| |(|9+0#e000002&| +0#0000000&|`+0#af5f00255&| |d|i|v| |`| +0#0000000&|4+0#e000002&|)+0#0000000&| @48 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|,|1| @10|A|l@1| diff --git a/runtime/syntax/testdir/dumps/help_digraph_table_00.dump b/runtime/syntax/testdir/dumps/help_digraph_table_00.dump new file mode 100644 index 0000000000..b548f33629 --- /dev/null +++ b/runtime/syntax/testdir/dumps/help_digraph_table_00.dump @@ -0,0 +1,20 @@ +> +0&#ffffff0@74 +@56|*+0#ffffff16&|d+0#e000002&|i|g|r|a|p|h|-|t|a|b|l|e|*+0#ffffff16&| +0#0000000&@3 +|c+0#e000e06&|h|a|r| @1|d|i|g|r|a|p|h| @2|h|e|x| @4|d|e|c| @4|o|f@1|i|c|i|a|l| |n|a|m|e| +0#ffffff16&|~| +0#0000000&@27 +|^|@| @5|N|U| @5|0|x|0@1| @5|0| @4|N|U|L@1| |(|N|U|L|)| @32 +|^|A| @5|S|H| @5|0|x|0|1| @5|1| @4|S|T|A|R|T| |O|F| |H|E|A|D|I|N|G| |(|S|O|H|)| @20 +|^|B| @5|S|X| @5|0|x|0|2| @5|2| @4|S|T|A|R|T| |O|F| |T|E|X|T| |(|S|T|X|)| @23 +|^|C| @5|E|X| @5|0|x|0|3| @5|3| @4|E|N|D| |O|F| |T|E|X|T| |(|E|T|X|)| @25 +|^|D| @5|E|T| @5|0|x|0|4| @5|4| @4|E|N|D| |O|F| |T|R|A|N|S|M|I|S@1|I|O|N| |(|E|O|T|)| @17 +|^|E| @5|E|Q| @5|0|x|0|5| @5|5| @4|E|N|Q|U|I|R|Y| |(|E|N|Q|)| @29 +|^|F| @5|A|K| @5|0|x|0|6| @5|6| @4|A|C|K|N|O|W|L|E|D|G|E| |(|A|C|K|)| @25 +|^|G| @5|B|L| @5|0|x|0|7| @5|7| @4|B|E|L@1| |(|B|E|L|)| @32 +|^|H| @5|B|S| @5|0|x|0|8| @5|8| @4|B|A|C|K|S|P|A|C|E| |(|B|S|)| @28 +|^|I| @5|H|T| @5|0|x|0|9| @5|9| @4|C|H|A|R|A|C|T|E|R| |T|A|B|U|L|A|T|I|O|N| |(|H|T|)| @17 +|Ñ| @6|N|?| @5|0|x|d|1| @3|2|0|9| @4|L|A|T|I|N| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |N| |W|I|T|H| |T|I|L|D|E| @9 +@75 +|I|f| |y|o|u| |a|r|e| |u|s|i|n|g| |a| ||+0#ffffff16&|m+0#00e0e07&|u|l|t|i|b|y|t|e||+0#ffffff16&| +0#0000000&|'+0#00e0003&|e|n|c|o|d|i|n|g|'|,+0#0000000&| |V|i|m| |p|r|o|v|i|d|e|s| |t|h|i|s| |e|n|h|a|n|c|e|d| |s|e|t| |o +|f| @73 +|a|d@1|i|t|i|o|n|a|l| |d|i|g|r|a|p|h|s|:| @54 +@75 +@57|1|,|0|-|1| @8|T|o|p| diff --git a/runtime/syntax/testdir/dumps/help_digraph_table_01.dump b/runtime/syntax/testdir/dumps/help_digraph_table_01.dump new file mode 100644 index 0000000000..8a08cfdad8 --- /dev/null +++ b/runtime/syntax/testdir/dumps/help_digraph_table_01.dump @@ -0,0 +1,20 @@ +|Ñ+0&#ffffff0| @6|N|?| @5|0|x|d|1| @3|2|0|9| @4|L|A|T|I|N| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |N| |W|I|T|H| |T|I|L|D|E| @9 +@75 +|I|f| |y|o|u| |a|r|e| |u|s|i|n|g| |a| ||+0#ffffff16&|m+0#00e0e07&|u|l|t|i|b|y|t|e||+0#ffffff16&| +0#0000000&|'+0#00e0003&|e|n|c|o|d|i|n|g|'|,+0#0000000&| |V|i|m| |p|r|o|v|i|d|e|s| |t|h|i|s| |e|n|h|a|n|c|e|d| |s|e|t| |o +|f| @73 +|a|d@1|i|t|i|o|n|a|l| |d|i|g|r|a|p|h|s|:| @54 +> @74 +@56|*+0#ffffff16&|d+0#e000002&|i|g|r|a|p|h|-|t|a|b|l|e|-|m|b|y|t +|e|*+0#ffffff16&| +0#0000000&@72 +|c|h|a|r| @1|d|i|g|r|a|p|h| @2|h|e|x| @4|d|e|c| @4|o|f@1|i|c|i|a|l| |n|a|m|e| @29 +|Ā| @6|A|-| @5|0|1|0@1| @3|0|2|5|6| @3|L|A|T|I|N| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |A| |W|I|T|H| |M|A|C|R|O|N| @8 +|ā| @6|a|-| @5|0|1|0|1| @3|0|2|5|7| @3|L|A|T|I|N| |S|M|A|L@1| |L|E|T@1|E|R| |A| |W|I|T|H| |M|A|C|R|O|N| @10 +|Ă| @6|A|(| @5|0|1|0|2| @3|0|2|5|8| @3|L|A|T|I|N| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |A| |W|I|T|H| |B|R|E|V|E| @9 +|ă| @6|a|(| @5|0|1|0|3| @3|0|2|5|9| @3|L|A|T|I|N| |S|M|A|L@1| |L|E|T@1|E|R| |A| |W|I|T|H| |B|R|E|V|E| @11 +|Ą| @6|A|;| @5|0|1|0|4| @3|0|2|6|0| @3|L|A|T|I|N| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |A| |W|I|T|H| |O|G|O|N|E|K| @8 +|ą| @6|a|;| @5|0|1|0|5| @3|0|2|6|1| @3|L|A|T|I|N| |S|M|A|L@1| |L|E|T@1|E|R| |A| |W|I|T|H| |O|G|O|N|E|K| @10 +|Ć| @6|C|'| @5|0|1|0|6| @3|0|2|6|2| @3|L|A|T|I|N| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |C| |W|I|T|H| |A|C|U|T|E| @9 +|ć| @6|c|'| @5|0|1|0|7| @3|0|2|6|3| @3|L|A|T|I|N| |S|M|A|L@1| |L|E|T@1|E|R| |C| |W|I|T|H| |A|C|U|T|E| @11 +|Ĉ| @6|C|>| @5|0|1|0|8| @3|0|2|6|4| @3|L|A|T|I|N| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |C| |W|I|T|H| |C|I|R|C|U|M|F|L|E|X| @4 +|ĉ| @6|c|>| @5|0|1|0|9| @3|0|2|6|5| @3|L|A|T|I|N| |S|M|A|L@1| |L|E|T@1|E|R| |C| |W|I|T|H| |C|I|R|C|U|M|F|L|E|X| @6 +@57|1|8|,|0|-|1| @7|8|6|%| diff --git a/runtime/syntax/testdir/dumps/help_digraph_table_02.dump b/runtime/syntax/testdir/dumps/help_digraph_table_02.dump new file mode 100644 index 0000000000..de4a996c61 --- /dev/null +++ b/runtime/syntax/testdir/dumps/help_digraph_table_02.dump @@ -0,0 +1,20 @@ +|ĉ+0&#ffffff0| @6|c|>| @5|0|1|0|9| @3|0|2|6|5| @3|L|A|T|I|N| |S|M|A|L@1| |L|E|T@1|E|R| |C| |W|I|T|H| |C|I|R|C|U|M|F|L|E|X| @6 +@75 +@1>v|i|m|:|t|w|=|7|8|:|t|s|=|8|:|n|o|e|t|:|f|t|=|h|e|l|p|:|n|o|r|l|:| @40 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|3|2|,|2| @9|B|o|t| diff --git a/runtime/syntax/testdir/dumps/leex_00.dump b/runtime/syntax/testdir/dumps/leex_00.dump new file mode 100644 index 0000000000..72d4642aaf --- /dev/null +++ b/runtime/syntax/testdir/dumps/leex_00.dump @@ -0,0 +1,20 @@ +>%+0#0000e05#ffffff0| |H|e|a|d|e|r| |c|o|m@1|e|n|t| +0#0000000&@58 +|%+0#0000e05&@1| |H|e|a|d|e|r| |c|o|m@1|e|n|t| +0#0000000&@57 +|%+0#0000e05&@2| |H|e|a|d|e|r| |c|o|m@1|e|n|t| +0#0000000&@56 +@75 +|D+0#e000e06&|e|f|i|n|i|t|i|o|n|s|.| +0#0000000&@62 +|f+0#00e0e07&|l|o|a|t|s| +0#0000000&@1|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|\|+||+0#af5f00255&|-+0#e000002&|)+0#e000e06&|?+0#af5f00255&|[+0#e000e06&|0+0#e000002&|-|9|]+0#e000e06&|++0#af5f00255&|\+0#e000e06&|.|[|0+0#e000002&|-|9|]+0#e000e06&|++0#af5f00255&|(+0#e000e06&@1|E+0#e000002&||+0#af5f00255&|e+0#e000002&|)+0#e000e06&|(|\|+||+0#af5f00255&|-+0#e000002&|)+0#e000e06&|?+0#af5f00255&|[+0#e000e06&|0+0#e000002&|-|9|]+0#e000e06&|++0#af5f00255&|)+0#e000e06&|?+0#af5f00255&| +0#0000000&@22 +|D+0#00e0e07&| +0#0000000&@6|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|0+0#e000002&|-|9|]+0#e000e06&| +0#0000000&@59 +|A+0#00e0e07&| +0#0000000&@6|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|{|D|}||+0#af5f00255&|_+0#e000002&||+0#af5f00255&|@+0#e000002&|)+0#e000e06&| +0#0000000&@55 +|W+0#00e0e07&|S| +0#0000000&@5|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|[|\|0@2|-+0#e000002&|\+0#e000e06&|s|]||+0#af5f00255&|%+0#e000002&|.+0#e000e06&|*+0#af5f00255&|)+0#e000e06&| +0#0000000&|%+0#0000e05&| |w|h|i|t|e|s|p|a|c|e| +0#0000000&@36 +@75 +|R+0#e000e06&|u|l|e|s|.| +0#0000000&@68 +|{+0#e000e06&|D|}|++0#af5f00255&| +0#0000000&|:+0#af5f00255&| +0#0000000&@68 +@2|%+0#0000e05&| |C|o|m@1|e|n|t| +0#0000000&@63 +@2|{+0#e000e06&|t+0#e000002&|o|k|e|n|,+0#0000000&|{+0#e000e06&|i+0#e000002&|n|t|e|g|e|r|,+0#0000000&|T+0#00e0e07&|o|k|e|n|L|i|n|e|,+0#0000000&|l+0#00e0e07&|i|s|t|_|t|o|_|i|n|t|e|g|e|r|(+0#0000000&|T+0#00e0e07&|o|k|e|n|C|h|a|r|s|)+0#0000000&|}+0#e000e06&@1|.+0#0000000&| @16 +|{+0#e000e06&|D|}|++0#af5f00255&|\+0#e000e06&|.|{|D|}|++0#af5f00255&|(+0#e000e06&@1|E+0#0000000&||+0#af5f00255&|e+0#0000000&|)+0#e000e06&|(|\|+||+0#af5f00255&|\+0#e000e06&|-|)|?+0#af5f00255&|{+0#e000e06&|D|}|++0#af5f00255&|)+0#e000e06&|?+0#af5f00255&| +0#0000000&|:+0#af5f00255&| +0#0000000&@42 +@2|%+0#0000e05&| |C|o|m|e|n|t| |w|i|t|h| |p|e|r|i|o|d|.| +0#0000000&@51 +@2|{+0#e000e06&|t+0#e000002&|o|k|e|n|,+0#0000000&|{+0#e000e06&|f+0#e000002&|l|o|a|t|,+0#0000000&|T+0#00e0e07&|o|k|e|n|L|i|n|e|,+0#0000000&|l+0#00e0e07&|i|s|t|_|t|o|_|f|l|o|a|t|(+0#0000000&|T+0#00e0e07&|o|k|e|n|C|h|a|r|s|)+0#0000000&|}+0#e000e06&@1|.+0#0000000&| @20 +|{+0#e000e06&|A|}| +0#0000000&|:+0#af5f00255&| +0#0000000&@1|E+0#00e0e07&|r|l|a|n|g|C|o|d|e|.+0#0000000&| |%+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46 +|{+0#e000e06&|W|S|}| +0#0000000&|:+0#af5f00255&| +0#0000000&|E+0#00e0e07&|r|l|a|n|g|C|o|d|e|.+0#0000000&| @56 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/leex_01.dump b/runtime/syntax/testdir/dumps/leex_01.dump new file mode 100644 index 0000000000..3fd3d7229b --- /dev/null +++ b/runtime/syntax/testdir/dumps/leex_01.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|{+0#e000e06&|t+0#e000002&|o|k|e|n|,+0#0000000&|{+0#e000e06&|i+0#e000002&|n|t|e|g|e|r|,+0#0000000&|T+0#00e0e07&|o|k|e|n|L|i|n|e|,+0#0000000&|l+0#00e0e07&|i|s|t|_|t|o|_|i|n|t|e|g|e|r|(+0#0000000&|T+0#00e0e07&|o|k|e|n|C|h|a|r|s|)+0#0000000&|}+0#e000e06&@1|.+0#0000000&| @16 +|{+0#e000e06&|D|}|++0#af5f00255&|\+0#e000e06&|.|{|D|}|++0#af5f00255&|(+0#e000e06&@1|E+0#0000000&||+0#af5f00255&|e+0#0000000&|)+0#e000e06&|(|\|+||+0#af5f00255&|\+0#e000e06&|-|)|?+0#af5f00255&|{+0#e000e06&|D|}|++0#af5f00255&|)+0#e000e06&|?+0#af5f00255&| +0#0000000&|:+0#af5f00255&| +0#0000000&@42 +@2|%+0#0000e05&| |C|o|m|e|n|t| |w|i|t|h| |p|e|r|i|o|d|.| +0#0000000&@51 +@2|{+0#e000e06&|t+0#e000002&|o|k|e|n|,+0#0000000&|{+0#e000e06&|f+0#e000002&|l|o|a|t|,+0#0000000&|T+0#00e0e07&|o|k|e|n|L|i|n|e|,+0#0000000&|l+0#00e0e07&|i|s|t|_|t|o|_|f|l|o|a|t|(+0#0000000&|T+0#00e0e07&|o|k|e|n|C|h|a|r|s|)+0#0000000&|}+0#e000e06&@1|.+0#0000000&| @20 +|{+0#e000e06&|A|}| +0#0000000&|:+0#af5f00255&| +0#0000000&@1|E+0#00e0e07&|r|l|a|n|g|C|o|d|e|.+0#0000000&| |%+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@46 +>{+0#e000e06&|W|S|}| +0#0000000&|:+0#af5f00255&| +0#0000000&|E+0#00e0e07&|r|l|a|n|g|C|o|d|e|.+0#0000000&| @56 +|:|=| |:+0#af5f00255&|{+0#e000e06&|t+0#e000002&|o|k|e|n|,+0#0000000&|{+0#e000e06&|'+0#e000002&|:|=|'|,+0#0000000&|T+0#00e0e07&|o|k|e|n|L|i|n|e|}+0#e000e06&@1|.+0#0000000&| @45 +@75 +|E+0#e000e06&|r|l|a|n|g| |c|o|d|e|.| +0#0000000&@62 +@75 +|-+0#af5f00255&|e|x|p|o|r|t|(+0#0000000&|[+0#e000e06&|r+0#0000000&|e|s|e|r|v|e|d|_|w|o|r|d|/+0#af5f00255&|1+0#e000002&|]+0#e000e06&|)+0#0000000&|.| @47 +@75 +|%+0#0000e05&@1| |r|e|s|e|r|v|e|d|_|w|o|r|d|(|A|t|o|m|)| |-|>| |B|o@1|l| +0#0000000&@44 +|r|e|s|e|r|v|e|d|_|w|o|r|d|(|'+0#e000002&|r|e|s|e|r|v|e|d|'|)+0#0000000&| |-+0#af5f00255&|>| +0#0000000&|t+0#e000002&|r|u|e|;+0#0000000&| @40 +|r|e|s|e|r|v|e|d|_|w|o|r|d|(|_+0#00e0e07&|)+0#0000000&| |-+0#af5f00255&|>| +0#0000000&|f+0#e000002&|a|l|s|e|.+0#0000000&| @48 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|9|,|1| @9|B|o|t| diff --git a/runtime/syntax/testdir/dumps/make_01_00.dump b/runtime/syntax/testdir/dumps/make_01_00.dump new file mode 100644 index 0000000000..d476fcd2ac --- /dev/null +++ b/runtime/syntax/testdir/dumps/make_01_00.dump @@ -0,0 +1,20 @@ +>#+0#0000e05#ffffff0| |c|o|m@1|e|n|t| +0#0000000&@65 +@75 +|a+0#00e0e07&| |=+0#0000000&| |b| @69 +|$+0#00e0e07&|(|a|)| |=+0#0000000&| |1| @66 +@75 +|$+0#00e0e07&|(|a|)|:@1| +0#0000000&@68 +| +0#e000e06&@7|@|e+0#e000002&|c|h|o| |d|o|u|b|l|e|-|c|o|l|o|n| |r|u|l|e| +0#0000000&@43 +@75 +|$+0#00e0e07&|(|a|)| |++0#0000000&|=| |o|u|t|p|u|t| @60 +@75 +|d+0#e000e06&|e|f|i|n|e| |s|a|y| +0#0000000&@64 +| +0#e000e06&@7|e|c|h|o| |$+0#00e0e07&|1| +0#0000000&@59 +|e+0#e000e06&|n|d|e|f| +0#0000000&@69 +@75 +|d+0#00e0e07&|e|f|a|u|l|t|:| +0#0000000&@66 +| +0#e000002&@7|$+0#00e0e07&|(|c+0#af5f00255&|a|l@1| +0#00e0e07&|s|a|y|,|"+0#e000002&|H|e|l@1|o| |(|w|o|r|l|d|)|!|"|)+0#00e0e07&| +0#0000000&@38 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|,|1| @10|A|l@1| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_01.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_01.dump index f9f1c74eb1..26f3ff0646 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_01.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_01.dump @@ -17,4 +17,4 @@ |a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|t| |a|n|d| |\|0|4|0| |a|n|d| |\|x|F@1| +0#0000000&@42 |a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5|"@2| +0#0000000&@38 @75 -@57|1|7|,|1| @10|5|%| +@57|1|7|,|1| @10|4|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_02.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_02.dump index 1683bdd8bb..86d9560e43 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_02.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_02.dump @@ -17,4 +17,4 @@ |#+0#0000e05&| |R|a|w| |U|n|i|c|o|d|e| |l|i|t|e|r|a|l|s| |a|r|e| |n|o|t| |a|l@1|o|w|e|d| +0#0000000&@36 |t|e|s|t| |=| |u|r+0#e000002&|'|I|n|v|a|l|i|d| |s|t|r|i|n|g| |w|i|t|h| |\|'| |a|n|d| |\|"| |a|n|d| |\|t|'| +0#0000000&@27 |t|e|s|t| |=| |u|R+0#e000002&|"|I|n|v|a|l|i|d| |s|t|r|i|n|g| |w|i|t|h| |\|0|4|0| |a|n|d| |\|x|F@1|"| +0#0000000&@30 -@57|3@1|,|1| @9|1|4|%| +@57|3@1|,|1| @9|1|2|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_03.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_03.dump index 28ba342fe4..b8ee777d39 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_03.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_03.dump @@ -17,4 +17,4 @@ |a+0#e000002&|n|d| |\+0#e000e06&|u|0@1|A|1| +0#e000002&|a|n|d| |\+0#e000e06&|U|0@2|1|0|6|0|5|"+0#e000002&@2| +0#0000000&@46 @75 |#+0#0000e05&| |F|o|r|m|a|t@1|e|d| |s|t|r|i|n|g| |l|i|t|e|r|a|l|s| |(|f|-|s|t|r|i|n|g|s|)| +0#0000000&@35 -@57|4|9|,|1| @9|2|3|%| +@57|4|9|,|1| @9|1|8|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_04.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_04.dump index 038a1e6940..bb963d0846 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_04.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_04.dump @@ -17,4 +17,4 @@ |a+0#e000002&|n|d| |f|i|e|l|d|s| |{+0#e000e06&|1+0#e000002&|}+0#e000e06&|,+0#e000002&| |{+0#e000e06&|2+0#e000002&|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|1+0#e000002&| +0#0000000&@48 @4|+| @69 @4|2+0#e000002&|}+0#e000e06&|"+0#e000002&@2| +0#0000000&@65 -@57|6@1|,|1| @9|3|1|%| +@57|6@1|,|1| @9|2|5|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_05.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_05.dump index 92548655d5..23afd16a44 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_05.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_05.dump @@ -17,4 +17,4 @@ |t|e|s|t| |=| |R+0#e000002&|F|"|R|a|w| |f|-|s|t|r|i|n|g| |w|i|t|h| |l|i|t|e|r|a|l| |{@1|f|i|e|l|d|}@1| |a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r|}+0#e000e06&|"+0#e000002&| +0#0000000&@1 |t|e|s|t| |=| |f+0#e000002&|r|'@2|R|a|w| |f|-|s|t|r|i|n|g| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@30 |a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|t| |a|n|d| |\|0|4|0| |a|n|d| |\|x|F@1| +0#0000000&@42 -@57|8|2|,|1| @9|3|9|%| +@57|8|2|,|1| @9|3|2|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_06.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_06.dump index d8bb2d097f..eb1ae0c310 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_06.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_06.dump @@ -10,11 +10,11 @@ @4|+| @69 @4|2+0#e000002&|}+0#e000e06&|"+0#e000002&@2| +0#0000000&@65 @75 -|#+0#0000e05&| |F|-|s|t|r|i|n|g| |r|e|p|l|a|c|e|m|e|n|t| |f|i|e|l|d|s| +0#0000000&@45 -|t|e|s|t| |=| |f+0#e000002&|"|S|t|r|i|n|g| |i|s| |{+0#e000e06&| +0#0000000&@54 -@4|"+0#e000002&|o|n|e| |p|l|u|s| |"| +0#0000000&@59 -@4|"+0#e000002&|t|w|o| |p|l|u|s| |"| +0#0000000&@59 -@4|"+0#e000002&|t|h|r|e@1|"|}+0#e000e06&|"+0#e000002&| +0#0000000&@61 -|t|e|s|t| |=| |f+0#e000002&|"|N|u|m|b|e|r| |i|s| |{+0#e000e06&| +0#0000000&@54 -@4|1+0#e000002&| +0#0000000&|+| @67 -@57|9|5|,|1| @9|4|7|%| +|#+0#0000e05&| |T|e|m|p|l|a|t|e| |s|t|r|i|n|g| |l|i|t|e|r|a|l|s| |(|t|-|s|t|r|i|n|g|s|)| +0#0000000&@36 +|#+0#0000e05&| |h|t@1|p|s|:|/@1|d|o|c|s|.|p|y|t|h|o|n|.|o|r|g|/|3|/|r|e|f|e|r|e|n|c|e|/|l|e|x|i|c|a|l|_|a|n|a|l|y|s|i|s|.|h|t|m|l|#|t|e|m|p|l|a|t|e|-|s|t|r|i|n|g +|-|l|i|t|e|r|a|l|s| +0#0000000&@65 +|t|e|s|t| |=| |t+0#e000002&|'|T|-|s|t|r|i|n|g| |w|i|t|h| |e|s|c|a|p|e|s| |\+0#e000e06&|'| +0#e000002&|a|n|d| |\+0#e000e06&|"| +0#e000002&|a|n|d| |\+0#e000e06&|t| +0#e000002&|a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r|}+0#e000e06&|'+0#e000002& +|t+0#0000000&|e|s|t| |=| |T+0#e000002&|"|T|-|s|t|r|i|n|g| |w|i|t|h| |e|s|c|a|p|e|s| |\+0#e000e06&|0|4|0| +0#e000002&|a|n|d| |\+0#e000e06&|x|F@1| +0#e000002&|a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r|}+0#e000e06&|"+0#e000002&| +0#0000000&@2 +|t|e|s|t| |=| |t+0#e000002&|'|T|-|s|t|r|i|n|g| |w|i|t|h| |e|s|c|a|p|e|s| |\+0#e000e06&|u|0@1|A|1| +0#e000002&|a|n|d| |\+0#e000e06&|U|0@2|1|0|6|0|5| +0#e000002&|a|n|d| |\+0#e000e06&|N|{|I|N|V|E|R|T|E|D| |E|X|C|L|A|M +|A|T|I|O|N| |M|A|R|K|}| +0#e000002&|a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r|}+0#e000e06&|'+0#e000002&| +0#0000000&@35 +@57|9|5|,|1| @9|3|8|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_07.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_07.dump index b11b2427c0..ac44922a38 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_07.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_07.dump @@ -1,20 +1,20 @@ -| +0&#ffffff0@3|1+0#e000002&| +0#0000000&|+| @67 -@4|2+0#e000002&| +0#0000000&|+| @67 -@4|3+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@67 -|t|e|s|t| |=| |f+0#e000002&|"|F|l|o|a|t| |i|s| |{+0#e000e06&|1+0#e000002&|.|2|3|}+0#e000e06&|"+0#e000002&| +0#0000000&@49 -|t|e|s|t| |=| |f+0#e000002&|"|a|b|c|{+0#e000e06&|a+0#0000000&| |#+0#0000e05&| |T|h|i|s| |i|s| |a| |c|o|m@1|e|n|t| |}| +0#0000000&@38 -@4>+| |1+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@65 -|t|e|s|t| |=| |f+0#e000002&|"|d|e|f|{+0#e000e06&|a+0#0000000&| |#+0#0000e05&| |S|o| |i|s| |t|h|i|s| |:| +0#0000000&@45 -@4|+| |2+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@65 -|t|e|s|t| |=| |f+0#e000002&|"|g|h|i|{+0#e000e06&|a+0#0000000&| |#+0#0000e05&| |A|n|d| |t|h|i|s| |"| +0#0000000&@47 -@4|+| |3+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@65 -|t|e|s|t| |=| |f+0#e000002&|"|H|e| |s|a|i|d| |h|i|s| |n|a|m|e| |i|s| |{+0#e000e06&|n+0#0000000&|a|m|e|!+0#e000e06&|r|}|.+0#e000002&|"| +0#0000000&@35 -|t|e|s|t| |=| |f+0#e000002&|"|H|e| |s|a|i|d| |h|i|s| |n|a|m|e| |i|s| |{+0#e000e06&|r+0#00e0e07&|e|p|r|(+0#0000000&|n|a|m|e|)|}+0#e000e06&|.+0#e000002&|"| +0#0000000&@31 -|t|e|s|t| |=| |f+0#e000002&|"|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|w|i|d|t|h|}@1|"+0#e000002&| +0#0000000&@41 -|t|e|s|t| |=| |f+0#e000002&|"|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|w|i|d|t|h|}|.|{|p|r|e|c|i|s|i|o|n|}@1|"+0#e000002&| +0#0000000&@29 -|t|e|s|t| |=| |f+0#e000002&|"|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{| +0#0000000&@49 -| +0#e000e06&@7|w|i|d|t|h| +0#0000000&@61 -| +0#e000e06&@3|}|.|{| +0#0000000&@67 -| +0#e000e06&@7|p|r|e|c|i|s|i|o|n| +0#0000000&@57 -| +0#e000e06&@3|}@1|"+0#e000002&| +0#0000000&@67 -@57|1@1|3|,|5| @8|5|6|%| +|t+0&#ffffff0|e|s|t| |=| |t+0#e000002&|'|T|-|s|t|r|i|n|g| |w|i|t|h| |e|s|c|a|p|e|s| |\+0#e000e06&|u|0@1|A|1| +0#e000002&|a|n|d| |\+0#e000e06&|U|0@2|1|0|6|0|5| +0#e000002&|a|n|d| |\+0#e000e06&|N|{|I|N|V|E|R|T|E|D| |E|X|C|L|A|M +|A|T|I|O|N| |M|A|R|K|}| +0#e000002&|a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r|}+0#e000e06&|'+0#e000002&| +0#0000000&@35 +|t|e|s|t| |=| |T+0#e000002&|"|T|-|s|t|r|i|n|g| |w|i|t|h| |l|i|t|e|r|a|l| |{@1|f|i|e|l|d|}@1| |a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r|}+0#e000e06&|"+0#e000002&| +0#0000000&@6 +|t|e|s|t| |=| |t+0#e000002&|'@2|T|-|s|t|r|i|n|g| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@35 +|a+0#e000002&|n|d| |e|s|c|a|p|e|s| |\+0#e000e06&|t| +0#e000002&|a|n|d| |\+0#e000e06&|0|4|0| +0#e000002&|a|n|d| |\+0#e000e06&|x|F@1| +0#0000000&@42 +>a+0#e000002&|n|d| |e|s|c|a|p|e|s| |\+0#e000e06&|u|0@1|A|1| +0#e000002&|a|n|d| |\+0#e000e06&|U|0@2|1|0|6|0|5| +0#0000000&@41 +|a+0#e000002&|n|d| |f|i|e|l|d|s| |{+0#e000e06&|1+0#e000002&|}+0#e000e06&|,+0#e000002&| |{+0#e000e06&|2+0#e000002&|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|1+0#e000002&| +0#0000000&@48 +@4|+| @69 +@4|2+0#e000002&|}+0#e000e06&|'+0#e000002&@2| +0#0000000&@65 +|t|e|s|t| |=| |T+0#e000002&|"@2|T|-|s|t|r|i|n|g| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@35 +|a+0#e000002&|n|d| |e|s|c|a|p|e|s| |\+0#e000e06&|t| +0#e000002&|a|n|d| |\+0#e000e06&|0|4|0| +0#e000002&|a|n|d| |\+0#e000e06&|x|F@1| +0#0000000&@42 +|a+0#e000002&|n|d| |e|s|c|a|p|e|s| |\+0#e000e06&|u|0@1|A|1| +0#e000002&|a|n|d| |\+0#e000e06&|U|0@2|1|0|6|0|5| +0#0000000&@41 +|a+0#e000002&|n|d| |f|i|e|l|d|s| |{+0#e000e06&|1+0#e000002&|}+0#e000e06&|,+0#e000002&| |{+0#e000e06&|2+0#e000002&|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|1+0#e000002&| +0#0000000&@48 +@4|+| @69 +@4|2+0#e000002&|}+0#e000e06&|"+0#e000002&@2| +0#0000000&@65 +@75 +|#+0#0000e05&| |R|a|w| |t|e|m|p|l|a|t|e| |s|t|r|i|n|g| |l|i|t|e|r|a|l|s| +0#0000000&@44 +|t|e|s|t| |=| |t+0#e000002&|r|'|R|a|w| |t|-|s|t|r|i|n|g| |w|i|t|h| |l|i|t|e|r|a|l| |\|'| |a|n|d| |\|"| |a|n|d| |\|t| |a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06& +|b+0#0000000&|a|r|}+0#e000e06&|'+0#e000002&| +0#0000000&@69 +@57|1@1|0|,|1| @8|4|5|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_08.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_08.dump index 57bfd7d3cb..34090dc857 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_08.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_08.dump @@ -1,20 +1,20 @@ -| +0#e000e06#ffffff0@3|}@1|"+0#e000002&| +0#0000000&@67 -|t|e|s|t| |=| |f+0#e000002&|"|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|w|i|d|t|h|:|d|}|.|{|p|r|e|c|i|s|i|o|n|!|s|}@1|"+0#e000002&| +0#0000000&@25 -|t|e|s|t| |=| |f+0#e000002&|"|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|o|p|t|i|o|n|s|}|{|w|i|d|t|h|}|{|g|r|o|u|p|i|n|g|}|{|p|r|e|c|i|s|i|o|n|}|{|t|y|p|e|}@1|"+0#e000002&| +0#0000000&@5 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&|#|0|x|}|"+0#e000002&| +0#0000000&@52 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&|+|#|0|x|}|"+0#e000002&| +0#0000000&@51 ->t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&|<|+|#|0|x|}|"+0#e000002&| +0#0000000&@50 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&| |<|+|#|0|x|}|"+0#e000002&| +0#0000000&@49 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&|<|#|0|x|}|"+0#e000002&| +0#0000000&@51 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&| |<|#|0|x|}|"+0#e000002&| +0#0000000&@50 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|s+0#0000000&|t|r|i|n|g|=+0#e000e06&|}|"+0#e000002&| +0#0000000&@55 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|s+0#0000000&|t|r|i|n|g|=+0#e000e06&|!|r|}|"+0#e000002&| +0#0000000&@53 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|s+0#0000000&|t|r|i|n|g|=+0#e000e06&|:|2|0|}|"+0#e000002&| +0#0000000&@52 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|s+0#0000000&|t|r|i|n|g|=+0#e000e06&|!|r|:|2|0|}|"+0#e000002&| +0#0000000&@50 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |}|"+0#e000002&| +0#0000000&@52 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |!|r|}|"+0#e000002&| +0#0000000&@50 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |!|r| |}|"+0#e000002&| +0#0000000&@49 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |:|2|0|}|"+0#e000002&| +0#0000000&@49 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |!|r|:|2|0|}|"+0#e000002&| +0#0000000&@47 -|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |!|r| |:|2|0|}|"+0#e000002&| +0#0000000&@46 -@57|1|3|1|,|1| @8|6@1|%| +|t+0&#ffffff0|e|s|t| |=| |t+0#e000002&|r|'|R|a|w| |t|-|s|t|r|i|n|g| |w|i|t|h| |l|i|t|e|r|a|l| |\|'| |a|n|d| |\|"| |a|n|d| |\|t| |a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06& +|b+0#0000000&|a|r|}+0#e000e06&|'+0#e000002&| +0#0000000&@69 +|t|e|s|t| |=| |t+0#e000002&|R|"|R|a|w| |t|-|s|t|r|i|n|g| |w|i|t|h| |l|i|t|e|r|a|l| |\|0|4|0| |a|n|d| |\|x|F@1| |a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r +|}+0#e000e06&|"+0#e000002&| +0#0000000&@72 +|t|e|s|t| |=| |t+0#e000002&|r|'|R|a|w| |t|-|s|t|r|i|n|g| |w|i|t|h| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5| |a|n|d| |f|i|e|l|d|s| |\|N|{+0#e000e06&|F+0#0000000&|I|E +|L|D|,| |N|O|T|,| |E|S|C|A|P|E|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r|}+0#e000e06&|'+0#e000002&| +0#0000000&@37 +>t|e|s|t| |=| |t+0#e000002&|R|"|R|a|w| |t|-|s|t|r|i|n|g| |w|i|t|h| |l|i|t|e|r|a|l| |{@1|f|i|e|l|d|}@1| |a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r|}+0#e000e06&|"+0#e000002&| +0#0000000&@1 +|t|e|s|t| |=| |r+0#e000002&|t|'|R|a|w| |t|-|s|t|r|i|n|g| |w|i|t|h| |l|i|t|e|r|a|l| |\|'| |a|n|d| |\|"| |a|n|d| |\|t| |a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06& +|b+0#0000000&|a|r|}+0#e000e06&|'+0#e000002&| +0#0000000&@69 +|t|e|s|t| |=| |r+0#e000002&|T|"|R|a|w| |t|-|s|t|r|i|n|g| |w|i|t|h| |l|i|t|e|r|a|l| |\|0|4|0| |a|n|d| |\|x|F@1| |a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r +|}+0#e000e06&|"+0#e000002&| +0#0000000&@72 +|t|e|s|t| |=| |R+0#e000002&|t|'|R|a|w| |t|-|s|t|r|i|n|g| |w|i|t|h| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5| |a|n|d| |f|i|e|l|d|s| |\|N|{+0#e000e06&|F+0#0000000&|I|E +|L|D|,| |N|O|T|,| |E|S|C|A|P|E|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r|}+0#e000e06&|'+0#e000002&| +0#0000000&@37 +|t|e|s|t| |=| |R+0#e000002&|T|"|R|a|w| |t|-|s|t|r|i|n|g| |w|i|t|h| |l|i|t|e|r|a|l| |{@1|f|i|e|l|d|}@1| |a|n|d| |f|i|e|l|d|s| |{+0#e000e06&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|b+0#0000000&|a|r|}+0#e000e06&|"+0#e000002&| +0#0000000&@1 +|t|e|s|t| |=| |t+0#e000002&|r|'@2|R|a|w| |t|-|s|t|r|i|n|g| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@30 +|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|t| |a|n|d| |\|0|4|0| |a|n|d| |\|x|F@1| +0#0000000&@42 +|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5| +0#0000000&@41 +|a+0#e000002&|n|d| |f|i|e|l|d|s| |{+0#e000e06&|1+0#e000002&|}+0#e000e06&|,+0#e000002&| |{+0#e000e06&|2+0#e000002&|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|1+0#e000002&| +0#0000000&@48 +@4|+| @69 +@57|1|2|5|,|1| @8|5|1|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_09.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_09.dump index 336db4ea78..56be10e7cc 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_09.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_09.dump @@ -1,20 +1,20 @@ -|t+0&#ffffff0|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |!|r| |:|2|0|}|"+0#e000002&| +0#0000000&@46 -|t|e|s|t| |=| |f+0#e000002&|"|a|b|c| |{+0#e000e06&|a+0#0000000&|[|"+0#e000002&|x|"|]+0#0000000&|}+0#e000e06&| +0#e000002&|d|e|f|"| +0#0000000&@48 -|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |c|o|n|t|a|i|n|s|:|\+0#e000e06&|n|{|"+0#e000002&|\+0#e000e06&|n|"+0#e000002&|.+0#0000000&|j|o|i|n|(|a|)|}+0#e000e06&|"+0#e000002&| +0#0000000&@34 -|t|e|s|t| |=| |f+0#e000002&|"|T|o|d|a|y|'|s| |d|a|t|e| |i|s| |{+0#e000e06&|d+0#0000000&|a|t|e|t|i|m|e|.|n|o|w|(|)|}+0#e000e06&|"+0#e000002&| +0#0000000&@32 -|t|e|s|t| |=| |f+0#e000002&|"|T|o|d|a|y|'|s| |f|o|r|m|a|t@1|e|d| |d|a|t|e| |i|s| |{+0#e000e06&|d+0#0000000&|a|t|e|t|i|m|e|.|n|o|w|(|)|:+0#e000e06&|%|Y|-|%|m|-|%|d| |%|H|:|%|M|:|%|S|}|"+0#e000002&| +0#0000000&@4 ->t|e|s|t| |=| |f+0#e000002&|"|D|a|t|e| |i|s| |{+0#e000e06&|d+0#0000000&|a|t|e|t|i|m|e|.|d|a|t|e|t|i|m|e|(|2+0#e000002&|0|1|0|,+0#0000000&| |7+0#e000002&|,+0#0000000&| |4+0#e000002&|,+0#0000000&| |1+0#e000002&|2|,+0#0000000&| |1+0#e000002&|5|,+0#0000000&| |5+0#e000002&|8|)+0#0000000&|}+0#e000e06&|"+0#e000002&| +0#0000000&@13 -|t|e|s|t| |=| |f+0#e000002&|"|F|o|r|m|a|t@1|e|d| |d|a|t|e| |i|s| |{+0#e000e06&|d+0#0000000&|a|t|e|t|i|m|e|.|d|a|t|e|t|i|m|e|(|2+0#e000002&|0|1|0|,+0#0000000&| |7+0#e000002&|,+0#0000000&| |4+0#e000002&|,+0#0000000&| |1+0#e000002&|2|,+0#0000000&| |1+0#e000002&|5|,+0#0000000&| |5+0#e000002&|8|)+0#0000000&|:+0#e000e06&|%|Y|-|%|m -|-|%|d| |%|H|:|%|M|:|%|S|}|"+0#e000002&| +0#0000000&@60 -|t|e|s|t| |=| |f+0#e000002&|"|L|a|m|b|d|a| |r|e|t|u|r|n|s| |{+0#e000e06&|(+0#0000000&|l+0#af5f00255&|a|m|b|d|a| +0#0000000&|x|:| |x|*@1|2+0#e000002&|)+0#0000000&|}+0#e000e06&|"+0#e000002&| +0#0000000&@31 -|t|e|s|t| |=| |f+0#e000002&|"|Z|e|r|o| |p|a|d@1|e|d| |l|a|m|b|d|a| |r|e|t|u|r|n|s| |{+0#e000e06&|(+0#0000000&|l+0#af5f00255&|a|m|b|d|a| +0#0000000&|x|:| |x|*@1|2+0#e000002&|)+0#0000000&|:+0#e000e06&|0|9|}|"+0#e000002&| +0#0000000&@16 -|t|e|s|t| |=| |f+0#e000002&|"|S|p|a|c|e| |p|a|d@1|e|d| |l|a|m|b|d|a| |r|e|t|u|r|n|s| |{+0#e000e06&|(+0#0000000&|l+0#af5f00255&|a|m|b|d|a| +0#0000000&|x|:| |x|*@1|2+0#e000002&|)+0#0000000&|:+0#e000e06&|{|w|i|d|t|h|}@1|"+0#e000002&| +0#0000000&@10 -|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |c|o|p|y| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|]|}+0#e000e06&|"+0#e000002&| +0#0000000&@41 -|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |s|l|i|c|e| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|1+0#e000002&|:+0#0000000&|]|}+0#e000e06&|"+0#e000002&| +0#0000000&@39 -|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |s|l|i|c|e| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|9+0#e000002&|]+0#0000000&|}+0#e000e06&|"+0#e000002&| +0#0000000&@39 -|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |e|l|e|m|e|n|t|s| |a|r|e| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|2+0#e000002&|:+0#0000000&|]|}+0#e000e06&|"+0#e000002&| +0#0000000&@34 -|t|e|s|t| |=| |f+0#e000002&|"|P|a|d@1|e|d| |l|i|s|t| |c|o|p|y| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|]|:+0#e000e06&|9@1|}|"+0#e000002&| +0#0000000&@31 -|t|e|s|t| |=| |f+0#e000002&|"|L|e|f|t|-|a|l|i|g|n|e|d| |l|i|s|t| |s|l|i|c|e| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|1+0#e000002&|:+0#0000000&|]|:+0#e000e06&|<|9@1|}|"+0#e000002&| +0#0000000&@22 -|t|e|s|t| |=| |f+0#e000002&|"|R|i|g|h|t| |a|l|i|g|n|e|d| |l|i|s|t| |s|l|i|c|e| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|9+0#e000002&|]+0#0000000&|:+0#e000e06&|>|9@1|}|"+0#e000002&| +0#0000000&@21 -|t|e|s|t| |=| |f+0#e000002&|"|C|e|n|t|e|r|-|a|l|i|g|n|e|d| |l|i|s|t| |e|l|e|m|e|n|t|s| |a|r|e| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|2+0#e000002&|:+0#0000000&|]|:+0#e000e06&|^|9@1|}|"+0#e000002&| +0#0000000&@15 -@57|1|4|9|,|1| @8|7|5|%| +| +0&#ffffff0@3|+| @69 +@4|2+0#e000002&|}+0#e000e06&|'+0#e000002&@2| +0#0000000&@65 +|t|e|s|t| |=| |R+0#e000002&|T|"@2|R|a|w| |t|-|s|t|r|i|n|g| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@30 +|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|t| |a|n|d| |\|0|4|0| |a|n|d| |\|x|F@1| +0#0000000&@42 +|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5| +0#0000000&@41 +>a+0#e000002&|n|d| |f|i|e|l|d|s| |{+0#e000e06&|1+0#e000002&|}+0#e000e06&|,+0#e000002&| |{+0#e000e06&|2+0#e000002&|}+0#e000e06&| +0#e000002&|a|n|d| |{+0#e000e06&|1+0#e000002&| +0#0000000&@48 +@4|+| @69 +@4|2+0#e000002&|}+0#e000e06&|"+0#e000002&@2| +0#0000000&@65 +@75 +|#+0#0000e05&| |F|-|s|t|r|i|n|g| |r|e|p|l|a|c|e|m|e|n|t| |f|i|e|l|d|s| +0#0000000&@45 +|t|e|s|t| |=| |f+0#e000002&|"|S|t|r|i|n|g| |i|s| |{+0#e000e06&| +0#0000000&@54 +@4|"+0#e000002&|o|n|e| |p|l|u|s| |"| +0#0000000&@59 +@4|"+0#e000002&|t|w|o| |p|l|u|s| |"| +0#0000000&@59 +@4|"+0#e000002&|t|h|r|e@1|"|}+0#e000e06&|"+0#e000002&| +0#0000000&@61 +|t|e|s|t| |=| |f+0#e000002&|"|N|u|m|b|e|r| |i|s| |{+0#e000e06&| +0#0000000&@54 +@4|1+0#e000002&| +0#0000000&|+| @67 +@4|2+0#e000002&| +0#0000000&|+| @67 +@4|3+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@67 +|t|e|s|t| |=| |f+0#e000002&|"|F|l|o|a|t| |i|s| |{+0#e000e06&|1+0#e000002&|.|2|3|}+0#e000e06&|"+0#e000002&| +0#0000000&@49 +@57|1|3|9|,|1| @8|5|7|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_10.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_10.dump index ea08a5f67c..882875c9ef 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_10.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_10.dump @@ -1,20 +1,20 @@ -|t+0&#ffffff0|e|s|t| |=| |f+0#e000002&|"|C|e|n|t|e|r|-|a|l|i|g|n|e|d| |l|i|s|t| |e|l|e|m|e|n|t|s| |a|r|e| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|2+0#e000002&|:+0#0000000&|]|:+0#e000e06&|^|9@1|}|"+0#e000002&| +0#0000000&@15 -|t|e|s|t| |=| |f+0#e000002&|"|E|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|x+0#0000000&| |=@1| |1+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@42 -|t|e|s|t| |=| |f+0#e000002&|"|E|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|x+0#0000000&| |!|=| |1+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@42 -|t|e|s|t| |=| |f+0#e000002&|"|E|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|(+0#0000000&|x| |:|=| |1+0#e000002&|)+0#0000000&|}+0#e000e06&|"+0#e000002&| +0#0000000&@40 -|t|e|s|t| |=| |f+0#e000002&|"|D|e|b|u|g| |e|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|x+0#0000000&| |=@1| |1+0#e000002&|=+0#e000e06&|}|"+0#e000002&| +0#0000000&@35 ->t|e|s|t| |=| |f+0#e000002&|"|D|e|b|u|g| |e|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|x+0#0000000&| |!|=| |1+0#e000002&|=+0#e000e06&|}|"+0#e000002&| +0#0000000&@35 -|t|e|s|t| |=| |f+0#e000002&|"|D|e|b|u|g| |e|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|(+0#0000000&|x| |:|=| |1+0#e000002&|)+0#0000000&|=+0#e000e06&|}|"+0#e000002&| +0#0000000&@33 -|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|[|x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&|]| |}+0#e000e06&|"+0#e000002&| +0#0000000&@8 -|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|[| @35 -@8|x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&| @43 -@4|]| |}+0#e000e06&|"+0#e000002&| +0#0000000&@66 -|t|e|s|t| |=| |f+0#e000002&|"|P|a|d@1|e|d| |l|i|s|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|[|x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&|]| |:+0#e000e06&|9@1|} -|"+0#e000002&| +0#0000000&@73 -|t|e|s|t| |=| |f+0#e000002&|"|D|i|c|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|{|x|:| |x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&|}| |}+0#e000e06&|"+0#e000002&| +0#0000000&@5 -|t|e|s|t| |=| |f+0#e000002&|"|D|i|c|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|{| @35 -@8|x|:| |x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&| @40 -@4|}| |}+0#e000e06&|"+0#e000002&| +0#0000000&@66 -|t|e|s|t| |=| |f+0#e000002&|"|P|a|d@1|e|d| |d|i|c|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|{|x|:| |x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&|}| |:+0#e000e06& -|9@1|}|"+0#e000002&| +0#0000000&@70 -@57|1|6@1|,|1| @8|8|3|%| +|t+0&#ffffff0|e|s|t| |=| |f+0#e000002&|"|F|l|o|a|t| |i|s| |{+0#e000e06&|1+0#e000002&|.|2|3|}+0#e000e06&|"+0#e000002&| +0#0000000&@49 +|t|e|s|t| |=| |f+0#e000002&|"|a|b|c|{+0#e000e06&|a+0#0000000&| |#+0#0000e05&| |T|h|i|s| |i|s| |a| |c|o|m@1|e|n|t| |}| +0#0000000&@38 +@4|+| |1+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@65 +|t|e|s|t| |=| |f+0#e000002&|"|d|e|f|{+0#e000e06&|a+0#0000000&| |#+0#0000e05&| |S|o| |i|s| |t|h|i|s| |:| +0#0000000&@45 +@4|+| |2+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@65 +>t|e|s|t| |=| |f+0#e000002&|"|g|h|i|{+0#e000e06&|a+0#0000000&| |#+0#0000e05&| |A|n|d| |t|h|i|s| |"| +0#0000000&@47 +@4|+| |3+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@65 +|t|e|s|t| |=| |f+0#e000002&|"|H|e| |s|a|i|d| |h|i|s| |n|a|m|e| |i|s| |{+0#e000e06&|n+0#0000000&|a|m|e|!+0#e000e06&|r|}|.+0#e000002&|"| +0#0000000&@35 +|t|e|s|t| |=| |f+0#e000002&|"|H|e| |s|a|i|d| |h|i|s| |n|a|m|e| |i|s| |{+0#e000e06&|r+0#00e0e07&|e|p|r|(+0#0000000&|n|a|m|e|)|}+0#e000e06&|.+0#e000002&|"| +0#0000000&@31 +|t|e|s|t| |=| |f+0#e000002&|"|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|w|i|d|t|h|}@1|"+0#e000002&| +0#0000000&@41 +|t|e|s|t| |=| |f+0#e000002&|"|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|w|i|d|t|h|}|.|{|p|r|e|c|i|s|i|o|n|}@1|"+0#e000002&| +0#0000000&@29 +|t|e|s|t| |=| |f+0#e000002&|"|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{| +0#0000000&@49 +| +0#e000e06&@7|w|i|d|t|h| +0#0000000&@61 +| +0#e000e06&@3|}|.|{| +0#0000000&@67 +| +0#e000e06&@7|p|r|e|c|i|s|i|o|n| +0#0000000&@57 +| +0#e000e06&@3|}@1|"+0#e000002&| +0#0000000&@67 +|t|e|s|t| |=| |f+0#e000002&|"|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|w|i|d|t|h|:|d|}|.|{|p|r|e|c|i|s|i|o|n|!|s|}@1|"+0#e000002&| +0#0000000&@25 +|t|e|s|t| |=| |f+0#e000002&|"|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|o|p|t|i|o|n|s|}|{|w|i|d|t|h|}|{|g|r|o|u|p|i|n|g|}|{|p|r|e|c|i|s|i|o|n|}|{|t|y|p|e|}@1|"+0#e000002&| +0#0000000&@5 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&|#|0|x|}|"+0#e000002&| +0#0000000&@52 +@57|1|5|7|,|1| @8|6|5|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_11.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_11.dump index 8641055b3f..03ca4e2dd6 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_11.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_11.dump @@ -1,20 +1,20 @@ -|t+0&#ffffff0|e|s|t| |=| |f+0#e000002&|"|P|a|d@1|e|d| |d|i|c|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|{|x|:| |x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&|}| |:+0#e000e06& -|9@1|}|"+0#e000002&| +0#0000000&@70 -@75 -|#+0#0000e05&| |B|y|t|e|s| +0#0000000&@67 -|t|e|s|t| |=| |b+0#e000002&|'|B|y|t|e|s| |w|i|t|h| |e|s|c|a|p|e|s| |\+0#e000e06&|'| +0#e000002&|a|n|d| |\+0#e000e06&|"| +0#e000002&|a|n|d| |\+0#e000e06&|t|'+0#e000002&| +0#0000000&@29 ->t|e|s|t| |=| |B+0#e000002&|"|B|y|t|e|s| |w|i|t|h| |e|s|c|a|p|e|s| |\+0#e000e06&|0|4|0| +0#e000002&|a|n|d| |\+0#e000e06&|x|F@1|"+0#e000002&| +0#0000000&@32 -|t|e|s|t| |=| |b+0#e000002&|'|B|y|t|e|s| |w|i|t|h| |S|y|n|t|a|x|W|a|r|n|i|n|g| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5| |a|n|d| |\|N|{|I|N|V|E|R|T|E|D| |E|X|C -|L|A|M|A|T|I|O|N| |M|A|R|K|}|'| +0#0000000&@59 -|t|e|s|t| |=| |B+0#e000002&|"|B|y|t|e|s| |w|i|t|h| |e|s|c|a|p|e|d| |\+0#e000e06&@1| +0#e000002&|b|a|c|k|s|l|a|s|h| |a|n|d| |i|g|n|o|r|e|d| |\+0#e000e06&| +0#0000000&@20 -|n+0#e000002&|e|w|l|i|n|e|"| +0#0000000&@66 -|t|e|s|t| |=| |b+0#e000002&|'@2|B|y|t|e|s| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@38 -|a+0#e000002&|n|d| |e|s|c|a|p|e|s| |\+0#e000e06&|t| +0#e000002&|a|n|d| |\+0#e000e06&|0|4|0| +0#e000002&|a|n|d| |\+0#e000e06&|x|F@1| +0#0000000&@42 -|a+0#e000002&|n|d| |S|y|n|t|a|x|W|a|r|n|i|n|g| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5|'@2| +0#0000000&@32 -|t|e|s|t| |=| |B+0#e000002&|"@2|B|y|t|e|s| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@38 -|a+0#e000002&|n|d| |e|s|c|a|p|e|s| |\+0#e000e06&|t| +0#e000002&|a|n|d| |\+0#e000e06&|0|4|0| +0#e000002&|a|n|d| |\+0#e000e06&|x|F@1| +0#0000000&@42 -|a+0#e000002&|n|d| |S|y|n|t|a|x|W|a|r|n|i|n|g| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5|"@2| +0#0000000&@32 -@75 -|#+0#0000e05&| |R|a|w| |b|y|t|e|s| +0#0000000&@63 -|t|e|s|t| |=| |b+0#e000002&|r|'|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|'| |a|n|d| |\|"| |a|n|d| |\|t|'| +0#0000000&@24 -@57|1|8|1|,|1| @8|9|2|%| +|t+0&#ffffff0|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&|#|0|x|}|"+0#e000002&| +0#0000000&@52 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&|+|#|0|x|}|"+0#e000002&| +0#0000000&@51 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&|<|+|#|0|x|}|"+0#e000002&| +0#0000000&@50 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&| |<|+|#|0|x|}|"+0#e000002&| +0#0000000&@49 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&|<|#|0|x|}|"+0#e000002&| +0#0000000&@51 +>t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|n+0#0000000&|u|m|b|e|r|:+0#e000e06&| |<|#|0|x|}|"+0#e000002&| +0#0000000&@50 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|s+0#0000000&|t|r|i|n|g|=+0#e000e06&|}|"+0#e000002&| +0#0000000&@55 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|s+0#0000000&|t|r|i|n|g|=+0#e000e06&|!|r|}|"+0#e000002&| +0#0000000&@53 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|s+0#0000000&|t|r|i|n|g|=+0#e000e06&|:|2|0|}|"+0#e000002&| +0#0000000&@52 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&|s+0#0000000&|t|r|i|n|g|=+0#e000e06&|!|r|:|2|0|}|"+0#e000002&| +0#0000000&@50 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |}|"+0#e000002&| +0#0000000&@52 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |!|r|}|"+0#e000002&| +0#0000000&@50 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |!|r| |}|"+0#e000002&| +0#0000000&@49 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |:|2|0|}|"+0#e000002&| +0#0000000&@49 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |!|r|:|2|0|}|"+0#e000002&| +0#0000000&@47 +|t|e|s|t| |=| |f+0#e000002&|"|{+0#e000e06&| +0#0000000&|s|t|r|i|n|g| |=+0#e000e06&| |!|r| |:|2|0|}|"+0#e000002&| +0#0000000&@46 +|t|e|s|t| |=| |f+0#e000002&|"|a|b|c| |{+0#e000e06&|a+0#0000000&|[|"+0#e000002&|x|"|]+0#0000000&|}+0#e000e06&| +0#e000002&|d|e|f|"| +0#0000000&@48 +|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |c|o|n|t|a|i|n|s|:|\+0#e000e06&|n|{|"+0#e000002&|\+0#e000e06&|n|"+0#e000002&|.+0#0000000&|j|o|i|n|(|a|)|}+0#e000e06&|"+0#e000002&| +0#0000000&@34 +|t|e|s|t| |=| |f+0#e000002&|"|T|o|d|a|y|'|s| |d|a|t|e| |i|s| |{+0#e000e06&|d+0#0000000&|a|t|e|t|i|m|e|.|n|o|w|(|)|}+0#e000e06&|"+0#e000002&| +0#0000000&@32 +@57|1|7|5|,|1| @8|7|3|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_12.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_12.dump index 1f1c1dad9a..55c8de886e 100644 --- a/runtime/syntax/testdir/dumps/python_strings_bytes_12.dump +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_12.dump @@ -1,20 +1,20 @@ -|t+0&#ffffff0|e|s|t| |=| |b+0#e000002&|r|'|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|'| |a|n|d| |\|"| |a|n|d| |\|t|'| +0#0000000&@24 -|t|e|s|t| |=| |b+0#e000002&|R|"|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|0|4|0| |a|n|d| |\|x|F@1|"| +0#0000000&@27 -|t|e|s|t| |=| |B+0#e000002&|r|'|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5| |a|n|d| |\|N|{|I|N|V|E|R|T|E|D| |E|X|C|L -|A|M|A|T|I|O|N| |M|A|R|K|}|'| +0#0000000&@60 -|t|e|s|t| |=| |B+0#e000002&|R|"|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\@1| |b|a|c|k|s|l|a|s|h|e|s| |a|n|d| |l|i|t|e|r|a|l| |\| +0#0000000&@13 ->n+0#e000002&|e|w|l|i|n|e|"| +0#0000000&@66 -|t|e|s|t| |=| |r+0#e000002&|b|'|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|'| |a|n|d| |\|"| |a|n|d| |\|t|'| +0#0000000&@24 -|t|e|s|t| |=| |r+0#e000002&|B|"|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|0|4|0| |a|n|d| |\|x|F@1|"| +0#0000000&@27 -|t|e|s|t| |=| |R+0#e000002&|b|'|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5| |a|n|d| |\|N|{|I|N|V|E|R|T|E|D| |E|X|C|L -|A|M|A|T|I|O|N| |M|A|R|K|}|'| +0#0000000&@60 -|t|e|s|t| |=| |R+0#e000002&|B|"|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\@1| |b|a|c|k|s|l|a|s|h|e|s| |a|n|d| |l|i|t|e|r|a|l| |\| +0#0000000&@13 -|n+0#e000002&|e|w|l|i|n|e|"| +0#0000000&@66 -|t|e|s|t| |=| |b+0#e000002&|r|'@2|R|a|w| |b|y|t|e|s| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@33 -|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|t| |a|n|d| |\|0|4|0| |a|n|d| |\|x|F@1| +0#0000000&@42 -|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5|'@2| +0#0000000&@38 -|t|e|s|t| |=| |R+0#e000002&|B|"@2|R|a|w| |b|y|t|e|s| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@33 -|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|t| |a|n|d| |\|0|4|0| |a|n|d| |\|x|F@1| +0#0000000&@42 -|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5|"@2| +0#0000000&@38 -|~+0#4040ff13&| @73 -| +0#0000000&@56|1|9|7|,|1| @8|B|o|t| +|t+0&#ffffff0|e|s|t| |=| |f+0#e000002&|"|T|o|d|a|y|'|s| |d|a|t|e| |i|s| |{+0#e000e06&|d+0#0000000&|a|t|e|t|i|m|e|.|n|o|w|(|)|}+0#e000e06&|"+0#e000002&| +0#0000000&@32 +|t|e|s|t| |=| |f+0#e000002&|"|T|o|d|a|y|'|s| |f|o|r|m|a|t@1|e|d| |d|a|t|e| |i|s| |{+0#e000e06&|d+0#0000000&|a|t|e|t|i|m|e|.|n|o|w|(|)|:+0#e000e06&|%|Y|-|%|m|-|%|d| |%|H|:|%|M|:|%|S|}|"+0#e000002&| +0#0000000&@4 +|t|e|s|t| |=| |f+0#e000002&|"|D|a|t|e| |i|s| |{+0#e000e06&|d+0#0000000&|a|t|e|t|i|m|e|.|d|a|t|e|t|i|m|e|(|2+0#e000002&|0|1|0|,+0#0000000&| |7+0#e000002&|,+0#0000000&| |4+0#e000002&|,+0#0000000&| |1+0#e000002&|2|,+0#0000000&| |1+0#e000002&|5|,+0#0000000&| |5+0#e000002&|8|)+0#0000000&|}+0#e000e06&|"+0#e000002&| +0#0000000&@13 +|t|e|s|t| |=| |f+0#e000002&|"|F|o|r|m|a|t@1|e|d| |d|a|t|e| |i|s| |{+0#e000e06&|d+0#0000000&|a|t|e|t|i|m|e|.|d|a|t|e|t|i|m|e|(|2+0#e000002&|0|1|0|,+0#0000000&| |7+0#e000002&|,+0#0000000&| |4+0#e000002&|,+0#0000000&| |1+0#e000002&|2|,+0#0000000&| |1+0#e000002&|5|,+0#0000000&| |5+0#e000002&|8|)+0#0000000&|:+0#e000e06&|%|Y|-|%|m +|-|%|d| |%|H|:|%|M|:|%|S|}|"+0#e000002&| +0#0000000&@60 +>t|e|s|t| |=| |f+0#e000002&|"|L|a|m|b|d|a| |r|e|t|u|r|n|s| |{+0#e000e06&|(+0#0000000&|l+0#af5f00255&|a|m|b|d|a| +0#0000000&|x|:| |x|*@1|2+0#e000002&|)+0#0000000&|}+0#e000e06&|"+0#e000002&| +0#0000000&@31 +|t|e|s|t| |=| |f+0#e000002&|"|Z|e|r|o| |p|a|d@1|e|d| |l|a|m|b|d|a| |r|e|t|u|r|n|s| |{+0#e000e06&|(+0#0000000&|l+0#af5f00255&|a|m|b|d|a| +0#0000000&|x|:| |x|*@1|2+0#e000002&|)+0#0000000&|:+0#e000e06&|0|9|}|"+0#e000002&| +0#0000000&@16 +|t|e|s|t| |=| |f+0#e000002&|"|S|p|a|c|e| |p|a|d@1|e|d| |l|a|m|b|d|a| |r|e|t|u|r|n|s| |{+0#e000e06&|(+0#0000000&|l+0#af5f00255&|a|m|b|d|a| +0#0000000&|x|:| |x|*@1|2+0#e000002&|)+0#0000000&|:+0#e000e06&|{|w|i|d|t|h|}@1|"+0#e000002&| +0#0000000&@10 +|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |c|o|p|y| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|]|}+0#e000e06&|"+0#e000002&| +0#0000000&@41 +|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |s|l|i|c|e| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|1+0#e000002&|:+0#0000000&|]|}+0#e000e06&|"+0#e000002&| +0#0000000&@39 +|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |s|l|i|c|e| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|9+0#e000002&|]+0#0000000&|}+0#e000e06&|"+0#e000002&| +0#0000000&@39 +|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |e|l|e|m|e|n|t|s| |a|r|e| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|2+0#e000002&|:+0#0000000&|]|}+0#e000e06&|"+0#e000002&| +0#0000000&@34 +|t|e|s|t| |=| |f+0#e000002&|"|P|a|d@1|e|d| |l|i|s|t| |c|o|p|y| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|]|:+0#e000e06&|9@1|}|"+0#e000002&| +0#0000000&@31 +|t|e|s|t| |=| |f+0#e000002&|"|L|e|f|t|-|a|l|i|g|n|e|d| |l|i|s|t| |s|l|i|c|e| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|1+0#e000002&|:+0#0000000&|]|:+0#e000e06&|<|9@1|}|"+0#e000002&| +0#0000000&@22 +|t|e|s|t| |=| |f+0#e000002&|"|R|i|g|h|t| |a|l|i|g|n|e|d| |l|i|s|t| |s|l|i|c|e| |i|s| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|9+0#e000002&|]+0#0000000&|:+0#e000e06&|>|9@1|}|"+0#e000002&| +0#0000000&@21 +|t|e|s|t| |=| |f+0#e000002&|"|C|e|n|t|e|r|-|a|l|i|g|n|e|d| |l|i|s|t| |e|l|e|m|e|n|t|s| |a|r|e| |{+0#e000e06&|i+0#0000000&|t|e|m|s|[|:|2+0#e000002&|:+0#0000000&|]|:+0#e000e06&|^|9@1|}|"+0#e000002&| +0#0000000&@15 +|t|e|s|t| |=| |f+0#e000002&|"|E|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|x+0#0000000&| |=@1| |1+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@42 +|t|e|s|t| |=| |f+0#e000002&|"|E|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|x+0#0000000&| |!|=| |1+0#e000002&|}+0#e000e06&|"+0#e000002&| +0#0000000&@42 +|t|e|s|t| |=| |f+0#e000002&|"|E|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|(+0#0000000&|x| |:|=| |1+0#e000002&|)+0#0000000&|}+0#e000e06&|"+0#e000002&| +0#0000000&@40 +@57|1|9|2|,|1| @8|8|0|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_13.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_13.dump new file mode 100644 index 0000000000..1924c9f006 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_13.dump @@ -0,0 +1,20 @@ +|t+0&#ffffff0|e|s|t| |=| |f+0#e000002&|"|E|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|(+0#0000000&|x| |:|=| |1+0#e000002&|)+0#0000000&|}+0#e000e06&|"+0#e000002&| +0#0000000&@40 +|t|e|s|t| |=| |f+0#e000002&|"|D|e|b|u|g| |e|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|x+0#0000000&| |=@1| |1+0#e000002&|=+0#e000e06&|}|"+0#e000002&| +0#0000000&@35 +|t|e|s|t| |=| |f+0#e000002&|"|D|e|b|u|g| |e|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|x+0#0000000&| |!|=| |1+0#e000002&|=+0#e000e06&|}|"+0#e000002&| +0#0000000&@35 +|t|e|s|t| |=| |f+0#e000002&|"|D|e|b|u|g| |e|x|p|r|e|s@1|i|o|n| |i|s| |{+0#e000e06&|(+0#0000000&|x| |:|=| |1+0#e000002&|)+0#0000000&|=+0#e000e06&|}|"+0#e000002&| +0#0000000&@33 +|t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|[|x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&|]| |}+0#e000e06&|"+0#e000002&| +0#0000000&@8 +>t|e|s|t| |=| |f+0#e000002&|"|L|i|s|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|[| @35 +@8|x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&| @43 +@4|]| |}+0#e000e06&|"+0#e000002&| +0#0000000&@66 +|t|e|s|t| |=| |f+0#e000002&|"|P|a|d@1|e|d| |l|i|s|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|[|x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&|]| |:+0#e000e06&|9@1|} +|"+0#e000002&| +0#0000000&@73 +|t|e|s|t| |=| |f+0#e000002&|"|D|i|c|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|{|x|:| |x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&|}| |}+0#e000e06&|"+0#e000002&| +0#0000000&@5 +|t|e|s|t| |=| |f+0#e000002&|"|D|i|c|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|{| @35 +@8|x|:| |x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&| @40 +@4|}| |}+0#e000e06&|"+0#e000002&| +0#0000000&@66 +|t|e|s|t| |=| |f+0#e000002&|"|P|a|d@1|e|d| |d|i|c|t| |c|o|m|p|r|e|h|e|n|s|i|o|n| |r|e|t|u|r|n|s| |{+0#e000e06&| +0#0000000&|{|x|:| |x|*@1|2+0#e000002&| +0#0000000&|f+0#af5f00255&|o|r| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&|r+0#00e0e07&|a|n|g|e|(+0#0000000&|1+0#e000002&|0|)+0#0000000&|}| |:+0#e000e06& +|9@1|}|"+0#e000002&| +0#0000000&@70 +@75 +|#+0#0000e05&| |B|y|t|e|s| +0#0000000&@67 +|t|e|s|t| |=| |b+0#e000002&|'|B|y|t|e|s| |w|i|t|h| |e|s|c|a|p|e|s| |\+0#e000e06&|'| +0#e000002&|a|n|d| |\+0#e000e06&|"| +0#e000002&|a|n|d| |\+0#e000e06&|t|'+0#e000002&| +0#0000000&@29 +@57|2|1|0|,|1| @8|8|7|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_14.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_14.dump new file mode 100644 index 0000000000..882a1e9011 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_14.dump @@ -0,0 +1,20 @@ +|t+0&#ffffff0|e|s|t| |=| |b+0#e000002&|'|B|y|t|e|s| |w|i|t|h| |e|s|c|a|p|e|s| |\+0#e000e06&|'| +0#e000002&|a|n|d| |\+0#e000e06&|"| +0#e000002&|a|n|d| |\+0#e000e06&|t|'+0#e000002&| +0#0000000&@29 +|t|e|s|t| |=| |B+0#e000002&|"|B|y|t|e|s| |w|i|t|h| |e|s|c|a|p|e|s| |\+0#e000e06&|0|4|0| +0#e000002&|a|n|d| |\+0#e000e06&|x|F@1|"+0#e000002&| +0#0000000&@32 +|t|e|s|t| |=| |b+0#e000002&|'|B|y|t|e|s| |w|i|t|h| |S|y|n|t|a|x|W|a|r|n|i|n|g| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5| |a|n|d| |\|N|{|I|N|V|E|R|T|E|D| |E|X|C +|L|A|M|A|T|I|O|N| |M|A|R|K|}|'| +0#0000000&@59 +|t|e|s|t| |=| |B+0#e000002&|"|B|y|t|e|s| |w|i|t|h| |e|s|c|a|p|e|d| |\+0#e000e06&@1| +0#e000002&|b|a|c|k|s|l|a|s|h| |a|n|d| |i|g|n|o|r|e|d| |\+0#e000e06&| +0#0000000&@20 +>n+0#e000002&|e|w|l|i|n|e|"| +0#0000000&@66 +|t|e|s|t| |=| |b+0#e000002&|'@2|B|y|t|e|s| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@38 +|a+0#e000002&|n|d| |e|s|c|a|p|e|s| |\+0#e000e06&|t| +0#e000002&|a|n|d| |\+0#e000e06&|0|4|0| +0#e000002&|a|n|d| |\+0#e000e06&|x|F@1| +0#0000000&@42 +|a+0#e000002&|n|d| |S|y|n|t|a|x|W|a|r|n|i|n|g| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5|'@2| +0#0000000&@32 +|t|e|s|t| |=| |B+0#e000002&|"@2|B|y|t|e|s| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@38 +|a+0#e000002&|n|d| |e|s|c|a|p|e|s| |\+0#e000e06&|t| +0#e000002&|a|n|d| |\+0#e000e06&|0|4|0| +0#e000002&|a|n|d| |\+0#e000e06&|x|F@1| +0#0000000&@42 +|a+0#e000002&|n|d| |S|y|n|t|a|x|W|a|r|n|i|n|g| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5|"@2| +0#0000000&@32 +@75 +|#+0#0000e05&| |R|a|w| |b|y|t|e|s| +0#0000000&@63 +|t|e|s|t| |=| |b+0#e000002&|r|'|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|'| |a|n|d| |\|"| |a|n|d| |\|t|'| +0#0000000&@24 +|t|e|s|t| |=| |b+0#e000002&|R|"|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|0|4|0| |a|n|d| |\|x|F@1|"| +0#0000000&@27 +|t|e|s|t| |=| |B+0#e000002&|r|'|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5| |a|n|d| |\|N|{|I|N|V|E|R|T|E|D| |E|X|C|L +|A|M|A|T|I|O|N| |M|A|R|K|}|'| +0#0000000&@60 +|t|e|s|t| |=| |B+0#e000002&|R|"|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\@1| |b|a|c|k|s|l|a|s|h|e|s| |a|n|d| |l|i|t|e|r|a|l| |\| +0#0000000&@13 +@57|2@1|5|,|1| @8|9|4|%| diff --git a/runtime/syntax/testdir/dumps/python_strings_bytes_15.dump b/runtime/syntax/testdir/dumps/python_strings_bytes_15.dump new file mode 100644 index 0000000000..52fce247fe --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_strings_bytes_15.dump @@ -0,0 +1,20 @@ +|t+0&#ffffff0|e|s|t| |=| |B+0#e000002&|R|"|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\@1| |b|a|c|k|s|l|a|s|h|e|s| |a|n|d| |l|i|t|e|r|a|l| |\| +0#0000000&@13 +|n+0#e000002&|e|w|l|i|n|e|"| +0#0000000&@66 +|t|e|s|t| |=| |r+0#e000002&|b|'|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|'| |a|n|d| |\|"| |a|n|d| |\|t|'| +0#0000000&@24 +|t|e|s|t| |=| |r+0#e000002&|B|"|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|0|4|0| |a|n|d| |\|x|F@1|"| +0#0000000&@27 +|t|e|s|t| |=| |R+0#e000002&|b|'|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5| |a|n|d| |\|N|{|I|N|V|E|R|T|E|D| |E|X|C|L +|A|M|A|T|I|O|N| |M|A|R|K|}|'| +0#0000000&@60 +>t|e|s|t| |=| |R+0#e000002&|B|"|R|a|w| |b|y|t|e|s| |w|i|t|h| |l|i|t|e|r|a|l| |\@1| |b|a|c|k|s|l|a|s|h|e|s| |a|n|d| |l|i|t|e|r|a|l| |\| +0#0000000&@13 +|n+0#e000002&|e|w|l|i|n|e|"| +0#0000000&@66 +|t|e|s|t| |=| |b+0#e000002&|r|'@2|R|a|w| |b|y|t|e|s| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@33 +|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|t| |a|n|d| |\|0|4|0| |a|n|d| |\|x|F@1| +0#0000000&@42 +|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5|'@2| +0#0000000&@38 +|t|e|s|t| |=| |R+0#e000002&|B|"@2|R|a|w| |b|y|t|e|s| |w|i|t|h| |q|u|o|t|e|s| |'| |a|n|d| |"| +0#0000000&@33 +|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|t| |a|n|d| |\|0|4|0| |a|n|d| |\|x|F@1| +0#0000000&@42 +|a+0#e000002&|n|d| |l|i|t|e|r|a|l| |\|u|0@1|A|1| |a|n|d| |\|U|0@2|1|0|6|0|5|"@2| +0#0000000&@38 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|2|4|2|,|1| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/sml_00.dump b/runtime/syntax/testdir/dumps/sml_00.dump new file mode 100644 index 0000000000..0cd2ed21f0 --- /dev/null +++ b/runtime/syntax/testdir/dumps/sml_00.dump @@ -0,0 +1,20 @@ +>(+0#0000e05#ffffff0|*| |I|n|t|e|g|e|r| |c|o|n|s|t|a|n|t|s| |*|)| +0#0000000&@51 +@75 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&|;+0#af5f00255&| +0#0000000&@64 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|;+0#af5f00255&| +0#0000000&@63 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&|x|2|A|;+0#af5f00255&| +0#0000000&@61 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~+0#e000002&|4|2|;+0#af5f00255&| +0#0000000&@8|(+0#0000e05&|*| |s|i|n|g|l|e| |t|o|k|e|n| |*|)| +0#0000000&@35 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~+0#e000002&|0|x|2|A|;+0#af5f00255&| +0#0000000&@6|(+0#0000e05&|*| |s|i|n|g|l|e| |t|o|k|e|n| |*|)| +0#0000000&@35 +@75 +@75 +|(+0#0000e05&|*| |W|o|r|d| |c|o|n|s|t|a|n|t|s| |*|)| +0#0000000&@54 +@75 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&|w|0|;+0#af5f00255&| +0#0000000&@62 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&|w|4|2|;+0#af5f00255&| +0#0000000&@61 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&|w|x|2|A|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~|0+0#e000002&|w|4|2|;+0#af5f00255&| +0#0000000&@6|(+0#0000e05&|*| |n|o|n|f|i|x| |~| |*|)| +0#0000000&@39 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~|0+0#e000002&|w|x|2|A|;+0#af5f00255&| +0#0000000&@5|(+0#0000e05&|*| |n|o|n|f|i|x| |~| |*|)| +0#0000000&@39 +@75 +@75 +|(+0#0000e05&|*| |R|e|a|l| |c|o|n|s|t|a|n|t|s| |*|)| +0#0000000&@54 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/sml_01.dump b/runtime/syntax/testdir/dumps/sml_01.dump new file mode 100644 index 0000000000..ad993264a8 --- /dev/null +++ b/runtime/syntax/testdir/dumps/sml_01.dump @@ -0,0 +1,20 @@ +|v+0#af5f00255#ffffff0|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&|w|x|2|A|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~|0+0#e000002&|w|4|2|;+0#af5f00255&| +0#0000000&@6|(+0#0000e05&|*| |n|o|n|f|i|x| |~| |*|)| +0#0000000&@39 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~|0+0#e000002&|w|x|2|A|;+0#af5f00255&| +0#0000000&@5|(+0#0000e05&|*| |n|o|n|f|i|x| |~| |*|)| +0#0000000&@39 +@75 +@75 +>(+0#0000e05&|*| |R|e|a|l| |c|o|n|s|t|a|n|t|s| |*|)| +0#0000000&@54 +@75 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&|.|0|;+0#af5f00255&| +0#0000000&@62 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|.|4|2|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|E|4|2|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|E|~|4|2|;+0#af5f00255&| +0#0000000&@59 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|.|4|2|E|4|2|;+0#af5f00255&| +0#0000000&@57 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|4+0#e000002&|2|.|4|2|E|~|4|2|;+0#af5f00255&| +0#0000000&@56 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~+0#e000002&|4|2|.|4|2|;+0#af5f00255&| +0#0000000&@5|(+0#0000e05&|*| |s|i|n|g|l|e| |t|o|k|e|n| |*|)| +0#0000000&@35 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~+0#e000002&|4|2|.|4|2|;+0#af5f00255&| +0#0000000&@5|(+0#0000e05&|*| |s|i|n|g|l|e| |t|o|k|e|n| |*|)| +0#0000000&@35 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~+0#e000002&|4|2|E|4|2|;+0#af5f00255&| +0#0000000&@5|(+0#0000e05&|*| |s|i|n|g|l|e| |t|o|k|e|n| |*|)| +0#0000000&@35 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~+0#e000002&|4|2|E|~|4|2|;+0#af5f00255&| +0#0000000&@4|(+0#0000e05&|*| |s|i|n|g|l|e| |t|o|k|e|n| |*|)| +0#0000000&@35 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~+0#e000002&|4|2|.|4|2|E|4|2|;+0#af5f00255&| +0#0000000&@2|(+0#0000e05&|*| |s|i|n|g|l|e| |t|o|k|e|n| |*|)| +0#0000000&@35 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~+0#e000002&|4|2|.|4|2|E|~|4|2|;+0#af5f00255&| +0#0000000&@1|(+0#0000e05&|*| |s|i|n|g|l|e| |t|o|k|e|n| |*|)| +0#0000000&@35 +@57|1|9|,|1| @9|2|5|%| diff --git a/runtime/syntax/testdir/dumps/sml_02.dump b/runtime/syntax/testdir/dumps/sml_02.dump new file mode 100644 index 0000000000..d0e873e17c --- /dev/null +++ b/runtime/syntax/testdir/dumps/sml_02.dump @@ -0,0 +1,20 @@ +|v+0#af5f00255#ffffff0|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|~+0#e000002&|4|2|.|4|2|E|~|4|2|;+0#af5f00255&| +0#0000000&@1|(+0#0000e05&|*| |s|i|n|g|l|e| |t|o|k|e|n| |*|)| +0#0000000&@35 +@75 +@75 +|(+0#0000e05&|*| |C|h|a|r|a|c|t|e|r| |c|o|n|s|t|a|n|t|s| |*|)| +0#0000000&@49 +@75 +>v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|a|"|;+0#af5f00255&| +0#0000000&@61 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|a|"+0#e000002&|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|b|"+0#e000002&|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|t|"+0#e000002&|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|n|"+0#e000002&|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|v|"+0#e000002&|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|f|"+0#e000002&|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|r|"+0#e000002&|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|"|"+0#e000002&|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&@1|"+0#e000002&|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|^|@|"+0#e000002&|;+0#af5f00255&| +0#0000000&@59 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|^|A|"+0#e000002&|;+0#af5f00255&| +0#0000000&@59 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|^|K|"+0#e000002&|;+0#af5f00255&| +0#0000000&@59 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|^|Z|"+0#e000002&|;+0#af5f00255&| +0#0000000&@59 +@57|3|7|,|1| @9|5|9|%| diff --git a/runtime/syntax/testdir/dumps/sml_03.dump b/runtime/syntax/testdir/dumps/sml_03.dump new file mode 100644 index 0000000000..336d0060a1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/sml_03.dump @@ -0,0 +1,20 @@ +|v+0#af5f00255#ffffff0|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|^|Z|"+0#e000002&|;+0#af5f00255&| +0#0000000&@59 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|^|[|"+0#e000002&|;+0#af5f00255&| +0#0000000&@59 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|^|\|"+0#e000002&|;+0#af5f00255&| +0#0000000&@59 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|^|]|"+0#e000002&|;+0#af5f00255&| +0#0000000&@59 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|^@1|"+0#e000002&|;+0#af5f00255&| +0#0000000&@59 +>v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|^|_|"+0#e000002&|;+0#af5f00255&| +0#0000000&@59 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|0@2|"+0#e000002&|;+0#af5f00255&| +0#0000000&@58 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|9@2|"+0#e000002&|;+0#af5f00255&| +0#0000000&@58 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|u|0@3|"+0#e000002&|;+0#af5f00255&| +0#0000000&@56 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|#+0#e000002&|"|\+0#e000e06&|u|F@3|"+0#e000002&|;+0#af5f00255&| +0#0000000&@56 +@75 +@75 +|(+0#0000e05&|*| |S|t|r|i|n|g| |c|o|n|s|t|a|n|t|s| |*|)| +0#0000000&@52 +@75 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&@1|;+0#af5f00255&| +0#0000000&@63 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|a|b|c|"|;+0#af5f00255&| +0#0000000&@60 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|.@2|\+0#e000e06&|a|.+0#e000002&@2|\+0#e000e06&|b|.+0#e000002&@2|\+0#e000e06&|t|.+0#e000002&@2|\+0#e000e06&|n|.+0#e000002&@2|\+0#e000e06&|v|.+0#e000002&@2|\+0#e000e06&|f|.+0#e000002&@2|\+0#e000e06&|r|.+0#e000002&@2|\+0#e000e06&|"|.+0#e000002&@2|\+0#e000e06&@1|.+0#e000002&@2|"|;+0#af5f00255&| +0#0000000&@15 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|.@2|\+0#e000e06&|^|@|.+0#e000002&@2|\+0#e000e06&|^|A|.+0#e000002&@2|\+0#e000e06&|^|K|.+0#e000002&@2|\+0#e000e06&|^|Z|.+0#e000002&@2|\+0#e000e06&|^|[|.+0#e000002&@2|\+0#e000e06&|^|\|.+0#e000002&@2|\+0#e000e06&|^|]|.+0#e000002&@2|\+0#e000e06&|^@1|.+0#e000002&@2|\+0#e000e06&|^|_|.+0#e000002&@2|"|;+0#af5f00255&| +0#0000000&@6 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|\+0#e000e06&|0@2|.+0#e000002&@2|\+0#e000e06&|9@2|.+0#e000002&@2|\+0#e000e06&|u|0@3|.+0#e000002&@2|\+0#e000e06&|u|F@3|.+0#e000002&@2|"|;+0#af5f00255&| +0#0000000&@31 +@57|5@1|,|1| @9|9|4|%| diff --git a/runtime/syntax/testdir/dumps/sml_04.dump b/runtime/syntax/testdir/dumps/sml_04.dump new file mode 100644 index 0000000000..53e86ef42c --- /dev/null +++ b/runtime/syntax/testdir/dumps/sml_04.dump @@ -0,0 +1,20 @@ +|v+0#af5f00255#ffffff0|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|\+0#e000e06&|0@2|.+0#e000002&@2|\+0#e000e06&|9@2|.+0#e000002&@2|\+0#e000e06&|u|0@3|.+0#e000002&@2|\+0#e000e06&|u|F@3|.+0#e000002&@2|"|;+0#af5f00255&| +0#0000000&@31 +|v+0#af5f00255&|a|l| +0#0000000&|_+0#af5f00255&| +0#0000000&|=+0#af5f00255&| +0#0000000&|"+0#e000002&|.@2|\+0#e000e06&| +0#0000000&@61 +| +0#e000e06&@11|\|.+0#e000002&@2|"|;+0#af5f00255&| +0#0000000&@56 +> @74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|7|1|,|0|-|1| @7|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim9_comments_04.dump b/runtime/syntax/testdir/dumps/vim9_comments_04.dump index 22353a0de5..e5606ee7b4 100644 --- a/runtime/syntax/testdir/dumps/vim9_comments_04.dump +++ b/runtime/syntax/testdir/dumps/vim9_comments_04.dump @@ -3,7 +3,7 @@ |#+0#0000e05&| +0#0000000&|I+0#e000e06&|s@1|u|e|:| +0#0000e05&|#|1|3|0|4|7| +0#0000000&@59 @75 |i+0#af5f00255&|f| +0#0000000&|!+0#af5f00255&|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|"+0#e000002&|:|D|i|f@1|O|r|i|g|"|)+0#e000e06&| +0#0000000&@51 -@2>c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#af5f00255&|n+0#0000000&|o|f|i|l|e| ||| |r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e+0#00e0e07&|d|i|t| +0#0000000&|%+0#af5f00255&@1| +0#0000000&||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000& +@2>c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|D|i|f@1|O|r|i|g| |v+0#af5f00255&|e|r|t| +0#0000000&|n+0#af5f00255&|e|w| +0#0000000&||| |s+0#af5f00255&|e|t| +0#0000000&|b+0#e000e06&|t|=+0#af5f00255&|n+0#0000000&|o|f|i|l|e| ||| |r+0#af5f00255&| +0#0000000&|++0#af5f00255&@1|e+0#00e0e07&|d|i|t| +0#0000000&|%+0#af5f00255&|%+0#00e0e07&| +0#0000000&||| |0+0#e000002&|d+0#0000000&|_| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000& @18|\+0#e000e06&| +0#0000000&||| |w+0#af5f00255&|i|n|c|m|d| +0#0000000&|p| ||| |d+0#af5f00255&|i|f@1|t|h|i|s| +0#0000000&@33 |e+0#af5f00255&|n|d|i|f| +0#0000000&@69 @75 diff --git a/runtime/syntax/testdir/dumps/vim9_function_calls_02.dump b/runtime/syntax/testdir/dumps/vim9_function_calls_02.dump index 4960c052f1..db1e0130cd 100644 --- a/runtime/syntax/testdir/dumps/vim9_function_calls_02.dump +++ b/runtime/syntax/testdir/dumps/vim9_function_calls_02.dump @@ -8,7 +8,7 @@ |#+0#0000e05&| |f|u|n|c|t|i|o|n| +0#0000000&@64 |c+0#00e0e07&|h|d|i|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@65 |#+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65 -|c+0#af5f00255&|h|d|i|r| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@64 +|c+0#af5f00255&|h|d|i|r| +0#0000000&|(|4|2|)| @64 @75 |v+0#af5f00255&|a|r| +0#0000000&|c|o|n|f|i|r|m| |=+0#af5f00255&| +0#0000000&|c+0#00e0e07&|o|n|f|i|r|m|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@49 |c+0#af5f00255&|a|l@1| +0#0000000&|c+0#00e0e07&|o|n|f|i|r|m|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@58 diff --git a/runtime/syntax/testdir/dumps/vim9_types_00.dump b/runtime/syntax/testdir/dumps/vim9_types_00.dump index 9513a41943..515da0f089 100644 --- a/runtime/syntax/testdir/dumps/vim9_types_00.dump +++ b/runtime/syntax/testdir/dumps/vim9_types_00.dump @@ -1,13 +1,13 @@ >v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64 |#+0#0000e05&| |V|i|m|9| |t|y|p|e|s| +0#0000000&@62 |#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|T|y|p|e|A|n|y| |T|o|d|o| +0#0000000&@34 -|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|V|a|r|i|a|b|l|e|T|y|p|e|A|n|y| |T|o|d|o| +0#0000000&@26 +|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|V|a|r|i|a|b|l|e|T|y|p|e|A|n|y| |T|o|d|o| +0#0000000&@25 @75 @75 |#+0#0000e05&| |b|u|i|l|t|i|n| |t|y|p|e|s| |(|d|i|s|t|i|n|c|t| |a|n|y| |h|i|g|h|l|i|g|h|t|i|n|g|)| +0#0000000&@31 @75 |v+0#af5f00255&|a|r| +0#0000000&|f|o@1|:| |b+0#00e0003&|o@1|l| +0#0000000&@61 -|v+0#af5f00255&|a|r| +0#0000000&|b|a|r|:| |a+0#00e0003&|n|y| +0#0000000&@62 +|v+0#af5f00255&|a|r| +0#0000000&|b|a|r|:| |a+0#0000001#ffff4012|n|y| +0#0000000#ffffff0@62 @75 |d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|a+0#0000000&|r|g|:| |b+0#00e0003&|o@1|l|)+0#e000e06&|:+0#0000000&| |b+0#00e0003&|o@1|l| +0#0000000&@50 |e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 diff --git a/runtime/syntax/testdir/dumps/vim9_types_example_object_00.dump b/runtime/syntax/testdir/dumps/vim9_types_example_object_00.dump new file mode 100644 index 0000000000..a60f904057 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_types_example_object_00.dump @@ -0,0 +1,20 @@ +>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64 +|#+0#0000e05&| |V|i|m|9| |o|b|j|e|c|t| |t|y|p|e| |c|o|n|s|t|r|u|c|t|o|r| +0#0000000&@44 +@75 +@75 +|#+0#0000e05&| |I|s@1|u|e| |#|1|8|6|7@1| |(|N|o| |r|e|c|o|g|n|i|t|i|o|n| |o|f| |o|b|j|e|c|t|<|a|n|y|>| |t|y|p|e|s| |-| |A|l|i|a|k|s|e|i| |B|u|d|a|v|e|i|)| +0#0000000&@3 +|| @73 +|i+0#af5f00255&|n|t|e|r|f|a|c|e| +0#0000000&|I| @63 +@2|d+0#af5f00255&|e|f| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|)|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@52 +|e+0#af5f00255&|n|d|i|n|t|e|r|f|a|c|e| +0#0000000&@62 +@75 +|c+0#af5f00255&|l|a|s@1| +0#0000000&|C| |i+0#af5f00255&|m|p|l|e|m|e|n|t|s| +0#0000000&|I| @54 +@2|d+0#af5f00255&|e|f| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|)|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@52 +@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&|C|"| +0#0000000&@60 +@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66 +|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66 +@75 +|e+0#af5f00255&|n|u|m| +0#0000000&|E| |i+0#af5f00255&|m|p|l|e|m|e|n|t|s| +0#0000000&|I| @55 +@2|I|N|S|T|A|N|C|E| @64 +@75 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim9_types_example_object_01.dump b/runtime/syntax/testdir/dumps/vim9_types_example_object_01.dump new file mode 100644 index 0000000000..21d48d7c59 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_types_example_object_01.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66 +|e+0#af5f00255&|n|d|c|l|a|s@1| +0#0000000&@66 +@75 +|e+0#af5f00255&|n|u|m| +0#0000000&|E| |i+0#af5f00255&|m|p|l|e|m|e|n|t|s| +0#0000000&|I| @55 +@2|I|N|S|T|A|N|C|E| @64 +> @74 +@2|d+0#af5f00255&|e|f| +0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|)|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g| +0#0000000&@52 +@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|"+0#e000002&|E|"| +0#0000000&@60 +@2|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@66 +|e+0#af5f00255&|n|d|e|n|u|m| +0#0000000&@67 +@75 +|v+0#af5f00255&|a|r| +0#0000000&|c|:| |o+0#00e0003&|b|j|e|c|t|<|C+0#0000000&|>+0#00e0003&| +0#0000000&|=+0#af5f00255&| +0#0000000&|C|.|n+0#00e0e07&|e|w|(+0#e000e06&|)| +0#0000000&@48 +|v+0#af5f00255&|a|r| +0#0000000&|e|:| |o+0#00e0003&|b|j|e|c|t|<|E+0#0000000&|>+0#00e0003&| +0#0000000&|=+0#af5f00255&| +0#0000000&|E|.+0#af5f00255&|I+0#0000000&|N|S|T|A|N|C|E| @45 +|v+0#af5f00255&|a|r| +0#0000000&|o|s|:| |t+0#00e0003&|u|p|l|e|<|o|b|j|e|c|t|<|a|n|y|>|,+0#0000000&| |o+0#00e0003&|b|j|e|c|t|<|I+0#0000000&|>+0#00e0003&@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|c+0#0000000&|,| |e|)+0#e000e06&| +0#0000000&@28 +|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&|c+0#0000000&|,| |e|)+0#e000e06&| +0#0000000&|=+0#af5f00255&@1| +0#0000000&|o|s| @57 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|9|,|0|-|1| @7|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim9_types_object_00.dump b/runtime/syntax/testdir/dumps/vim9_types_object_00.dump new file mode 100644 index 0000000000..efd7f06a07 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_types_object_00.dump @@ -0,0 +1,20 @@ +>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64 +|#+0#0000e05&| |V|i|m|9| |o|b|j|e|c|t| |t|y|p|e| |c|o|n|s|t|r|u|c|t|o|r| +0#0000000&@44 +|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|T|y|p|e|O|b|j|e|c|t| |T|o|d|o| +0#0000000&@31 +|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|T|y|p|e|O|b|j|e|c|t|B|r|a|c|k|e|t| |T|i|t|l|e| +0#0000000&@23 +@75 +@75 +|i+0#af5f00255&|n|t|e|r|f|a|c|e| +0#0000000&|I| @63 +|e+0#af5f00255&|n|d|i|n|t|e|r|f|a|c|e| +0#0000000&@62 +@75 +|v+0#af5f00255&|a|r| +0#0000000&|a|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|I+0#0000000&|>+0#e000e06&| +0#0000000&@58 +|v+0#af5f00255&|a|r| +0#0000000&|b|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|a+0#00e0003&|n|y|>+0#e000e06&| +0#0000000&@56 +|v+0#af5f00255&|a|r| +0#0000000&|c|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|I+0#0000000&|>+0#e000e06&@1| +0#0000000&@50 +|v+0#af5f00255&|a|r| +0#0000000&|d|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|a+0#00e0003&|n|y|>+0#e000e06&@1| +0#0000000&@48 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@66 +@4|a|r|g|1|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|I+0#0000000&|>+0#e000e06&|,+0#0000000&| @54 +@4|a|r|g|2|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|a+0#00e0003&|n|y|>+0#e000e06&|,+0#0000000&| @52 +@4|a|r|g|3|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|I+0#0000000&|>+0#e000e06&@1|,+0#0000000&| @46 +@4|a|r|g|4|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|a+0#00e0003&|n|y|>+0#e000e06&@1|)| +0#0000000&@44 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim9_types_object_01.dump b/runtime/syntax/testdir/dumps/vim9_types_object_01.dump new file mode 100644 index 0000000000..7f9cd31527 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim9_types_object_01.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&| +0#0000000&@66 +@4|a|r|g|1|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|I+0#0000000&|>+0#e000e06&|,+0#0000000&| @54 +@4|a|r|g|2|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|a+0#00e0003&|n|y|>+0#e000e06&|,+0#0000000&| @52 +@4|a|r|g|3|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|I+0#0000000&|>+0#e000e06&@1|,+0#0000000&| @46 +@4>a|r|g|4|:| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|a+0#00e0003&|n|y|>+0#e000e06&@1|)| +0#0000000&@44 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)|:+0#0000000&| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|I+0#0000000&|>+0#e000e06&| +0#0000000&@54 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|B|a|z|(+0#e000e06&|)|:+0#0000000&| |o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|o+0#0000001#ffff4012|b|j|e|c|t|<+0#e000e06#ffffff0|I+0#0000000&|>+0#e000e06&@1| +0#0000000&@46 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|9|,|5| @9|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_augroup_01.dump b/runtime/syntax/testdir/dumps/vim_ex_augroup_01.dump index a65389726a..37bc23dc57 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_augroup_01.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_augroup_01.dump @@ -17,4 +17,4 @@ | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 | +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|\+0#0000001#ffff4012|||e|c|h|o|\||| +0#0000000#ffffff0||| |a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&||| |a+0#af5f00255&|u|g|r|o|u|p| +0#0000000&|E|N|D| @30 | +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|\+0#0000001#ffff4012|||e|c|h|o|\||| +0#0000000#ffffff0@55 -@57|1|9|,|1| @9|3|0|%| +@57|1|9|,|1| @9|2|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_augroup_02.dump b/runtime/syntax/testdir/dumps/vim_ex_augroup_02.dump index aac0399d37..1a311c4cf7 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_augroup_02.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_augroup_02.dump @@ -10,11 +10,11 @@ | +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|\+0#0000001#ffff4012|"|\||| +0#0000000#ffffff0@59 | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |t|r|a|i|l|i|n|g| |b|a|r| |a|n|d| |t|a|i|l| |c|o|m@1|e|n|t|s| +0#0000000&@40 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 |-+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|f+0#0000001#ffff4012|o@1|"+0#0000e05#ffffff0|c|o|m@1|e|n|t| +0#0000000&@52 -||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u|!| +0#0000000&@67 -||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@47 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&@62 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@42 ||+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|E|N|D|"+0#0000e05&|c|o|m@1|e|n|t| +0#0000000&@53 | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 -|-+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|f+0#0000001#ffff4012|o@1||+0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@49 -||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u|!| +0#0000000&@67 -@57|3|7|,|1| @9|7|2|%| +@57|3|7|,|1| @9|5|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_augroup_03.dump b/runtime/syntax/testdir/dumps/vim_ex_augroup_03.dump index 2b9bb8b37e..c5f527cc23 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_augroup_03.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_augroup_03.dump @@ -1,20 +1,20 @@ -||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u|!| +0#0000000&@67 -||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@47 -||+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|E|N|D|||e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50 | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@1|f+0#0000001#ffff4012|o@1||+0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@49 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u|t|o|c|m|d|!| +0#0000000&@62 +||+0#0000e05#a8a8a8255| | +0#0000000#ffffff0@1|a+0#af5f00255&|u|t|o|c|m|d| +0#0000000&|B+0#00e0003&|u|f|R|e|a|d| +0#0000000&|*+0#e000e06&| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@42 +||+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|E|N|D|||e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@50 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 | +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|f+0#0000001#ffff4012|o@1|"+0#0000e05#ffffff0|c|o|m@1|e|n|t| +0#0000000&@52 -| +0#0000e05#a8a8a8255@1>a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|f+0#0000001#ffff4012|o@1||+0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@49 +| +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p|!| +0#0000000&|f+0#0000001#ffff4012|o@1||+0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@49 | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 | +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |l|i|s|t| |g|r|o|u|p|s| +0#0000000&@59 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 | +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&@65 | +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|F|o@1|"| +0#0000000&@52 | +0#0000e05#a8a8a8255@1|a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@55 | +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 -|~+0#4040ff13&| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -| +0#0000000&@56|5@1|,|1| @9|B|o|t| +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +| +0#0000e05#a8a8a8255@1|"+0&#ffffff0| |g|r|o|u|p|s| |n|a|m|e|d| |E|N|D|*| +0#0000000&@53 +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +@57|5@1|,|0|-|1| @7|9|4|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_augroup_04.dump b/runtime/syntax/testdir/dumps/vim_ex_augroup_04.dump new file mode 100644 index 0000000000..4f7fc37771 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_augroup_04.dump @@ -0,0 +1,20 @@ +| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72 +|-+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|e+0#0000001#ffff4012|n|d|i|n|g| +0#0000000#ffffff0@58 +||+0#0000e05#a8a8a8255| |a+0#af5f00255#ffffff0|u|g|r|o|u|p| +0#0000000&|E|N|D| @61 +| +0#0000e05#a8a8a8255@1> +0#0000000#ffffff0@72 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|7|1|,|0|-|1| @7|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_00.dump b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_00.dump new file mode 100644 index 0000000000..33e0d7d1cd --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|b|r|e|a|k|*| |c|o|m@1|a|n|d|s| +0#0000000&@52 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|B|r|e|a|k|p|o|i|n|t|N|u|m|b|e|r| |N|u|m|b|e|r| +0#0000000&@23 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|B|r|e|a|k|p|o|i|n|t|F|u|n|c|t|i|o|n|L|i|n|e| |N|u|m|b|e|r| +0#0000000&@17 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|B|r|e|a|k|p|o|i|n|t|F|i|l|e|L|i|n|e| |N|u|m|b|e|r| +0#0000000&@21 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|B|r|e|a|k|p|o|i|n|t|F|i|l|e|n|a|m|e| |I|d|e|n|t|i|f|i|e|r| +0#0000000&@17 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|B|r|e|a|k|p|o|i|n|t|F|u|n|c|t|i|o|n| |T|y|p|e| +0#0000000&@23 +@75 +@75 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@57 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|4+0#e000002&|2| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@54 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@53 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|4+0#e000002&|2| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@50 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|h+0#e000e06&|e|r|e| +0#0000000&@61 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|e+0#e000e06&|x|p|r| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1| @55 +@75 +|b+0#af5f00255&|r|e|a|k|l|i|s|t| +0#0000000&@65 +@75 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|4+0#e000002&|2| +0#0000000&@63 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|*+0#e000e06&| +0#0000000&@64 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_01.dump b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_01.dump new file mode 100644 index 0000000000..7ee1e128d5 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_01.dump @@ -0,0 +1,20 @@ +|b+0#af5f00255#ffffff0|r|e|a|k|a|d@1| +0#0000000&|e+0#e000e06&|x|p|r| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1| @55 +@75 +|b+0#af5f00255&|r|e|a|k|l|i|s|t| +0#0000000&@65 +@75 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|4+0#e000002&|2| +0#0000000&@63 +>b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|*+0#e000e06&| +0#0000000&@64 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@57 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|4+0#e000002&|2| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@54 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@53 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|4+0#e000002&|2| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@50 +@75 +|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@55 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|4+0#e000002&|2| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@52 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@51 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|4+0#e000002&|2| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@48 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|h+0#e000e06&|e|r|e| +0#0000000&@59 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|e+0#e000e06&|x|p|r| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1| @53 +@75 +@57|1|9|,|1| @9|1|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_02.dump b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_02.dump new file mode 100644 index 0000000000..1faa79ccbe --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_02.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +@2|b+0#af5f00255&|r|e|a|k|l|i|s|t| +0#0000000&@63 +@75 +@2|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|4+0#e000002&|2| +0#0000000&@61 +@2|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|*+0#e000e06&| +0#0000000&@62 +@2>b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@55 +@2|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|4+0#e000002&|2| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@52 +@2|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@51 +@2|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|4+0#e000002&|2| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@48 +|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|V|i|m|9|C|o|n|t|e|x|t|(+0#e000e06&|)| +0#0000000&@57 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@55 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|4+0#e000002&|2| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@52 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@51 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|4+0#e000002&|2| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@48 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|h+0#e000e06&|e|r|e| +0#0000000&@59 +@2|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|e+0#e000e06&|x|p|r| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1| @53 +@75 +@57|3|7|,|3| @9|4|0|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_03.dump b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_03.dump new file mode 100644 index 0000000000..18450b879f --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_03.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +@2|b+0#af5f00255&|r|e|a|k|l|i|s|t| +0#0000000&@63 +@75 +@2|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|4+0#e000002&|2| +0#0000000&@61 +@2|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|*+0#e000e06&| +0#0000000&@62 +@2>b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@55 +@2|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|4+0#e000002&|2| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@52 +@2|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@51 +@2|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|4+0#e000002&|2| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@48 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +@75 +@75 +|"+0#0000e05&| |t|a|i|l| |c|o|m@1|e|n|t| |a|n|d| |t|r|a|i|l|i|n|g| |b|a|r| +0#0000000&@43 +@75 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@7|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|4+0#e000002&|2| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@4|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@3|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|4+0#e000002&|2| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|h+0#e000e06&|e|r|e| +0#0000000&@11|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +@57|5@1|,|3| @9|6|4|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_04.dump b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_04.dump new file mode 100644 index 0000000000..3e21309a81 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_04.dump @@ -0,0 +1,20 @@ +|b+0#af5f00255#ffffff0|r|e|a|k|a|d@1| +0#0000000&|h+0#e000e06&|e|r|e| +0#0000000&@11|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|e+0#e000e06&|x|p|r| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1| @5|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +@75 +|b+0#af5f00255&|r|e|a|k|l|i|s|t| +0#0000000&@15|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +@75 +>b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|4+0#e000002&|2| +0#0000000&@13|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|*+0#e000e06&| +0#0000000&@14|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@7|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|4+0#e000002&|2| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@4|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@3|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|4+0#e000002&|2| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@40 +@75 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@7||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|4+0#e000002&|2| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@4||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@3||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|4+0#e000002&|2| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|h+0#e000e06&|e|r|e| +0#0000000&@11||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +|b+0#af5f00255&|r|e|a|k|a|d@1| +0#0000000&|e+0#e000e06&|x|p|r| +0#0000000&|g+0#00e0e07&|:|f+0#0000000&|o@1| @5||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +@75 +@57|7|3|,|1| @9|8@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_05.dump b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_05.dump new file mode 100644 index 0000000000..8525bc7b2e --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_breakpoint_commands_05.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|b+0#af5f00255&|r|e|a|k|l|i|s|t| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +@75 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|4+0#e000002&|2| +0#0000000&@13||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|*+0#e000e06&| +0#0000000&@14||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +>b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@7||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|u|n|c| +0#0000000&|4+0#e000002&|2| +0#0000000&|F+0#00e0003&|o@1| +0#0000000&@4||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&@3||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +|b+0#af5f00255&|r|e|a|k|d|e|l| +0#0000000&|f+0#e000e06&|i|l|e| +0#0000000&|4+0#e000002&|2| +0#0000000&|f+0#00e0e07&|o@1|.|t|x|t| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@37 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|9|1|,|1| @9|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_cd_00.dump b/runtime/syntax/testdir/dumps/vim_ex_cd_00.dump new file mode 100644 index 0000000000..fa388fef1d --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_cd_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|c|d| |c|o|m@1|a|n|d|s| +0#0000000&@56 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|C|d|A|r|g| |T|o|d|o| +0#0000000&@36 +@75 +@75 +|c+0#af5f00255&|d| +0#0000000&@72 +|c+0#af5f00255&|d|!| +0#0000000&@71 +|c+0#af5f00255&|d| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@67 +|c+0#af5f00255&|d|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@67 +|c+0#af5f00255&|d| +0#0000000&@1|%+0#00e0e07&|:|h|/+0#0000001#ffff4012|f|o@1| +0#0000000#ffffff0@63 +|c+0#af5f00255&|d|!| +0#0000000&|%+0#00e0e07&|:|h|/+0#0000001#ffff4012|f|o@1| +0#0000000#ffffff0@63 +|c+0#af5f00255&|d| +0#0000000&@1|f+0#0000001#ffff4012|o@1| |b|a|r|/|b|a|z| +0#0000000#ffffff0@59 +|c+0#af5f00255&|d|!| +0#0000000&|f+0#0000001#ffff4012|o@1| |b|a|r|/|b|a|z| +0#0000000#ffffff0@59 +|c+0#af5f00255&|d| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@69 +|c+0#af5f00255&|d|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@69 +@75 +|c+0#af5f00255&|d| +0#0000000&|\+0#0000001#ffff4012|"|f|o@1|\|"|b|a|r|\|"| +0#0000000#ffffff0@59 +|c+0#af5f00255&|d| +0#0000000&|\+0#0000001#ffff4012|||f|o@1|\|||b|a|r|\||| +0#0000000#ffffff0@59 +|c+0#af5f00255&|d| +0#0000000&|\+0#0000001#ffff4012|#|f|o@1|\|#|b|a|r|\|#| +0#0000000#ffffff0@59 +|c+0#af5f00255&|d| +0#0000000&|\+0#0000001#ffff4012| |f|o@1|\| |b|a|r|\| +0#0000000#ffffff0@60 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_cd_01.dump b/runtime/syntax/testdir/dumps/vim_ex_cd_01.dump new file mode 100644 index 0000000000..388e9d5e96 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_cd_01.dump @@ -0,0 +1,20 @@ +|c+0#af5f00255#ffffff0|d|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@69 +@75 +|c+0#af5f00255&|d| +0#0000000&|\+0#0000001#ffff4012|"|f|o@1|\|"|b|a|r|\|"| +0#0000000#ffffff0@59 +|c+0#af5f00255&|d| +0#0000000&|\+0#0000001#ffff4012|||f|o@1|\|||b|a|r|\||| +0#0000000#ffffff0@59 +|c+0#af5f00255&|d| +0#0000000&|\+0#0000001#ffff4012|#|f|o@1|\|#|b|a|r|\|#| +0#0000000#ffffff0@59 +>c+0#af5f00255&|d| +0#0000000&|\+0#0000001#ffff4012| |f|o@1|\| |b|a|r|\| +0#0000000#ffffff0@60 +|c+0#af5f00255&|d| +0#0000000&|\+0#0000001#ffff4012@1|f|o@1|\@1|b|a|r|\@1| +0#0000000#ffffff0@59 +@75 +|c+0#af5f00255&|d| +0#0000000&@1|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@61 +|c+0#af5f00255&|d| +0#0000000&@1||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +|c+0#af5f00255&|d|!| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@61 +|c+0#af5f00255&|d|!| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +@75 +@75 +|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60 +@2|c+0#af5f00255&|d| +0#0000000&@70 +@2|c+0#af5f00255&|d|!| +0#0000000&@69 +@2|c+0#af5f00255&|d| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@65 +@2|c+0#af5f00255&|d|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@65 +@57|1|9|,|1| @9|1|4|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_cd_02.dump b/runtime/syntax/testdir/dumps/vim_ex_cd_02.dump new file mode 100644 index 0000000000..f2fefb1ae1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_cd_02.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|c+0#af5f00255&|d|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@65 +@2|c+0#af5f00255&|d| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@67 +@2|c+0#af5f00255&|d|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@67 +@75 +@2|c+0#af5f00255&|d| +0#0000000&@1|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@59 +@2>c+0#af5f00255&|d| +0#0000000&@1||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +@2|c+0#af5f00255&|d|!| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@59 +@2|c+0#af5f00255&|d|!| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@65 +@2|c+0#af5f00255&|d| +0#0000000&@70 +@2|c+0#af5f00255&|d|!| +0#0000000&@69 +@2|c+0#af5f00255&|d| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@65 +@2|c+0#af5f00255&|d|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0@65 +@2|c+0#af5f00255&|d| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@67 +@2|c+0#af5f00255&|d|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@67 +@75 +@2|c+0#af5f00255&|d| +0#0000000&@1|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@59 +@57|3|7|,|3| @9|3|4|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_cd_03.dump b/runtime/syntax/testdir/dumps/vim_ex_cd_03.dump new file mode 100644 index 0000000000..1be9f06e2b --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_cd_03.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|c+0#af5f00255&|d| +0#0000000&@1|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@59 +@2|c+0#af5f00255&|d| +0#0000000&@1||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +@2|c+0#af5f00255&|d|!| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@59 +@2|c+0#af5f00255&|d|!| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +> @74 +@75 +|c+0#af5f00255&|d| +0#0000000&@5||| |l+0#af5f00255&|c|d| +0#0000000&@5||| |t+0#af5f00255&|c|d| +0#0000000&@5||| |c+0#af5f00255&|h|d|i|r| +0#0000000&@5||| |l+0#af5f00255&|c|h|d|i|r| +0#0000000&@5||| |t+0#af5f00255&|c|h|d|i|r| +0#0000000&@5||| |e+0#af5f00255&|c +|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@66 +|c+0#af5f00255&|d| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |l+0#af5f00255&|c|d| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |t+0#af5f00255&|c|d| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |c+0#af5f00255&|h|d|i|r| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |l+0#af5f00255&|c|h|d|i|r| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |t+0#af5f00255&|c|h|d|i|r| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |e+0#af5f00255&|c +|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@66 +|c+0#af5f00255&|d| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |l+0#af5f00255&|c|d| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |t+0#af5f00255&|c|d| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |c+0#af5f00255&|h|d|i|r| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |l+0#af5f00255&|c|h|d|i|r| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |t+0#af5f00255&|c|h|d|i|r| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |e+0#af5f00255&|c +|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@66 +|c+0#af5f00255&|d|!| +0#0000000&@4||| |l+0#af5f00255&|c|d|!| +0#0000000&@4||| |t+0#af5f00255&|c|d|!| +0#0000000&@4||| |c+0#af5f00255&|h|d|i|r|!| +0#0000000&@4||| |l+0#af5f00255&|c|h|d|i|r|!| +0#0000000&@4||| |t+0#af5f00255&|c|h|d|i|r|!| +0#0000000&@4||| |e+0#af5f00255&|c +|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@66 +|c+0#af5f00255&|d|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |l+0#af5f00255&|c|d|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |t+0#af5f00255&|c|d|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |c+0#af5f00255&|h|d|i|r|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |l+0#af5f00255&|c|h|d|i|r|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |t+0#af5f00255&|c|h|d|i|r|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@2||| |e+0#af5f00255&|c +|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@66 +|c+0#af5f00255&|d|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |l+0#af5f00255&|c|d|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |t+0#af5f00255&|c|d|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |c+0#af5f00255&|h|d|i|r|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |l+0#af5f00255&|c|h|d|i|r|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |t+0#af5f00255&|c|h|d|i|r|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |e+0#af5f00255&|c +|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@66 +@57|5@1|,|0|-|1| @7|5|0|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_cd_04.dump b/runtime/syntax/testdir/dumps/vim_ex_cd_04.dump new file mode 100644 index 0000000000..ce3e8bd6c2 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_cd_04.dump @@ -0,0 +1,20 @@ +|c+0#af5f00255#ffffff0|d|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |l+0#af5f00255&|c|d|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |t+0#af5f00255&|c|d|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |c+0#af5f00255&|h|d|i|r|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |l+0#af5f00255&|c|h|d|i|r|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |t+0#af5f00255&|c|h|d|i|r|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| |e+0#af5f00255&|c +|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@66 +@75 +|c+0#af5f00255&|d| +0#0000000&@9|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|c+0#af5f00255&|d|!| +0#0000000&@8|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +>c+0#af5f00255&|d| +0#0000000&@5|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|c+0#af5f00255&|d|!| +0#0000000&@4|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|c+0#af5f00255&|d| +0#0000000&@5|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|c+0#af5f00255&|d|!| +0#0000000&@4|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|d| +0#0000000&@8|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|d|!| +0#0000000&@7|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|d| +0#0000000&@4|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|d|!| +0#0000000&@3|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|d| +0#0000000&@4|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|d|!| +0#0000000&@3|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|d| +0#0000000&@8|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|d|!| +0#0000000&@7|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|d| +0#0000000&@4|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|d|!| +0#0000000&@3|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +@57|6@1|,|1| @9|6@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_cd_05.dump b/runtime/syntax/testdir/dumps/vim_ex_cd_05.dump new file mode 100644 index 0000000000..b7b7bfb5d5 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_cd_05.dump @@ -0,0 +1,20 @@ +|t+0#af5f00255#ffffff0|c|d|!| +0#0000000&@3|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|d| +0#0000000&@4|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|d|!| +0#0000000&@3|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|c+0#af5f00255&|h|d|i|r| +0#0000000&@6|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|c+0#af5f00255&|h|d|i|r|!| +0#0000000&@5|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +>c+0#af5f00255&|h|d|i|r| +0#0000000&@2|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|c+0#af5f00255&|h|d|i|r|!| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|c+0#af5f00255&|h|d|i|r| +0#0000000&@2|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|c+0#af5f00255&|h|d|i|r|!| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|h|d|i|r| +0#0000000&@5|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|h|d|i|r|!| +0#0000000&@4|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|h|d|i|r| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|h|d|i|r|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|h|d|i|r| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|l+0#af5f00255&|c|h|d|i|r|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|h|d|i|r| +0#0000000&@5|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|h|d|i|r|!| +0#0000000&@4|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|h|d|i|r| +0#0000000&@1|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|h|d|i|r|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +@57|8|4|,|1| @9|8|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_cd_06.dump b/runtime/syntax/testdir/dumps/vim_ex_cd_06.dump new file mode 100644 index 0000000000..f2ad382494 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_cd_06.dump @@ -0,0 +1,20 @@ +|t+0#af5f00255#ffffff0|c|h|d|i|r|!| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@2|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|h|d|i|r| +0#0000000&@1|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +|t+0#af5f00255&|c|h|d|i|r|!| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53 +@75 +@75 +>"+0#0000e05&| |I|s@1|u|e| |#|1|7|9|6|4| |(|V|i|m| |s|c|r|i|p|t| |h|i|g|h|l|i|g|h|t|:| |e|n|d|i|f| |i|s| |n|o|t| |h|i|g|h|l|i|g|h|t|e|d| |a|f|t|e|r| |l|c|d|)| +0#0000000&@1 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|L|c|d|B|a|c|k|(+0#e000e06&|)| +0#0000000&@61 +@4|i+0#af5f00255&|f| +0#0000000&|g+0#00e0e07&|e|t|(+0#e000e06&|g+0#00e0e07&|:|,+0#0000000&| |"+0#e000002&|l|c|d|"|,+0#0000000&| |0+0#e000002&|)+0#e000e06&| +0#0000000&@50 +@8|g+0#00e0e07&|:|l+0#0000000&|c|d| |=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@57 +@8|l+0#af5f00255&|c|d| +0#0000000&|-+0#0000001#ffff4012| +0#0000000#ffffff0@61 +@4|e+0#af5f00255&|n|d|i|f| +0#0000000&@65 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|0|2|,|1| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_debug_00.dump b/runtime/syntax/testdir/dumps/vim_ex_debug_00.dump new file mode 100644 index 0000000000..5ee2c340d6 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_debug_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|d|e|b|u|g| |c|o|m@1|a|n|d| +0#0000000&@54 +@75 +@75 +|d+0#af5f00255&|e|b|u|g| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +@75 +|f+0#af5f00255&|u|n|c|t|i|o|n| +0#0000000&|F|o@1|(+0#e000e06&|)| +0#0000000&@60 +@2|d+0#af5f00255&|e|b|u|g| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +|e+0#af5f00255&|n|d|f|u|n|c|t|i|o|n| +0#0000000&@63 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|B|a|r|(+0#e000e06&|)| +0#0000000&@65 +@2|d+0#af5f00255&|e|b|u|g| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|,|1| @10|A|l@1| diff --git a/runtime/syntax/testdir/dumps/vim_ex_do_commands_00.dump b/runtime/syntax/testdir/dumps/vim_ex_do_commands_00.dump new file mode 100644 index 0000000000..3b5518cb9e --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_do_commands_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|*|d|o| |c|o|m@1|a|n|d|s| +0#0000000&@55 +@75 +@75 +|a+0#af5f00255&|r|g|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@57 +|a+0#af5f00255&|r|g|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@57 +@75 +|b+0#af5f00255&|u|f|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@57 +|b+0#af5f00255&|u|f|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@57 +@75 +|c+0#af5f00255&|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@59 +|c+0#af5f00255&|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@59 +@75 +|c+0#af5f00255&|f|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +|c+0#af5f00255&|f|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +@75 +|f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@51 +@75 +|f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@53 +@75 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_do_commands_01.dump b/runtime/syntax/testdir/dumps/vim_ex_do_commands_01.dump new file mode 100644 index 0000000000..ccbca1b82a --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_do_commands_01.dump @@ -0,0 +1,20 @@ +|c+0#af5f00255#ffffff0|f|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +@75 +|f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@51 +@75 +|f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@53 +> @74 +|l+0#af5f00255&|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@59 +|l+0#af5f00255&|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@59 +@75 +|l+0#af5f00255&|f|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +|l+0#af5f00255&|f|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +@75 +|t+0#af5f00255&|a|b|d|o| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +@75 +|w+0#af5f00255&|i|n|d|o| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +@75 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|V|i|m|9|C|o|n|t|e|x|t|(+0#e000e06&|)| +0#0000000&@57 +@2|a+0#af5f00255&|r|g|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@55 +@57|1|9|,|0|-|1| @7|3@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_do_commands_02.dump b/runtime/syntax/testdir/dumps/vim_ex_do_commands_02.dump new file mode 100644 index 0000000000..cbdabcd357 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_do_commands_02.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|a+0#af5f00255&|r|g|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@55 +@2|a+0#af5f00255&|r|g|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@55 +@75 +@2|b+0#af5f00255&|u|f|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@55 +@2|b+0#af5f00255&|u|f|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@55 +> @74 +@2|c+0#af5f00255&|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@57 +@2|c+0#af5f00255&|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@57 +@75 +@2|c+0#af5f00255&|f|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +@2|c+0#af5f00255&|f|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +@75 +@2|f+0#af5f00255&|o|l|d@1|o|c|l|o|s|e|d| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@49 +@75 +@2|f+0#af5f00255&|o|l|d@1|o@1|p|e|n| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@51 +@75 +@2|l+0#af5f00255&|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@57 +@2|l+0#af5f00255&|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@57 +@75 +@57|3|7|,|0|-|1| @7|7|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_do_commands_03.dump b/runtime/syntax/testdir/dumps/vim_ex_do_commands_03.dump new file mode 100644 index 0000000000..8454ec94dc --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_do_commands_03.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +@2|l+0#af5f00255&|f|d|o| +0#0000000&@1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +@2|l+0#af5f00255&|f|d|o|!| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +@75 +@2|t+0#af5f00255&|a|b|d|o| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +> @74 +@2|w+0#af5f00255&|i|n|d|o| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@56 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|5@1|,|0|-|1| @7|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_help_00.dump b/runtime/syntax/testdir/dumps/vim_ex_help_00.dump new file mode 100644 index 0000000000..24f30e6877 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_help_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|h|e|l|p| |c|o|m@1|a|n|d| +0#0000000&@55 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|H|e|l|p|A|r|g| |T|o|d|o| +0#0000000&@34 +@75 +@75 +|h+0#af5f00255&|e|l|p| +0#0000000&@70 +|h+0#af5f00255&|e|l|p|!| +0#0000000&||| |"+0#0000e05&| |E|4|7|8|:| |D|o|n|'|t| |p|a|n|i|c|!| +0#0000000&@46 +|h+0#af5f00255&|e|l|p| +0#0000000&@1|h+0#0000001#ffff4012|e|l|p|h|e|l|p| +0#0000000#ffffff0@60 +|h+0#af5f00255&|e|l|p|!| +0#0000000&|h+0#0000001#ffff4012|e|l|p|h|e|l|p| +0#0000000#ffffff0@60 +@75 +@75 +|"+0#0000e05&| |w|h|i|t|e|s|p|a|c|e| |a|l@1|o|w|e|d| +0#0000000&@54 +@75 +|h+0#af5f00255&|e|l|p| +0#0000000&@1|f+0#0000001#ffff4012|o@1| |b|a|r| +0#0000000#ffffff0||| |"+0#0000e05&| |E|1|4|9|:| |S|o|r@1|y|,| |n|o| |h|e|l|p| |f|o|r| |f|o@1| |b|a|r| +0#0000000&@24 +|h+0#af5f00255&|e|l|p|!| +0#0000000&|f+0#0000001#ffff4012|o@1| |b|a|r| +0#0000000#ffffff0||| |"+0#0000e05&| |E|1|4|9|:| |S|o|r@1|y|,| |n|o| |h|e|l|p| |f|o|r| |f|o@1| |b|a|r| +0#0000000&@24 +@75 +|"+0#0000e05&| |a|n|y| |c|h|a|r|a|c|t|e|r|s| +0#0000000&@58 +@75 +|h+0#af5f00255&|e|l|p| +0#0000000&|!+0#0000001#ffff4012|@|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0@57 +|h+0#af5f00255&|e|l|p|!|@+0#0000001#ffff4012|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0@58 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_help_01.dump b/runtime/syntax/testdir/dumps/vim_ex_help_01.dump new file mode 100644 index 0000000000..206d8a5af9 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_help_01.dump @@ -0,0 +1,20 @@ +|h+0#af5f00255#ffffff0|e|l|p|!| +0#0000000&|f+0#0000001#ffff4012|o@1| |b|a|r| +0#0000000#ffffff0||| |"+0#0000e05&| |E|1|4|9|:| |S|o|r@1|y|,| |n|o| |h|e|l|p| |f|o|r| |f|o@1| |b|a|r| +0#0000000&@24 +@75 +|"+0#0000e05&| |a|n|y| |c|h|a|r|a|c|t|e|r|s| +0#0000000&@58 +@75 +|h+0#af5f00255&|e|l|p| +0#0000000&|!+0#0000001#ffff4012|@|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0@57 +>h+0#af5f00255&|e|l|p|!|@+0#0000001#ffff4012|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0@58 +|h+0#af5f00255&|e|l|p| +0#0000000&|@+0#0000001#ffff4012|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0@58 +|h+0#af5f00255&|e|l|p|@+0#0000001#ffff4012|#|$|%|^|&|*|(|)|_|+| +0#0000000#ffffff0@59 +@75 +@75 +|"+0#0000e05&| |c|o|m@1|a|n|d| |s|e|p|a|r|a|t|o|r|s| +0#0000000&@54 +@75 +|h+0#af5f00255&|e|l|p||+0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@59 +|h+0#af5f00255&|e|l|p||+0#0000000&| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +|h+0#af5f00255&|e|l|p| +0#0000000&|||e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@58 +|h+0#af5f00255&|e|l|p| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@57 +@75 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1||+0#0000000#ffffff0| @1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@53 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|^+0#0000e05#ffffff0|@| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@53 +@57|1|9|,|1| @9|3|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_help_02.dump b/runtime/syntax/testdir/dumps/vim_ex_help_02.dump new file mode 100644 index 0000000000..f4a0374a4f --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_help_02.dump @@ -0,0 +1,20 @@ +|h+0#af5f00255#ffffff0|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|^+0#0000e05#ffffff0|@| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@53 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|^+0#0000e05#ffffff0|M| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@53 +@75 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0||| @1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@52 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|^+0#0000e05&|@| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@52 +>h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1| +0#0000000#ffffff0|^+0#0000e05&|M| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@52 +@75 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1||+0#0000000#ffffff0|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@55 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|^+0#0000e05#ffffff0|@|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@54 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|^+0#0000e05#ffffff0|M|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@54 +@75 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|@+0#e000e06#ffffff0|e|n||+0#0000000&| @1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@50 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|@+0#e000e06#ffffff0|e|n|^+0#0000e05&|@| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@50 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|@+0#e000e06#ffffff0|e|n|^+0#0000e05&|M| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@50 +@75 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|@+0#e000e06#ffffff0|e|n| +0#0000000&||| @1|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@49 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|@+0#e000e06#ffffff0|e|n| +0#0000000&|^+0#0000e05&|@| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@49 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|@+0#e000e06#ffffff0|e|n| +0#0000000&|^+0#0000e05&|M| +0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@49 +@75 +@57|3|7|,|1| @9|8@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_help_03.dump b/runtime/syntax/testdir/dumps/vim_ex_help_03.dump new file mode 100644 index 0000000000..4a9e7a90c4 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_help_03.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|@+0#e000e06#ffffff0|e|n||+0#0000000&|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@52 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|@+0#e000e06#ffffff0|e|n|^+0#0000e05&|@|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@51 +|h+0#af5f00255&|e|l|p| +0#0000000&|f+0#0000001#ffff4012|o@1|@+0#e000e06#ffffff0|e|n|^+0#0000e05&|M|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@51 +> @74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|5|4|,|0|-|1| @7|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_helpgrep_00.dump b/runtime/syntax/testdir/dumps/vim_ex_helpgrep_00.dump index da8e2ed839..1e4b383439 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_helpgrep_00.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_helpgrep_00.dump @@ -1,20 +1,20 @@ >"+0#0000e05#ffffff0| |V|i|m| |:|h|e|l|p|g|r|e|p| |c|o|m@1|a|n|d| +0#0000000&@51 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|H|e|l|p|g|r|e|p|P|a|t@1|e|r|n| |T|o|d|o| +0#0000000&@26 @75 @75 -|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&|:|h|e|l|p| @60 -|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&|:|h|e|l|p|@+0#e000e06&|e|n| +0#0000000&@57 -|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&|:|h|\+0#e000e06&|%|(|e+0#0000000&|l|p|\+0#e000e06&|)|\+0#0000000&|=| @53 +|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&|:+0#0000001#ffff4012|h|e|l|p| +0#0000000#ffffff0@60 +|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&|:+0#0000001#ffff4012|h|e|l|p|@+0#e000e06#ffffff0|e|n| +0#0000000&@57 +|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&|:+0#0000001#ffff4012|h|\+0#e000e06#ffffff0|%|(|e+0#0000001#ffff4012|l|p|\+0#e000e06#ffffff0|)|\+0#0000001#ffff4012|=| +0#0000000#ffffff0@53 @75 -|l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&|:|h|e|l|p| @59 -|l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&|:|h|e|l|p|@+0#e000e06&|e|n| +0#0000000&@56 -|l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&|:|h|\+0#e000e06&|%|(|e+0#0000000&|l|p|\+0#e000e06&|)|\+0#0000000&|=| @52 +|l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&|:+0#0000001#ffff4012|h|e|l|p| +0#0000000#ffffff0@59 +|l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&|:+0#0000001#ffff4012|h|e|l|p|@+0#e000e06#ffffff0|e|n| +0#0000000&@56 +|l+0#af5f00255&|h|e|l|p|g|r|e|p| +0#0000000&|:+0#0000001#ffff4012|h|\+0#e000e06#ffffff0|%|(|e+0#0000001#ffff4012|l|p|\+0#e000e06#ffffff0|)|\+0#0000001#ffff4012|=| +0#0000000#ffffff0@52 +@75 +@75 +|"+0#0000e05&| |n|o| |t|a|i|l| |c|o|m@1|e|n|t| |o|r| |t|r|a|i|l|i|n|g| |b|a|r| +0#0000000&@41 +@75 +|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&|:+0#0000001#ffff4012|h|e|l|p| |"| |n|o|t| |a| |c|o|m@1|e|n|t| +0#0000000#ffffff0@44 +|h+0#af5f00255&|e|l|p|g|r|e|p| +0#0000000&|:+0#0000001#ffff4012|h|e|l|p| ||| |n|o|t| |a| |c|o|m@1|a|n|d| +0#0000000#ffffff0@44 @75 |~+0#4040ff13&| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 -|~| @73 | +0#0000000&@56|1|,|1| @10|A|l@1| diff --git a/runtime/syntax/testdir/dumps/vim_ex_history_00.dump b/runtime/syntax/testdir/dumps/vim_ex_history_00.dump new file mode 100644 index 0000000000..7a1eb3eb2a --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_history_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|h|i|s|t|o|r|y| |c|o|m@1|a|n|d| +0#0000000&@52 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|H|i|s|t|o|r|y|R|a|n|g|e| |T|o|d|o| +0#0000000&@29 +@75 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@8|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|c+0#e000e06&|m|d| +0#0000000&@4|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|:+0#e000e06&| +0#0000000&@6|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|s+0#e000e06&|e|a|r|c|h| +0#0000000&@1|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|/+0#e000e06&| +0#0000000&@6|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|?+0#e000e06&| +0#0000000&@6|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|e+0#e000e06&|x|p|r| +0#0000000&@3|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|=+0#e000e06&| +0#0000000&@6|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|i+0#e000e06&|n|p|u|t| +0#0000000&@2|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|@+0#e000e06&| +0#0000000&@6|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|d+0#e000e06&|e|b|u|g| +0#0000000&@2|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|>+0#e000e06&| +0#0000000&@6|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&@4|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +@75 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@1|1+0#0000001#ffff4012| +0#0000000#ffffff0@64 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|-+0#0000001#ffff4012|1| +0#0000000#ffffff0@64 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_history_01.dump b/runtime/syntax/testdir/dumps/vim_ex_history_01.dump new file mode 100644 index 0000000000..71c8a8cd23 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_history_01.dump @@ -0,0 +1,20 @@ +|h+0#af5f00255#ffffff0|i|s|t|o|r|y| +0#0000000&|d+0#e000e06&|e|b|u|g| +0#0000000&@2|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|>+0#e000e06&| +0#0000000&@6|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&@4|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@55 +@75 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@1|1+0#0000001#ffff4012| +0#0000000#ffffff0@64 +>h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|-+0#0000001#ffff4012|1| +0#0000000#ffffff0@64 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@1|1+0#0000001#ffff4012|,| +0#0000000#ffffff0@63 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|-+0#0000001#ffff4012|1|,| +0#0000000#ffffff0@63 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@2|,+0#0000001#ffff4012| |1| +0#0000000#ffffff0@61 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@2|,+0#0000001#ffff4012|-|1| +0#0000000#ffffff0@61 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@1|1+0#0000001#ffff4012|,| |1| +0#0000000#ffffff0@61 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@1|1+0#0000001#ffff4012|,|-|1| +0#0000000#ffffff0@61 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|-+0#0000001#ffff4012|1|,| |1| +0#0000000#ffffff0@61 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|-+0#0000001#ffff4012|1|,|-|1| +0#0000000#ffffff0@61 +@75 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|1+0#0000001#ffff4012|,| |1| +0#0000000#ffffff0@62 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|1+0#0000001#ffff4012| |,|1| +0#0000000#ffffff0@62 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|1+0#0000001#ffff4012| |,| |1| +0#0000000#ffffff0@61 +@75 +@57|1|9|,|1| @9|1|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_history_02.dump b/runtime/syntax/testdir/dumps/vim_ex_history_02.dump new file mode 100644 index 0000000000..56d12fe989 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_history_02.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +@75 +|"+0#0000e05&| |t|a|i|l| |c|o|m@1|e|n|t|s| |a|n|d| |t|r|a|i|l|i|n|g| |b|a|r| +0#0000000&@42 +@75 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@8||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@46 +>h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@8|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&@4||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@46 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&@4|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@4||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@46 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@4|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@46 +|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@49 +@75 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|V|i|m|9|C|o|n|t|e|x|t|(+0#e000e06&|)| +0#0000000&@57 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@14|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|c+0#e000e06&|m|d| +0#0000000&@10|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|:+0#e000e06&| +0#0000000&@12|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|s+0#e000e06&|e|a|r|c|h| +0#0000000&@7|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@57|3|7|,|1| @9|4@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_history_03.dump b/runtime/syntax/testdir/dumps/vim_ex_history_03.dump new file mode 100644 index 0000000000..828d95ad19 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_history_03.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|s+0#e000e06&|e|a|r|c|h| +0#0000000&@7|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|/+0#e000e06&| +0#0000000&@12|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|?+0#e000e06&| +0#0000000&@12|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|e+0#e000e06&|x|p|r| +0#0000000&@9|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@2|#+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@65 +@2>#+0#0000e05&| |h|i|s|t|o|r|y| |=| @10|1|,|9| +0#0000000&@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|i+0#e000e06&|n|p|u|t| +0#0000000&@8|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|@+0#e000e06&| +0#0000000&@12|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|d+0#e000e06&|e|b|u|g| +0#0000000&@8|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|>+0#e000e06&| +0#0000000&@12|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&@10|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@47 +@75 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@1|1+0#0000001#ffff4012| +0#0000000#ffffff0@62 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|-+0#0000001#ffff4012|1| +0#0000000#ffffff0@62 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@1|1+0#0000001#ffff4012|,| +0#0000000#ffffff0@61 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|-+0#0000001#ffff4012|1|,| +0#0000000#ffffff0@61 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@2|,+0#0000001#ffff4012| |1| +0#0000000#ffffff0@59 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@2|,+0#0000001#ffff4012|-|1| +0#0000000#ffffff0@59 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@1|1+0#0000001#ffff4012|,| |1| +0#0000000#ffffff0@59 +@57|5@1|,|3| @9|7|0|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_history_04.dump b/runtime/syntax/testdir/dumps/vim_ex_history_04.dump new file mode 100644 index 0000000000..07fab77be4 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_history_04.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@1|1+0#0000001#ffff4012|,| |1| +0#0000000#ffffff0@59 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@1|1+0#0000001#ffff4012|,|-|1| +0#0000000#ffffff0@59 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|-+0#0000001#ffff4012|1|,| |1| +0#0000000#ffffff0@59 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|-+0#0000001#ffff4012|1|,|-|1| +0#0000000#ffffff0@59 +@75 +@2>h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|1+0#0000001#ffff4012|,| |1| +0#0000000#ffffff0@60 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|1+0#0000001#ffff4012| |,|1| +0#0000000#ffffff0@60 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|1+0#0000001#ffff4012| |,| |1| +0#0000000#ffffff0@59 +@75 +@75 +@2|#+0#0000e05&| |t|a|i|l| |c|o|m@1|e|n|t|s| |a|n|d| |t|r|a|i|l|i|n|g| |b|a|r| +0#0000000&@40 +@75 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@8||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@44 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&@8|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&@4||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@44 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&@4|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@4||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@44 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0@4|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@44 +@57|7|3|,|3| @9|9|5|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_history_05.dump b/runtime/syntax/testdir/dumps/vim_ex_history_05.dump new file mode 100644 index 0000000000..57b9480181 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_history_05.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@44 +@2|h+0#af5f00255&|i|s|t|o|r|y| +0#0000000&|a+0#e000e06&|l@1| +0#0000000&|1+0#0000001#ffff4012|,|9| +0#0000000#ffffff0|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +> @74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|8|9|,|0|-|1| @7|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_language_00.dump b/runtime/syntax/testdir/dumps/vim_ex_language_00.dump new file mode 100644 index 0000000000..9209db3283 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_language_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|l|a|n|g|u|a|g|e| |c|o|m@1|a|n|d| +0#0000000&@51 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|L|a|n|g|u|a|g|e|N|a|m|e| |T|o|d|o| +0#0000000&@29 +@75 +@75 +|"+0#0000e05&| |p|r|i|n|t| |c|o|m@1|a|n|d|s| +0#0000000&@58 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@66 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@58 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@60 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@61 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&@57 +@75 +@75 +|"+0#0000e05&| |s|e|t| |c|o|m@1|a|n|d|s| +0#0000000&@60 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|C+0#e000002&| +0#0000000&@55 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|C+0#e000002&| +0#0000000&@55 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|C+0#e000002&| +0#0000000&@55 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|C+0#e000002&| +0#0000000&@55 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_language_01.dump b/runtime/syntax/testdir/dumps/vim_ex_language_01.dump new file mode 100644 index 0000000000..9b9054d2c1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_language_01.dump @@ -0,0 +1,20 @@ +|"+0#0000e05#ffffff0| |s|e|t| |c|o|m@1|a|n|d|s| +0#0000000&@60 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|C+0#e000002&| +0#0000000&@55 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|C+0#e000002&| +0#0000000&@55 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|C+0#e000002&| +0#0000000&@55 +>l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|C+0#e000002&| +0#0000000&@55 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|C+0#e000002&| +0#0000000&@55 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|P+0#e000002&|O|S|I|X| +0#0000000&@51 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|P+0#e000002&|O|S|I|X| +0#0000000&@51 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|P+0#e000002&|O|S|I|X| +0#0000000&@51 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|P+0#e000002&|O|S|I|X| +0#0000000&@51 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|P+0#e000002&|O|S|I|X| +0#0000000&@51 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0@40 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0@40 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0@40 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0@40 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0@40 +@57|1|9|,|1| @10|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_language_02.dump b/runtime/syntax/testdir/dumps/vim_ex_language_02.dump new file mode 100644 index 0000000000..704b3e6cea --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_language_02.dump @@ -0,0 +1,20 @@ +|l+0#af5f00255#ffffff0|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0@40 +@75 +|"+0#0000e05&| |t|a|i|l| |c|o|m@1|e|n|t| |a|n|d| |t|r|a|i|l|i|n|g| |b|a|r| +0#0000000&@43 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +>l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@47 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|C+0#e000002&| +0#0000000&@15|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|C+0#e000002&| +0#0000000&@15|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|C+0#e000002&| +0#0000000&@15|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +@57|3|7|,|1| @9|2|0|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_language_03.dump b/runtime/syntax/testdir/dumps/vim_ex_language_03.dump new file mode 100644 index 0000000000..d291e9b7a1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_language_03.dump @@ -0,0 +1,20 @@ +|l+0#af5f00255#ffffff0|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|C+0#e000002&| +0#0000000&@15|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|C+0#e000002&| +0#0000000&@15|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|C+0#e000002&| +0#0000000&@15|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|P+0#e000002&|O|S|I|X| +0#0000000&@11|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +>l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|P+0#e000002&|O|S|I|X| +0#0000000&@11|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|P+0#e000002&|O|S|I|X| +0#0000000&@11|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|P+0#e000002&|O|S|I|X| +0#0000000&@11|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|P+0#e000002&|O|S|I|X| +0#0000000&@11|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@44 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@44 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@44 +@57|5@1|,|1| @9|3|2|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_language_04.dump b/runtime/syntax/testdir/dumps/vim_ex_language_04.dump new file mode 100644 index 0000000000..f32a38a764 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_language_04.dump @@ -0,0 +1,20 @@ +|l+0#af5f00255#ffffff0|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@44 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@44 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@44 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|C+0#e000002&| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +>l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|C+0#e000002&| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|C+0#e000002&| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|C+0#e000002&| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|C+0#e000002&| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|P+0#e000002&|O|S|I|X| +0#0000000&@11||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|P+0#e000002&|O|S|I|X| +0#0000000&@11||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|P+0#e000002&|O|S|I|X| +0#0000000&@11||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|P+0#e000002&|O|S|I|X| +0#0000000&@11||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|P+0#e000002&|O|S|I|X| +0#0000000&@11||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +@75 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +@57|7|3|,|1| @9|4|3|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_language_05.dump b/runtime/syntax/testdir/dumps/vim_ex_language_05.dump new file mode 100644 index 0000000000..938098877a --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_language_05.dump @@ -0,0 +1,20 @@ +|l+0#af5f00255#ffffff0|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@27 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|V|i|m|9|C|o|n|t|e|x|t|(+0#e000e06&|)| +0#0000000&@57 +> @74 +@2|#+0#0000e05&| |p|r|i|n|t| |c|o|m@1|a|n|d|s| +0#0000000&@56 +@75 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@64 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@56 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@58 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@59 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&@55 +@75 +@75 +@2|#+0#0000e05&| |s|e|t| |c|o|m@1|a|n|d|s| +0#0000000&@58 +@75 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|C+0#e000002&| +0#0000000&@53 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|C+0#e000002&| +0#0000000&@53 +@57|9|1|,|0|-|1| @7|5@1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_language_06.dump b/runtime/syntax/testdir/dumps/vim_ex_language_06.dump new file mode 100644 index 0000000000..9a55c3b69f --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_language_06.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|C+0#e000002&| +0#0000000&@53 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|C+0#e000002&| +0#0000000&@53 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|C+0#e000002&| +0#0000000&@53 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|C+0#e000002&| +0#0000000&@53 +@75 +@2>l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|P+0#e000002&|O|S|I|X| +0#0000000&@49 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|P+0#e000002&|O|S|I|X| +0#0000000&@49 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|P+0#e000002&|O|S|I|X| +0#0000000&@49 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|P+0#e000002&|O|S|I|X| +0#0000000&@49 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|P+0#e000002&|O|S|I|X| +0#0000000&@49 +@75 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0@38 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0@38 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0@38 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0@38 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0@38 +@75 +@75 +@2|#+0#0000e05&| |t|a|i|l| |c|o|m@1|e|n|t| |a|n|d| |t|r|a|i|l|i|n|g| |b|a|r| +0#0000000&@41 +@57|1|0|9|,|3| @8|6|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_language_07.dump b/runtime/syntax/testdir/dumps/vim_ex_language_07.dump new file mode 100644 index 0000000000..a807f486a2 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_language_07.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|#+0#0000e05&| |t|a|i|l| |c|o|m@1|e|n|t| |a|n|d| |t|r|a|i|l|i|n|g| |b|a|r| +0#0000000&@41 +@75 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@45 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@45 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@45 +@2>l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@45 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@45 +@75 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|C+0#e000002&| +0#0000000&@15|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|C+0#e000002&| +0#0000000&@15|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|C+0#e000002&| +0#0000000&@15|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|C+0#e000002&| +0#0000000&@15|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|C+0#e000002&| +0#0000000&@15|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@75 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|P+0#e000002&|O|S|I|X| +0#0000000&@11|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|P+0#e000002&|O|S|I|X| +0#0000000&@11|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|P+0#e000002&|O|S|I|X| +0#0000000&@11|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|P+0#e000002&|O|S|I|X| +0#0000000&@11|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|P+0#e000002&|O|S|I|X| +0#0000000&@11|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@57|1|2|7|,|3| @8|7|9|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_language_08.dump b/runtime/syntax/testdir/dumps/vim_ex_language_08.dump new file mode 100644 index 0000000000..285d4f2855 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_language_08.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|P+0#e000002&|O|S|I|X| +0#0000000&@11|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@75 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2>l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@28 +@75 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@42 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@42 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@42 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@42 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@42 +@75 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|C+0#e000002&| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|C+0#e000002&| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|C+0#e000002&| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|C+0#e000002&| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|C+0#e000002&| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@57|1|4|5|,|3| @8|9|0|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_language_09.dump b/runtime/syntax/testdir/dumps/vim_ex_language_09.dump new file mode 100644 index 0000000000..29fcdc64b8 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_language_09.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@1|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|C+0#e000002&| +0#0000000&@15||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@75 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|P+0#e000002&|O|S|I|X| +0#0000000&@11||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|P+0#e000002&|O|S|I|X| +0#0000000&@11||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|P+0#e000002&|O|S|I|X| +0#0000000&@11||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2>l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|P+0#e000002&|O|S|I|X| +0#0000000&@11||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|P+0#e000002&|O|S|I|X| +0#0000000&@11||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@75 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&@9|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|o|l@1|a|t|e| +0#0000000&@1|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|c+0#e000e06&|t|y|p|e| +0#0000000&@3|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|t+0#e000e06&|i|m|e| +0#0000000&@4|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +@2|l+0#af5f00255&|a|n|g|u|a|g|e| +0#0000000&|m+0#e000e06&|e|s@1|a|g|e|s| +0#0000000&|d+0#0000001#ffff4012|e|_|D|E|.|U|T|F|-|8|@|e|u|r|o| +0#0000000#ffffff0||| |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|.@2|"| +0#0000000&@25 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|6|3|,|3| @8|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_prompt_commands_00.dump b/runtime/syntax/testdir/dumps/vim_ex_prompt_commands_00.dump new file mode 100644 index 0000000000..fb755ba282 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_prompt_commands_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|p|r|o|m|p|t|{|f|i|n|d|,|r|e|p|l|}| |c|o|m@1|a|n|d|s| +0#0000000&@41 +@75 +@75 +|p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&|f|o@1| @60 +|p+0#af5f00255&|r|o|m|p|t|r|e|p|l| +0#0000000&|f|o@1| @60 +@75 +|p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&|a| @62 +@6|\+0#e000e06&| +0#0000000&|r|e|a|l@1|y| @60 +@6|\+0#e000e06&| +0#0000000&|l|o|n|g| @62 +@6|\+0#e000e06&| +0#0000000&|s|e|a|r|c|h| @60 +@6|\+0#e000e06&| +0#0000000&|s|t|r|i|n|g| @60 +|p+0#af5f00255&|r|o|m|p|t|r|e|p|l| +0#0000000&|a| @62 +@6|\+0#e000e06&| +0#0000000&|r|e|a|l@1|y| @60 +@6|\+0#e000e06&| +0#0000000&|l|o|n|g| @62 +@6|\+0#e000e06&| +0#0000000&|s|e|a|r|c|h| @60 +@6|\+0#e000e06&| +0#0000000&|s|t|r|i|n|g| @60 +@75 +@75 +|"+0#0000e05&| |n|o| |t|a|i|l| |c|o|m@1|e|n|t| |o|r| |t|r|a|i|l|i|n|g| |b|a|r| +0#0000000&@41 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_prompt_commands_01.dump b/runtime/syntax/testdir/dumps/vim_ex_prompt_commands_01.dump new file mode 100644 index 0000000000..dcf8400c29 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_prompt_commands_01.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|l|o|n|g| @62 +@6|\+0#e000e06&| +0#0000000&|s|e|a|r|c|h| @60 +@6|\+0#e000e06&| +0#0000000&|s|t|r|i|n|g| @60 +@75 +@75 +>"+0#0000e05&| |n|o| |t|a|i|l| |c|o|m@1|e|n|t| |o|r| |t|r|a|i|l|i|n|g| |b|a|r| +0#0000000&@41 +@75 +|p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&|f|o@1| |"| |m|o|r|e| |s|e|a|r|c|h| |s|t|r|i|n|g| @39 +|p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&|f|o@1| ||| |m|o|r|e| |s|e|a|r|c|h| |s|t|r|i|n|g| @39 +@75 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|V|i|m|9|C|o|n|t|e|x|t|(+0#e000e06&|)| +0#0000000&@57 +@2|p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&|f|o@1| @58 +@2|p+0#af5f00255&|r|o|m|p|t|r|e|p|l| +0#0000000&|f|o@1| @58 +@75 +@2|p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&|a| @60 +@8|\+0#e000e06&| +0#0000000&|r|e|a|l@1|y| @58 +@8|\+0#e000e06&| +0#0000000&|l|o|n|g| @60 +@8|\+0#e000e06&| +0#0000000&|s|e|a|r|c|h| @58 +@57|1|9|,|1| @9|4|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_prompt_commands_02.dump b/runtime/syntax/testdir/dumps/vim_ex_prompt_commands_02.dump new file mode 100644 index 0000000000..688010a8e9 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_prompt_commands_02.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@7|\+0#e000e06&| +0#0000000&|s|e|a|r|c|h| @58 +@8|\+0#e000e06&| +0#0000000&|s|t|r|i|n|g| @58 +@2|p+0#af5f00255&|r|o|m|p|t|r|e|p|l| +0#0000000&|a| @60 +@8|\+0#e000e06&| +0#0000000&|r|e|a|l@1|y| @58 +@8|\+0#e000e06&| +0#0000000&|l|o|n|g| @60 +@8>\+0#e000e06&| +0#0000000&|s|e|a|r|c|h| @58 +@8|\+0#e000e06&| +0#0000000&|s|t|r|i|n|g| @58 +@75 +@75 +@2|#+0#0000e05&| |n|o| |t|a|i|l| |c|o|m@1|e|n|t| |o|r| |t|r|a|i|l|i|n|g| |b|a|r| +0#0000000&@39 +@75 +@2|p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&|f|o@1| |#| |m|o|r|e| |s|e|a|r|c|h| |s|t|r|i|n|g| @37 +@2|p+0#af5f00255&|r|o|m|p|t|f|i|n|d| +0#0000000&|f|o@1| ||| |m|o|r|e| |s|e|a|r|c|h| |s|t|r|i|n|g| @37 +|e+0#af5f00255&|n|d@1|e|f| +0#0000000&@68 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|3|7|,|2|-|9| @7|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_vimgrep_03.dump b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_03.dump index 4d783e4ba1..f77f5c4e5a 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_vimgrep_03.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_03.dump @@ -15,6 +15,6 @@ |v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|*+0#0000001#ffff4012@1|/|*|.|t|x|t| +0#0000000#ffffff0@43 @75 |"+0#0000e05&| |s|p|e|c|i|a|l| |f|i|l|e|n|a|m|e| |c|h|a|r|a|c|t|e|r|s| +0#0000000&@45 -|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|%+0#0000001#ffff4012| +0#0000000#ffffff0@50 -|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|%+0#0000001#ffff4012| +0#0000000#ffffff0@50 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|p|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n| @2|%+0#00e0e07&| +0#0000000&@50 +|v+0#af5f00255&|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|%+0#00e0e07&| +0#0000000&@50 @57|5@1|,|0|-|1| @7|9|8|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_vimgrep_04.dump b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_04.dump index a95f118e12..df3f54fc03 100644 --- a/runtime/syntax/testdir/dumps/vim_ex_vimgrep_04.dump +++ b/runtime/syntax/testdir/dumps/vim_ex_vimgrep_04.dump @@ -1,4 +1,4 @@ -|v+0#af5f00255#ffffff0|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|%+0#0000001#ffff4012| +0#0000000#ffffff0@50 +|v+0#af5f00255#ffffff0|i|m|g|r|e|p| +0#0000000&|/+0#e000e06&|p+0#0000000&|a|\+0#e000e06&|%|(|t+0#0000000&@1|\+0#e000e06&|)|e+0#0000000&|r|n|/+0#e000e06&| +0#0000000&|%+0#00e0e07&| +0#0000000&@50 > @74 |~+0#4040ff13&| @73 |~| @73 diff --git a/runtime/syntax/testdir/dumps/vim_function_calls_02.dump b/runtime/syntax/testdir/dumps/vim_function_calls_02.dump index 3d92656c5c..9de7ceebbf 100644 --- a/runtime/syntax/testdir/dumps/vim_function_calls_02.dump +++ b/runtime/syntax/testdir/dumps/vim_function_calls_02.dump @@ -3,8 +3,8 @@ |l+0#af5f00255&|e|t| +0#0000000&|c|h|d|i|r| |=+0#af5f00255&| +0#0000000&|c+0#00e0e07&|h|d|i|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@53 |c+0#af5f00255&|a|l@1| +0#0000000&|c+0#00e0e07&|h|d|i|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@60 |"+0#0000e05&| |c|o|m@1|a|n|d| +0#0000000&@65 ->c+0#af5f00255&|h|d|i|r|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@65 -|c+0#af5f00255&|h|d|i|r| +0#0000000&|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@64 +>c+0#af5f00255&|h|d|i|r|(+0#0000000&|4|2|)| @65 +|c+0#af5f00255&|h|d|i|r| +0#0000000&|(|4|2|)| @64 @75 |l+0#af5f00255&|e|t| +0#0000000&|c|o|n|f|i|r|m| |=+0#af5f00255&| +0#0000000&|c+0#00e0e07&|o|n|f|i|r|m|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@49 |c+0#af5f00255&|a|l@1| +0#0000000&|c+0#00e0e07&|o|n|f|i|r|m|(+0#e000e06&|4+0#e000002&|2|)+0#e000e06&| +0#0000000&@58 diff --git a/runtime/syntax/testdir/input/cpp_numbers.cpp b/runtime/syntax/testdir/input/cpp_numbers.cpp new file mode 100644 index 0000000000..d6ef21b0ae --- /dev/null +++ b/runtime/syntax/testdir/input/cpp_numbers.cpp @@ -0,0 +1,20 @@ +void foo() +{ + { + // See https://en.cppreference.com/w/cpp/language/floating_literal + double a = 1.0E2; + double b = 1.0e2; + double c = 1E2; + double d = 1e2; + + double e = 0X1ffp10; + double f = 0x1ffp10; + } + + // See: https://en.cppreference.com/w/cpp/language/integer_literal + int a = 0X123; + int b = 0x123; + + int c = 0B101; + int d = 0b101; +} diff --git a/runtime/syntax/testdir/input/css_1.css b/runtime/syntax/testdir/input/css_1.css new file mode 100644 index 0000000000..70a14127ce --- /dev/null +++ b/runtime/syntax/testdir/input/css_1.css @@ -0,0 +1,5 @@ +div { + margin-block: 1px; + margin-block-start: 1px; + margin-block-end: 1px; +} diff --git a/runtime/syntax/testdir/input/haskell.hs b/runtime/syntax/testdir/input/haskell.hs new file mode 100644 index 0000000000..c8607920e1 --- /dev/null +++ b/runtime/syntax/testdir/input/haskell.hs @@ -0,0 +1,4 @@ +-- Issue #18776 (allow spaces in backticked operators) + +main = print (9 ` div ` 4) + diff --git a/runtime/syntax/testdir/input/leex.xrl b/runtime/syntax/testdir/input/leex.xrl new file mode 100644 index 0000000000..c901b8b87d --- /dev/null +++ b/runtime/syntax/testdir/input/leex.xrl @@ -0,0 +1,28 @@ +% Header comment +%% Header comment +%%% Header comment + +Definitions. +floats = (\+|-)?[0-9]+\.[0-9]+((E|e)(\+|-)?[0-9]+)? +D = [0-9] +A = ({D}|_|@) +WS = ([\000-\s]|%.*) % whitespace + +Rules. +{D}+ : + % Comment + {token,{integer,TokenLine,list_to_integer(TokenChars)}}. +{D}+\.{D}+((E|e)(\+|\-)?{D}+)? : + % Coment with period. + {token,{float,TokenLine,list_to_float(TokenChars)}}. +{A} : ErlangCode. % comment +{WS} : ErlangCode. +:= :{token,{':=',TokenLine}}. + +Erlang code. + +-export([reserved_word/1]). + +%% reserved_word(Atom) -> Bool +reserved_word('reserved') -> true; +reserved_word(_) -> false. diff --git a/runtime/syntax/testdir/input/make_01.mak b/runtime/syntax/testdir/input/make_01.mak new file mode 100644 index 0000000000..e97c13c0aa --- /dev/null +++ b/runtime/syntax/testdir/input/make_01.mak @@ -0,0 +1,16 @@ +# comment + +a = b +$(a) = 1 + +$(a):: + @echo double-colon rule + +$(a) += output + +define say + echo $1 +endef + +default: + $(call say,"Hello (world)!") diff --git a/runtime/syntax/testdir/input/python_strings_bytes.py b/runtime/syntax/testdir/input/python_strings_bytes.py index 95e619e216..569168637e 100644 --- a/runtime/syntax/testdir/input/python_strings_bytes.py +++ b/runtime/syntax/testdir/input/python_strings_bytes.py @@ -99,6 +99,47 @@ + 2}""" +# Template string literals (t-strings) +# https://docs.python.org/3/reference/lexical_analysis.html#template-string-literals +test = t'T-string with escapes \' and \" and \t and fields {foo} and {bar}' +test = T"T-string with escapes \040 and \xFF and fields {foo} and {bar}" +test = t'T-string with escapes \u00A1 and \U00010605 and \N{INVERTED EXCLAMATION MARK} and fields {foo} and {bar}' +test = T"T-string with literal {{field}} and fields {foo} and {bar}" +test = t'''T-string with quotes ' and " +and escapes \t and \040 and \xFF +and escapes \u00A1 and \U00010605 +and fields {1}, {2} and {1 + + + 2}''' +test = T"""T-string with quotes ' and " +and escapes \t and \040 and \xFF +and escapes \u00A1 and \U00010605 +and fields {1}, {2} and {1 + + + 2}""" + +# Raw template string literals +test = tr'Raw t-string with literal \' and \" and \t and fields {foo} and {bar}' +test = tR"Raw t-string with literal \040 and \xFF and fields {foo} and {bar}" +test = tr'Raw t-string with literal \u00A1 and \U00010605 and fields \N{FIELD, NOT, ESCAPE} and {foo} and {bar}' +test = tR"Raw t-string with literal {{field}} and fields {foo} and {bar}" +test = rt'Raw t-string with literal \' and \" and \t and fields {foo} and {bar}' +test = rT"Raw t-string with literal \040 and \xFF and fields {foo} and {bar}" +test = Rt'Raw t-string with literal \u00A1 and \U00010605 and fields \N{FIELD, NOT, ESCAPE} and {foo} and {bar}' +test = RT"Raw t-string with literal {{field}} and fields {foo} and {bar}" +test = tr'''Raw t-string with quotes ' and " +and literal \t and \040 and \xFF +and literal \u00A1 and \U00010605 +and fields {1}, {2} and {1 + + + 2}''' +test = RT"""Raw t-string with quotes ' and " +and literal \t and \040 and \xFF +and literal \u00A1 and \U00010605 +and fields {1}, {2} and {1 + + + 2}""" + # F-string replacement fields test = f"String is { "one plus " diff --git a/runtime/syntax/testdir/input/sml.sml b/runtime/syntax/testdir/input/sml.sml new file mode 100644 index 0000000000..dab0b82b92 --- /dev/null +++ b/runtime/syntax/testdir/input/sml.sml @@ -0,0 +1,71 @@ +(* Integer constants *) + +val _ = 0; +val _ = 42; +val _ = 0x2A; +val _ = ~42; (* single token *) +val _ = ~0x2A; (* single token *) + + +(* Word constants *) + +val _ = 0w0; +val _ = 0w42; +val _ = 0wx2A; +val _ = ~0w42; (* nonfix ~ *) +val _ = ~0wx2A; (* nonfix ~ *) + + +(* Real constants *) + +val _ = 0.0; +val _ = 42.42; +val _ = 42E42; +val _ = 42E~42; +val _ = 42.42E42; +val _ = 42.42E~42; +val _ = ~42.42; (* single token *) +val _ = ~42.42; (* single token *) +val _ = ~42E42; (* single token *) +val _ = ~42E~42; (* single token *) +val _ = ~42.42E42; (* single token *) +val _ = ~42.42E~42; (* single token *) + + +(* Character constants *) + +val _ = #"a"; +val _ = #"\a"; +val _ = #"\b"; +val _ = #"\t"; +val _ = #"\n"; +val _ = #"\v"; +val _ = #"\f"; +val _ = #"\r"; +val _ = #"\""; +val _ = #"\\"; +val _ = #"\^@"; +val _ = #"\^A"; +val _ = #"\^K"; +val _ = #"\^Z"; +val _ = #"\^["; +val _ = #"\^\"; +val _ = #"\^]"; +val _ = #"\^^"; +val _ = #"\^_"; +val _ = #"\000"; +val _ = #"\999"; +val _ = #"\u0000"; +val _ = #"\uFFFF"; + + +(* String constants *) + +val _ = ""; +val _ = "abc"; +val _ = "...\a...\b...\t...\n...\v...\f...\r...\"...\\..."; +val _ = "...\^@...\^A...\^K...\^Z...\^[...\^\...\^]...\^^...\^_..."; +val _ = "\000...\999...\u0000...\uFFFF..."; +val _ = "...\ + \..."; + diff --git a/runtime/syntax/testdir/input/vim9_types.vim b/runtime/syntax/testdir/input/vim9_types.vim index 81e76efd46..97a3636fcb 100644 --- a/runtime/syntax/testdir/input/vim9_types.vim +++ b/runtime/syntax/testdir/input/vim9_types.vim @@ -1,7 +1,7 @@ vim9script # Vim9 types # VIM_TEST_SETUP hi link vimTypeAny Todo -# VIM_TEST_SETUP hi link vimVariableTypeAny Todo +# VIM_TEST_SETUP hi link vim9VariableTypeAny Todo # builtin types (distinct any highlighting) diff --git a/runtime/syntax/testdir/input/vim9_types_example_object.vim b/runtime/syntax/testdir/input/vim9_types_example_object.vim new file mode 100644 index 0000000000..f5f902db7f --- /dev/null +++ b/runtime/syntax/testdir/input/vim9_types_example_object.vim @@ -0,0 +1,29 @@ +vim9script +# Vim9 object type constructor + + +# Issue #18677 (No recognition of object types - Aliaksei Budavei) + +interface I + def string(): string +endinterface + +class C implements I + def string(): string + return "C" + enddef +endclass + +enum E implements I + INSTANCE + + def string(): string + return "E" + enddef +endenum + +var c: object = C.new() +var e: object = E.INSTANCE +var os: tuple, object> = (c, e) +echo (c, e) == os + diff --git a/runtime/syntax/testdir/input/vim9_types_object.vim b/runtime/syntax/testdir/input/vim9_types_object.vim new file mode 100644 index 0000000000..7cf6eec05a --- /dev/null +++ b/runtime/syntax/testdir/input/vim9_types_object.vim @@ -0,0 +1,27 @@ +vim9script +# Vim9 object type constructor +# VIM_TEST_SETUP hi link vimTypeObject Todo +# VIM_TEST_SETUP hi link vimTypeObjectBracket Title + + +interface I +endinterface + +var a: object +var b: object +var c: object> +var d: object> + +def Foo( + arg1: object, + arg2: object, + arg3: object>, + arg4: object>) +enddef + +def Bar(): object +enddef + +def Baz(): object> +enddef + diff --git a/runtime/syntax/testdir/input/vim_ex_augroup.vim b/runtime/syntax/testdir/input/vim_ex_augroup.vim index f7022ecd88..3f43a7553e 100644 --- a/runtime/syntax/testdir/input/vim_ex_augroup.vim +++ b/runtime/syntax/testdir/input/vim_ex_augroup.vim @@ -41,14 +41,16 @@ augroup \"\| | autocmd! | augroup END augroup! \"\| +" trailing bar and tail comments + augroup foo"comment - au! - au BufRead * echo "Foo" + autocmd! + autocmd BufRead * echo "Foo" augroup END"comment augroup foo|echo "Foo" - au! - au BufRead * echo "Foo" + autocmd! + autocmd BufRead * echo "Foo" augroup END|echo "Foo" augroup! foo"comment @@ -56,7 +58,14 @@ augroup! foo|echo "Foo" " list groups + augroup augroup | echo "Foo" augroup " comment + +" groups named END* + +augroup ending +augroup END + diff --git a/runtime/syntax/testdir/input/vim_ex_breakpoint_commands.vim b/runtime/syntax/testdir/input/vim_ex_breakpoint_commands.vim new file mode 100644 index 0000000000..565cea3258 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_breakpoint_commands.vim @@ -0,0 +1,95 @@ +" Vim :break* commands +" VIM_TEST_SETUP hi link vimBreakpointNumber Number +" VIM_TEST_SETUP hi link vimBreakpointFunctionLine Number +" VIM_TEST_SETUP hi link vimBreakpointFileLine Number +" VIM_TEST_SETUP hi link vimBreakpointFilename Identifier +" VIM_TEST_SETUP hi link vimBreakpointFunction Type + + +breakadd func Foo +breakadd func 42 Foo +breakadd file foo.txt +breakadd file 42 foo.txt +breakadd here +breakadd expr g:foo + +breaklist + +breakdel 42 +breakdel * +breakdel func Foo +breakdel func 42 Foo +breakdel file foo.txt +breakdel file 42 foo.txt + +function Foo() + breakadd func Foo + breakadd func 42 Foo + breakadd file foo.txt + breakadd file 42 foo.txt + breakadd here + breakadd expr g:foo + + breaklist + + breakdel 42 + breakdel * + breakdel func Foo + breakdel func 42 Foo + breakdel file foo.txt + breakdel file 42 foo.txt +endfunction + +def Vim9Context() + breakadd func Foo + breakadd func 42 Foo + breakadd file foo.txt + breakadd file 42 foo.txt + breakadd here + breakadd expr g:foo + + breaklist + + breakdel 42 + breakdel * + breakdel func Foo + breakdel func 42 Foo + breakdel file foo.txt + breakdel file 42 foo.txt +enddef + + +" tail comment and trailing bar + +breakadd func Foo " comment +breakadd func 42 Foo " comment +breakadd file foo.txt " comment +breakadd file 42 foo.txt " comment +breakadd here " comment +breakadd expr g:foo " comment + +breaklist " comment + +breakdel 42 " comment +breakdel * " comment +breakdel func Foo " comment +breakdel func 42 Foo " comment +breakdel file foo.txt " comment +breakdel file 42 foo.txt " comment + +breakadd func Foo | echo "..." +breakadd func 42 Foo | echo "..." +breakadd file foo.txt | echo "..." +breakadd file 42 foo.txt | echo "..." +breakadd here | echo "..." +breakadd expr g:foo | echo "..." + +breaklist | echo "..." + +breakdel 42 | echo "..." +breakdel * | echo "..." +breakdel func Foo | echo "..." +breakdel func 42 Foo | echo "..." +breakdel file foo.txt | echo "..." +breakdel file 42 foo.txt | echo "..." + diff --git a/runtime/syntax/testdir/input/vim_ex_cd.vim b/runtime/syntax/testdir/input/vim_ex_cd.vim new file mode 100644 index 0000000000..21adc31615 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_cd.vim @@ -0,0 +1,110 @@ +" Vim :cd commands +" VIM_TEST_SETUP hi link vimCdArg Todo + + +cd +cd! +cd foo +cd! foo +cd %:h/foo +cd! %:h/foo +cd foo bar/baz +cd! foo bar/baz +cd - +cd! - + +cd \"foo\"bar\" +cd \|foo\|bar\| +cd \#foo\#bar\# +cd \ foo\ bar\ +cd \\foo\\bar\\ + +cd " comment +cd | echo "..." +cd! " comment +cd! | echo "..." + + +function Foo() + cd + cd! + cd foo + cd! foo + cd - + cd! - + + cd " comment + cd | echo "..." + cd! " comment + cd! | echo "..." +endfunction + +def Foo() + cd + cd! + cd foo + cd! foo + cd - + cd! - + + cd # comment + cd | echo "..." + cd! # comment + cd! | echo "..." +enddef + + +cd | lcd | tcd | chdir | lchdir | tchdir | echo "..." +cd - | lcd - | tcd - | chdir - | lchdir - | tchdir - | echo "..." +cd foo | lcd foo | tcd foo | chdir foo | lchdir foo | tchdir foo | echo "..." +cd! | lcd! | tcd! | chdir! | lchdir! | tchdir! | echo "..." +cd! - | lcd! - | tcd! - | chdir! - | lchdir! - | tchdir! - | echo "..." +cd! foo | lcd! foo | tcd! foo | chdir! foo | lchdir! foo | tchdir! foo | echo "..." + +cd " comment +cd! " comment +cd - " comment +cd! - " comment +cd foo " comment +cd! foo " comment +lcd " comment +lcd! " comment +lcd - " comment +lcd! - " comment +lcd foo " comment +lcd! foo " comment +tcd " comment +tcd! " comment +tcd - " comment +tcd! - " comment +tcd foo " comment +tcd! foo " comment +chdir " comment +chdir! " comment +chdir - " comment +chdir! - " comment +chdir foo " comment +chdir! foo " comment +lchdir " comment +lchdir! " comment +lchdir - " comment +lchdir! - " comment +lchdir foo " comment +lchdir! foo " comment +tchdir " comment +tchdir! " comment +tchdir - " comment +tchdir! - " comment +tchdir foo " comment +tchdir! foo " comment + + +" Issue #17964 (Vim script highlight: endif is not highlighted after lcd) + +def LcdBack() + if get(g:, "lcd", 0) + g:lcd = 0 + lcd - + endif +enddef + diff --git a/runtime/syntax/testdir/input/vim_ex_debug.vim b/runtime/syntax/testdir/input/vim_ex_debug.vim new file mode 100644 index 0000000000..6c9174c366 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_debug.vim @@ -0,0 +1,13 @@ +" Vim :debug command + + +debug echo "..." + +function Foo() + debug echo "..." +endfunction + +def Bar() + debug echo "..." +enddef + diff --git a/runtime/syntax/testdir/input/vim_ex_do_commands.vim b/runtime/syntax/testdir/input/vim_ex_do_commands.vim new file mode 100644 index 0000000000..a4965940f2 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_do_commands.vim @@ -0,0 +1,58 @@ +" Vim :*do commands + + +argdo echo "..." +argdo! echo "..." + +bufdo echo "..." +bufdo! echo "..." + +cdo echo "..." +cdo! echo "..." + +cfdo echo "..." +cfdo! echo "..." + +folddoclosed echo "..." + +folddoopen echo "..." + +ldo echo "..." +ldo! echo "..." + +lfdo echo "..." +lfdo! echo "..." + +tabdo echo "..." + +windo echo "..." + + +def Vim9Context() + argdo echo "..." + argdo! echo "..." + + bufdo echo "..." + bufdo! echo "..." + + cdo echo "..." + cdo! echo "..." + + cfdo echo "..." + cfdo! echo "..." + + folddoclosed echo "..." + + folddoopen echo "..." + + ldo echo "..." + ldo! echo "..." + + lfdo echo "..." + lfdo! echo "..." + + tabdo echo "..." + + windo echo "..." +enddef + diff --git a/runtime/syntax/testdir/input/vim_ex_help.vim b/runtime/syntax/testdir/input/vim_ex_help.vim new file mode 100644 index 0000000000..4d13f3202f Binary files /dev/null and b/runtime/syntax/testdir/input/vim_ex_help.vim differ diff --git a/runtime/syntax/testdir/input/vim_ex_helpgrep.vim b/runtime/syntax/testdir/input/vim_ex_helpgrep.vim index aeef4501d4..8c686de073 100644 --- a/runtime/syntax/testdir/input/vim_ex_helpgrep.vim +++ b/runtime/syntax/testdir/input/vim_ex_helpgrep.vim @@ -1,4 +1,5 @@ " Vim :helpgrep command +" VIM_TEST_SETUP hi link vimHelpgrepPattern Todo helpgrep :help @@ -9,3 +10,9 @@ lhelpgrep :help lhelpgrep :help@en lhelpgrep :h\%(elp\)\= + +" no tail comment or trailing bar + +helpgrep :help " not a comment +helpgrep :help | not a command + diff --git a/runtime/syntax/testdir/input/vim_ex_history.vim b/runtime/syntax/testdir/input/vim_ex_history.vim new file mode 100644 index 0000000000..42dbcabd7d --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_history.vim @@ -0,0 +1,89 @@ +" Vim :history command +" VIM_TEST_SETUP hi link vimHistoryRange Todo + +history 1,9 +history cmd 1,9 +history : 1,9 +history search 1,9 +history / 1,9 +history ? 1,9 +history expr 1,9 +history = 1,9 +history input 1,9 +history @ 1,9 +history debug 1,9 +history > 1,9 +history all 1,9 + +history 1 +history -1 +history 1, +history -1, +history , 1 +history ,-1 +history 1, 1 +history 1,-1 +history -1, 1 +history -1,-1 + +history 1, 1 +history 1 ,1 +history 1 , 1 + + +" tail comments and trailing bar + +history | echo "..." +history " comment +history all | echo "..." +history all " comment +history 1,9 | echo "..." +history 1,9 " comment +history all 1,9 | echo "..." +history all 1,9 " comment + + +def Vim9Context() + history 1,9 + history cmd 1,9 + history : 1,9 + history search 1,9 + history / 1,9 + history ? 1,9 + history expr 1,9 + # FIXME + # history = 1,9 + history input 1,9 + history @ 1,9 + history debug 1,9 + history > 1,9 + history all 1,9 + + history 1 + history -1 + history 1, + history -1, + history , 1 + history ,-1 + history 1, 1 + history 1,-1 + history -1, 1 + history -1,-1 + + history 1, 1 + history 1 ,1 + history 1 , 1 + + + # tail comments and trailing bar + + history | echo "..." + history # comment + history all | echo "..." + history all # comment + history 1,9 | echo "..." + history 1,9 # comment + history all 1,9 | echo "..." + history all 1,9 # comment +enddef + diff --git a/runtime/syntax/testdir/input/vim_ex_language.vim b/runtime/syntax/testdir/input/vim_ex_language.vim new file mode 100644 index 0000000000..d4742a412f --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_language.vim @@ -0,0 +1,172 @@ +" Vim :language command +" VIM_TEST_SETUP hi link vimLanguageName Todo + + +" print commands + +language +language collate +language ctype +language time +language messages + + +" set commands + +language C +language collate C +language ctype C +language time C +language messages C + +language POSIX +language collate POSIX +language ctype POSIX +language time POSIX +language messages POSIX + +language de_DE.UTF-8@euro +language collate de_DE.UTF-8@euro +language ctype de_DE.UTF-8@euro +language time de_DE.UTF-8@euro +language messages de_DE.UTF-8@euro + +" tail comment and trailing bar + +language " comment +language collate " comment +language ctype " comment +language time " comment +language messages " comment + +language de_DE.UTF-8@euro " comment +language collate de_DE.UTF-8@euro " comment +language ctype de_DE.UTF-8@euro " comment +language time de_DE.UTF-8@euro " comment +language messages de_DE.UTF-8@euro " comment + +language C " comment +language collate C " comment +language ctype C " comment +language time C " comment +language messages C " comment + +language POSIX " comment +language collate POSIX " comment +language ctype POSIX " comment +language time POSIX " comment +language messages POSIX " comment + +language de_DE.UTF-8@euro " comment +language collate de_DE.UTF-8@euro " comment +language ctype de_DE.UTF-8@euro " comment +language time de_DE.UTF-8@euro " comment +language messages de_DE.UTF-8@euro " comment + +language | echo "..." +language collate | echo "..." +language ctype | echo "..." +language time | echo "..." +language messages | echo "..." + +language C | echo "..." +language collate C | echo "..." +language ctype C | echo "..." +language time C | echo "..." +language messages C | echo "..." + +language POSIX | echo "..." +language collate POSIX | echo "..." +language ctype POSIX | echo "..." +language time POSIX | echo "..." +language messages POSIX | echo "..." + +language de_DE.UTF-8@euro | echo "..." +language collate de_DE.UTF-8@euro | echo "..." +language ctype de_DE.UTF-8@euro | echo "..." +language time de_DE.UTF-8@euro | echo "..." +language messages de_DE.UTF-8@euro | echo "..." + +def Vim9Context() + + # print commands + + language + language collate + language ctype + language time + language messages + + + # set commands + + language C + language collate C + language ctype C + language time C + language messages C + + language POSIX + language collate POSIX + language ctype POSIX + language time POSIX + language messages POSIX + + language de_DE.UTF-8@euro + language collate de_DE.UTF-8@euro + language ctype de_DE.UTF-8@euro + language time de_DE.UTF-8@euro + language messages de_DE.UTF-8@euro + + + # tail comment and trailing bar + + language # comment + language collate # comment + language ctype # comment + language time # comment + language messages # comment + + language C # comment + language collate C # comment + language ctype C # comment + language time C # comment + language messages C # comment + + language POSIX # comment + language collate POSIX # comment + language ctype POSIX # comment + language time POSIX # comment + language messages POSIX # comment + + language de_DE.UTF-8@euro # comment + language collate de_DE.UTF-8@euro # comment + language ctype de_DE.UTF-8@euro # comment + language time de_DE.UTF-8@euro # comment + language messages de_DE.UTF-8@euro # comment + + language | echo "..." + language collate | echo "..." + language ctype | echo "..." + language time | echo "..." + language messages | echo "..." + + language C | echo "..." + language collate C | echo "..." + language ctype C | echo "..." + language time C | echo "..." + language messages C | echo "..." + + language POSIX | echo "..." + language collate POSIX | echo "..." + language ctype POSIX | echo "..." + language time POSIX | echo "..." + language messages POSIX | echo "..." + + language de_DE.UTF-8@euro | echo "..." + language collate de_DE.UTF-8@euro | echo "..." + language ctype de_DE.UTF-8@euro | echo "..." + language time de_DE.UTF-8@euro | echo "..." + language messages de_DE.UTF-8@euro | echo "..." +enddef + diff --git a/runtime/syntax/testdir/input/vim_ex_prompt_commands.vim b/runtime/syntax/testdir/input/vim_ex_prompt_commands.vim new file mode 100644 index 0000000000..1f15313155 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_prompt_commands.vim @@ -0,0 +1,46 @@ +" Vim :prompt{find,repl} commands + + +promptfind foo +promptrepl foo + +promptfind a + \ really + \ long + \ search + \ string +promptrepl a + \ really + \ long + \ search + \ string + + +" no tail comment or trailing bar + +promptfind foo " more search string +promptfind foo | more search string + + +def Vim9Context() + promptfind foo + promptrepl foo + + promptfind a + \ really + \ long + \ search + \ string + promptrepl a + \ really + \ long + \ search + \ string + + + # no tail comment or trailing bar + + promptfind foo # more search string + promptfind foo | more search string +enddef + diff --git a/runtime/syntax/tt2.vim b/runtime/syntax/tt2.vim index 6826fb1581..100eb6e6a1 100644 --- a/runtime/syntax/tt2.vim +++ b/runtime/syntax/tt2.vim @@ -1,6 +1,6 @@ " Vim syntax file " Language: TT2 (Perl Template Toolkit) -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Author: Moriki, Atsushi <4woods+vim@gmail.com> " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues diff --git a/runtime/syntax/tt2html.vim b/runtime/syntax/tt2html.vim index 8c223be707..f489182d5f 100644 --- a/runtime/syntax/tt2html.vim +++ b/runtime/syntax/tt2html.vim @@ -1,6 +1,6 @@ " Vim syntax file " Language: TT2 embedded with HTML -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Author: Moriki, Atsushi <4woods+vim@gmail.com> " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index 3a89a9bcff..f28b0a45bd 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Oct 27 +" Last Change: 2025 Dec 13 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -34,14 +34,14 @@ syn cluster vimCommentGroup contains=vimTodo,@Spell " regular vim commands {{{2 " GEN_SYN_VIM: vimCommand normal, START_STR='syn keyword vimCommand contained', END_STR='nextgroup=vimBang' -syn keyword vimCommand contained al[l] ar[gs] arga[dd] argd[elete] argdo argded[upe] arge[dit] argg[lobal] argl[ocal] argu[ment] as[cii] b[uffer] bN[ext] ba[ll] bad[d] balt bd[elete] bf[irst] bl[ast] bm[odified] bn[ext] bp[revious] br[ewind] brea[k] breaka[dd] breakd[el] breakl[ist] buffers bufd[o] bun[load] bw[ipeout] cN[ext] cNf[ile] cabo[ve] cad[dbuffer] cadde[xpr] caddf[ile] caf[ter] cb[uffer] cbe[fore] cbel[ow] cbo[ttom] cc ccl[ose] cd cdo ce[nter] cex[pr] cf[ile] cfd[o] cfir[st] cg[etfile] cgetb[uffer] cgete[xpr] changes che[ckpath] checkt[ime] chi[story] cl[ist] clip[reset] cla[st] clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] col[der] colo[rscheme] comc[lear] comp[iler] con[tinue] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] nextgroup=vimBang -syn keyword vimCommand contained delm[arks] deb[ug] defc[ompile] di[splay] dif[fupdate] diffg[et] diffo[ff] diffp[atch] diffpu[t] diffs[plit] difft[his] dig[raphs] disa[ssemble] dj[ump] dli[st] dr[op] ds[earch] dsp[lit] e[dit] ea[rlier] em[enu] endfo[r] endt[ry] endw[hile] ene[w] ex exi[t] exu[sage] f[ile] files fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldd[oopen] folddoc[losed] foldo[pen] g[lobal] go[to] gu[i] gv[im] h[elp] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] his[tory] ij[ump] il[ist] int[ro] ip[ut] is[earch] isp[lit] ju[mps] l[ist] lN[ext] lNf[ile] la[st] lab[ove] lan[guage] lad[dexpr] laddb[uffer] laddf[ile] laf[ter] lat[er] lb[uffer] lbe[fore] lbel[ow] lbo[ttom] lc[d] lch[dir] lcl[ose] lcs[cope] ld[o] le[ft] lex[pr] lf[ile] lfd[o] nextgroup=vimBang -syn keyword vimCommand contained lfir[st] lg[etfile] lgetb[uffer] lgete[xpr] lhi[story] ll lla[st] lli[st] lmak[e] lne[xt] lnew[er] lnf[ile] lo[adview] lockv[ar] lol[der] lop[en] lp[revious] lpf[ile] lr[ewind] lt[ag] lw[indow] ls m[ove] marks mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] n[ext] nb[key] nbc[lose] nbs[tart] noh[lsearch] nu[mber] o[pen] ol[dfiles] on[ly] opt[ions] ow[nsyntax] p[rint] pa[ckadd] packl[oadall] pb[uffer] pc[lose] ped[it] po[p] pp[op] pre[serve] prev[ious] pro[mptfind] promptr[epl] ps[earch] pt[ag] ptN[ext] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] nextgroup=vimBang -syn keyword vimCommand contained ret[ab] rew[ind] ri[ght] ru[ntime] rund[o] rv[iminfo] sN[ext] sa[rgument] sal[l] sav[eas] sb[uffer] sbN[ext] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] scr[iptnames] scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sla[st] sn[ext] so[urce] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] stopi[nsert] stj[ump] sts[elect] sun[hide] sus[pend] sv[iew] sync[bind] smi[le] t tN[ext] ta[g] tags tabc[lose] tabd[o] tabe[dit] tabf[ind] tabfir[st] tabm[ove] tabl[ast] tabn[ext] tabnew tabo[nly] tabp[revious] tabN[ext] tabr[ewind] tabs tc[d] tch[dir] nextgroup=vimBang -syn keyword vimCommand contained te[aroff] tf[irst] tj[ump] tl[ast] tn[ext] tp[revious] tr[ewind] try ts[elect] u[ndo] undoj[oin] undol[ist] unh[ide] up[date] v[global] ve[rsion] vi[sual] vie[w] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] wi[nsize] wind[o] winp[os] wl[restore] wn[ext] wp[revious] wq wqa[ll] wu[ndo] wv[iminfo] x[it] xa[ll] xr[estore] y[ank] z dl dell delel deletl deletel dp dep delp delep deletp deletep a i nextgroup=vimBang +syn keyword vimCommand contained al[l] ar[gs] arga[dd] argd[elete] argded[upe] arge[dit] argg[lobal] argl[ocal] argu[ment] as[cii] b[uffer] bN[ext] ba[ll] bad[d] balt bd[elete] bf[irst] bl[ast] bm[odified] bn[ext] bp[revious] br[ewind] brea[k] buffers bun[load] bw[ipeout] cN[ext] cNf[ile] cabo[ve] cad[dbuffer] cadde[xpr] caddf[ile] caf[ter] cb[uffer] cbe[fore] cbel[ow] cbo[ttom] cc ccl[ose] ce[nter] cex[pr] cf[ile] cfir[st] cg[etfile] cgetb[uffer] cgete[xpr] changes che[ckpath] checkt[ime] chi[story] cl[ist] clip[reset] cla[st] clo[se] cle[arjumps] cn[ext] cnew[er] cnf[ile] col[der] colo[rscheme] comc[lear] comp[iler] con[tinue] cope[n] cp[revious] cpf[ile] cq[uit] cr[ewind] cs[cope] cst[ag] cw[indow] delm[arks] defc[ompile] di[splay] dif[fupdate] diffg[et] diffo[ff] nextgroup=vimBang +syn keyword vimCommand contained diffp[atch] diffpu[t] diffs[plit] difft[his] dig[raphs] disa[ssemble] dj[ump] dli[st] dr[op] ds[earch] dsp[lit] e[dit] ea[rlier] em[enu] endfo[r] endt[ry] endw[hile] ene[w] ex exi[t] exu[sage] f[ile] files fin[d] fina[lly] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] foldo[pen] g[lobal] go[to] gu[i] gv[im] helpc[lose] helpf[ind] helpt[ags] ha[rdcopy] ij[ump] il[ist] int[ro] ip[ut] is[earch] isp[lit] ju[mps] l[ist] lN[ext] lNf[ile] la[st] lab[ove] lad[dexpr] laddb[uffer] laddf[ile] laf[ter] lat[er] lb[uffer] lbe[fore] lbel[ow] lbo[ttom] lcl[ose] lcs[cope] le[ft] lex[pr] lf[ile] lfir[st] lg[etfile] lgetb[uffer] lgete[xpr] lhi[story] ll lla[st] lli[st] lmak[e] lne[xt] lnew[er] lnf[ile] lo[adview] lockv[ar] lol[der] lop[en] lp[revious] nextgroup=vimBang +syn keyword vimCommand contained lpf[ile] lr[ewind] lt[ag] lw[indow] ls m[ove] marks mes[sages] mk[exrc] mks[ession] mksp[ell] mkv[imrc] mkvie[w] mod[e] n[ext] nb[key] nbc[lose] nbs[tart] noh[lsearch] nu[mber] o[pen] ol[dfiles] on[ly] opt[ions] ow[nsyntax] p[rint] pa[ckadd] packl[oadall] pb[uffer] pc[lose] ped[it] po[p] pp[op] pre[serve] prev[ious] ps[earch] pt[ag] ptN[ext] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] q[uit] quita[ll] qa[ll] r[ead] rec[over] red[o] redr[aw] redraws[tatus] redrawt[abline] redrawtabp[anel] reg[isters] res[ize] ret[ab] rew[ind] ri[ght] ru[ntime] rund[o] rv[iminfo] sN[ext] sa[rgument] sal[l] sav[eas] sb[uffer] sbN[ext] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbp[revious] sbr[ewind] scr[iptnames] nextgroup=vimBang +syn keyword vimCommand contained scripte[ncoding] scriptv[ersion] scs[cope] setf[iletype] sf[ind] sfir[st] sh[ell] sim[alt] sig[n] sla[st] sn[ext] so[urce] spe[llgood] spelld[ump] spelli[nfo] spellr[epall] spellra[re] spellu[ndo] spellw[rong] spr[evious] sre[wind] st[op] sta[g] star[tinsert] startg[replace] startr[eplace] stopi[nsert] stj[ump] sts[elect] sun[hide] sus[pend] sv[iew] sync[bind] smi[le] t tN[ext] ta[g] tags tabc[lose] tabe[dit] tabf[ind] tabfir[st] tabm[ove] tabl[ast] tabn[ext] tabnew tabo[nly] tabp[revious] tabN[ext] tabr[ewind] tabs te[aroff] tf[irst] tj[ump] tl[ast] tn[ext] tp[revious] tr[ewind] try ts[elect] u[ndo] undoj[oin] undol[ist] unh[ide] up[date] v[global] ve[rsion] vi[sual] vie[w] viu[sage] vne[w] vs[plit] w[rite] wN[ext] wa[ll] wi[nsize] nextgroup=vimBang +syn keyword vimCommand contained winp[os] wl[restore] wn[ext] wp[revious] wq wqa[ll] wu[ndo] wv[iminfo] x[it] xa[ll] xr[estore] y[ank] z dl dell delel deletl deletel dp dep delp delep deletp deletep a i nextgroup=vimBang " Lower priority :syn-match to allow for :command/function() distinction -syn match vimCommand "\" nextgroup=vimBang +" :chdir is handled specially elsewhere syn match vimCommand "\" nextgroup=vimBang syn match vimCommand "\" nextgroup=vimBang syn match vimCommand "\" nextgroup=vimBang @@ -65,14 +65,14 @@ syn keyword vimStdPlugin contained Arguments Asm Break Cfilter Clear Continue Di " vimOptions are caught only when contained in a vimSet {{{2 " GEN_SYN_VIM: vimOption normal, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod' syn keyword vimOption contained al aleph ari allowrevins ambw ambiwidth arab arabic arshape arabicshape acd autochdir ac autocomplete acl autocompletedelay act autocompletetimeout ai autoindent ar autoread asd autoshelldir aw autowrite awa autowriteall bg background bs backspace bk backup bkc backupcopy bdir backupdir bex backupext bsk backupskip bdlay balloondelay beval ballooneval bevalterm balloonevalterm bexpr balloonexpr bo belloff bin binary bomb brk breakat bri breakindent briopt breakindentopt bsdir browsedir bh bufhidden bl buflisted bt buftype cmp casemap cdh cdhome cd cdpath cedit ccv charconvert chi chistory cin cindent cink cinkeys cino cinoptions cinsd cinscopedecls cinw cinwords cb clipboard cpm clipmethod ch cmdheight cwh cmdwinheight cc colorcolumn skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained co columns com comments cms commentstring cp compatible cpt complete cfu completefunc cfc completefuzzycollect cia completeitemalign cot completeopt cpp completepopup csl completeslash cto completetimeout cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dia diffanchors dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg eb errorbells skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained ef errorfile efm errorformat ek esckeys ei eventignore eiw eventignorewin et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight hlg helplang hid hidden skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained hl highlight hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode ise isexpand isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained mco maxcombine mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont pheader printheader skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained pmbcs printmbcharset pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape sxq shellxquote sr shiftround sw shiftwidth skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained shm shortmess sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack tcldll term tbidi termbidi tenc termencoding tgc termguicolors skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window skipwhite nextgroup=vimSetEqual,vimSetMod -syn keyword vimOption contained wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wst wlsteal wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained co columns com comments cms commentstring cp compatible cpt complete cfu completefunc cia completeitemalign cot completeopt cpp completepopup csl completeslash cto completetimeout cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dia diffanchors dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg eb errorbells ef errorfile skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained efm errorformat ek esckeys ei eventignore eiw eventignorewin et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight hlg helplang hid hidden hl highlight skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime mco maxcombine mfd maxfuncdepth skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont pheader printheader pmbcs printmbcharset pmbfn printmbfont skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape sxq shellxquote sr shiftround sw shiftwidth shm shortmess sn shortname sbr showbreak skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack tcldll term tbidi termbidi tenc termencoding tgc termguicolors twk termwinkey twsl termwinscroll skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight skipwhite nextgroup=vimSetEqual,vimSetMod +syn keyword vimOption contained wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wst wlsteal wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes skipwhite nextgroup=vimSetEqual,vimSetMod " vimOptions: These are the turn-off setting variants {{{2 " GEN_SYN_VIM: vimOption turn-off, START_STR='syn keyword vimOption contained', END_STR='' @@ -104,14 +104,14 @@ syn match vimOption contained "t_k;" " vimOptions: These are the variable names {{{2 " GEN_SYN_VIM: vimOption normal variable, START_STR='syn keyword vimOptionVarName contained', END_STR='' syn keyword vimOptionVarName contained al aleph ari allowrevins ambw ambiwidth arab arabic arshape arabicshape acd autochdir ac autocomplete acl autocompletedelay act autocompletetimeout ai autoindent ar autoread asd autoshelldir aw autowrite awa autowriteall bg background bs backspace bk backup bkc backupcopy bdir backupdir bex backupext bsk backupskip bdlay balloondelay beval ballooneval bevalterm balloonevalterm bexpr balloonexpr bo belloff bin binary bomb brk breakat bri breakindent briopt breakindentopt bsdir browsedir bh bufhidden bl buflisted bt buftype cmp casemap cdh cdhome cd cdpath cedit ccv charconvert chi chistory cin cindent cink cinkeys cino cinoptions cinsd cinscopedecls cinw cinwords cb clipboard cpm clipmethod ch cmdheight cwh cmdwinheight cc colorcolumn -syn keyword vimOptionVarName contained co columns com comments cms commentstring cp compatible cpt complete cfu completefunc cfc completefuzzycollect cia completeitemalign cot completeopt cpp completepopup csl completeslash cto completetimeout cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dia diffanchors dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg -syn keyword vimOptionVarName contained eb errorbells ef errorfile efm errorformat ek esckeys ei eventignore eiw eventignorewin et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight -syn keyword vimOptionVarName contained hlg helplang hid hidden hl highlight hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode ise isexpand isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg -syn keyword vimOptionVarName contained mps matchpairs mat matchtime mco maxcombine mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr -syn keyword vimOptionVarName contained pfn printfont pheader printheader pmbcs printmbcharset pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape -syn keyword vimOptionVarName contained sxq shellxquote sr shiftround sw shiftwidth shm shortmess sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack -syn keyword vimOptionVarName contained tcldll term tbidi termbidi tenc termencoding tgc termguicolors twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu -syn keyword vimOptionVarName contained wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wst wlsteal wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes +syn keyword vimOptionVarName contained co columns com comments cms commentstring cp compatible cpt complete cfu completefunc cia completeitemalign cot completeopt cpp completepopup csl completeslash cto completetimeout cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dia diffanchors dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg eb errorbells ef errorfile +syn keyword vimOptionVarName contained efm errorformat ek esckeys ei eventignore eiw eventignorewin et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight hlg helplang hid hidden hl highlight +syn keyword vimOptionVarName contained hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime mco maxcombine +syn keyword vimOptionVarName contained mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont pheader printheader pmbcs printmbcharset +syn keyword vimOptionVarName contained pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape sxq shellxquote sr shiftround sw shiftwidth shm shortmess +syn keyword vimOptionVarName contained sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack tcldll term tbidi termbidi tenc termencoding tgc termguicolors +syn keyword vimOptionVarName contained twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor +syn keyword vimOptionVarName contained wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wst wlsteal wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes " GEN_SYN_VIM: vimOption term output code variable, START_STR='syn keyword vimOptionVarName contained', END_STR='' syn keyword vimOptionVarName contained t_AB t_AF t_AU t_AL t_al t_bc t_BE t_BD t_cd t_ce t_Ce t_CF t_cl t_cm t_Co t_CS t_Cs t_cs t_CV t_da t_db t_DL t_dl t_ds t_Ds t_EC t_EI t_fs t_fd t_fe t_GP t_IE t_IS t_ke t_ks t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RF t_RB t_RC t_RI t_Ri t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_SI t_Si t_so t_SR t_sr t_ST t_Te t_te t_TE t_ti t_TI t_Ts t_ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_VS t_vs t_WP t_WS t_XM t_xn t_xs t_ZH t_ZR t_8f t_8b t_8u t_xo syn keyword vimOptionVarName contained t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ku @@ -154,21 +154,21 @@ syn case match " Function Names {{{2 " GEN_SYN_VIM: vimFuncName, START_STR='syn keyword vimFuncName contained', END_STR='' syn keyword vimFuncName contained abs acos add and append appendbufline argc argidx arglistid argv asin assert_beeps assert_equal assert_equalfile assert_exception assert_fails assert_false assert_inrange assert_match assert_nobeep assert_notequal assert_notmatch assert_report assert_true atan atan2 autocmd_add autocmd_delete autocmd_get balloon_gettext balloon_show balloon_split base64_decode base64_encode bindtextdomain blob2list blob2str browse browsedir bufadd bufexists buflisted bufload bufloaded bufname bufnr bufwinid bufwinnr byte2line byteidx byteidxcomp call ceil ch_canread ch_close ch_close_in ch_evalexpr ch_evalraw ch_getbufnr ch_getjob ch_info ch_log ch_logfile ch_open ch_read ch_readblob ch_readraw ch_sendexpr ch_sendraw ch_setoptions ch_status changenr -syn keyword vimFuncName contained char2nr charclass charcol charidx chdir cindent clearmatches cmdcomplete_info col complete complete_add complete_check complete_info complete_match confirm copy cos cosh count cscope_connection cursor debugbreak deepcopy delete deletebufline did_filetype diff diff_filler diff_hlID digraph_get digraph_getlist digraph_set digraph_setlist echoraw empty environ err_teapot escape eval eventhandler executable execute exepath exists exists_compiled exp expand expandcmd extend extendnew feedkeys filecopy filereadable filewritable filter finddir findfile flatten flattennew float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreach foreground fullcommand funcref function garbagecollect -syn keyword vimFuncName contained get getbufinfo getbufline getbufoneline getbufvar getcellpixels getcellwidths getchangelist getchar getcharmod getcharpos getcharsearch getcharstr getcmdcomplpat getcmdcompltype getcmdline getcmdpos getcmdprompt getcmdscreenpos getcmdtype getcmdwintype getcompletion getcompletiontype getcurpos getcursorcharpos getcwd getenv getfontname getfperm getfsize getftime getftype getimstatus getjumplist getline getloclist getmarklist getmatches getmousepos getmouseshape getpid getpos getqflist getreg getreginfo getregion getregionpos getregtype getscriptinfo getstacktrace gettabinfo gettabvar gettabwinvar gettagstack gettext getwininfo getwinpos getwinposx getwinposy getwinvar glob glob2regpat globpath has has_key haslocaldir hasmapto -syn keyword vimFuncName contained histadd histdel histget histnr hlID hlexists hlget hlset hostname iconv id indent index indexof input inputdialog inputlist inputrestore inputsave inputsecret insert instanceof interrupt invert isabsolutepath isdirectory isinf islocked isnan items job_getchannel job_info job_setoptions job_start job_status job_stop join js_decode js_encode json_decode json_encode keys keytrans len libcall libcallnr line line2byte lispindent list2blob list2str list2tuple listener_add listener_flush listener_remove localtime log log10 luaeval map maparg mapcheck maplist mapnew mapset match matchadd matchaddpos matcharg matchbufline matchdelete matchend matchfuzzy matchfuzzypos matchlist matchstr matchstrlist matchstrpos max menu_info min mkdir mode -syn keyword vimFuncName contained mzeval nextnonblank ngettext nr2char or pathshorten perleval popup_atcursor popup_beval popup_clear popup_close popup_create popup_dialog popup_filter_menu popup_filter_yesno popup_findecho popup_findinfo popup_findpreview popup_getoptions popup_getpos popup_hide popup_list popup_locate popup_menu popup_move popup_notification popup_setbuf popup_setoptions popup_settext popup_show pow preinserted prevnonblank printf prompt_getprompt prompt_setcallback prompt_setinterrupt prompt_setprompt prop_add prop_add_list prop_clear prop_find prop_list prop_remove prop_type_add prop_type_change prop_type_delete prop_type_get prop_type_list pum_getpos pumvisible py3eval pyeval pyxeval rand range readblob readdir readdirex readfile reduce reg_executing -syn keyword vimFuncName contained reg_recording reltime reltimefloat reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remote_startserver remove rename repeat resolve reverse round rubyeval screenattr screenchar screenchars screencol screenpos screenrow screenstring search searchcount searchdecl searchpair searchpairpos searchpos server2client serverlist setbufline setbufvar setcellwidths setcharpos setcharsearch setcmdline setcmdpos setcursorcharpos setenv setfperm setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar settagstack setwinvar sha256 shellescape shiftwidth sign_define sign_getdefined sign_getplaced sign_jump sign_place sign_placelist sign_undefine sign_unplace sign_unplacelist simplify sin sinh slice -syn keyword vimFuncName contained sort sound_clear sound_playevent sound_playfile sound_stop soundfold spellbadword spellsuggest split sqrt srand state str2blob str2float str2list str2nr strcharlen strcharpart strchars strdisplaywidth strftime strgetchar stridx string strlen strpart strptime strridx strtrans strutf16len strwidth submatch substitute swapfilelist swapinfo swapname synID synIDattr synIDtrans synconcealed synstack system systemlist tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname term_dumpdiff term_dumpload term_dumpwrite term_getaltscreen term_getansicolors term_getattr term_getcursor term_getjob term_getline term_getscrolled term_getsize term_getstatus term_gettitle term_gettty term_list term_scrape term_sendkeys term_setansicolors -syn keyword vimFuncName contained term_setapi term_setkill term_setrestore term_setsize term_start term_wait terminalprops test_alloc_fail test_autochdir test_feedinput test_garbagecollect_now test_garbagecollect_soon test_getvalue test_gui_event test_ignore_error test_mswin_event test_null_blob test_null_channel test_null_dict test_null_function test_null_job test_null_list test_null_partial test_null_string test_null_tuple test_option_not_set test_override test_refcount test_setmouse test_settime test_srand_seed test_unknown test_void timer_info timer_pause timer_start timer_stop timer_stopall tolower toupper tr trim trunc tuple2list type typename undofile undotree uniq uri_decode uri_encode utf16idx values virtcol virtcol2col visualmode wildmenumode wildtrigger -syn keyword vimFuncName contained win_execute win_findbuf win_getid win_gettype win_gotoid win_id2tabwin win_id2win win_move_separator win_move_statusline win_screenpos win_splitmove winbufnr wincol windowsversion winheight winlayout winline winnr winrestcmd winrestview winsaveview winwidth wordcount writefile xor +syn keyword vimFuncName contained char2nr charclass charcol charidx chdir cindent clearmatches cmdcomplete_info col complete complete_add complete_check complete_info confirm copy cos cosh count cscope_connection cursor debugbreak deepcopy delete deletebufline did_filetype diff diff_filler diff_hlID digraph_get digraph_getlist digraph_set digraph_setlist echoraw empty environ err_teapot escape eval eventhandler executable execute exepath exists exists_compiled exp expand expandcmd extend extendnew feedkeys filecopy filereadable filewritable filter finddir findfile flatten flattennew float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreach foreground fullcommand funcref function garbagecollect get getbufinfo +syn keyword vimFuncName contained getbufline getbufoneline getbufvar getcellpixels getcellwidths getchangelist getchar getcharmod getcharpos getcharsearch getcharstr getcmdcomplpat getcmdcompltype getcmdline getcmdpos getcmdprompt getcmdscreenpos getcmdtype getcmdwintype getcompletion getcompletiontype getcurpos getcursorcharpos getcwd getenv getfontname getfperm getfsize getftime getftype getimstatus getjumplist getline getloclist getmarklist getmatches getmousepos getmouseshape getpid getpos getqflist getreg getreginfo getregion getregionpos getregtype getscriptinfo getstacktrace gettabinfo gettabvar gettabwinvar gettagstack gettext getwininfo getwinpos getwinposx getwinposy getwinvar glob glob2regpat globpath has has_key haslocaldir hasmapto histadd histdel +syn keyword vimFuncName contained histget histnr hlID hlexists hlget hlset hostname iconv id indent index indexof input inputdialog inputlist inputrestore inputsave inputsecret insert instanceof interrupt invert isabsolutepath isdirectory isinf islocked isnan items job_getchannel job_info job_setoptions job_start job_status job_stop join js_decode js_encode json_decode json_encode keys keytrans len libcall libcallnr line line2byte lispindent list2blob list2str list2tuple listener_add listener_flush listener_remove localtime log log10 luaeval map maparg mapcheck maplist mapnew mapset match matchadd matchaddpos matcharg matchbufline matchdelete matchend matchfuzzy matchfuzzypos matchlist matchstr matchstrlist matchstrpos max menu_info min mkdir mode mzeval nextnonblank +syn keyword vimFuncName contained ngettext nr2char or pathshorten perleval popup_atcursor popup_beval popup_clear popup_close popup_create popup_dialog popup_filter_menu popup_filter_yesno popup_findecho popup_findinfo popup_findpreview popup_getoptions popup_getpos popup_hide popup_list popup_locate popup_menu popup_move popup_notification popup_setbuf popup_setoptions popup_settext popup_show pow preinserted prevnonblank printf prompt_getprompt prompt_setcallback prompt_setinterrupt prompt_setprompt prop_add prop_add_list prop_clear prop_find prop_list prop_remove prop_type_add prop_type_change prop_type_delete prop_type_get prop_type_list pum_getpos pumvisible py3eval pyeval pyxeval rand range readblob readdir readdirex readfile redraw_listener_add redraw_listener_remove +syn keyword vimFuncName contained reduce reg_executing reg_recording reltime reltimefloat reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remote_startserver remove rename repeat resolve reverse round rubyeval screenattr screenchar screenchars screencol screenpos screenrow screenstring search searchcount searchdecl searchpair searchpairpos searchpos server2client serverlist setbufline setbufvar setcellwidths setcharpos setcharsearch setcmdline setcmdpos setcursorcharpos setenv setfperm setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar settagstack setwinvar sha256 shellescape shiftwidth sign_define sign_getdefined sign_getplaced sign_jump sign_place sign_placelist sign_undefine sign_unplace sign_unplacelist +syn keyword vimFuncName contained simplify sin sinh slice sort sound_clear sound_playevent sound_playfile sound_stop soundfold spellbadword spellsuggest split sqrt srand state str2blob str2float str2list str2nr strcharlen strcharpart strchars strdisplaywidth strftime strgetchar stridx string strlen strpart strptime strridx strtrans strutf16len strwidth submatch substitute swapfilelist swapinfo swapname synID synIDattr synIDtrans synconcealed synstack system systemlist tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname term_dumpdiff term_dumpload term_dumpwrite term_getaltscreen term_getansicolors term_getattr term_getcursor term_getjob term_getline term_getscrolled term_getsize term_getstatus term_gettitle term_gettty term_list term_scrape +syn keyword vimFuncName contained term_sendkeys term_setansicolors term_setapi term_setkill term_setrestore term_setsize term_start term_wait terminalprops test_alloc_fail test_autochdir test_feedinput test_garbagecollect_now test_garbagecollect_soon test_getvalue test_gui_event test_ignore_error test_mswin_event test_null_blob test_null_channel test_null_dict test_null_function test_null_job test_null_list test_null_partial test_null_string test_null_tuple test_option_not_set test_override test_refcount test_setmouse test_settime test_srand_seed test_unknown test_void timer_info timer_pause timer_start timer_stop timer_stopall tolower toupper tr trim trunc tuple2list type typename undofile undotree uniq uri_decode uri_encode utf16idx values virtcol virtcol2col +syn keyword vimFuncName contained visualmode wildmenumode wildtrigger win_execute win_findbuf win_getid win_gettype win_gotoid win_id2tabwin win_id2win win_move_separator win_move_statusline win_screenpos win_splitmove winbufnr wincol windowsversion winheight winlayout winline winnr winrestcmd winrestview winsaveview winwidth wordcount writefile xor " MacVim specific syn keyword vimFuncName contained showdefinition " Predefined variable names {{{2 " GEN_SYN_VIM: vimVarName, START_STR='syn keyword vimVimVarName contained', END_STR='' syn keyword vimVimVarName contained count count1 prevcount errmsg warningmsg statusmsg shell_error this_session version lnum termresponse fname lang lc_time ctype charconvert_from charconvert_to fname_in fname_out fname_new fname_diff cmdarg foldstart foldend folddashes foldlevel progname servername dying exception throwpoint register cmdbang insertmode val key profiling fcs_reason fcs_choice beval_bufnr beval_winnr beval_winid beval_lnum beval_col beval_text scrollstart swapname swapchoice swapcommand char mouse_win mouse_winid mouse_lnum mouse_col operator searchforward hlsearch oldfiles windowid progpath completed_item option_new option_old option_oldlocal option_oldglobal option_command option_type errors false true none null numbermax numbermin numbersize -syn keyword vimVimVarName contained vim_did_enter testing t_number t_string t_func t_list t_dict t_float t_bool t_none t_job t_channel t_blob t_class t_object termrfgresp termrbgresp termu7resp termstyleresp termblinkresp event versionlong echospace argv collate exiting colornames sizeofint sizeoflong sizeofpointer maxcol python3_version t_typealias t_enum t_enumvalue stacktrace t_tuple wayland_display clipmethod termda1 termosc +syn keyword vimVimVarName contained vim_did_enter testing t_number t_string t_func t_list t_dict t_float t_bool t_none t_job t_channel t_blob t_class t_object termrfgresp termrbgresp termu7resp termstyleresp termblinkresp event versionlong echospace argv collate exiting colornames sizeofint sizeoflong sizeofpointer maxcol python3_version t_typealias t_enum t_enumvalue stacktrace t_tuple wayland_display clipmethod termda1 termosc vim_did_init clipproviders "--- syntax here and above generated by runtime/syntax/generator/gen_syntax_vim.vim --- @@ -302,7 +302,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=@vi syn case match " All vimCommands are contained by vimIsCommand. {{{2 -syn cluster vimCmdList contains=vimAbb,vimAddress,vimAt,vimAutocmd,vimAugroup,vimBehave,vimCall,vimCatch,vimCommandModifier,vimConst,vimDoautocmd,vimDebuggreedy,vimDef,vimDefFold,vimDefer,vimDelcommand,vimDelFunction,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimEval,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimImport,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSyntime,vimSynColor,vimSynLink,vimTerminal,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimWincmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl +syn cluster vimCmdList contains=vimAbb,vimAddress,vimAt,vimAutocmd,vimAugroup,vimBehave,vimBreakadd,vimBreakdel,vimBreaklist,vimCall,vimCatch,vimCd,vimCommandModifier,vimConst,vimDoautocmd,vimDebug,vimDebuggreedy,vimDef,vimDefFold,vimDefer,vimDelcommand,vimDelFunction,vimDoCommand,@vimEcho,vimElse,vimEnddef,vimEndfunction,vimEndif,vimEval,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimExMark,vimFiletype,vimFor,vimFunction,vimFunctionFold,vimGrep,vimGrepAdd,vimGlobal,vimHelp,vimHelpgrep,vimHighlight,vimHistory,vimImport,vimLanguage,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimProfdel,vimProfile,vimPrompt,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimSyntime,vimSynColor,vimSynLink,vimTerminal,vimThrow,vimUniq,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimWincmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList,vimLua,vimMzScheme,vimPerl,vimPython,vimPython3,vimPythonX,vimRuby,vimTcl syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var syn match vimCmdSep "\\\@1" nextgroup=vimBehaveBang,vimBehaveModel,vi syn match vimBehaveBang contained "\a\@1<=!" nextgroup=vimBehaveModel skipwhite syn keyword vimBehaveModel contained mswin xterm +" Break* commands {{{2 +" =============== +syn keyword vimBreakaddFunc contained func skipwhite nextgroup=vimBreakpointFunctionLine,vimBreakpointFunction +syn keyword vimBreakaddFile contained file skipwhite nextgroup=vimBreakpointFileLine,vimBreakpointFilename +syn keyword vimBreakaddHere contained here skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn keyword vimBreakaddExpr contained expr skipwhite nextgroup=@vimExprList + +syn match vimBreakpointGlob contained "*" skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn match vimBreakpointNumber contained "\<\d\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep + +syn cluster vimBreakpointArg contains=vimBreakaddFunc,vimBreakaddFile,vimBreakaddHere,vimBreakaddExpr + +syn match vimBreakpointFunction contained "\<\%(\*\|\w\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn match vimBreakpointFilename contained "\<\%(\*\|\f\)\+\>" skipwhite nextgroup=vimComment,vim9Comment,vimSep +syn match vimBreakpointFunctionLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFunction +syn match vimBreakpointFileLine contained "\<\d\+\>" skipwhite nextgroup=vimBreakpointFilename + +syn keyword vimBreakadd breaka[dd] skipwhite nextgroup=@vimBreakpointArg +syn keyword vimBreakdel breakd[el] skipwhite nextgroup=@vimBreakpointArg,vimBreakpointNumber,vimBreakpointGlob +syn keyword vimBreaklist breakl[ist] skipwhite nextgroup=vimComment,vim9Comment,vimSep + " Call {{{2 " ==== syn match vimCall "\" skipwhite nextgroup=vimVar,@vimFunc +" Cd: {{{2 +" == +" GEN_SYN_VIM: vimCommand cd, START_STR='syn keyword vimCd', END_STR='skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep' +syn keyword vimCd cd lc[d] lch[dir] tc[d] tch[dir] skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep +syn match vimCd "\" skipwhite nextgroup=vimCdBang,vimCdArg,vimComment,vim9Comment,vimCmdSep +syn region vimCdArg contained + \ start=+["#|]\@!\S+ + \ end="\ze\s*$" + \ end=+\ze\s*\\\@1" contains=vimCount " ===== syn match vimDefer "\" skipwhite nextgroup=@vimFunc,vim9LambdaParams +" *Do commands {{{2 +" ============ +syn match vimDoCommandBang contained "\a\@1<=!" skipwhite nextgroup=@vimCmdList + +syn keyword vimDoCommand argdo bufd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand tabd[o] wind[o] skipwhite nextgroup=@vimCmdList +syn keyword vimDoCommand cdo cfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand ld[o] lfd[o] skipwhite nextgroup=vimDoCommandBang,@vimCmdList +syn keyword vimDoCommand foldd[oopen] folddoc[losed] skipwhite nextgroup=@vimCmdList + " Exception Handling {{{2 syn keyword vimThrow th[row] skipwhite nextgroup=@vimExprList syn keyword vimCatch cat[ch] skipwhite nextgroup=vimCatchPattern @@ -396,6 +446,16 @@ endif syn keyword vimFTCmd contained filet[ype] syn keyword vimFTOption contained detect indent off on plugin +" History {{{2 +" ======= +" TODO: handle Vim9 "history" variable assignment (like :wincmd, but a common variable name) +syn keyword vimHistory his[tory] skipwhite nextgroup=vimHistoryName,vimHistoryRange,vimCmdSep,vimComment,vim9Comment +syn keyword vimHistoryName contained c[md] s[earch] e[xpr] i[nput] d[ebug] a[ll] skipwhite nextgroup=vimHistoryRange,vimCmdSep,vimComment,vim9Comment +syn match vimHistoryName contained "[:/?=@>]" skipwhite nextgroup=vimHistoryRange,vimCmdSep,vimComment,vim9Comment +syn match vimHistoryRange contained "-\=\<\d\+\>\%(\s*,\)\=" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment +syn match vimHistoryRange contained ",\s*-\=\d\+\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment +syn match vimHistoryRange contained "-\=\<\d\+\s*,\s*-\=\d\+\>" skipwhite nextgroup=vimCmdSep,vimComment,vim9Comment + " Import {{{2 " ====== syn keyword vimImportAutoload contained autoload skipwhite nextgroup=vimImportFilename @@ -437,19 +497,29 @@ endif syn match vimImportName contained "\%(\" skipwhite nextgroup=@vimComment syn match vimImport "\" skipwhite nextgroup=vimImportAutoload,vimImportFilename +" Language {{{2 +" ======== +syn keyword vimLanguage lan[guage] skipwhite nextgroup=@vimLanguageName,vimLanguageCategory,vimSep,vimComment,vim9Comment +syn keyword vimLanguageCategory contained col[late] cty[pe] mes[sages] tim[e] skipwhite nextgroup=@vimLanguageName + +" [language[_territory][.codeset][@modifier]] and the reserved "C" and "POSIX" +syn match vimLanguageName contained "[[:alnum:]][[:alnum:]._@-]*[[:alnum:]]" nextgroup=vimSep,vimComment,vim9Comment +syn keyword vimLanguageNameReserved contained C POSIX nextgroup=vimSep,vimComment,vim9Comment +syn cluster vimLanguageName contains=vimLanguageName,vimLanguageNameReserved + " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking. syn cluster vimAugroupList contains=@vimCmdList,vimFilter,@vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue " define VimFolda syn region vimAugroup - \ start="\\ze\s\+\%([eE][nN][dD]\)\@!\S\+" + \ start="\\ze\s\+\%([eE][nN][dD]\%($\|[[:space:]|"#]\)\)\@!\S" \ matchgroup=vimAugroupKey - \ end="\\ze\s\+[eE][nN][dD]\>" + \ end="\\s\+[eE][nN][dD]\>" + syn match vimAugroupError "\" syn region vimCompoundType contained matchgroup=vimType start="\" -syn cluster vimType contains=vimType,vimTypeAny,vimCompoundType,vimUserType +syn cluster vimType contains=vimType,vimTypeAny,vimTypeObject,vimCompoundType,vimUserType " Classes, Enums And Interfaces: {{{2 " ============================= @@ -863,6 +941,10 @@ syn match vimSpecFile "\s%<"ms=s+1,me=e-1 nextgroup=vimSpecFileMod,vimSubst1 syn match vimSpecFile "#\d\+\|[#%]<\>" nextgroup=vimSpecFileMod,vimSubst1 syn match vimSpecFileMod "\(:[phtre]\)\+" contained +syn match vimSpecFile contained "%[ \t:]"me=e-1 nextgroup=vimSpecFileMod +syn match vimSpecFile contained excludenl "%$" nextgroup=vimSpecFileMod +syn match vimSpecFile contained "%<"me=e-1 nextgroup=vimSpecFileMod + " User-Specified Commands: {{{2 " ======================= syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,@vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange @@ -1188,6 +1270,14 @@ syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@ syn match vim9VariableTypeSep contained "\S\@1<=:\%(\s\|\n\)\@=" skipwhite nextgroup=@vim9VariableType syn keyword vim9VariableType contained blob bool channel float job number string void skipwhite nextgroup=vimLetHeredoc syn keyword vim9VariableTypeAny contained any skipwhite nextgroup=vimLetHeredoc +syn match vim9VariableTypeObject contained "\" skipwhite nextgroup=vimLetHeredoc syn region vim9VariableCompoundType contained \ matchgroup=vim9VariableType @@ -1213,7 +1303,7 @@ syn region vim9VariableCompoundType contained \ transparent syn match vim9VariableUserType contained "\<\%(\h\w*\.\)*\u\w*\>" skipwhite nextgroup=vimLetHeredoc -syn cluster vim9VariableType contains=vim9VariableType,vim9VariableTypeAny,vim9VariableCompoundType,vim9VariableUserType +syn cluster vim9VariableType contains=vim9VariableType,vim9VariableTypeAny,vim9VariableTypeObject,vim9VariableCompoundType,vim9VariableUserType " Lockvar and Unlockvar: {{{2 " ===================== @@ -1426,11 +1516,23 @@ syn region vimMakeArgs contained syn match vimMakeBarEscape contained "\\|" syn match vimMakeBang contained "\a\@1<=!" skipwhite nextgroup=vimMakeArgs,vimCmdSep +" Help*: {{{2 +" ===== +syn match vimHelp "\" skipwhite nextgroup=vimHelpBang,vimHelpArg,vimHelpNextCommand +" TODO: match wildcards, ignoring exceptions? +syn region vimHelpArg contained + \ start="\S" + \ matchgroup=Special + \ end="\%(@\a\a\)\=\ze\s*\%($\|\%x0d\|\%x00\||\s*\S\)" + \ oneline +syn match vimHelpBang contained "\a\@1<=!" skipwhite nextgroup=vimHelpArg,vimHelpNextCommand +syn match vimHelpNextCommand contained "\ze|\s*\S" skipwhite nextgroup=vimCmdSep + syn match vimHelpgrep "\" skipwhite nextgroup=vimHelpgrepBang,vimHelpgrepPattern syn region vimHelpgrepPattern contained \ start="\S" \ matchgroup=Special - \ end="@\w\w\>" + \ end="@\a\a\>" \ end="$" \ contains=@vimSubstList \ oneline @@ -1629,6 +1731,15 @@ syn keyword vimProfdelArg contained file skipwhite nextgroup=vimProfilePattern syn keyword vimProfdelArg contained here skipwhite nextgroup=vimCmdSep,@vimComment syn match vimProfdel "\" skipwhite nextgroup=vimProfdelArg +" Prompt{find,repl}: {{{2 +" ================= +syn region vimPromptArg contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)+ + \ end="$" + \ contains=@vimContinue +syn keyword vimPrompt promptf[ind] promptr[epl] skipwhite nextgroup=vimPromptArg + " Redir: {{{2 " ===== syn match vimRedir "\" skipwhite nextgroup=vimRedirBang,vimRedirFileOperator,vimRedirVariableOperator,vimRedirRegister,vimRedirEnd @@ -1987,10 +2098,10 @@ VimFoldl syn region vimLuaHeredoc contained " [-- mzscheme --] {{{3 if s:interfaces =~# 'm' - let s:iskKeep = &isk + let s:iskKeep = &l:isk syn include @vimMzSchemeScript syntax/scheme.vim unlet b:current_syntax - let &isk = s:iskKeep + let &l:isk = s:iskKeep endif syn keyword vimMzScheme mz[scheme] skipwhite nextgroup=vimMzSchemeHeredoc,vimMzSchemeStatement @@ -2397,8 +2508,18 @@ if !exists("skip_vim_syntax_inits") hi def link vimBehaveModel vimBehave hi def link vimBehave vimCommand hi def link vimBracket Delimiter + hi def link vimBreakaddFunc Special + hi def link vimBreakaddFile Special + hi def link vimBreakaddHere Special + hi def link vimBreakaddExpr Special + hi def link vimBreakpointGlob Special + hi def link vimBreakadd vimCommand + hi def link vimBreakdel vimCommand + hi def link vimBreaklist vimCommand hi def link vimCall vimCommand hi def link vimCatch vimCommand + hi def link vimCd vimCommand + hi def link vimCdBang vimBang hi def link vimCmplxRepeat SpecialChar hi def link vimCommand Statement hi def link vimCommandModifier vimCommand @@ -2414,6 +2535,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimContinueString vimString hi def link vimCount Number hi def link vimCtrlChar SpecialChar + hi def link vimDebug vimCommand hi def link vimDebuggreedy vimCommand hi def link vimDef vimCommand hi def link vimDefBang vimBang @@ -2426,6 +2548,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimDelfunctionBang vimBang hi def link vimDoautocmd vimCommand hi def link vimDoautocmdMod Special + hi def link vimDoCommand vimCommand + hi def link vimDoCommandBang vimBang hi def link vimEcho vimCommand hi def link vimEchohlNone vimGroup hi def link vimEchohl vimCommand @@ -2466,6 +2590,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimGroupRem vimSynOption hi def link vimGroupSpecial Special hi def link vimGroup Type + hi def link vimHelp vimCommand + hi def link vimHelpBang vimBang hi def link vimHelpgrep vimCommand hi def link vimHiAttrib PreProc hi def link vimHiBang vimBang @@ -2486,6 +2612,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimHiStartStop vimHiTerm hi def link vimHiTerm Type hi def link vimHLGroup vimGroup + hi def link vimHistory vimCommand + hi def link vimHistoryName Special hi def link vimImport vimCommand hi def link vimImportAutoload Special hi def link vimImportAs vimImport @@ -2495,6 +2623,9 @@ if !exists("skip_vim_syntax_inits") hi def link vimKeymapTailComment vimComment hi def link vimLambdaBrace Delimiter hi def link vimLambdaOperator vimOper + hi def link vimLanguage vimCommand + hi def link vimLanguageCategory Special + hi def link vimLanguageNameReserved Constant hi def link vimLet vimCommand hi def link vimLetHeredoc vimString hi def link vimLetHeredocStart Special @@ -2555,6 +2686,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimProfileBang vimBang hi def link vimProfdel vimCommand hi def link vimProfdelArg vimSpecial + hi def link vimPrompt vimCommand hi def link vimPython vimCommand hi def link vimPython3 vimCommand hi def link vimPythonX vimCommand @@ -2650,6 +2782,8 @@ if !exists("skip_vim_syntax_inits") hi def link vimTodo Todo hi def link vimType Type hi def link vimTypeAny vimType + hi def link vimTypeObject vimType + hi def link vimTypeObjectBracket vimTypeObject hi def link vimUniq vimCommand hi def link vimUniqBang vimBang hi def link vimUniqOptions Special @@ -2741,7 +2875,9 @@ if !exists("skip_vim_syntax_inits") hi def link vim9TypeEquals vimOper hi def link vim9Variable vimVar hi def link vim9VariableType vimType - hi def link vim9VariableTypeAny vimType + hi def link vim9VariableTypeAny vimTypeAny + hi def link vim9VariableTypeObject vimTypeObject + hi def link vim9VariableTypeObjectBracket vimTypeObjectBracket hi def link vim9Var vimCommand hi def link vim9Vim9ScriptArg Special hi def link vim9Vim9Script vimCommand diff --git a/runtime/syntax/wget.vim b/runtime/syntax/wget.vim index 93206c2005..8d642b1411 100644 --- a/runtime/syntax/wget.vim +++ b/runtime/syntax/wget.vim @@ -1,9 +1,9 @@ " Vim syntax file " Language: Wget configuration file (/etc/wgetrc ~/.wgetrc) " Maintainer: Doug Kearns -" Last Change: 2023 Nov 05 +" Last Change: 2026 Jan 07 -" GNU Wget 1.21 built on linux-gnu. +" GNU Wget 1.25 built on linux-gnu. if exists("b:current_syntax") finish diff --git a/runtime/syntax/wget2.vim b/runtime/syntax/wget2.vim index 3e9abdf23d..f256d53e6a 100644 --- a/runtime/syntax/wget2.vim +++ b/runtime/syntax/wget2.vim @@ -1,9 +1,9 @@ " Vim syntax file " Language: Wget2 configuration file (/etc/wget2rc ~/.wget2rc) " Maintainer: Doug Kearns -" Last Change: 2023 Nov 05 +" Last Change: 2026 Jan 07 -" GNU Wget2 2.1.0 - multithreaded metalink/file/website downloader +" GNU Wget2 2.2.1 - multithreaded metalink/file/website downloader if exists("b:current_syntax") finish @@ -189,6 +189,7 @@ let s:commands =<< trim EOL save-headers secure-protocol server-response + show-progress signature-extensions span-hosts spider @@ -223,7 +224,7 @@ EOL "}}} for cmd in s:commands - exe 'syn match wget2Command "\<' .. substitute(cmd, '-', '[-_]\\=', "g") .. '\>" nextgroup=wget2AssignmentOperator skipwhite contained' + exe 'syn match wget2Command "\<\%(no[-_]\)\=' .. substitute(cmd, '-', '[-_]\\=', "g") .. '\>" nextgroup=wget2AssignmentOperator skipwhite contained' endfor unlet s:commands diff --git a/runtime/syntax/xs.vim b/runtime/syntax/xs.vim index 2145ede2dd..90f8d3710a 100644 --- a/runtime/syntax/xs.vim +++ b/runtime/syntax/xs.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: XS (Perl extension interface language) " Author: Autogenerated from perl headers, on an original basis of Michael W. Dodge -" Maintainer: vim-perl +" Maintainer: vim-perl (need to be subscribed to post) " Previous: Vincent Pit " Homepage: https://github.com/vim-perl/vim-perl " Bugs/requests: https://github.com/vim-perl/vim-perl/issues diff --git a/runtime/syntax/zsh.vim b/runtime/syntax/zsh.vim index 04b39aeac0..3bd0b87b75 100644 --- a/runtime/syntax/zsh.vim +++ b/runtime/syntax/zsh.vim @@ -2,7 +2,7 @@ " Language: Zsh shell script " Maintainer: Christian Brabandt " Previous Maintainer: Nikolai Weibull -" Latest Revision: 2024 Jan 04 +" Latest Revision: 2025 Feb 18 " License: Vim (see :h license) " Repository: https://github.com/chrisbra/vim-zsh @@ -37,9 +37,6 @@ endfunction let s:contained=s:ContainedGroup() syn iskeyword @,48-57,_,192-255,#,- -if get(g:, 'zsh_fold_enable', 0) - setlocal foldmethod=syntax -endif syn match zshQuoted '\\.' syn match zshPOSIXQuoted '\\[xX][0-9a-fA-F]\{1,2}' @@ -157,6 +154,8 @@ syn case ignore syn match zshOptStart \ /\v^\s*%(%(un)?setopt|set\s+[-+]o)/ \ nextgroup=zshOption skipwhite + +" this list is generated using the make-options.zsh script and the zsh source repository syn keyword zshOption nextgroup=zshOption,zshComment skipwhite contained \ auto_cd no_auto_cd autocd noautocd auto_pushd no_auto_pushd autopushd noautopushd cdable_vars \ no_cdable_vars cdablevars nocdablevars cd_silent no_cd_silent cdsilent nocdsilent chase_dots @@ -193,16 +192,16 @@ syn keyword zshOption nextgroup=zshOption,zshComment skipwhite contained \ nonumericglobsort rc_expand_param no_rc_expand_param rcexpandparam norcexpandparam rematch_pcre \ no_rematch_pcre rematchpcre norematchpcre sh_glob no_sh_glob shglob noshglob unset no_unset nounset \ warn_create_global no_warn_create_global warncreateglobal nowarncreateglobal warn_nested_var - \ no_warn_nested_var warnnestedvar no_warnnestedvar append_history no_append_history appendhistory - \ noappendhistory bang_hist no_bang_hist banghist nobanghist extended_history no_extended_history - \ extendedhistory noextendedhistory hist_allow_clobber no_hist_allow_clobber histallowclobber - \ nohistallowclobber hist_beep no_hist_beep histbeep nohistbeep hist_expire_dups_first - \ no_hist_expire_dups_first histexpiredupsfirst nohistexpiredupsfirst hist_fcntl_lock - \ no_hist_fcntl_lock histfcntllock nohistfcntllock hist_find_no_dups no_hist_find_no_dups - \ histfindnodups nohistfindnodups hist_ignore_all_dups no_hist_ignore_all_dups histignorealldups - \ nohistignorealldups hist_ignore_dups no_hist_ignore_dups histignoredups nohistignoredups - \ hist_ignore_space no_hist_ignore_space histignorespace nohistignorespace hist_lex_words - \ no_hist_lex_words histlexwords nohistlexwords hist_no_functions no_hist_no_functions + \ no_warn_nested_var warnnestedvar no_warnnestedvar nowarnnestedvar append_history no_append_history + \ appendhistory noappendhistory bang_hist no_bang_hist banghist nobanghist extended_history + \ no_extended_history extendedhistory noextendedhistory hist_allow_clobber no_hist_allow_clobber + \ histallowclobber nohistallowclobber hist_beep no_hist_beep histbeep nohistbeep + \ hist_expire_dups_first no_hist_expire_dups_first histexpiredupsfirst nohistexpiredupsfirst + \ hist_fcntl_lock no_hist_fcntl_lock histfcntllock nohistfcntllock hist_find_no_dups + \ no_hist_find_no_dups histfindnodups nohistfindnodups hist_ignore_all_dups no_hist_ignore_all_dups + \ histignorealldups nohistignorealldups hist_ignore_dups no_hist_ignore_dups histignoredups + \ nohistignoredups hist_ignore_space no_hist_ignore_space histignorespace nohistignorespace + \ hist_lex_words no_hist_lex_words histlexwords nohistlexwords hist_no_functions no_hist_no_functions \ histnofunctions nohistnofunctions hist_no_store no_hist_no_store histnostore nohistnostore \ hist_reduce_blanks no_hist_reduce_blanks histreduceblanks nohistreduceblanks hist_save_by_copy \ no_hist_save_by_copy histsavebycopy nohistsavebycopy hist_save_no_dups no_hist_save_no_dups @@ -334,7 +333,7 @@ hi def link zshKeyword Keyword hi def link zshFunction None hi def link zshKSHFunction zshFunction hi def link zshHereDoc String -hi def link zshOperator None +hi def link zshOperator Operator hi def link zshRedir Operator hi def link zshVariable None hi def link zshVariableDef zshVariable diff --git a/runtime/tutor/en/vim-02-beginner.tutor b/runtime/tutor/en/vim-02-beginner.tutor index a5d24f1b81..d68e0a884c 100644 --- a/runtime/tutor/en/vim-02-beginner.tutor +++ b/runtime/tutor/en/vim-02-beginner.tutor @@ -42,7 +42,7 @@ Test cases: {curly}, [square], , and "quoted" items. 4. Advanced combinations: - `ciwnew`{normal} - Change current word to "new" - - `yss"`{normal} - Wrap entire line in quotes (vim-surround plugin style) + - `ciw"-"`{normal} - Wrap current word in quotes - `gUit`{normal} - Uppercase inner HTML tag content - `va"p`{normal} - Select quoted text and paste over it @@ -59,14 +59,14 @@ Final exercise: (Modify "this" text) by [applying {various} operations]< **MNEMONIC**: *into register(") named (a) (y)ank (i)nner (w)ord* - 3. Navigate forward to the word 'cookie' (`fk`{normal} or `2fc`{normal} + 3. Navigate forward to the word 'cookie' (`fk`{normal} or `3fc`{normal} or `$2b`{normal} or `/co`{normal} ``{normal}) and type `"byiw`{normal} - 4. Navigate to any point on the word 'Vince' and type `ciwa`{normal} + 4. Navigate to any point on the word 'Vince' and type `ciwa`{normal} **MNEMONIC**: *(c)hange (i)nner (w)ord with named (a)* - 5. Navigate to any point on the word 'cake' and type `ciwb`{normal} + 5. Navigate to any point on the word 'cake' and type `ciwb`{normal} a) Edward will henceforth be in charge of the cookie rations b) In this capacity, Vince will have sole cake discretionary powers @@ -88,10 +88,10 @@ REFERENCE: [Registers](registers) 2. Navigate to any point on the supplied number - 3. Type `ciw=`{normal}60\*60\*24 ``{normal} + 3. Type `ciw=`{normal}60\*60\*24 ``{normal} 4. On the next line, enter insert mode and add today's date with - `=`{normal}`system('date')`{vim} ``{normal} + `=`{normal}`system('date')`{vim} ``{normal} NOTE: All calls to system are OS dependent, e.g. on Windows use `system('date /t')`{vim} or `:r!date /t`{vim} @@ -111,12 +111,12 @@ REFERENCE: [Expression Register](quote=) 1. Move the cursor to the line below marked ✓ - 2. yank the zeroth line, then inspect registers with `:reg`{vim} ``{normal} + 2. Yank the line starting with "0.", then inspect registers with `:reg`{vim} ``{normal} - 3. delete line 0. with `"cdd`{normal}, then inspect registers + 3. Delete line 0 with `"cdd`{normal}, then inspect registers (Where do you expect line 0 to be?) - 4. continue deleting each successive line, inspecting `:reg`{vim} as you go + 4. Continue deleting each successive line, inspecting `:reg`{vim} as you go NOTE: You should notice that old full-line deletions move down the list as new full-line deletions are added @@ -194,7 +194,7 @@ Practice: "_diw on any word to delete it without affecting yank history NOTE: a common conundrum when coding is moving around large chunks of code. The following technique helps avoid number line calculations associated with operations like `"a147d`{normal} or `:945,1091d a`{vim} or even worse - using `i=`{normal}1091-945 ``{normal} first + using `i=`{normal}1091-945 ``{normal} first 1. Move the cursor to the line below marked ✓ @@ -257,9 +257,9 @@ REFERENCE: [Marks](marks) 5. Insert text directly from registers in insert mode: `a`{normal} 6. Insert the results of simple arithmetic operations: - `=`{normal}60\*60``{normal} in insert mode + `=`{normal}60\*60``{normal} in insert mode 7. Insert the results of system calls: - `=`{normal}`system('ls -1')`{vim}``{normal} in insert mode + `=`{normal}`system('ls -1')`{vim}``{normal} in insert mode 8. Inspect registers with `:reg`{vim} 9. Learn the final destination of whole line deletions: `dd`{normal} in @@ -276,6 +276,7 @@ REFERENCE: [Marks](marks) - `"+`{normal}/`"*`{normal} - System clipboard (OS dependent) - `"_`{normal} - Blackhole (discard deleted/yanked text) - `"=`{normal} - Expression register + - `"-`{normal} - Small delete register # CONCLUSION diff --git a/runtime/tutor/ru/vim-01-beginner.tutor b/runtime/tutor/ru/vim-01-beginner.tutor index e4c327c68f..0f5d5d1349 100644 --- a/runtime/tutor/ru/vim-01-beginner.tutor +++ b/runtime/tutor/ru/vim-01-beginner.tutor @@ -1,6 +1,6 @@ # ДОБРО ПОЖАЛОВАТЬ НА ЗАНЯТИЯ ПО РЕДАКТОРУ Vim -## ГЛАВА ПЕРВАЯ +# ГЛАВА ПЕРВАЯ Программа Vim — это очень мощный текстовый редактор, имеющий множество команд, и все их просто невозможно описать в рамках этого учебника. @@ -53,11 +53,11 @@ ** Чтобы перемещать каретку в указанных направлениях, нажмите клавиши `h`, `j`, `k`, `l`** - ↑ *Подсказка.* - k Клавиша `h`{normal} слева и удобна для перемещения влево. + ↑ *Подсказка.* + k Клавиша `h`{normal} слева и удобна для перемещения влево. ← h l → Клавиша `l`{normal} справа и удобна для перемещения вправо. - j Клавиша `j`{normal} похожа на стрелку »вниз». - ↓ + j Клавиша `j`{normal} похожа на стрелку »вниз». + ↓ 1. Перемещайте каретку в разных направлениях, пока не ощутите уверенность. 2. Удерживайте нажатой клавишу «вниз» (`j`{normal}) для беспрерывного @@ -281,9 +281,9 @@ этот оператор. Так, например, формат команды удаления с оператором [d](d) следующий: - d объект + d объект где - d - оператор удаления; + d - оператор удаления; объект - область текста (указаны ниже), к которой будет применён оператор. Краткий перечень объектов: @@ -410,7 +410,7 @@ укажите их число, например, `2w`{normal} 6. Формат команд изменения: - оператор [число] объект + оператор [число] объект где оператор - необходимые действия, например, [d](d) для удаления; [число] - количество подпадающих под действие оператора объектов, @@ -539,7 +539,7 @@ где c - оператор изменения; [число] - количество изменяемых объектов (необязательная часть); - объект - объект текста, который будет изменён. + объект - объект текста, который будет изменён. Теперь переходите к следующему уроку. @@ -836,7 +836,7 @@ Некоторые полезные примеры: (Windows) (UNIX) - `:!dir`{vim} `:!ls`{vim} - вывести перечень файлов в каталоге; + `:!dir`{vim} `:!ls`{vim} - вывести перечень файлов в каталоге; `:!del ФАЙЛ`{vim} `:!rm ФАЙЛ`{vim} - удалить файл с указанным названием. 2. По команде [:w](:w) ФАЙЛ — текущий редактируемый файл будет записан @@ -1099,13 +1099,21 @@ 4. Нажмите клавиши ``{normal}, и будет показан перечень команд редактора Vim начинающихся с буквы «e». - 5. Нажмите клавиши `d`{normal}, и будет подставлено полное название - команды `:edit`{vim}. + 5. Нажмите клавиши `d`{normal}, и будет отображено меню с возожными + наименованиями команд для подстановки (или подставлено соответствующее + наименование, если введёная команда достаточно уникально, например, для + `:ed`{vim} будет подставлена команда `:edit`{vim}). - 6. Теперь напечатайте пробел и начало наименования существующего файла + 6. Используйте или для перехода к следующему соответствию. + Или либо CTRL-P> для перехода к предыдущему соответствию. + + 7. Выберите пункт edit. И команда `edit`{vim} будет автоматически подставлена + в командную строку. + + 8. Теперь напечатайте пробел и начало наименования существующего файла `:edit TE`{vim} - 7. Нажмите клавишу ``{normal} и будет подставлено наименование файла, + 9. Нажмите клавишу ``{normal} и будет подставлено наименование файла, если оно уникальное. **Примечание.** diff --git a/runtime/tutor/ru/vim-02-beginner.tutor b/runtime/tutor/ru/vim-02-beginner.tutor index d2b69181af..0d8b6e65e8 100644 --- a/runtime/tutor/ru/vim-02-beginner.tutor +++ b/runtime/tutor/ru/vim-02-beginner.tutor @@ -1,6 +1,6 @@ # ДОБРО ПОЖАЛОВАТЬ НА ЗАНЯТИЯ ПО РЕДАКТОРУ Vim -## ГЛАВА ВТОРАЯ +# ГЛАВА ВТОРАЯ Что‐то неожиданное и непонятное? Если это ваше первое знакомство с редактором Vim и вы планировали начать @@ -11,12 +11,54 @@ ~~~ Или просто откройте по ссылке [первую главу](@tutor:vim-01-beginner) учебника. - Приблизительное время, необходимое для изучения второй главы учебника + Приблизительное время, необходимое для изучения второй главы учебника, составляет около 8–10 минут, и зависит от того, сколько времени вы посвятите выполнению заданий. -# Урок 2.1.1. ИМЕНОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim +# Урок 2.1.1. ОСВОЕНИЕ ТЕКСТОВЫХ ОБЪЕКТОВ + +** Точечные операции с логическими частями текста используя текстовые объекты ** + + 1. Попрактикуйтесь в аккуратной работе со словами: + - Поместите каретку на любое слово в строке почеченной ✓ + - Наберите `diw`{normal}, чтобы удалить ТОЛЬКО слово + (слово без окружающих пробелов) + - Наберите `daw`{normal}, чтобы удалить СЛОВО (включая конечные пробелы) + - Попробуйте другие операторы: `ciw`{normal} (изменить), + `yiw`{normal} (копировать), `gqiw`{normal} (форматировать) + +Потренируйтесь здесь на словах: «Vim'овский», (text_object) и 'мощный'. + + 2. Работа с содержимым скобок: + - Поместите каретку внутри любой пары () {} [] <> в строке помеченной ✓ + - Наберите `di(`{normal} или `dib`{normal} + (удалить всё, что внутри круглых скобок) + - Наберите `da(`{normal} или `dab`{normal} + (удалить внутри круглых скобок и сами скобки) + - Попробуйте то же самое с `i"`{normal} и `a"`{normal} для машинописных + кавычек или `it`{normal} и `at`{normal} для тегов HTML и XML. + +Примеры: {фигурные}, [прямоугольные], <угловые>, (круглые) и "quoted". + + 3. Операции с абзацами и предложениями: + - Наберите `dip`{normal} для удаления ТОЛЬКО абзаца + (каретка может быть в любом месте абзаца) + - Наберите `vap`{normal} для визуального выделения всего абзаца + - Попробуйте `das`{normal} для удаления предложения + (работает при наличии знаков препинания .!? ) + + 4. Расширенные комбинации: + - `ciwnew`{normal} — изменить текущее слово на «new» + - `ciw"-"`{normal} — обернуть всю строку в кавычки + - `gUit`{normal} — преобразовать внутреннее содержимое HTML-тега в верхний + регистр + - `va"p`{normal} — выделить текст в кавычках и вставить поверх него + +Итоговое задание: (Измените "этот" текст) [применив {различные} операции]< + + +# Урок 2.1.2. ИМЕНОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim ** Копирование с сохранением двух разных слов и последующая их вставка в текст ** @@ -35,13 +77,13 @@ `"byiw`{normal} 4. Переместите каретку на любой символ слова «Виктор» и наберите на клавиатуре - `ciwa`{normal} + `ciwa`{normal} Эта команда означает следующее: *изменить(c) только(i) слово(w) на <содержимое регистра(r)> с названием(a)* 5. Установите каретку на любой символ слова «тортов» и наберите - `ciwb`{normal} + `ciwb`{normal} а) Отныне Эдуард будет отвечать за раздачу печенья б) Таким образом Виктор имеет единоличные права по распределению тортов @@ -58,7 +100,7 @@ [CTRL-R](i_CTRL-R) -# Урок 2.1.2. РЕГИСТР РЕЗУЛЬТАТА ВЫЧИСЛЕНИЙ +# Урок 2.1.3. РЕГИСТР РЕЗУЛЬТАТА ВЫЧИСЛЕНИЙ ** Вставка результатов вычислений напрямую в текст ** @@ -66,11 +108,11 @@ 2. Установите каретку на любой цифре приведённого числа - 3. Наберите на клавиатуре `ciw=60*60*24`{normal} ``{normal} + 3. Наберите на клавиатуре `ciw=60*60*24`{normal} ``{normal} 4. Переместите каретку в конец следующей строки, переключите редактор в режим вставки, и добавьте сегодняшнюю дату с помощью следующей команды - `=`{normal}`system('date')`{vim} ``{normal} + `=`{normal}`system('date')`{vim} ``{normal} Примечание. Результат вызова функции `system()`{vim} зависит от текущей операционной @@ -88,14 +130,14 @@ [регистр результата вычислений](quote=) -# Урок 2.1.3. НУМЕРОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim +# Урок 2.1.4. НУМЕРОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim ** Как команды `yy`{normal} и `dd`{normal} влияют на содержимое регистров ** 1. Переместите каретку к строке помеченной ✓ - 2. Скопируйте эту строку и проверьте состояние регистров с помощью команды - `:reg`{vim} ``{normal} + 2. Скопируйте строку, начинающуюся с цифры 0, и проверьте состояние регистров + с помощью команды `:reg`{vim} ``{normal} 3. Удалите строку, начинающуюся с цифры 0, с помощью команды `"cdd`{normal} и ещё раз проверьте состояние регистров (где будет строка, начинающаяся @@ -132,7 +174,58 @@ [нумерованные регистры](quote_number) -# Урок 2.1.4. ИЗЯЩЕСТВО ЗАКЛАДОК +# Урок 2.1.5. СПЕЦИАЛЬНЫЕ РЕГИСТРЫ + +** Применение регистров буфера обмена и «чёрная дыра» для расширенной правки ** + + Примечание. + Для использования системного буфера обмена в системе Linux требуются + библиотеки X11 или Wayland, и сам редактор Vim должен быть скомпилирован + с включённым компонентом «+clipboard» (обычно это максимальная версия). + Это можно проверить с помощью следующих команд редактора Vim: + `:version`{vim} и `:echo has('clipboard_working')`{vim} + + 1. Регистры буфера обмена `+`{normal} и `*`{normal}: + - `"+y`{normal} — копирование в системный буфер обмена + (например, по команде `"+yy`{normal} будет скопирована текущая строка) + - `"+p`{normal} — вставка из системного буфера обмена + - `"*`{normal} — основной выбор в X11 (средняя кнопка «мыши»), + а `"+`{normal} — буфер обмена + +"+yy в этой строке, затем вставьте в другое приложение по Ctrl+V или Cmd+V + + 2. Регистр «чёрная дыра» `_`{normal} стирает текст: + - `"_daw`{normal} — сотрёт слово без сохранения в регистре + - Полезно, когда вы не хотите перезаписывать регистр по умолчанию `"`{normal} + - Обратите внимание, что здесь используется текстовый объект «a Word», + описанный в предыдущем уроке + - `"_dd`{normal} — сотрёт строку без сохранения + - `"_dap`{normal} — сотрёт абзац без сохранения + - Комбинируйте со счётчиками: `3"_dw`{normal} + +"_diw на любом слове, чтобы удалить его, не затрагивая историю копирования + + 3. Совместите с визуальным выделением: + - Выделите текст с помощью , a затем `"+y`{normal} + - Чтобы вставить из буфера обмена в режиме вставки — `+`{normal} + - Попробуйте открыть другое приложение и вставить из системного буфера обмена + + 4. Запомните: + - Регистры буфера обмена доступны между разными экземплярами редактора Vim + - Регистр буфера обмена не всегда работает + - Регистр «чёрная дыра» предотвращает случайную перезапись других регистров + - Регистр `"`{normal} по-прежнему доступен для копирования и вставки + - Именованные регистры (a-z) остаются частными для каждой сессии Vim + + 5. Устранение неполадок с буфером обмена: + - Проверьте доступность с помощью команды + `:echo has('clipboard_working')`{vim} + - При выводе 1 — означает доступно, 0 — означает, что компонент не включен + - В систме Linux может потребоваться пакет vim-gtk или vim-x11 + (посмотрите вывод команды `:version`{vim}) + + +# Урок 2.1.6. ИЗЯЩЕСТВО ЗАКЛАДОК ** Избегайте действий, свойственных для дятлокодеров ** @@ -140,7 +233,7 @@ При написании программ часто возникает необходимость перемещения больших фрагментов кода. Приём, приведённый далее, поможет избежать подсчёта номеров строк, требуемых для операций вроде `"a147d`{normal} или `:945,1091d a`{vim}, - или даже хуже — `i=1091-935`{normal}, как первое действие. + или даже хуже — `i=1091-935`{normal}, как первое действие. 1. Переместите каретку к строке помеченной ✓ @@ -165,7 +258,7 @@ ~~~ cmd AAA -function itGotRealBigRealFast() { +function ItGotRealBigRealFast() { if ( somethingIsTrue ) { doIt() } @@ -193,33 +286,47 @@ CCC # РЕЗЮМЕ УРОКА 2.1 - 1. Чтобы сохранить (при удалении или копировании) текст для последующей + 1. Текстовые объекты обеспечивают точное редактирование: + - `iw`{normal} или `aw`{normal} — только или включая слово + - `i[`{normal} или `a[`{normal} — внутри или включая скобки + - `i"`{normal} или `a"`{normal} — внутри или включая кавычки + - `it`{normal} или `at`{normal} — внутри или включая теги + - `ip`{normal} или `ap`{normal} — только или включая абзаца + - `is`{normal} или `as`{normal} — только или включая предложения + + 2. Чтобы сохранить (при удалении или копировании) текст для последующей вставки, используйте имеющиеся 26 именованных регистра (a-z). - 2. Чтобы скопировать целое слово при нахождении каретки на любом символе + 3. Чтобы скопировать целое слово при нахождении каретки на любом символе в этом слове, воспользуйтесь командой `yiw`{normal} - 3. Чтобы изменить целое слово при нахождении каретки на любом символе в этом + 4. Чтобы изменить целое слово при нахождении каретки на любом символе в этом слове, воспользуйтесь командой `ciw`{normal} - 4. Чтобы в режиме вставки вставить текст непосредственно из регистра, - воспользуйтесь командой `a`{normal} + 5. Чтобы в режиме вставки вставить текст непосредственно из регистра, + воспользуйтесь командой `a`{normal} - 5. Чтобы в режиме вставки вставить результат вычисления простых математических - операций, воспользуйтесь командой `=60*60`{normal} ``{normal} - 6. Чтобы в режиме вставки вставить результат выполнения команд системы, - воспользуйтесь командой `=`{normal}`system('ls -l')`{vim} + 6. Чтобы в режиме вставки вставить результат вычисления простых математических + операций, воспользуйтесь командой `=60*60`{normal} + 7. Чтобы в режиме вставки вставить результат выполнения команд системы, + воспользуйтесь командой `=`{normal}`system('ls -l')`{vim} - 7. Чтобы просмотреть содержимое регистров, воспользуйтесь командой `:reg`{vim} - 8. Учитывайте распределение удалённых целиком строк по команде `dd`{normal} — + 8. Чтобы просмотреть содержимое регистров, воспользуйтесь командой `:reg`{vim} + 9. Учитывайте распределение удалённых целиком строк по команде `dd`{normal} — это нумерованные регистры в порядке убывания, т. е. от 1 до 9. Помните, что в нумерованных регистрах дольше хранятся те строки, которые были уделены целиком, в отличие от любых других операций - 9. Учитывайте, что в нумерованных регистрах кратковременно сохраняется всё + 10. Учитывайте, что в нумерованных регистрах кратковременно сохраняется всё что скопировано. - 10. Чтобы установить закладку в режиме команд, воспользуйтесь командой + 11. Чтобы установить закладку в режиме команд, воспользуйтесь командой `m[a-zA-Z0-9]`{normal} - 11. Чтобы переместить каретку на строку в которой установлена закладка, + 12. Чтобы переместить каретку на строку в которой установлена закладка, воспользуйтесь командой `'`{normal} + 13. Специальные регистры: + - `"+`{normal} и `"*`{normal} — системный буфер обмена (зависит от ОС) + - `"_`{normal} — «чёрная дыра» (стирание удалённого или скопированного текста) + - `"=`{normal} — регистр результата вычислений + - `"-`{normal} — регистр малых удалений + # ЗАКЛЮЧЕНИЕ @@ -227,5 +334,6 @@ CCC Работа над этой главой будет продолжена. Вторая глава учебника была написана Полом Д. Паркером (Paul D. Parker). + и Кристианом Брабандт (Christian Brabandt). Restorer, перевод на русский язык, 2025, restorer@mail2k.ru diff --git a/runtime/tutor/ru/vim-02-beginner.tutor.json b/runtime/tutor/ru/vim-02-beginner.tutor.json index 2338901fbb..1bf6a98192 100644 --- a/runtime/tutor/ru/vim-02-beginner.tutor.json +++ b/runtime/tutor/ru/vim-02-beginner.tutor.json @@ -1,10 +1,15 @@ { "expect": { - "46": -1, - "47": "б) Таким образом Эдуард имеет единоличные права по распределению печенья", - "80": "Правильно ли я помню, что в сутках 86400 секунд?", - "81": -1, - "114": -1, - "167": -1 + "31": -1, + "42": -1, + "58": -1, + "88": -1, + "89": "б) Таким образом Эдуард имеет единоличные права по распределению печенья", + "122": "Правильно ли я помню, что в сутках 86400 секунд?", + "123": -1, + "156": -1, + "195": -1, + "206": -1, + "260": -1 } } diff --git a/runtime/tutor/tutor1.es b/runtime/tutor/tutor1.es index 0d3ac4fa64..f21e5a65ad 100644 --- a/runtime/tutor/tutor1.es +++ b/runtime/tutor/tutor1.es @@ -1,5 +1,7 @@ =============================================================================== = B i e n v e n i d o a l t u t o r d e V I M - Versión 1.7 = +=============================================================================== += CAPÍTULO UNO = =============================================================================== Vim es un editor muy potente que dispone de muchos comandos, demasiados @@ -899,7 +901,7 @@ NOTA: Si quiere ignorar las mayúsculas y minúsculas, solo para un comando 7. Añada "no" para inhabilitar una opción: :set noic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Lección 7: OBTENER AYUDA + Lección 1.7.1: OBTENER AYUDA ** Utilice el sistema de ayuda en línea ** @@ -994,10 +996,18 @@ NOTA: El completado funciona con muchos comandos. Solo pulse CTRL-D o ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Aquí concluye el tutor de Vim. Está pensado para dar una visión breve del + Aquí concluye el tutor de Vim. Considere continuar con Capítulo 2, que trata + sobre registros, marcas y el uso de objetos de texto. + + Para acceder al Capítulo 2 salga de este y ejecute en una terminal: + vimtutor -c 2 + + Está pensado para dar una visión breve del editor Vim, lo suficiente para permitirle usar el editor de forma bastante sencilla. Está muy lejos de estar completo pues Vim tiene muchísimos más - comandos. Lea el siguiente manual de usuario: ":help user-manual". + comandos. + + Lea el siguiente manual de usuario: ":help user-manual". Para lecturas y estudios posteriores se recomienda el libro: Vim - Vi Improved - de Steve Oualline diff --git a/runtime/tutor/tutor1.ru b/runtime/tutor/tutor1.ru index c303c25daa..9d4cab3346 100644 --- a/runtime/tutor/tutor1.ru +++ b/runtime/tutor/tutor1.ru @@ -983,7 +983,9 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ На этом можно завершить первую часть занятий посвящённых редактору Vim. - Далее вы можете ознакомиться со второй частью занятий. + Далее вы можете ознакомиться со второй частью занятий, в которой + рассматриваются такие понятия как регистры, закладки и работа с текстовыми + объектами. Целью данного курса было дать краткий обзор редактора Vim, достаточный для того, чтобы не возникало сложностей при его использовании. Это далеко не diff --git a/runtime/tutor/tutor2 b/runtime/tutor/tutor2 index ca0de3f032..f35cb3c563 100644 --- a/runtime/tutor/tutor2 +++ b/runtime/tutor/tutor2 @@ -40,7 +40,7 @@ 4. Advanced combinations: - ciwnew - Change current word to "new" - - yss" - Wrap entire line in quotes (vim-surround plugin style) + - ciw"-" - Wrap current word in quotes - gUit - Uppercase inner HTML tag content - va"p - Select quoted text and paste over it @@ -59,7 +59,7 @@ MNEMONIC: into register(") named (a) (y)ank (i)nner (w)ord - 3. Navigate forward to the word 'cookie' (fk or 2fc or $2b or /co) + 3. Navigate forward to the word 'cookie' (fk or 3fc or $2b or /co) and type "byiw 4. Navigate to any point on the word 'Vince' and type ciwa @@ -115,12 +115,12 @@ REFERENCE: Expression Register :h quote= 1. Move the cursor to the line below marked ---> - 2. yank the zeroth line, then inspect registers with :reg + 2. Yank the zeroth line, then inspect registers with :reg - 3. delete line 0. with "cdd, then inspect registers + 3. Delete line 0. with "cdd, then inspect registers (Where do you expect line 0 to be?) - 4. continue deleting each successive line, inspecting :reg as you go + 4. Continue deleting each successive line, inspecting :reg as you go NOTE: You should notice that old full-line deletions move down the list as new full-line deletions are added @@ -281,6 +281,7 @@ REFERENCE: Marks :h marks - "+/"* - System clipboard (OS dependent) - "_ - Blackhole (discard deleted/yanked text) - "= - Expression register + - "- - Small delete register ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/runtime/tutor/tutor2.es b/runtime/tutor/tutor2.es new file mode 100644 index 0000000000..34c7d399e4 --- /dev/null +++ b/runtime/tutor/tutor2.es @@ -0,0 +1,321 @@ +=============================================================================== += B i e n v e n i d o a l t u t o r d e V I M - Versión 1.7 = +=============================================================================== += CAPÍTULO DOS = +=============================================================================== + + Hic Sunt Dracones: si esta es tu primera vez usando Vim y tienes la + intención de aprovechar el capítulo de introducción, simplemente escribe + :q! y ejecuta vimtutor para empezar por el Capítulo 1. + + El tiempo aproximado para completar este capítulo es de 8-10 minutos, + dependiendo de cuanto tiempo dediques a experimentar. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lección 2.1.1: DOMINAR LOS OBJETOS DE TEXTO + +** Operar en bloques de texto lógicos con precisión usando objetos de texto. ** + + 1. Practica las operaciones con palabras: + - Situa el cursor en cualquier palabra de la línea inferior + - Escribe diw para eliminar la palabra DENTRO donde está el cursor + (la palabra sin el espacio circundante) + - Escribe daw para eliminar UNA PALABRA + (incluyendo espacios en blanco al final) + - Prueba con otras operaciones: ciw (cambiar), yiw (copiar), + gqiw (formato) + +---> Practica aquí: "Vim's", (text_object), y aquí palabras 'poderosas'. + + 2. Trabaja con contenido entre paréntesis, corchetes o llaves: + - Situa el cursor dentro de cualquier par de los símbolos () {} [] <> + - Escribe di( o dib (eliminar dentro de los paréntesis) + - Escribe da( o dab (eliminar alrededor de los paréntesis) + - Prueba lo mismo con i" o con a" para las comillas + - Prueba con it o con at para etiquetas HTML/XML + +---> Ejemplos de prueba: con {llaves}, [corchetes], <ángulos> y "comillas". + + 3. Manipulación de párrafos y frases: + - Utiliza dip para eliminar el párrafo donde se encuentra el cursor + - Utiliza vap para seleccionar visualmente el párrafo entero + - Prueba das para eliminar una frase + (funciona entre símbolos de puntuación .!?) + + 4. Combinaciones avanzadas: + - ciwnuevo - Cambiar la palabra actual por "nuevo" + - ciw"-" - Encierra la palabra actual entre comillas + - gUit - Convertir a mayúsculas el contenido de la + etiqueta HTML donde esté el cursor + - va"p - Seleccionar el texto entre comillas y pegarlo sobre él + +---> Ejercicio final: (Modificar "el" texto) al [aplicar {varias} operaciones]< + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lección 2.1.2: LOS REGISTROS NOMINALES + + + ** Almacenar dos palabras copiadas de manera consecutiva y después pegarlas ** + + 1. Mueve el cursor a la línea inferior marcada con ---> + + 2. Situa el cursor en cualquier parte de la palabra 'Edward' y escribe "ayiw + +REGLA NEMOTÉCNICA: dentro del registo (") llamado (a) (y)copia + (i)entera la (w)palabra + + 3. Mueve el cursor a la palabra 'galletas' (ft o 2fg o $1b o /lle) + y escribe "byiw + + 4. Situa el cursos en cualquier parte de la palabra 'Vince' + y escribe ciwa + +REGLA NEMOTÉCNICA: (c)ambia el (i)interior de la (w)palabra + por el llamado (a) + + 5. Navega hasta cualquier punto de la palabra 'tarta' + y escribe ciwb + +---> a) Edward se encargará de las raciones de galletas + b) En esta función, Vince solo tentrá poderes sobre la tarta + +NOTA: Eliminar también funciona dentro de los registros, por ejemplo: + "sdiw eliminará la palabra bajo el cursor en el registro s. + +REFERENCIAS: Registros :h registers + Registros nominales :h quotea + Movimiento :h motion.txt /inner + CTRL-R :h insert /CTRL-R + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lección 2.1.3: EL REGISTRO DE EXPRESIÓN + + + ** Insertar los resultados de los cálculos sobre la marcha ** + + 1. Situa el cursor sobre la línea inferior marcada con ---> + + 2. Navega hasta cualquier parte del número que se muestra + + 3. Escribe ciw seguido por =60*60*24 + + 4. En la línea siguiente, entra en modo insertar y añade la fecha actual con + seguido por =system('date') + +NOTA: Todas las llamadas al sistema dependen del sistema operativo utilizado. + Por ejemplo en Windows hay que usar system('date /t') o :r!date /t + +---> He olvidado el número exacto de segundos en un días ¿son 84600? + La fecha actual es: + +NOTA: se puede obtener el mismo resultado con :pu=system('date') + o, usando menos pulsaciones de teclas :r!date + +REFERENCIA: Registro de expresión :h quote= + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lección 2.1.4: LOS REGISTROS NUMERADOS + + + ** Pulsa yy y dd para ser testigo de sus efectos en los registros ** + + 1. Situa el cursor sobre la línea inferior marcada con ---> + + 2. Copia la línea marcada con 0, + después revisa los registros mediante :reg + + 3. Elimina la línea 0 mediante "cdd, después revisa los registros + (¿Dónde esperas que esté la línea 0?) + + 4. Continúa eliminado cada línea sucesivamente, + inspencciona :reg mientras lo haces + +NOTA: Deberías comprobar cómo las líneas completas eliminadas + van bajando en la lista, cada vez que nuevas líneas eliminadas se añaden + + 5. Ahora (p)ega los siguiente registros en orden; 0, 7, 4, 2, 8. Así: "7p + +---> 0. Este + 9. tambaleante + 8. secreto + 7. es + 6. en + 5. eje + 4. un + 3. guerra + 2. mensaje + 1. tributo + +NOTA: La eliminación completa de líneas (dd) persisten más en los registros + numerados que las copias completas de lína o las eliminaciones que + implican pequeños movimientos + +REFERENCIA: Registros numerados :h quote0 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lección 2.1.5: REGISTROS ESPECIALES + + ** Utilizar el portapappeles del sistema y los registros de agujero negro ** + ** para una edición avanzada ** + + Nota: El uso del portapapeles del sistema requiere de bibliotecas X11/Wayland + en sistemas Linux Y una compilación de Vim con la opción "+clipboard" + (normalmente una compilación enorme). Se puede comprobar mediante + ":version" o ":echo has('clipboard_working')" + + 1. Registros del portapapeles + and * : + - "+y - Copiar al portapapeles del sistema + (Por ejemplo: "+yy para copiar en el portapapeles la línea actual) + - "+p - Pegar del portapapeles del sistema + - "* es la selección principal de X11 (el botón central), + "+ es el portapapeles + +---> Prueba: "+yy después pega la línea en otra aplicación + mediante Ctrl-V o Cmd+V + + 2. El registro de agujero negro _ para texto descartado: + - "_daw - Elimina una palabra sin guardarla en ningún registro + - Útil cuando no quieres sobreescribir el registro predeterminado " + - Ten en cuenta que utiliza el objeto de texto "una Palabra" visto + en la lección anterior + lession + - "_dd - Elimina una línea sin guardarla + - "_dap - Elimina un párrafo sin almacenarlo + - Combinado con un conteo: 3"_dw + +---> Practica: Utiliza "_diw en cualquier palabra para eliminarla sin afectar + al historial de copiado + + 3. Combinado con unas selecciones visuales: + - Selecciona un texto con V y después pulsa "+y + - Para pegarlo desde el portapapeles en el modo insertar pulsa: + + - Intenta abrir otra aplicación y péga el texto desde el portapapeles + + 4. Recuerda: + - Los registros del portapapeles funcionan a través de diferentes + instancias de Vim + - El registro del portapapelesno siempre está funcional + - El agujero negro previene el sobreescribir accidentalmente un registro + - El registro predeterminado " todavía está disponible para una acción + normal de copado/pegado + - Los registros nominales (a-z) permanecen privados para cada sesión de Vim + + 5. Problemas con el portapapeles: + - Comprueba que tu Vim lo admite mediante :echo has('clipboard_working') + - Si el comando anterior devuelve un 1 significa que está disponible, + Si devuelve un 0, significa que esa compilación de Vim no lo admite. + - En Linux, se puede necesitar el paquete vim-gtk o vim-x11 package + (comprueba :version output) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lección 2.1.6: LA BELLEZA DE LAS MARCAS + + ** El programador que rehuye de la aritmética ** + +NOTA: Un dilema común cuando se está creando código es mover grandes porciones + de código. + La siguiente técnica ayuda a evitar los cálculos asociados a los números + de línea con operaciones como "a147d o :945,1091d a o o incluso peor + i seguido por =1091-945 + + 1. Mueve el cursor hasta la línea inferior marcada con ---> + + 2. Ve a la primera línea de la función marcada con ma + +NOTA: ¡La posición exacta dentro de la línea NO es importante! + + 3. Navega hasta el final de la línea y después hasta el final del + bloque del código mediante $% + + 4. Elimina el bloque y guárdalo dentro del registro a mediante "ad'a + +REGLA NEMOTÉCNICA: dentro del registro(") llamado (a) coloca lo que he + (d)eliminado desde el cursor hasta la LÍNEA que + contiene la marca(') (a) + + 5. Pega el contenido del bloque entre BBB y CCC mediante "ap + +NOTA: practica esta operación varias veces hasta que tengas soltura ma$%"ad'a + +---> AAA + function itGotRealBigRealFast() { + if ( somethingIsTrue ) { + doIt() + } + // La taxonomía de nuestra función ha cambiado y + // Ya no tiene sentido alfabético en su posición actual + + // imagina que aquí hay cientos de líneas de código + + // de manera ingenua podrías navegar hasta el comienzo y hasta el final y + // apuntar o recordar cada número de la línea + } + BBB + CCC + +NOTA: Las marcas y los registros no comparten sus nombres. Así pues el + registro a es completamente independiente de la marca a. + Esto no se cumple con los registros y las macros. + +REFERENCIA: Marcas :h marks + Movimientos con las marcas :h mark-motions + (diferencia entre ' y `) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Lección 2.1 RESUMEN + + 1. Los objetos de texto ofrecen precisión a la hora de editar: + - iw/aw - dentro/alrededor de una palabra + - i[/a[ - dentro/alrededor de un paréntesis, corchete, etc + - i"/a" - dentro/alrededor de unas comillas quotes + - it/at - dentro/alrededor de una etiqueta + - ip/ap - dentro/alrededor de un párrafo + - is/as - dentro/alrededor de una frase + + 2. Para almacenar (copiar o eliminar) un texto dentro y volverlo a utilizar + (pegarlo), existen un total de 26 registros nominales (a-z) + 3. Copiar una palabra complete con el cursor situado en cualquierparte + dentro de esa palabra mediante: yiw + 4. Cambiar una palabra completa con el cursor en cualquier parte de esa + palabra mediante: ciw + 5. Insertar texto directamente desde los registros en el modo insertar + mediante el comando: a + + 6. Insertar los resultado de una simple operación aritmética + en el modo insertar mediante: seguido por =60*60 + 7. Insertar los resultado de una llamada del sistema en el modo insertar + mediante: seguido por =system('ls -1') + + 8. Inspeccionar el contenido de los registros con :reg + 9. Aprender el destino final al que va a parar la eliminación de + una línea complete: dd en los registros numerados. + Por ejemplo: descendiendo desde el registro 1 al 9. i.e. descending from register 1 - 9. + Ten en cuenta cómo las eliminaciones completas de las líneas son preservadas en + los registros numerado y permanecen más que cualquier otra operación realizada + 10. Aprender cual es el destino final de todos los objetos que copiamos + en los registros numerados y cómo son de efímeros + + 11. Ubicar marcas desde el modo de comandos m[a-zA-Z0-9] + 12. Mover de manera inteligente una línea a una marca con ' + + 13. Registros especiales: + - "+/"* - Portapapeles del sistema (depende el sistema operativo utilizado) + - "_ - El agujero negro (descarta texto eliminado/copiado) + - "= - Registro de expresión + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Con esto concluye el capítulo dos del Tutor de Vim. + Este es un trabajo en progreso. + + Este capítulo fue escrito por Paul D. Parker y Christian Brabandt. + Traducido por Victorhck. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/runtime/tutor/tutor2.ru b/runtime/tutor/tutor2.ru index b3282045c5..a3a96b7eb0 100644 --- a/runtime/tutor/tutor2.ru +++ b/runtime/tutor/tutor2.ru @@ -11,13 +11,53 @@ ещё раз, набрав в командной оболочке такую команду vimtutor --chapter 1 ru - Приблизительное время, необходимое для изучения второй главы учебника + Приблизительное время, необходимое для изучения второй главы учебника, составляет около 8–10 минут, и зависит от того, сколько времени вы посвятите выполнению заданий. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Урок 2.1.1. ИМЕНОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim + Урок 2.1.1. ОСВОЕНИЕ ТЕКСТОВЫХ ОБЪЕКТОВ + +** Точечные операции с логическими частями текста используя текстовые объекты ** + + 1. Попрактикуйтесь в аккуратной работе со словами: + - Поместите каретку на любое слово в строке почеченной ---> + - Наберите diw , чтобы удалить ТОЛЬКО слово (слово без окружающих пробелов) + - Наберите daw , чтобы удалить СЛОВО (включая конечные пробелы) + - Попробуйте другие операторы: ciw (изменить), yiw (копировать), + gqiw (форматировать) + +---> Потренируйтесь здесь на словах: «Vim'овский», (text_object) и 'мощный'. + + 2. Работа с содержимым скобок: + - Поместите каретку внутри любой пары () {} [] <> в строке помеченной ---> + - Наберите di( или dib (удалить всё, что внутри круглых скобок) + - Наберите da( или dab (удалить внутри круглых скобок и сами скобки) + - Попробуйте то же самое с i" и a" для машинописных кавычек или + it и at для тегов HTML и XML. + +---> Примеры: {фигурные}, [прямоугольные], <угловые>, (круглые) и "quoted". + + 3. Операции с абзацами и предложениями: + - Наберите dip для удаления ТОЛЬКО абзаца + (каретка может быть в любом месте абзаца) + - Наберите vap для визуального выделения всего абзаца + - Попробуйте das для удаления предложения + (работает при наличии знаков препинания .!? ) + + 4. Расширенные комбинации: + - ciwnew — изменить текущее слово на «new» + - ciw"-" — обернуть всю строку в кавычки + - gUit — преобразовать внутреннее содержимое HTML-тега в верхний + регистр + - va"p — выделить текст в кавычках и вставить поверх него + +---> Итоговое задание: (Измените "этот" текст) [применив {различные} операции]< + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Урок 2.1.2. ИМЕНОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim ** Копирование с сохранением двух разных слов и последующая их вставка в текст ** @@ -34,13 +74,13 @@ "byiw 4. Переместите каретку на любой символ слова «Виктор» и наберите на клавиатуре - ciwa + ciwa Эта команда означает следующее: изменить(c) только(i) слово(w) на <содержимое регистра(r)> с названием(a) 5. Установите каретку на любой символ слова «тортов» и наберите - ciwb + ciwb ---> а) Отныне Эдуард будет отвечать за раздачу печенья б) Таким образом Виктор имеет единоличные права по распределению тортов @@ -58,7 +98,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Урок 2.1.2. РЕГИСТР РЕЗУЛЬТАТА ВЫЧИСЛЕНИЙ + Урок 2.1.3. РЕГИСТР РЕЗУЛЬТАТА ВЫЧИСЛЕНИЙ ** Вставка результатов вычислений напрямую в текст ** @@ -66,11 +106,11 @@ 2. Установите каретку на любой цифре приведённого числа - 3. Наберите на клавиатуре ciw=60*60*24 + 3. Наберите на клавиатуре ciw=60*60*24 4. Переместите каретку в конец следующей строки, переключите редактор в режим вставки, и добавьте сегодняшнюю дату с помощью следующей команды - =system('date') + =system('date') Примечание. Результат вызова функции system() зависит от текущей операционной системы, @@ -89,7 +129,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Урок 2.1.3. НУМЕРОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim + Урок 2.1.4. НУМЕРОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim ** Как команды yy и dd влияют на содержимое регистров ** @@ -132,7 +172,59 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Урок 2.1.4. ИЗЯЩЕСТВО ЗАКЛАДОК + Урок 2.1.5. СПЕЦИАЛЬНЫЕ РЕГИСТРЫ + +** Применение регистров буфера обмена и «чёрная дыра» для расширенной правки ** + + Примечание. + Для использования системного буфера обмена в системе Linux требуются + библиотеки X11 или Wayland, и сам редактор Vim должен быть скомпилирован + с включённым компонентом «+clipboard» (обычно это максимальная версия). + Это можно проверить с помощью следующих команд редактора Vim: + :version + и + :echo has('clipboard_working') + + 1. Регистры буфера обмена + и * : + - "+y — копирование в системный буфер обмена + (например, по команде "+yy будет скопирована текущая строка) + - "+p — вставка из системного буфера обмена + - "* — основной выбор в X11 (средняя кнопка «мыши»), а "+ — буфер обмена + +---> "+yy в этой строке, затем вставьте в другое приложение по Ctrl+V или Cmd+V + + 2. Регистр «чёрная дыра» _ стирает текст: + - "_daw — сотрёт слово без сохранения в регистре + - Полезно, когда вы не хотите перезаписывать регистр по умолчанию " + - Обратите внимание, что здесь используется текстовый объект «a Word», + описанный в предыдущем уроке + - "_dd — сотрёт строку без сохранения + - "_dap — сотрёт абзац без сохранения + - Комбинируйте со счётчиками: 3"_dw + +---> "_diw на любом слове, чтобы удалить его, не затрагивая историю копирования + + 3. Совместите с визуальным выделением: + - Выделите текст с помощью , a затем "+y + - Чтобы вставить из буфера обмена в режиме вставки — + + - Попробуйте открыть другое приложение и вставить из системного буфера обмена + + 4. Запомните: + - Регистры буфера обмена доступны между разными экземплярами редактора Vim + - Регистр буфера обмена не всегда работает + - Регистр «чёрная дыра» предотвращает случайную перезапись других регистров + - Регистр по умолчанию " по-прежнему доступен для копирования и вставки + - Именованные регистры (a-z) остаются частными для каждой сессии Vim + + 5. Устранение неполадок с буфером обмена: + - Проверьте доступность с помощью команды :echo has('clipboard_working') + - При выводе 1 — означает доступно, 0 — означает, что компонент не включен + - В систме Linux может потребоваться пакет vim-gtk или vim-x11 + (посмотрите вывод команды :version) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Урок 2.1.6. ИЗЯЩЕСТВО ЗАКЛАДОК ** Избегайте действий, свойственных для дятлокодеров ** @@ -140,7 +232,7 @@ При написании программ часто возникает необходимость перемещения больших фрагментов кода. Приём, приведённый далее, поможет избежать подсчёта номеров строк, требуемых для операций вроде "a147d или :945,1091d a , или даже - хуже — i=1091-935 , как первое действие. + хуже — i=1091-935 , как первое действие. 1. Переместите каретку к строке помеченной ---> @@ -192,39 +284,55 @@ Резюме урока 2.1 - 1. Чтобы сохранить (при удалении или копировании) текст для последующей + 1. Текстовые объекты обеспечивают точное редактирование: + - iw или aw — только или включая слово + - i[ или a[ — внутри или включая скобки + - i" или a" — внутри или включая кавычки + - it или at — внутри или включая теги + - ip или ap — только или включая абзаца + - is или as — только или включая предложения + + 2. Чтобы сохранить (при удалении или копировании) текст для последующей вставки, используйте имеющиеся 26 именованных регистра (a-z). - 2. Чтобы скопировать целое слово при нахождении каретки на любом символе + 3. Чтобы скопировать целое слово при нахождении каретки на любом символе в этом слове, воспользуйтесь командой yiw - 3. Чтобы изменить целое слово при нахождении каретки на любом символе в этом + 4. Чтобы изменить целое слово при нахождении каретки на любом символе в этом слове, воспользуйтесь командой ciw - 4. Чтобы в режиме вставки вставить текст непосредственно из регистра, - воспользуйтесь командой a + 5. Чтобы в режиме вставки вставить текст непосредственно из регистра, + воспользуйтесь командой a - 5. Чтобы в режиме вставки вставить результат вычисления простых математических - операций, воспользуйтесь командой =60*60 - 6. Чтобы в режиме вставки вставить результат выполнения команд системы, - воспользуйтесь командой =system('ls -l') + 6. Чтобы в режиме вставки вставить результат вычисления простых математических + операций, воспользуйтесь командой =60*60 + 7. Чтобы в режиме вставки вставить результат выполнения команд системы, + воспользуйтесь командой =system('ls -l') - 7. Чтобы просмотреть содержимое регистров, воспользуйтесь командой :reg - 8. Учитывайте распределение удалённых целиком строк по команде dd — это + 8. Чтобы просмотреть содержимое регистров, воспользуйтесь командой :reg + 9. Учитывайте распределение удалённых целиком строк по команде dd — это нумерованные регистры в порядке убывания, т. е. от 1 до 9. Помните, что в нумерованных регистрах дольше хранятся те строки, которые были уделены целиком, в отличие от любых других операций - 9. Учитывайте, что в нумерованных регистрах кратковременно сохраняется всё + 10. Учитывайте, что в нумерованных регистрах кратковременно сохраняется всё что скопировано. - 10. Чтобы установить закладку в режиме команд, воспользуйтесь командой + 11. Чтобы установить закладку в режиме команд, воспользуйтесь командой m[a-zA-Z0-9] - 11. Чтобы переместить каретку на строку в которой установлена закладка, + 12. Чтобы переместить каретку на строку в которой установлена закладка, воспользуйтесь командой ' + 13. Специальные регистры: + - "+ и "* — системный буфер обмена (зависит от ОС) + - "_ — «чёрная дыра» (стирание удалённого или скопированного текста) + - "= — регистр результата вычислений + - "- — регистр малых удалений + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ На этом пока заканчивается вторая глава учебника по редактору Vim. Работа над этой главой будет продолжена. - Вторая глава учебника была написана Полом Д. Паркером (Paul D. Parker). + Вторая глава учебника была написана Полом Д. Паркером (Paul D. Parker) + и Кристианом Брабандт (Christian Brabandt). Restorer, перевод на русский язык, 2025, restorer@mail2k.ru + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/GvimExt/Make_ming.mak b/src/GvimExt/Make_ming.mak index 06ec7b6dc5..b73e6fd92a 100644 --- a/src/GvimExt/Make_ming.mak +++ b/src/GvimExt/Make_ming.mak @@ -22,10 +22,22 @@ MINGWOLD = no STATIC_STDCPLUS=no #STATIC_STDCPLUS=yes +# If you use TDM-GCC(-64), change HAS_GCC_EH to "no". +# This is used when STATIC_STDCPLUS=yes. +HAS_GCC_EH=yes + +STATIC_LIBS= + # Note: -static-libstdc++ is not available until gcc 4.5.x. LDFLAGS += -shared ifeq (yes, $(STATIC_STDCPLUS)) LDFLAGS += -static-libgcc -static-libstdc++ +# Order important: gcc_eh must be placed before winpthread +STATIC_LIBS += -lstdc++ -lgcc + ifeq (yes, $(HAS_GCC_EH)) +STATIC_LIBS += -lgcc_eh + endif +STATIC_LIBS += -lwinpthread endif ifeq ($(CROSS),yes) @@ -71,7 +83,8 @@ $(DLL): $(OBJ) $(RES) $(DEFFILE) -Wl,--whole-archive \ $^ \ -Wl,--no-whole-archive \ - $(LIBS) + $(LIBS) \ + -Wl,-Bstatic $(STATIC_LIBS) -Wl,-Bdynamic gvimext.o: gvimext.cpp $(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) -c $? -o $@ diff --git a/src/MacVim/Info.plist b/src/MacVim/Info.plist index 54bb1775a0..99d16e3aef 100644 --- a/src/MacVim/Info.plist +++ b/src/MacVim/Info.plist @@ -1255,7 +1255,7 @@ CFBundleVersion - 182 + 182.1 LSApplicationCategoryType public.app-category.productivity NSAppTransportSecurity diff --git a/src/MacVim/MMWhatsNewController.m b/src/MacVim/MMWhatsNewController.m index 4000d13df4..728c0b40b6 100644 --- a/src/MacVim/MMWhatsNewController.m +++ b/src/MacVim/MMWhatsNewController.m @@ -118,10 +118,19 @@ - (void)windowDidLoad messageTextField.stringValue = @""; } + WKWebViewConfiguration *config = [[[WKWebViewConfiguration alloc] init] autorelease]; + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11 + if (AVAILABLE_MAC_OS(10, 11)) { + // Don't leave stale files in user's Library + config.websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore]; + } +#endif + // Construct a web view at runtime instead of relying on using the xib because this is // more backwards compatible as we can use runtime checks and compiler defines. _webView = [[WKWebView alloc] initWithFrame:NSZeroRect - configuration:[[[WKWebViewConfiguration alloc] init] autorelease]]; + configuration:config]; [webViewContainer addSubview:_webView]; _webView.frame = webViewContainer.bounds; diff --git a/src/Make_cyg_ming.mak b/src/Make_cyg_ming.mak index bb84cd9c51..9ec5ef8e08 100644 --- a/src/Make_cyg_ming.mak +++ b/src/Make_cyg_ming.mak @@ -1252,8 +1252,9 @@ nvcmdidxs: nv_cmds.h ########################################################################### INCL = vim.h alloc.h ascii.h ex_cmds.h feature.h errors.h globals.h \ - keymap.h macros.h option.h os_dos.h os_win32.h proto.h regexp.h \ - spell.h structs.h termdefs.h beval.h $(NBDEBUG_INCL) + keymap.h macros.h option.h optiondefs.h os_dos.h os_win32.h \ + proto.h regexp.h spell.h structs.h termdefs.h beval.h \ + $(NBDEBUG_INCL) GUI_INCL = gui.h ifeq ($(DIRECTX),yes) GUI_INCL += gui_dwrite.h diff --git a/src/Makefile b/src/Makefile index da7ac94376..c04d952d19 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2771,40 +2771,40 @@ installvimdiff: $(DEST_BIN)/$(VIMDIFFTARGET) installgvimdiff: $(DEST_BIN)/$(GVIMDIFFTARGET) $(DEST_BIN)/$(EXTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(EXTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(EXTARGET) $(DEST_BIN)/$(VIEWTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(VIEWTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(VIEWTARGET) $(DEST_BIN)/$(GVIMTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(GVIMTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(GVIMTARGET) $(DEST_BIN)/$(GVIEWTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(GVIEWTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(GVIEWTARGET) $(DEST_BIN)/$(RVIMTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(RVIMTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(RVIMTARGET) $(DEST_BIN)/$(RVIEWTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(RVIEWTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(RVIEWTARGET) $(DEST_BIN)/$(RGVIMTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(RGVIMTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(RGVIMTARGET) $(DEST_BIN)/$(RGVIEWTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(RGVIEWTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(RGVIEWTARGET) $(DEST_BIN)/$(VIMDIFFTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(VIMDIFFTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(VIMDIFFTARGET) $(DEST_BIN)/$(GVIMDIFFTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(GVIMDIFFTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(GVIMDIFFTARGET) $(DEST_BIN)/$(EVIMTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(EVIMTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(EVIMTARGET) $(DEST_BIN)/$(EVIEWTARGET): $(DEST_BIN) - cd $(DEST_BIN); ln -s $(VIMTARGET) $(EVIEWTARGET) + cd $(DEST_BIN); ln -sf $(VIMTARGET) $(EVIEWTARGET) # Create links for the manual pages with various names to vim. This is only # done when the links (or manpages with the same name) don't exist yet. @@ -3753,7 +3753,7 @@ Makefile: ############################################################################## ### MacVim GUI -.PHONY: macvim macvim-dmg macvim-dmg-legacy macvimclean macvim-signed macvim-signed-adhoc macvim-dmg-release macvim-dmg-release-legacy macvim-install-runtime macvim-xcodeproj-compat +.PHONY: macvim macvim-dmg macvim-dmg-legacy macvimclean macvim-tests-binaries macvim-tests macvim-signed macvim-signed-adhoc macvim-dmg-release macvim-dmg-release-legacy macvim-install-runtime macvim-xcodeproj-compat RUNTIME_FOLDER_LIST = MacVim/auto/runtime_folder_list.xcfilelist @@ -3777,6 +3777,9 @@ $(RUNTIME_FOLDER_LIST): macvim: $(VIMTARGET) $(RUNTIME_FOLDER_LIST) xcodebuild -project MacVim/MacVim.xcodeproj $(XCODEFLAGS) +macvim-tests-binaries: + xcodebuild build-for-testing -project MacVim/MacVim.xcodeproj -scheme MacVim $(XCODEFLAGS) + macvim-tests: xcodebuild test -project MacVim/MacVim.xcodeproj -scheme MacVim $(XCODEFLAGS) diff --git a/src/arglist.c b/src/arglist.c index 398e23a273..657e2790ae 100644 --- a/src/arglist.c +++ b/src/arglist.c @@ -1007,7 +1007,7 @@ arg_all_close_unused_windows(arg_all_state_T *aall) buf = wp->w_buffer; if (buf->b_ffname == NULL || (!aall->keep_tabs && (buf->b_nwindows > 1 - || wp->w_width != Columns))) + || wp->w_width != cmdline_width))) i = aall->opened_len; else { diff --git a/src/auto/nmake/tools.mak b/src/auto/nmake/tools.mak index cfeb09ab39..d1672ca9fb 100644 --- a/src/auto/nmake/tools.mak +++ b/src/auto/nmake/tools.mak @@ -23,7 +23,7 @@ PSFLAGS = -NoLogo -NoProfile -Command !ERROR The PowerShell program version 3.0 or higher is required for work. !ENDIF -!IF ![echo $(COMSPEC) | 1> nul find "cmd.exe"] +!IF ![echo $(COMSPEC) | 1> nul $(SYSTEMROOT)\System32\find.exe "cmd.exe"] CMD = $(COMSPEC) !ELSE CMD = $(SYSTEMROOT)\System32\cmd.exe diff --git a/src/blob.c b/src/blob.c index 9dfda36fb3..e72b5d00a7 100644 --- a/src/blob.c +++ b/src/blob.c @@ -276,13 +276,16 @@ blob2string(blob_T *blob, char_u **tofree, char_u *numbuf) // Store bytes in the growarray. ga_init2(&ga, 1, 4000); - ga_concat(&ga, (char_u *)"0z"); + ga_concat_len(&ga, (char_u *)"0z", 2); for (i = 0; i < blob_len(blob); i++) { + size_t numbuflen; + if (i > 0 && (i & 3) == 0) - ga_concat(&ga, (char_u *)"."); - vim_snprintf((char *)numbuf, NUMBUFLEN, "%02X", blob_get(blob, i)); - ga_concat(&ga, numbuf); + ga_concat_len(&ga, (char_u *)".", 1); + numbuflen = vim_snprintf_safelen((char *)numbuf, NUMBUFLEN, + "%02X", blob_get(blob, i)); + ga_concat_len(&ga, numbuf, numbuflen); } ga_append(&ga, NUL); // append a NUL at the end *tofree = ga.ga_data; diff --git a/src/buffer.c b/src/buffer.c index 7732c9be5d..3b3ebd0624 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -49,7 +49,6 @@ static int append_arg_number(win_T *wp, char_u *buf, size_t buflen, int add_file static void free_buffer(buf_T *); static void free_buffer_stuff(buf_T *buf, int free_options); static int bt_nofileread(buf_T *buf); -static void no_write_message_buf(buf_T *buf); static int do_buffer_ext(int action, int start, int dir, int count, int flags); #ifdef UNIX @@ -75,6 +74,7 @@ static garray_T buf_reuse = GA_EMPTY; // file numbers to recycle static void trigger_undo_ftplugin(buf_T *buf, win_T *win) { + int win_was_locked = win->w_locked; window_layout_lock(); buf->b_locked++; win->w_locked = TRUE; @@ -82,7 +82,7 @@ trigger_undo_ftplugin(buf_T *buf, win_T *win) do_cmdline_cmd((char_u*)"if exists('b:undo_ftplugin') | :legacy :exe \ b:undo_ftplugin | endif"); buf->b_locked--; - win->w_locked = FALSE; + win->w_locked = win_was_locked; window_layout_unlock(); } @@ -516,6 +516,10 @@ can_unload_buffer(buf_T *buf) break; } } + // Don't unload the buffer while it's still being saved + if (can_unload && buf->b_saving) + can_unload = FALSE; + if (!can_unload) { char_u *fname = buf->b_fname != NULL ? buf->b_fname : buf->b_ffname; @@ -702,7 +706,7 @@ close_buffer( // If the buffer was in curwin and the window has changed, go back to that // window, if it still exists. This avoids that ":edit x" triggering a // "tabnext" BufUnload autocmd leaves a window behind without a buffer. - if (is_curwin && curwin != the_curwin && win_valid_any_tab(the_curwin)) + if (is_curwin && curwin != the_curwin && win_valid_any_tab(the_curwin)) { block_autocmds(); goto_tabpage_win(the_curtab, the_curwin); @@ -781,16 +785,13 @@ close_buffer( /* * Remove the buffer from the list. + * Do not wipe out the buffer if it is used in a window. */ - if (wipe_buf) + if (wipe_buf && buf->b_nwindows <= 0) { tabpage_T *tp; win_T *wp; - // Do not wipe out the buffer if it is used in a window. - if (buf->b_nwindows > 0) - return FALSE; - FOR_ALL_TAB_WINDOWS(tp, wp) mark_forget_file(wp, buf->b_fnum); @@ -1436,19 +1437,10 @@ do_buffer_ext( if ((flags & DOBUF_NOPOPUP) && bt_popup(buf) && !bt_terminal(buf)) return OK; #endif - if (action == DOBUF_GOTO && buf != curbuf) - { - if (!check_can_set_curbuf_forceit((flags & DOBUF_FORCEIT) != 0)) - // disallow navigating to another buffer when 'winfixbuf' is applied - return FAIL; - if (buf->b_locked_split) - { - // disallow navigating to a closing buffer, which like splitting, - // can result in more windows displaying it - emsg(_(e_cannot_switch_to_a_closing_buffer)); - return FAIL; - } - } + if (action == DOBUF_GOTO && buf != curbuf + && !check_can_set_curbuf_forceit((flags & DOBUF_FORCEIT) != 0)) + // disallow navigating to another buffer when 'winfixbuf' is applied + return FAIL; if ((action == DOBUF_GOTO || action == DOBUF_SPLIT) && (buf->b_flags & BF_DUMMY)) @@ -1554,11 +1546,12 @@ do_buffer_ext( * Then prefer the buffer we most recently visited. * Else try to find one that is loaded, after the current buffer, * then before the current buffer. - * Finally use any buffer. + * Finally use any buffer. Skip buffers that are closing throughout. */ buf = NULL; // selected buffer bp = NULL; // used when no loaded buffer found - if (au_new_curbuf.br_buf != NULL && bufref_valid(&au_new_curbuf)) + if (au_new_curbuf.br_buf != NULL && bufref_valid(&au_new_curbuf) + && !au_new_curbuf.br_buf->b_locked_split) buf = au_new_curbuf.br_buf; else if (curwin->w_jumplistlen > 0) { @@ -1575,8 +1568,9 @@ do_buffer_ext( if (buf != NULL) { // Skip current and unlisted bufs. Also skip a quickfix - // buffer, it might be deleted soon. - if (buf == curbuf || !buf->b_p_bl || bt_quickfix(buf)) + // or closing buffer, it might be deleted soon. + if (buf == curbuf || !buf->b_p_bl || bt_quickfix(buf) + || buf->b_locked_split) buf = NULL; else if (buf->b_ml.ml_mfp == NULL) { @@ -1614,7 +1608,7 @@ do_buffer_ext( } // in non-help buffer, try to skip help buffers, and vv if (buf->b_help == curbuf->b_help && buf->b_p_bl - && !bt_quickfix(buf)) + && !bt_quickfix(buf) && !buf->b_locked_split) { if (buf->b_ml.ml_mfp != NULL) // found loaded buffer break; @@ -1632,7 +1626,8 @@ do_buffer_ext( if (buf == NULL) // No loaded buffer, find listed one { FOR_ALL_BUFFERS(buf) - if (buf->b_p_bl && buf != curbuf && !bt_quickfix(buf)) + if (buf->b_p_bl && buf != curbuf && !bt_quickfix(buf) + && !buf->b_locked_split) break; } if (buf == NULL) // Still no buffer, just take one @@ -1641,7 +1636,7 @@ do_buffer_ext( buf = curbuf->b_next; else buf = curbuf->b_prev; - if (bt_quickfix(buf)) + if (bt_quickfix(buf) || (buf != curbuf && buf->b_locked_split)) buf = NULL; } } @@ -1656,15 +1651,17 @@ do_buffer_ext( /* * make "buf" the current buffer */ - if (action == DOBUF_SPLIT) // split window first + // If 'switchbuf' is set jump to the window containing "buf". + if (action == DOBUF_SPLIT && swbuf_goto_win_with_buf(buf) != NULL) + return OK; + // Whether splitting or not, don't open a closing buffer in more windows. + if (buf != curbuf && buf->b_locked_split) { - // If 'switchbuf' is set jump to the window containing "buf". - if (swbuf_goto_win_with_buf(buf) != NULL) - return OK; - - if (win_split(0, 0) == FAIL) - return FAIL; + emsg(_(e_cannot_switch_to_a_closing_buffer)); + return FAIL; } + if (action == DOBUF_SPLIT && win_split(0, 0) == FAIL) // split window first + return FAIL; // go to current buffer - nothing to do if (buf == curbuf) @@ -2088,8 +2085,8 @@ do_autochdir(void) } #endif - static void -no_write_message_buf(buf_T *buf UNUSED) + void +no_write_message_buf(buf_T *buf) { #ifdef FEAT_TERMINAL if (term_job_running(buf->b_term)) @@ -2480,9 +2477,7 @@ free_buf_options( ga_clear(&buf->b_kmap_ga); #endif clear_string_option(&buf->b_p_com); -#ifdef FEAT_FOLDING clear_string_option(&buf->b_p_cms); -#endif clear_string_option(&buf->b_p_nf); #ifdef FEAT_SYN_HL clear_string_option(&buf->b_p_syn); @@ -2505,7 +2500,6 @@ free_buf_options( clear_string_option(&buf->b_p_cinw); clear_string_option(&buf->b_p_cot); clear_string_option(&buf->b_p_cpt); - clear_string_option(&buf->b_p_ise); #ifdef FEAT_COMPL_FUNC clear_string_option(&buf->b_p_cfu); free_callback(&buf->b_cfu_cb); @@ -2540,6 +2534,9 @@ free_buf_options( clear_string_option(&buf->b_p_qe); buf->b_p_ac = -1; buf->b_p_ar = -1; +#ifdef HAVE_FSYNC + buf->b_p_fs = -1; +#endif buf->b_p_ul = NO_LOCAL_UNDOLEVEL; clear_string_option(&buf->b_p_lw); clear_string_option(&buf->b_p_bkc); @@ -5440,7 +5437,7 @@ get_rel_pos( char tmp[8]; // localized percentage value vim_snprintf(tmp, sizeof(tmp), _("%d%%"), perc); - return (int)vim_snprintf_safelen((char *)buf, buflen, _("%2s"), tmp); + return (int)vim_snprintf_safelen((char *)buf, buflen, _("%3s"), tmp); } /* diff --git a/src/bufwrite.c b/src/bufwrite.c index 4e6493f513..2f7c45b780 100644 --- a/src/bufwrite.c +++ b/src/bufwrite.c @@ -229,6 +229,16 @@ buf_write_bytes(struct bw_info *ip) else c = buf[wlen]; } + // Check that there is enough space + if (!(flags & FIO_LATIN1)) + { + size_t need = (flags & FIO_UCS4) ? 4 : 2; + if ((flags & FIO_UTF16) && c >= 0x10000) + need = 4; + + if ((size_t)(p - ip->bw_conv_buf) + need > ip->bw_conv_buflen) + return FAIL; + } if (ucs2bytes(c, &p, flags) && !ip->bw_conv_error) { @@ -1698,11 +1708,13 @@ buf_write( wb_flags = get_fio_flags(fenc); if (wb_flags & (FIO_UCS2 | FIO_UCS4 | FIO_UTF16 | FIO_UTF8)) { + // overallocate a bit, in case we read incomplete multi-byte chars + int size = bufsize + CONV_RESTLEN; // Need to allocate a buffer to translate into. if (wb_flags & (FIO_UCS2 | FIO_UTF16 | FIO_UTF8)) - write_info.bw_conv_buflen = bufsize * 2; + write_info.bw_conv_buflen = size * 2; else // FIO_UCS4 - write_info.bw_conv_buflen = bufsize * 4; + write_info.bw_conv_buflen = size * 4; write_info.bw_conv_buf = alloc(write_info.bw_conv_buflen); if (write_info.bw_conv_buf == NULL) end = 0; @@ -2199,7 +2211,8 @@ buf_write( // For a device do try the fsync() but don't complain if it does not // work (could be a pipe). // If the 'fsync' option is FALSE, don't fsync(). Useful for laptops. - if (p_fs && vim_fsync(fd) != 0 && !device) + if ((buf->b_p_fs >= 0 ? buf->b_p_fs : p_fs) && vim_fsync(fd) != 0 + && !device) { errmsg = (char_u *)_(e_fsync_failed); end = 0; diff --git a/src/channel.c b/src/channel.c index 1f904e1d49..2c12986254 100644 --- a/src/channel.c +++ b/src/channel.c @@ -1661,7 +1661,14 @@ channel_write_in(channel_T *channel) ch_log(channel, "Finished writing all lines to channel"); // Close the pipe/socket, so that the other side gets EOF. - ch_close_part(channel, PART_IN); +#ifdef MSWIN + // At this point, the input part of the conpty channel must not be + // closed. If it is closed, the pipe will be destroyed, the console + // that was using it will be destroyed, and the process running within + // it will be forcibly terminated, so this needs to be prevented. + if (!channel->ch_anonymous_pipe) +#endif + ch_close_part(channel, PART_IN); } else ch_log(channel, "Still %ld more lines to write", @@ -4231,7 +4238,17 @@ channel_handle_events(int only_keep_open) if (fd == INVALID_FD) continue; - int r = channel_wait(channel, fd, 0); + // In normal cases, a timeout of 0 is sufficient. + // + // But, in Windows conpty terminals, the final output of a + // terminated process may be missed. In this case, in order for + // Vim to read the final output, it is necessary to set the timeout + // to 1 msec or more. It seems that the final output can be + // received by calling Sleep() once within channel_wait(). Note + // that ch_killing can only be TRUE in conpty terminals, so it has + // no side effects in environments other than conpty. + int r = channel_wait(channel, fd, (channel->ch_killing && + (part == PART_OUT || part == PART_ERR)) ? 1 : 0); if (r == CW_READY) channel_read(channel, part, "channel_handle_events"); diff --git a/src/charset.c b/src/charset.c index 29936e7d9f..74c5913eed 100644 --- a/src/charset.c +++ b/src/charset.c @@ -773,7 +773,7 @@ chartabsize(char_u *p, colnr_T col) RET_WIN_BUF_CHARTABSIZE(curwin, curbuf, p, col) } -#if defined(FEAT_LINEBREAK) +#if defined(FEAT_LINEBREAK) || defined(FEAT_PROP_POPUP) int win_chartabsize(win_T *wp, char_u *p, colnr_T col) { @@ -1226,11 +1226,11 @@ win_lbr_chartabsize( win_T *wp = cts->cts_win; #if defined(FEAT_PROP_POPUP) || defined(FEAT_LINEBREAK) char_u *line = cts->cts_line; // start of the line + int size; #endif char_u *s = cts->cts_ptr; colnr_T vcol = cts->cts_vcol; #ifdef FEAT_LINEBREAK - int size; int mb_added = 0; int n; char_u *sbr; @@ -1269,20 +1269,23 @@ win_lbr_chartabsize( * First get the normal size, without 'linebreak' or text properties */ size = win_chartabsize(wp, s, vcol); +# ifdef FEAT_LINEBREAK if (*s == NUL) { // 1 cell for EOL list char (if present), as opposed to the two cell ^@ // for a NUL character in the text. size = has_lcs_eol ? 1 : 0; } -# ifdef FEAT_LINEBREAK + int is_doublewidth = has_mbyte && size == 2 && MB_BYTE2LEN(*s) > 1; # endif # ifdef FEAT_PROP_POPUP if (cts->cts_has_prop_with_text) { +# ifdef FEAT_LINEBREAK int tab_size = size; +# endif int charlen = *s == NUL ? 1 : mb_ptr2len(s); int i; int col = (int)(s - line); @@ -1338,6 +1341,7 @@ win_lbr_chartabsize( else size += cells; cts->cts_start_incl = tp->tp_flags & TP_FLAG_START_INCL; +# ifdef FEAT_LINEBREAK if (*s == TAB) { // tab size changes because of the inserted text @@ -1345,6 +1349,7 @@ win_lbr_chartabsize( tab_size = win_chartabsize(wp, s, vcol + size); size += tab_size; } +# endif if (tp->tp_col == MAXCOL && (tp->tp_flags & (TP_FLAG_ALIGN_ABOVE | TP_FLAG_ALIGN_BELOW))) // count extra line for property above/below @@ -1520,8 +1525,8 @@ win_lbr_chartabsize( # ifdef FEAT_PROP_POPUP size += cts->cts_first_char; # endif - return size; # endif + return size; #endif } @@ -1702,8 +1707,7 @@ getvcol( { incr = 1; // NUL at end of line only takes one column #ifdef FEAT_PROP_POPUP - if (cts.cts_cur_text_width > 0) - incr = cts.cts_cur_text_width; + incr += cts.cts_cur_text_width; on_NUL = TRUE; #endif break; diff --git a/src/cindent.c b/src/cindent.c index e23f96d453..12d7e694d9 100644 --- a/src/cindent.c +++ b/src/cindent.c @@ -2076,16 +2076,30 @@ find_match(int lookfor, linenr_T ourscope) if (theirscope->lnum > ourscope) continue; - // if it was an "else" (that's not an "else if") - // then we need to go back to another if, so - // increment elselevel look = cin_skipcomment(ml_get_curline()); - if (cin_iselse(look)) + // When looking for if, we ignore "if" and "else" in a deeper do-while loop. + if (!(lookfor == LOOKFOR_IF && whilelevel)) { - mightbeif = cin_skipcomment(look + 4); - if (!cin_isif(mightbeif)) - ++elselevel; - continue; + // if it was an "else" (that's not an "else if") + // then we need to go back to another if, so + // increment elselevel + if (cin_iselse(look)) + { + mightbeif = cin_skipcomment(look + 4); + if (!cin_isif(mightbeif)) + ++elselevel; + continue; + } + + // If it's an "if" decrement elselevel + if (cin_isif(look)) + { + elselevel--; + // When looking for an "if" ignore "while"s that + // get in the way. + if (elselevel == 0 && lookfor == LOOKFOR_IF) + whilelevel = 0; + } } // if it was a "while" then we need to go back to @@ -2096,17 +2110,6 @@ find_match(int lookfor, linenr_T ourscope) continue; } - // If it's an "if" decrement elselevel - look = cin_skipcomment(ml_get_curline()); - if (cin_isif(look)) - { - elselevel--; - // When looking for an "if" ignore "while"s that - // get in the way. - if (elselevel == 0 && lookfor == LOOKFOR_IF) - whilelevel = 0; - } - // If it's a "do" decrement whilelevel if (cin_isdo(look)) whilelevel--; diff --git a/src/clipboard.c b/src/clipboard.c index aceff6a2cf..ece50b389e 100644 --- a/src/clipboard.c +++ b/src/clipboard.c @@ -8,7 +8,9 @@ */ /* - * clipboard.c: Functions to handle the clipboard + * clipboard.c: Functions to handle the clipboard. Additionally contains the + * clipboard provider code, which is separate from the main + * clipboard code. */ #include "vim.h" @@ -29,6 +31,11 @@ // versions of these for the 'clipboard' selection, as Visual mode has no use // for them. + +#ifdef FEAT_CLIPBOARD_PROVIDER +static int clip_provider_is_available(char_u *provider); +#endif + #if defined(FEAT_CLIPBOARD) #if defined(FEAT_WAYLAND_CLIPBOARD) @@ -100,10 +107,6 @@ typedef struct { clip_wl_selection_T regular; clip_wl_selection_T primary; - - // Array of file descriptors of clients we are sending data to. These should - // be polled for POLLOUT and have the respective callback called for each. - garray_T write_fds; } clip_wl_T; // Mime types we support sending and receiving @@ -172,22 +175,6 @@ clip_init(int can_use) } } - static void -clip_init_single(Clipboard_T *cb, int can_use) -{ - // No need to init again if cbd is already available - if (can_use && cb->available) - return; - - cb->available = can_use; - cb->owned = FALSE; - cb->start.lnum = 0; - cb->start.col = 0; - cb->end.lnum = 0; - cb->end.col = 0; - cb->state = SELECT_CLEARED; -} - /* * Check whether the VIsual area has changed, and if so try to become the owner * of the selection, and free any old converted selection we may still have @@ -1445,104 +1432,6 @@ clip_gen_owner_exists(Clipboard_T *cbd UNUSED) } #endif -/* - * Extract the items in the 'clipboard' option and set global values. - * Return an error message or NULL for success. - */ - char * -did_set_clipboard(optset_T *args UNUSED) -{ - int new_unnamed = 0; - int new_autoselect_star = FALSE; - int new_autoselect_plus = FALSE; - int new_autoselectml = FALSE; - int new_html = FALSE; - regprog_T *new_exclude_prog = NULL; - char *errmsg = NULL; - char_u *p; - - for (p = p_cb; *p != NUL; ) - { - // Note: Keep this in sync with p_cb_values. - if (STRNCMP(p, "unnamed", 7) == 0 && (p[7] == ',' || p[7] == NUL)) - { - new_unnamed |= CLIP_UNNAMED; - p += 7; - } - else if (STRNCMP(p, "unnamedplus", 11) == 0 - && (p[11] == ',' || p[11] == NUL)) - { - new_unnamed |= CLIP_UNNAMED_PLUS; - p += 11; - } - else if (STRNCMP(p, "autoselect", 10) == 0 - && (p[10] == ',' || p[10] == NUL)) - { - new_autoselect_star = TRUE; - p += 10; - } - else if (STRNCMP(p, "autoselectplus", 14) == 0 - && (p[14] == ',' || p[14] == NUL)) - { - new_autoselect_plus = TRUE; - p += 14; - } - else if (STRNCMP(p, "autoselectml", 12) == 0 - && (p[12] == ',' || p[12] == NUL)) - { - new_autoselectml = TRUE; - p += 12; - } - else if (STRNCMP(p, "html", 4) == 0 && (p[4] == ',' || p[4] == NUL)) - { - new_html = TRUE; - p += 4; - } - else if (STRNCMP(p, "exclude:", 8) == 0 && new_exclude_prog == NULL) - { - p += 8; - new_exclude_prog = vim_regcomp(p, RE_MAGIC); - if (new_exclude_prog == NULL) - errmsg = e_invalid_argument; - break; - } - else - { - errmsg = e_invalid_argument; - break; - } - if (*p == ',') - ++p; - } - if (errmsg == NULL) - { - if (global_busy) - // clip_unnamed will be reset to clip_unnamed_saved - // at end_global_changes - clip_unnamed_saved = new_unnamed; - else - clip_unnamed = new_unnamed; - clip_autoselect_star = new_autoselect_star; - clip_autoselect_plus = new_autoselect_plus; - clip_autoselectml = new_autoselectml; - clip_html = new_html; - vim_regfree(clip_exclude_prog); - clip_exclude_prog = new_exclude_prog; -#ifdef FEAT_GUI_GTK - if (gui.in_use) - { - gui_gtk_set_selection_targets((GdkAtom)GDK_SELECTION_PRIMARY); - gui_gtk_set_selection_targets((GdkAtom)clip_plus.gtk_sel_atom); - gui_gtk_set_dnd_targets(); - } -#endif - } - else - vim_regfree(new_exclude_prog); - - return errmsg; -} - /* * Stuff for the X clipboard. Shared between VMS and Unix. */ @@ -2411,32 +2300,6 @@ may_set_selection(void) } } -/* - * Adjust the register name pointed to with "rp" for the clipboard being - * used always and the clipboard being available. - */ - void -adjust_clip_reg(int *rp) -{ - // If no reg. specified, and "unnamed" or "unnamedplus" is in 'clipboard', - // use '*' or '+' reg, respectively. "unnamedplus" prevails. - if (*rp == 0 && (clip_unnamed != 0 || clip_unnamed_saved != 0)) - { - if (clip_unnamed != 0) - *rp = ((clip_unnamed & CLIP_UNNAMED_PLUS) && clip_plus.available) - ? '+' : '*'; - else - *rp = ((clip_unnamed_saved & CLIP_UNNAMED_PLUS) - && clip_plus.available) ? '+' : '*'; - } - if ((!clip_star.available && *rp == '*') || - (!clip_plus.available && *rp == '+')) - { - msg_warn_missing_clipboard(!clip_plus.available, !clip_star.available); - *rp = 0; - } -} - #if defined(FEAT_WAYLAND_CLIPBOARD) static clip_wl_selection_T * @@ -2878,6 +2741,8 @@ clip_init_wayland(void) if (wayland_ct == NULL) return FAIL; + memset(&clip_wl, 0, sizeof(clip_wl)); + clip_wl.seat = vwl_connection_get_seat(wayland_ct, (char *)p_wse); if (clip_wl.seat == NULL) @@ -2895,12 +2760,14 @@ clip_init_wayland(void) clip_wl.regular.available = true; else { + // Shouldn't happen vwl_data_device_manager_discard(clip_wl.regular.manager); clip_wl.regular.manager = NULL; + return FAIL; } } - // If we still don't support the primary selection, find one for it + // If we still don't support the primary selection, try finding one for it // specifically. if (!(supported & WAYLAND_SELECTION_PRIMARY)) { @@ -2921,10 +2788,12 @@ clip_init_wayland(void) } } } - else if (clip_wl.regular.available) + + if (clip_wl.regular.available && !clip_wl.primary.available) { // The protocol supports both regular and primary selections, just use - // one data device manager and one data device. + // one data device manager and one data device. Or the primary selection + // is not supported, make it point to the regular selection instead. clip_wl.primary.available = true; clip_wl.primary.manager = clip_wl.regular.manager; clip_wl.primary.device = clip_wl.regular.device; @@ -3433,13 +3302,16 @@ clip_wl_owner_exists(Clipboard_T *cbd) #endif // FEAT_WAYLAND_CLIPBOARD +#endif // FEAT_CLIPBOARD + +#ifdef HAVE_CLIPMETHOD /* * Returns the first method for accessing the clipboard that is available/works, * depending on the order of values in str. */ static clipmethod_T -get_clipmethod(char_u *str, bool *plus UNUSED, bool *star UNUSED) +get_clipmethod(char_u *str) { int len = (int)STRLEN(str) + 1; char_u *buf = alloc(len); @@ -3464,11 +3336,7 @@ get_clipmethod(char_u *str, bool *plus UNUSED, bool *star UNUSED) { #ifdef FEAT_WAYLAND_CLIPBOARD if (clip_wl.regular.available || clip_wl.primary.available) - { method = CLIPMETHOD_WAYLAND; - *plus = clip_wl.regular.available; - *star = clip_wl.primary.available; - } #endif } } @@ -3489,15 +3357,36 @@ get_clipmethod(char_u *str, bool *plus UNUSED, bool *star UNUSED) // xterm_dpy will be set to NULL. xterm_update(); method = CLIPMETHOD_X11; - *plus = *star = TRUE; } #endif } } else { - ret = CLIPMETHOD_FAIL; - goto exit; +#ifdef FEAT_CLIPBOARD_PROVIDER + // Check if name matches a clipboard provider + int r = clip_provider_is_available(buf); + + if (r == 1) + { + method = CLIPMETHOD_PROVIDER; + if (ret == CLIPMETHOD_FAIL) + { + vim_free(clip_provider); + clip_provider = vim_strsave(buf); + if (clip_provider == NULL) + goto fail; + } + } + else if (r == -1) +#endif + { +#ifdef FEAT_CLIPBOARD_PROVIDER +fail: +#endif + ret = CLIPMETHOD_FAIL; + goto exit; + } } // Keep on going in order to catch errors @@ -3517,17 +3406,21 @@ get_clipmethod(char_u *str, bool *plus UNUSED, bool *star UNUSED) /* * Returns name of clipmethod in a statically allocated string. */ - static char * + static char_u * clipmethod_to_str(clipmethod_T method) { switch(method) { case CLIPMETHOD_WAYLAND: - return "wayland"; + return (char_u *)"wayland"; case CLIPMETHOD_X11: - return "x11"; + return (char_u *)"x11"; + case CLIPMETHOD_PROVIDER: +#ifdef FEAT_EVAL + return clip_provider; +#endif default: - return "none"; + return (char_u *)"none"; } } @@ -3538,17 +3431,17 @@ clipmethod_to_str(clipmethod_T method) char * choose_clipmethod(void) { - bool regular = false, primary = false; - clipmethod_T method = get_clipmethod(p_cpm, ®ular, &primary); + clipmethod_T method = get_clipmethod(p_cpm); if (method == CLIPMETHOD_FAIL) return e_invalid_argument; // If GUI is running or we are not on a system with Wayland or X11, then always // return CLIPMETHOD_NONE. System or GUI clipboard handling always overrides. +// This is unless a provider is being used. #if defined(FEAT_XCLIPBOARD) || defined(FEAT_WAYLAND_CLIPBOARD) # if defined(FEAT_GUI) - if (gui.in_use) + if (method != CLIPMETHOD_PROVIDER && gui.in_use) { # ifdef FEAT_WAYLAND // We only interact with Wayland for the clipboard, we can just deinit @@ -3562,21 +3455,26 @@ choose_clipmethod(void) # endif #else // If on a system like windows or macos, then clipmethod is irrelevant, we - // use their way of accessing the clipboard. - method = CLIPMETHOD_NONE; - goto exit; + // use their way of accessing the clipboard. This is unless we are using the + // clipboard provider +#ifdef FEAT_CLIPBOARD_PROVIDER + if (method != CLIPMETHOD_PROVIDER) +#endif + { + method = CLIPMETHOD_NONE; + goto exit; + } #endif +#ifdef FEAT_CLIPBOARD // Deinitialize clipboard if there is no way to access clipboard if (method == CLIPMETHOD_NONE) clip_init(FALSE); // If we have a clipmethod that works now, then initialize clipboard else if (clipmethod == CLIPMETHOD_NONE && method != CLIPMETHOD_NONE) { - clip_init_single(&clip_plus, regular); - clip_init_single(&clip_star, primary); - clip_plus.did_warn = false; - clip_star.did_warn = false; + clip_init(TRUE); + did_warn_clipboard = false; } // Disown clipboard if we are switching to a new method else if (clipmethod != CLIPMETHOD_NONE && method != clipmethod) @@ -3594,10 +3492,11 @@ choose_clipmethod(void) if (!gui.in_use) #endif { - clip_init_single(&clip_plus, regular); - clip_init_single(&clip_star, primary); + clip_init(TRUE); + did_warn_clipboard = false; } } +#endif // FEAT_CLIPBOARD #if !defined(FEAT_XCLIPBOARD) && !defined(FEAT_WAYLAND_CLIPBOARD) exit: @@ -3629,4 +3528,549 @@ ex_clipreset(exarg_T *eap UNUSED) clipmethod_to_str(clipmethod)); } -#endif // FEAT_CLIPBOARD +/* + * Adjust the register name pointed to with "rp" for the clipboard being + * used always and the clipboard being available. + */ + void +adjust_clip_reg(int *rp) +{ +#ifdef FEAT_CLIPBOARD_PROVIDER + if (clipmethod == CLIPMETHOD_PROVIDER) + { + if (*rp == 0 && clip_unnamed != 0) + *rp = ((clip_unnamed & CLIP_UNNAMED_PLUS)) ? '+' : '*'; + return; + } +#endif +#ifdef FEAT_CLIPBOARD + // If no reg. specified, and "unnamed" or "unnamedplus" is in 'clipboard', + // use '*' or '+' reg, respectively. "unnamedplus" prevails. + if (*rp == 0 && (clip_unnamed != 0 || clip_unnamed_saved != 0)) + { + if (clip_unnamed != 0) + *rp = ((clip_unnamed & CLIP_UNNAMED_PLUS) && clip_plus.available) + ? '+' : '*'; + else + *rp = ((clip_unnamed_saved & CLIP_UNNAMED_PLUS) + && clip_plus.available) ? '+' : '*'; + } + if ((!clip_star.available && *rp == '*') || + (!clip_plus.available && *rp == '+')) + { + msg_warn_missing_clipboard(); + *rp = 0; + } +#endif +} + +/* + * Extract the items in the 'clipboard' option and set global values. + * Return an error message or NULL for success. + */ + char * +did_set_clipboard(optset_T *args UNUSED) +{ + int new_unnamed = 0; +#ifdef FEAT_CLIPBOARD + int new_autoselect_star = FALSE; + int new_autoselect_plus = FALSE; + int new_autoselectml = FALSE; + int new_html = FALSE; +#endif + regprog_T *new_exclude_prog = NULL; + char *errmsg = NULL; + char_u *p; + + for (p = p_cb; *p != NUL; ) + { + // Note: Keep this in sync with p_cb_values. + if (STRNCMP(p, "unnamed", 7) == 0 && (p[7] == ',' || p[7] == NUL)) + { + new_unnamed |= CLIP_UNNAMED; + p += 7; + } + else if (STRNCMP(p, "unnamedplus", 11) == 0 + && (p[11] == ',' || p[11] == NUL)) + { + new_unnamed |= CLIP_UNNAMED_PLUS; + p += 11; + } +#ifdef FEAT_CLIPBOARD + else if (STRNCMP(p, "autoselect", 10) == 0 + && (p[10] == ',' || p[10] == NUL)) + { + new_autoselect_star = TRUE; + p += 10; + } + else if (STRNCMP(p, "autoselectplus", 14) == 0 + && (p[14] == ',' || p[14] == NUL)) + { + new_autoselect_plus = TRUE; + p += 14; + } + else if (STRNCMP(p, "autoselectml", 12) == 0 + && (p[12] == ',' || p[12] == NUL)) + { + new_autoselectml = TRUE; + p += 12; + } + else if (STRNCMP(p, "html", 4) == 0 && (p[4] == ',' || p[4] == NUL)) + { + new_html = TRUE; + p += 4; + } + else if (STRNCMP(p, "exclude:", 8) == 0 && new_exclude_prog == NULL) + { + p += 8; + new_exclude_prog = vim_regcomp(p, RE_MAGIC); + if (new_exclude_prog == NULL) + errmsg = e_invalid_argument; + break; + } +#endif + else + { + errmsg = e_invalid_argument; + break; + } + if (*p == ',') + ++p; + } + if (errmsg == NULL) + { +#ifdef FEAT_CLIPBOARD + if (global_busy) + // clip_unnamed will be reset to clip_unnamed_saved + // at end_global_changes + clip_unnamed_saved = new_unnamed; + else +#endif + clip_unnamed = new_unnamed; +#ifdef FEAT_CLIPBOARD + clip_autoselect_star = new_autoselect_star; + clip_autoselect_plus = new_autoselect_plus; + clip_autoselectml = new_autoselectml; + clip_html = new_html; + vim_regfree(clip_exclude_prog); + clip_exclude_prog = new_exclude_prog; +#endif +#ifdef FEAT_GUI_GTK + if (gui.in_use) + { + gui_gtk_set_selection_targets((GdkAtom)GDK_SELECTION_PRIMARY); + gui_gtk_set_selection_targets((GdkAtom)clip_plus.gtk_sel_atom); + gui_gtk_set_dnd_targets(); + } +#endif + } + else + vim_regfree(new_exclude_prog); + + return errmsg; +} + +#endif // HAVE_CLIPMETHOD + +#ifdef FEAT_CLIPBOARD_PROVIDER + +/* + * Check if a clipboard provider with given name is available. Returns 1 if available, + * 0 if not available, and -1 on error + */ + static int +clip_provider_is_available(char_u *provider) +{ + dict_T *providers = get_vim_var_dict(VV_CLIPPROVIDERS); + typval_T provider_tv = {0}; + callback_T callback = {0}; + typval_T rettv = {0}; + typval_T func_tv = {0}; + int res = 0; + + if (dict_get_tv(providers, (char *)provider, &provider_tv) == FAIL + || provider_tv.v_type != VAR_DICT) + // clipboard provider not defined + return -1; + + if (dict_get_tv(provider_tv.vval.v_dict, "available", &func_tv) == FAIL) + { + clear_tv(&provider_tv); + // If "available" function not specified assume always TRUE + return 1; + } + + if ((callback = get_callback(&func_tv)).cb_name == NULL) + goto fail; + + if (call_callback(&callback, -1, &rettv, 0, NULL) == FAIL || + (rettv.v_type != VAR_BOOL && rettv.v_type != VAR_NUMBER)) + goto fail; + + if (rettv.vval.v_number) + res = 1; + + if (FALSE) +fail: + res = -1; + + free_callback(&callback); + clear_tv(&func_tv); + clear_tv(&rettv); + clear_tv(&provider_tv); + + return res; +} + +/* + * Get the specified callback "function" from the provider dictionary for + * register "reg". + */ + static int +clip_provider_get_callback( + char_u *reg, + char_u *provider, + char_u *function, + callback_T *callback) +{ + dict_T *providers = get_vim_var_dict(VV_CLIPPROVIDERS); + typval_T provider_tv; + typval_T action_tv; + typval_T func_tv; + callback_T cb; + + if (dict_get_tv(providers, (char *)provider, &provider_tv) == FAIL) + return FAIL; + else if (provider_tv.v_type != VAR_DICT) + { + clear_tv(&provider_tv); + return FAIL; + } + else if (dict_get_tv( + provider_tv.vval.v_dict, + (char *)function, + &action_tv) == FAIL) + { + clear_tv(&provider_tv); + return FAIL; + } + else if (action_tv.v_type != VAR_DICT) + { + clear_tv(&provider_tv); + clear_tv(&action_tv); + return FAIL; + } + else if (dict_get_tv(action_tv.vval.v_dict, (char *)reg, &func_tv) == FAIL) + { + clear_tv(&provider_tv); + clear_tv(&action_tv); + return FAIL; + } + else if ((cb = get_callback(&func_tv)).cb_name == NULL) + { + clear_tv(&provider_tv); + clear_tv(&action_tv); + clear_tv(&func_tv); + return FAIL; + } + clear_tv(&provider_tv); + clear_tv(&action_tv); + + // func_tv owns the function name, so we must make a copy for the callback + set_callback(callback, &cb); + free_callback(&cb); + clear_tv(&func_tv); + return OK; +} + + static void +clip_provider_copy(char_u *reg, char_u *provider) +{ + callback_T callback; + typval_T rettv; + typval_T argvars[4]; + yankreg_T *y_ptr; + char_u type[2 + NUMBUFLEN] = {0}; + list_T *list = NULL; + + if (clip_provider_get_callback( + reg, + provider, + (char_u *)"copy", + &callback) == FAIL) + return; + + // Convert register type into a string + if (*reg == '+') + y_ptr = get_y_register(REAL_PLUS_REGISTER); + else + y_ptr = get_y_register(STAR_REGISTER); + + switch (y_ptr->y_type) + { + case MCHAR: + type[0] = 'v'; + break; + case MLINE: + type[0] = 'V'; + break; + case MBLOCK: + sprintf((char *)type, "%c%d", Ctrl_V, y_ptr->y_width + 1); + break; + default: + type[0] = 0; + break; + } + + argvars[0].v_type = VAR_STRING; + argvars[0].vval.v_string = reg; + + argvars[1].v_type = VAR_STRING; + argvars[1].vval.v_string = type; + + // Get register contents by creating a list of lines + list = list_alloc(); + + if (list == NULL) + { + free_callback(&callback); + return; + } + + for (int i = 0; i < y_ptr->y_size; i++) + if (list_append_string(list, y_ptr->y_array[i].string, -1) == FAIL) + { + free_callback(&callback); + list_unref(list); + return; + } + + list->lv_refcount++; + + argvars[2].v_type = VAR_LIST; + argvars[2].v_lock = VAR_FIXED; + argvars[2].vval.v_list = list; + + argvars[3].v_type = VAR_UNKNOWN; + + textlock++; + call_callback(&callback, -1, &rettv, 3, argvars); + clear_tv(&rettv); + textlock--; + + free_callback(&callback); + list_unref(list); +} + + static void +clip_provider_paste(char_u *reg, char_u *provider) +{ + callback_T callback; + typval_T argvars[2]; + typval_T rettv; + int ret; + char_u *reg_type; + list_T *lines; + + if (clip_provider_get_callback( + reg, + provider, + (char_u *)"paste", + &callback) == FAIL) + return; + + argvars[0].v_type = VAR_STRING; + argvars[0].vval.v_string = reg; + + argvars[1].v_type = VAR_UNKNOWN; + + textlock++; + ret = call_callback(&callback, -1, &rettv, 1, argvars); + textlock--; + + if (ret == FAIL) + goto exit; + else if (rettv.v_type == VAR_TUPLE + && TUPLE_LEN(rettv.vval.v_tuple) == 2 + && TUPLE_ITEM(rettv.vval.v_tuple, 0)->v_type == VAR_STRING + && TUPLE_ITEM(rettv.vval.v_tuple, 1)->v_type == VAR_LIST) + { + reg_type = TUPLE_ITEM(rettv.vval.v_tuple, 0)->vval.v_string; + lines = TUPLE_ITEM(rettv.vval.v_tuple, 1)->vval.v_list; + } + else if (rettv.v_type == VAR_LIST + && rettv.vval.v_list->lv_len == 2 + && rettv.vval.v_list->lv_first->li_tv.v_type == VAR_STRING + && rettv.vval.v_list->lv_first->li_next->li_tv.v_type == VAR_LIST) + { + reg_type = rettv.vval.v_list->lv_first->li_tv.vval.v_string; + lines = rettv.vval.v_list->lv_first->li_next->li_tv.vval.v_list; + } + else + goto exit; + + { + char_u yank_type = MAUTO; + long block_len = -1; + yankreg_T *y_ptr, *cur_y_ptr; + char_u **lstval; + char_u **allocval; + char_u buf[NUMBUFLEN]; + char_u **curval; + char_u **curallocval; + char_u *strval; + listitem_T *li; + int len; + + // If the list is NULL handle like an empty list. + len = lines == NULL ? 0 : lines->lv_len; + + // First half: use for pointers to result lines; second half: use for + // pointers to allocated copies. + lstval = ALLOC_MULT(char_u *, (len + 1) * 2); + if (lstval == NULL) + goto exit; + curval = lstval; + allocval = lstval + len + 2; + curallocval = allocval; + + if (lines != NULL) + { + CHECK_LIST_MATERIALIZE(lines); + FOR_ALL_LIST_ITEMS(lines, li) + { + strval = tv_get_string_buf_chk(&li->li_tv, buf); + if (strval == NULL) + goto free_lstval; + if (strval == buf) + { + // Need to make a copy, next tv_get_string_buf_chk() will + // overwrite the string. + strval = vim_strsave(buf); + if (strval == NULL) + goto free_lstval; + *curallocval++ = strval; + } + *curval++ = strval; + } + } + *curval++ = NULL; + + if (*reg_type != NUL && (STRLEN(reg_type) <= 0 + || get_yank_type(®_type, &yank_type, &block_len) == FAIL)) + { + emsg(e_invalid_argument); + goto free_lstval; + } + + if (*reg == '+') + y_ptr = get_y_register(REAL_PLUS_REGISTER); + else + y_ptr = get_y_register(STAR_REGISTER); + + // Free previous register contents + cur_y_ptr = get_y_current(); + set_y_current(y_ptr); + + free_yank_all(); + get_y_current()->y_size = 0; + + set_y_current(cur_y_ptr); + + str_to_reg(y_ptr, + yank_type, + (char_u *)lstval, + -1, + block_len, + TRUE); + +free_lstval: + while (curallocval > allocval) + vim_free(*--curallocval); + vim_free(lstval); + } + +exit: + free_callback(&callback); + clear_tv(&rettv); +} + +// Used to stop calling the provider callback every time there is an update. +// This prevents unnecessary calls when accessing the provider often in an +// interval. +// +// If -1 then allow provider callback to be called then set to one. Default +// value (is allowed) is -2. +static int star_pause_count = -2, plus_pause_count = -2; + + void +call_clip_provider_request(int reg) +{ + if (clipmethod != CLIPMETHOD_PROVIDER) + return; + + if (reg == '+' && plus_pause_count < 0) + { + if (plus_pause_count == -1) + plus_pause_count = 1; + clip_provider_paste((char_u *)"+", clip_provider); + } + else if (reg == '*' && star_pause_count < 0) + { + if (star_pause_count == -1) + star_pause_count = 1; + clip_provider_paste((char_u *)"*", clip_provider); + } + else + return; +} + + void +call_clip_provider_set(int reg) +{ + if (clipmethod != CLIPMETHOD_PROVIDER) + return; + + if (reg == '+' && plus_pause_count < 0) + { + if (plus_pause_count == -1) + plus_pause_count = 1; + clip_provider_copy((char_u *)"+", clip_provider); + } + else if (reg == '*' && star_pause_count < 0) + { + if (star_pause_count == -1) + star_pause_count = 1; + clip_provider_copy((char_u *)"*", clip_provider); + } +} + +/* + * Makes it so that the next provider call is only done once any calls after are + * ignored, until dec_clip_provider is called the same number of times after + * again. Note that this is per clipboard register ("+", "*") + */ + void +inc_clip_provider(void) +{ + plus_pause_count = (plus_pause_count == -2 + || plus_pause_count == -1) ? -1 : plus_pause_count + 1; + star_pause_count = (star_pause_count == -2 + || star_pause_count == -1) ? -1 : star_pause_count + 1; +} + + void +dec_clip_provider(void) +{ + if (plus_pause_count != -2) + plus_pause_count = plus_pause_count == -1 ? -1 : plus_pause_count - 1; + if (star_pause_count != -2) + star_pause_count = star_pause_count == -1 ? -1 : star_pause_count - 1; + + if (plus_pause_count == 0 || plus_pause_count == -1) + plus_pause_count = -2; + if (star_pause_count == 0 || star_pause_count == -1) + star_pause_count = -2; +} + +#endif // FEAT_CLIPBOARD_PROVIDER diff --git a/src/cmdexpand.c b/src/cmdexpand.c index 932a21ced4..ee841907c2 100644 --- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -421,7 +421,7 @@ cmdline_pum_create( if (showtail) prefix_len += vim_strsize(showmatches_gettail(matches[0])) - vim_strsize(matches[0]); - compl_startcol = MAX(0, compl_startcol - prefix_len); + compl_startcol = cmdline_col_off + MAX(0, compl_startcol - prefix_len); return EXPAND_OK; } @@ -611,9 +611,9 @@ win_redr_status_matches( return; if (has_mbyte) - buf = alloc(Columns * MB_MAXBYTES + 1); + buf = alloc(topframe->fr_width * MB_MAXBYTES + 1); else - buf = alloc(Columns + 1); + buf = alloc(topframe->fr_width + 1); if (buf == NULL) return; @@ -640,7 +640,7 @@ win_redr_status_matches( if (first_match > 0) clen += 2; // jumping right, put match at the left - if ((long)clen > Columns) + if (clen > topframe->fr_width) { first_match = match; // if showing the last match, we can add some on the left @@ -648,7 +648,7 @@ win_redr_status_matches( for (i = match; i < num_matches; ++i) { clen += status_match_len(xp, SHOW_MATCH(i)) + 2; - if ((long)clen >= Columns) + if (clen >= topframe->fr_width) break; } if (i == num_matches) @@ -659,7 +659,7 @@ win_redr_status_matches( while (first_match > 0) { clen += status_match_len(xp, SHOW_MATCH(first_match - 1)) + 2; - if ((long)clen >= Columns) + if (clen >= topframe->fr_width) break; --first_match; } @@ -679,7 +679,7 @@ win_redr_status_matches( clen = len; i = first_match; - while ((long)(clen + status_match_len(xp, SHOW_MATCH(i)) + 2) < Columns) + while (clen + status_match_len(xp, SHOW_MATCH(i)) + 2 < topframe->fr_width) { if (i == match) { @@ -773,14 +773,17 @@ win_redr_status_matches( } } - screen_puts(buf, row, 0, attr); + screen_puts(buf, row, firstwin->w_wincol, attr); if (selstart != NULL && highlight) { *selend = NUL; - screen_puts(selstart, row, selstart_col, HL_ATTR(HLF_WM)); + screen_puts(selstart, row, firstwin->w_wincol + selstart_col, + HL_ATTR(HLF_WM)); } - screen_fill(row, row + 1, clen, (int)Columns, fillchar, fillchar, attr); + screen_fill(row, row + 1, firstwin->w_wincol + clen, + firstwin->w_wincol + topframe->fr_width, + fillchar, fillchar, attr); } win_redraw_last_status(topframe); @@ -1371,7 +1374,7 @@ showmatches(expand_T *xp, int display_wildmenu, int display_list, int noselect) { // compute the number of columns and lines for the listing maxlen += 2; // two spaces between file names - columns = ((int)Columns + 2) / maxlen; + columns = (cmdline_width + 2) / maxlen; if (columns < 1) columns = 1; lines = (numMatches + columns - 1) / columns; @@ -4515,9 +4518,6 @@ wildmenu_cleanup(cmdline_info_T *cclp UNUSED) p_ls = save_p_ls; p_wmh = save_p_wmh; last_status(FALSE); -#if defined(FEAT_TABPANEL) - redraw_tabpanel = TRUE; -#endif update_screen(UPD_VALID); // redraw the screen NOW redrawcmd(); save_p_ls = -1; @@ -4785,10 +4785,13 @@ copy_substring_from_pos(pos_T *start, pos_T *end, char_u **match, { for (lnum = start->lnum + 1; lnum < end->lnum; lnum++) { + int linelen; + line = ml_get(lnum); - if (ga_grow(&ga, ml_get_len(lnum) + 2) != OK) + linelen = (int)ml_get_len(lnum); + if (ga_grow(&ga, linelen + 2) != OK) return FAIL; - ga_concat(&ga, line); + ga_concat_len(&ga, line, linelen); if (exacttext) ga_concat_len(&ga, (char_u *)"\\n", 2); else diff --git a/src/debugger.c b/src/debugger.c index 97d54c4394..f553a8e6a6 100644 --- a/src/debugger.c +++ b/src/debugger.c @@ -1111,8 +1111,10 @@ debuggy_find( { if (bp->dbg_val == NULL) { + vim_free(debug_oldval); debug_oldval = typval_tostring(NULL, TRUE); bp->dbg_val = tv; + vim_free(debug_newval); debug_newval = typval_tostring(bp->dbg_val, TRUE); line = TRUE; } @@ -1129,10 +1131,12 @@ debuggy_find( typval_T *v; line = TRUE; + vim_free(debug_oldval); debug_oldval = typval_tostring(bp->dbg_val, TRUE); // Need to evaluate again, typval_compare() overwrites // "tv". v = eval_expr_no_emsg(bp); + vim_free(debug_newval); debug_newval = typval_tostring(v, TRUE); free_tv(bp->dbg_val); bp->dbg_val = v; @@ -1142,7 +1146,9 @@ debuggy_find( } else if (bp->dbg_val != NULL) { + vim_free(debug_oldval); debug_oldval = typval_tostring(bp->dbg_val, TRUE); + vim_free(debug_newval); debug_newval = typval_tostring(NULL, TRUE); free_tv(bp->dbg_val); bp->dbg_val = NULL; diff --git a/src/dict.c b/src/dict.c index 4dadebc6be..f539250af9 100644 --- a/src/dict.c +++ b/src/dict.c @@ -817,7 +817,7 @@ dict2string(typval_T *tv, int copyID, int restore_copyID) if (first) first = FALSE; else - ga_concat(&ga, (char_u *)", "); + ga_concat_len(&ga, (char_u *)", ", 2); tofree = string_quote(hi->hi_key, FALSE); if (tofree != NULL) @@ -825,7 +825,7 @@ dict2string(typval_T *tv, int copyID, int restore_copyID) ga_concat(&ga, tofree); vim_free(tofree); } - ga_concat(&ga, (char_u *)": "); + ga_concat_len(&ga, (char_u *)": ", 2); s = echo_string_core(&HI2DI(hi)->di_tv, &tofree, numbuf, copyID, FALSE, restore_copyID, TRUE); if (s != NULL) diff --git a/src/diff.c b/src/diff.c index c15936b126..5f5376133e 100644 --- a/src/diff.c +++ b/src/diff.c @@ -52,6 +52,10 @@ static long diff_algorithm = XDF_INDENT_HEURISTIC; #define LBUFLEN 50 // length of line in diff file +// Max file size xdiff is eqipped to deal with. The value (1GB - 1MB) comes +// from Git's implementation. +#define MAX_XDIFF_SIZE (1024L * 1024 * 1023) + static int diff_a_works = MAYBE; // TRUE when "diff -a" works, FALSE when it // doesn't work, MAYBE when not checked yet #if defined(MSWIN) @@ -1318,6 +1322,12 @@ diff_file_internal(diffio_T *diffio) emit_cfg.hunk_func = xdiff_out_indices; else emit_cb.out_line = xdiff_out_unified; + if (diffio->dio_orig.din_mmfile.size > MAX_XDIFF_SIZE || + diffio->dio_new.din_mmfile.size > MAX_XDIFF_SIZE) + { + emsg(_(e_problem_creating_internal_diff)); + return FAIL; + } if (xdl_diff(&diffio->dio_orig.din_mmfile, &diffio->dio_new.din_mmfile, ¶m, &emit_cfg, &emit_cb) < 0) diff --git a/src/digraph.c b/src/digraph.c index 262353c01d..481cc4a3cf 100644 --- a/src/digraph.c +++ b/src/digraph.c @@ -1972,7 +1972,7 @@ printdigraph(digr_T *dp, result_T *previous) *previous = dp->result; } #endif - if (msg_col > Columns - list_width) + if (msg_col > cmdline_width - list_width) msg_putchar('\n'); if (msg_col) while (msg_col % list_width != 0) diff --git a/src/drawline.c b/src/drawline.c index 9e6e28db83..7addff9389 100644 --- a/src/drawline.c +++ b/src/drawline.c @@ -1755,7 +1755,7 @@ win_line( } #endif -#if defined(FEAT_LINEBREAK) || defined(FEAT_PROP_POPUP) +#if defined(FEAT_LINEBREAK) && defined(FEAT_PROP_POPUP) colnr_T vcol_first_char = 0; if (wp->w_p_lbr && number_only == 0) { @@ -2775,7 +2775,9 @@ win_line( } wlv.extra_for_textprop = FALSE; +# ifdef FEAT_LINEBREAK in_linebreak = FALSE; +# endif } #endif } @@ -3107,11 +3109,13 @@ win_line( char_u *p = ptr - (mb_off + 1); chartabsize_T cts; - init_chartabsize_arg(&cts, wp, lnum, wlv.vcol + + colnr_T init_colnr = wlv.vcol; # ifdef FEAT_PROP_POPUP - - vcol_first_char, + init_colnr -= vcol_first_char; # endif - line, p); + init_chartabsize_arg(&cts, wp, lnum, init_colnr, line, p); + # ifdef FEAT_PROP_POPUP // do not want virtual text counted here cts.cts_has_prop_with_text = FALSE; diff --git a/src/drawscreen.c b/src/drawscreen.c index 4b6e4b6fc4..4fb86a1a93 100644 --- a/src/drawscreen.c +++ b/src/drawscreen.c @@ -73,6 +73,11 @@ static void redraw_custom_statusline(win_T *wp); static int did_update_one_window; #endif +#ifdef FEAT_EVAL +static void redraw_listener_cleanup(void); +static void invoke_redraw_listener_start_or_end(bool start); +#endif + /* * Based on the current value of curwin->w_topline, transfer a screenfull * of stuff from Filemem to ScreenLines[], and update curwin->w_botline. @@ -244,6 +249,10 @@ update_screen(int type_arg) curwin->w_redr_type = UPD_NOT_VALID; #endif +#ifdef FEAT_EVAL + invoke_redraw_listener_start_or_end(true); +#endif + // Only start redrawing if there is really something to do. if (type == UPD_INVERTED) update_curswant(); @@ -405,6 +414,12 @@ update_screen(int type_arg) gui_update_scrollbars(FALSE); } #endif + +#ifdef FEAT_EVAL + invoke_redraw_listener_start_or_end(false); + redraw_listener_cleanup(); +#endif + return OK; } @@ -502,7 +517,7 @@ win_redr_status(win_T *wp, int ignore_pum UNUSED) if (wp->w_buffer->b_p_ro) plen += vim_snprintf((char *)p + plen, MAXPATHL - plen, "%s", _("[RO]")); - this_ru_col = ru_col - (Columns - wp->w_width); + this_ru_col = ru_col - (cmdline_width - wp->w_width); n = (wp->w_width + 1) / 2; if (this_ru_col < n) this_ru_col = n; @@ -721,8 +736,8 @@ win_redr_ruler(win_T *wp, int always, int ignore_pum) row = Rows - 1; fillchar = ' '; attr = 0; - width = Columns; - off = 0; + off = cmdline_col_off; + width = cmdline_width; } // In list mode virtcol needs to be recomputed @@ -755,7 +770,7 @@ win_redr_ruler(win_T *wp, int always, int ignore_pum) if (wp->w_status_height == 0) // can't use last char of screen ++n1; - this_ru_col = ru_col - (Columns - width); + this_ru_col = ru_col - (cmdline_width - width); // Never use more than half the window/screen width, leave the other // half for the filename. n2 = (width + 1) / 2; @@ -1426,7 +1441,7 @@ fold_line( * - continue redrawing when syntax status is invalid. * 4. if scrolled up, update lines at the bottom. * This results in three areas that may need updating: - * top: from first row to top_end (when scrolled down) + * top: from first row to top_end (when scrolled down) * mid: from mid_start to mid_end (update inversion or changed text) * bot: from bot_start to last row (when scrolled up) */ @@ -1445,6 +1460,8 @@ win_update(win_T *wp) // updating. 999 when no bot area updating int scrolled_down = FALSE; // TRUE when scrolled down when // w_topline got smaller a bit + int scrolled_for_mod = FALSE; // TRUE after scrolling for changed + // lines #ifdef FEAT_SEARCH_EXTRA int top_to_mod = FALSE; // redraw above mod_top #endif @@ -2280,13 +2297,15 @@ win_update(win_T *wp) // When at start of changed lines: May scroll following lines // up or down to minimize redrawing. // Don't do this when the change continues until the end. - // Don't scroll when dollar_vcol >= 0, keep the "$". - // Don't scroll when redrawing the top, scrolled already above. - if (lnum == mod_top - && mod_bot != MAXLNUM - && !(dollar_vcol >= 0 && mod_bot == mod_top + 1) - && row >= top_end) + // Don't scroll for changed lines in the top area if that's already + // done above, but do scroll for changed lines below the top area. + if (!scrolled_for_mod && mod_bot != MAXLNUM + && lnum >= mod_top && lnum < MAX(mod_bot, mod_top + 1) + && (!scrolled_down || row >= top_end)) { + scrolled_for_mod = TRUE; + + int old_cline_height = 0; int old_rows = 0; int new_rows = 0; int xtra_rows; @@ -2302,6 +2321,8 @@ win_update(win_T *wp) if (wp->w_lines[i].wl_valid && wp->w_lines[i].wl_lnum == mod_bot) break; + if (wp->w_lines[i].wl_lnum == wp->w_cursor.lnum) + old_cline_height = wp->w_lines[i].wl_size; old_rows += wp->w_lines[i].wl_size; #ifdef FEAT_FOLDING if (wp->w_lines[i].wl_valid @@ -2332,11 +2353,16 @@ win_update(win_T *wp) j = idx; for (l = lnum; l < mod_bot; ++l) { + if (dollar_vcol >= 0 && wp == curwin && + old_cline_height > 0 && l == wp->w_cursor.lnum) + // When dollar_vcol >= 0, cursor line isn't fully + // redrawn, and its height remains unchanged. + new_rows += old_cline_height; #ifdef FEAT_FOLDING - if (hasFoldingWin(wp, l, NULL, &l, TRUE, NULL)) + else if (hasFoldingWin(wp, l, NULL, &l, TRUE, NULL)) ++new_rows; - else #endif + else new_rows += plines_correct_topline(wp, l, TRUE); ++j; if (new_rows > wp->w_height - row - 2) @@ -2504,18 +2530,20 @@ win_update(win_T *wp) wp->w_lines[idx].wl_lnum = lnum; wp->w_lines[idx].wl_valid = TRUE; + int is_curline = wp == curwin && lnum == wp->w_cursor.lnum; + // Past end of the window or end of the screen. Note that after // resizing wp->w_height may be end up too big. That's a problem // elsewhere, but prevent a crash here. if (row > wp->w_height || row + wp->w_winrow >= Rows) { // we may need the size of that too long line later on - if (dollar_vcol == -1) + if (dollar_vcol == -1 || !is_curline) wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE); ++idx; break; } - if (dollar_vcol == -1) + if (dollar_vcol == -1 || !is_curline) wp->w_lines[idx].wl_size = row - srow; ++idx; #ifdef FEAT_FOLDING @@ -2601,7 +2629,7 @@ win_update(win_T *wp) FALSE); else screen_char(LineOffset[k] + topframe->fr_width - 1, k, - Columns - 1); + cmdline_width - 1); } #endif @@ -2706,7 +2734,7 @@ win_update(win_T *wp) } #endif } - else if (dollar_vcol == -1) + else if (dollar_vcol == -1 || wp != curwin) wp->w_botline = lnum; // Make sure the rest of the screen is blank. @@ -2731,7 +2759,7 @@ win_update(win_T *wp) wp->w_old_botfill = wp->w_botfill; #endif - if (dollar_vcol == -1) + if (dollar_vcol == -1 || wp != curwin) { // There is a trick with w_botline. If we invalidate it on each // change that might modify it, this will cause a lot of expensive @@ -3176,6 +3204,13 @@ redraw_win_later( win_T *wp, int type) { +#ifdef FEAT_EVAL + // If inside a redraw_listener_add() callback, then only set the redraw type + // for the window and not request another one right after. + if (inside_redraw_on_start_cb && wp->w_redr_type < type) + wp->w_redr_type = type; + else +#endif if (!exiting && !redraw_not_allowed && wp->w_redr_type < type) { wp->w_redr_type = type; @@ -3232,7 +3267,11 @@ redraw_all_windows_later(int type) void set_must_redraw(int type) { - if (!redraw_not_allowed && must_redraw < type) + if (!redraw_not_allowed && +#ifdef FEAT_EVAL + !inside_redraw_on_start_cb && +#endif + must_redraw < type) must_redraw = type; } @@ -3401,3 +3440,187 @@ redraw_win_range_later( redraw_win_later(wp, UPD_VALID); } } + +#ifdef FEAT_EVAL +static bool redraw_cb_in_progress = false; + + void +f_redraw_listener_add(typval_T *argvars, typval_T *rettv) +{ + redraw_listener_T *rln; + dict_T *dict; + typval_T tv; + bool got_one = false; + static int id; + + if (redraw_cb_in_progress) + { + emsg(_(e_cannot_add_redraw_listener_in_listener_callback)); + return; + } + + if (check_for_dict_arg(argvars, 0) == FAIL) + return; + + rln = ALLOC_CLEAR_ONE(redraw_listener_T); + + if (rln == NULL) + return; + dict = argvars[0].vval.v_dict; + + /* + * on_start: called on each screen redraw + * + * on_end: called at the end of a redraw cycle + */ + if (dict_get_tv(dict, "on_start", &tv) == OK) + { + callback_T cb = get_callback(&tv); + + if (cb.cb_name == NULL) + { + clear_tv(&tv); + vim_free(rln); + return; + } + copy_callback(&rln->rl_callbacks.on_start, &cb); + free_callback(&cb); + clear_tv(&tv); + got_one = true; + } + + if (dict_get_tv(dict, "on_end", &tv) == OK) + { + callback_T cb = get_callback(&tv); + + if (cb.cb_name == NULL) + { + clear_tv(&tv); + free_callback(&rln->rl_callbacks.on_start); + vim_free(rln); + return; + } + copy_callback(&rln->rl_callbacks.on_end, &cb); + free_callback(&cb); + clear_tv(&tv); + got_one = true; + } + + if (!got_one) + { + emsg(_(e_no_redraw_listener_callbacks_defined)); + vim_free(rln); + return; + } + + rln->rl_next = redraw_listeners; + redraw_listeners = rln; + rln->rl_id = ++id; // Never zero + + rettv->v_type = VAR_NUMBER; + rettv->vval.v_number = id; + + return; +} + + static void +redraw_listener_free(redraw_listener_T *rln) +{ + free_callback(&rln->rl_callbacks.on_start); + free_callback(&rln->rl_callbacks.on_end); + + vim_free(rln); +} + + + static void +redraw_listener_cleanup(void) +{ + for (redraw_listener_T *rln = redraw_listeners; rln != NULL;) + { + redraw_listener_T *next = rln->rl_next; + if (rln->rl_id == 0) + { + if (redraw_listeners == rln) + redraw_listeners = rln->rl_next; + redraw_listener_free(rln); + } + rln = next; + } +} + +/* + * Return the redraw listener struct with the specified id. Returns NULL if not + * found. + */ + static redraw_listener_T * +get_redraw_listener(int id) +{ + for (redraw_listener_T *rln = redraw_listeners; rln != NULL; rln = rln->rl_next) + if (rln->rl_id == id) + return rln; + return NULL; +} + + void +f_redraw_listener_remove(typval_T *argvars, typval_T *rettv UNUSED) +{ + int id; + redraw_listener_T *rln; + + if (check_for_number_arg(argvars, 0) == FAIL) + return; + + id = argvars[0].vval.v_number; + rln = get_redraw_listener(id); + + rettv->v_type = VAR_NUMBER; + if (rln == NULL) + { + rettv->vval.v_number = 0; + return; + } + + // We set the id to zero instead of freeing it here, since we still need + // rl_next from it. + rln->rl_id = 0; + rettv->vval.v_number = 1; +} + +/* + * Invoke the on_start callbacks. + */ + static void +invoke_redraw_listener_start_or_end(bool start) +{ + typval_T argv[1]; + typval_T rettv; + + argv[0].v_type = VAR_UNKNOWN; + + if (start) + inside_redraw_on_start_cb = true; + + redraw_cb_in_progress = true; + for (redraw_listener_T *rln = redraw_listeners; rln != NULL; rln = rln->rl_next) + { + if (rln->rl_id == 0) + // Listener has been removed, skip + continue; + if (start && rln->rl_callbacks.on_start.cb_name != NULL) + { + call_callback(&rln->rl_callbacks.on_start, -1, &rettv, 0, argv); + clear_tv(&rettv); + } + else if (rln->rl_callbacks.on_end.cb_name != NULL) + { + call_callback(&rln->rl_callbacks.on_end, -1, &rettv, 0, argv); + clear_tv(&rettv); + } + } + redraw_cb_in_progress = false; + + if (start) + inside_redraw_on_start_cb = false; +} +#endif // FEAT_EVAL diff --git a/src/errors.h b/src/errors.h index f07591e3dc..86a4d59a30 100644 --- a/src/errors.h +++ b/src/errors.h @@ -1365,9 +1365,9 @@ EXTERN char e_illegal_character_after_chr[] #ifdef FEAT_FOLDING EXTERN char e_comma_required[] INIT(= N_("E536: Comma required")); +#endif EXTERN char e_commentstring_must_be_empty_or_contain_str[] INIT(= N_("E537: 'commentstring' must be empty or contain %s")); -#endif EXTERN char e_pattern_found_in_every_line_str[] INIT(= N_("E538: Pattern found in every line: %s")); EXTERN char e_illegal_character_str[] @@ -3186,7 +3186,7 @@ EXTERN char e_no_such_user_defined_command_in_current_buffer_str[] EXTERN char e_blob_required_for_argument_nr[] INIT(= N_("E1238: Blob required for argument %d")); EXTERN char e_invalid_value_for_blob_nr[] - INIT(= N_("E1239: Invalid value for blob: %d")); + INIT(= N_("E1239: Invalid value for blob: 0x%lX")); #endif EXTERN char e_resulting_text_too_long[] INIT(= N_("E1240: Resulting text too long")); @@ -3636,8 +3636,10 @@ EXTERN char e_enum_can_only_be_used_in_script[] INIT(= N_("E1435: Enum can only be used in a script")); EXTERN char e_interface_can_only_be_used_in_script[] INIT(= N_("E1436: Interface can only be used in a script")); +EXTERN char e_can_only_compare_object_with_object[] + INIT(= N_("E1437: Can only compare Object with Object")); #endif -// E1437 - E1499 unused (reserved for Vim9 class support) +// E1438 - E1499 unused (reserved for Vim9 class support) EXTERN char e_cannot_mix_positional_and_non_positional_str[] INIT(= N_("E1500: Cannot mix positional and non-positional arguments: %s")); EXTERN char e_fmt_arg_nr_unused_str[] @@ -3802,3 +3804,9 @@ EXTERN char e_osc_response_timed_out[] EXTERN char e_cannot_add_listener_in_listener_callback[] INIT(= N_("E1569: Cannot use listener_add in a listener callback")); #endif +#ifdef FEAT_EVAL +EXTERN char e_cannot_add_redraw_listener_in_listener_callback[] + INIT(= N_("E1570: Cannot use redraw_listener_add in a redraw listener callback")); +EXTERN char e_no_redraw_listener_callbacks_defined[] + INIT(= N_("E1571: Must specify at least one callback for redraw_listener_add")); +#endif diff --git a/src/eval.c b/src/eval.c index b3bf9d5931..254a0c6083 100644 --- a/src/eval.c +++ b/src/eval.c @@ -131,6 +131,7 @@ fill_evalarg_from_eap(evalarg_T *evalarg, exarg_T *eap, int skip) evalarg->eval_getline = eap->ea_getline; evalarg->eval_cookie = eap->cookie; } + evalarg->eval_class = eap->ea_class; } /* @@ -1156,7 +1157,7 @@ fill_lval_from_lval_root(lval_T *lp, lval_root_T *lr) lp->ll_tv = &lp->ll_class->class_members_tv[m_idx]; #ifdef LOG_LOCKVAR ch_log(NULL, "LKVAR: ... class member %s.%s", - lp->ll_class->class_name, lp->ll_name); + lp->ll_class->class_name.string, lp->ll_name); #endif return; } @@ -1205,7 +1206,7 @@ get_lval_check_access( { if (om->ocm_type->tt_type == VAR_OBJECT) semsg(_(e_enumvalue_str_cannot_be_modified), - cl->class_name, om->ocm_name); + cl->class_name.string, om->ocm_name.string); else msg = e_variable_is_not_writable_str; } @@ -1218,7 +1219,7 @@ get_lval_check_access( } if (msg != NULL) { - emsg_var_cl_define(msg, om->ocm_name, 0, cl); + emsg_var_cl_define(msg, om->ocm_name.string, 0, cl); return FAIL; } return OK; @@ -2363,7 +2364,7 @@ set_var_lval( if (lp->ll_blob != NULL) { - int error = FALSE, val; + int error = FALSE; if (op != NULL && *op != '=') { @@ -2384,9 +2385,14 @@ set_var_lval( } else { - val = (int)tv_get_number_chk(rettv, &error); + varnumber_T val = tv_get_number_chk(rettv, &error); if (!error) - blob_set_append(lp->ll_blob, lp->ll_n1, val); + { + if (val < 0 || val > 255) + semsg(_(e_invalid_value_for_blob_nr), val); + else + blob_set_append(lp->ll_blob, lp->ll_n1, val); + } } } else if (op != NULL && *op != '=') @@ -6225,7 +6231,7 @@ method_tv2string(typval_T *tv, char_u **tofree, int echo_style) size_t len = vim_snprintf((char *)buf, sizeof(buf), "%d_%s.%s", pt->pt_func->uf_script_ctx.sc_sid, - pt->pt_func->uf_class->class_name, + pt->pt_func->uf_class->class_name.string, pt->pt_func->uf_name); if (len >= sizeof(buf)) { @@ -6264,14 +6270,14 @@ partial_tv2string( fname = string_quote(pt == NULL ? NULL : partial_name(pt), FALSE); ga_init2(&ga, 1, 100); - ga_concat(&ga, (char_u *)"function("); + ga_concat_len(&ga, (char_u *)"function(", 9); if (fname != NULL) { // When using uf_name prepend "g:" for a global function. if (pt != NULL && pt->pt_name == NULL && fname[0] == '\'' && vim_isupper(fname[1])) { - ga_concat(&ga, (char_u *)"'g:"); + ga_concat_len(&ga, (char_u *)"'g:", 3); ga_concat(&ga, fname + 1); } else @@ -6280,21 +6286,21 @@ partial_tv2string( } if (pt != NULL && pt->pt_argc > 0) { - ga_concat(&ga, (char_u *)", ["); + ga_concat_len(&ga, (char_u *)", [", 3); for (i = 0; i < pt->pt_argc; ++i) { if (i > 0) - ga_concat(&ga, (char_u *)", "); + ga_concat_len(&ga, (char_u *)", ", 2); ga_concat(&ga, tv2string(&pt->pt_argv[i], &tf, numbuf, copyID)); vim_free(tf); } - ga_concat(&ga, (char_u *)"]"); + ga_concat_len(&ga, (char_u *)"]", 1); } if (pt != NULL && pt->pt_dict != NULL) { typval_T dtv; - ga_concat(&ga, (char_u *)", "); + ga_concat_len(&ga, (char_u *)", ", 2); dtv.v_type = VAR_DICT; dtv.vval.v_dict = pt->pt_dict; ga_concat(&ga, tv2string(&dtv, &tf, numbuf, copyID)); @@ -6488,31 +6494,29 @@ class_tv2string(typval_T *tv, char_u **tofree) char_u *r = NULL; size_t rsize; class_T *cl = tv->vval.v_class; - char_u *class_name = (char_u *)"[unknown]"; - size_t class_namelen = 9; - char *s = "class"; - size_t slen = 5; + string_T class_name = {(char_u *)"[unknown]", 9}; + string_T s = {(char_u *)"class", 5}; if (cl != NULL) { - class_name = cl->class_name; - class_namelen = STRLEN(cl->class_name); + class_name.string = cl->class_name.string; + class_name.length = cl->class_name.length; if (IS_INTERFACE(cl)) { - s = "interface"; - slen = 9; + s.string = (char_u *)"interface"; + s.length = 9; } else if (IS_ENUM(cl)) { - s = "enum"; - slen = 4; + s.string = (char_u *)"enum"; + s.length = 4; } } - rsize = slen + 1 + class_namelen + 1; + rsize = s.length + 1 + class_name.length + 1; r = *tofree = alloc(rsize); if (r != NULL) - vim_snprintf((char *)r, rsize, "%s %s", s, (char *)class_name); + vim_snprintf((char *)r, rsize, "%s %s", s.string, (char *)class_name.string); return r; } @@ -6545,11 +6549,11 @@ object_tv2string( else if (copyID != 0 && obj->obj_copyID == copyID && obj->obj_class->class_obj_member_count != 0) { - size_t n = 25 + STRLEN((char *)obj->obj_class->class_name); + size_t n = 25 + obj->obj_class->class_name.length; r = alloc(n); if (r != NULL) (void)vim_snprintf((char *)r, n, "object of %s {...}", - obj->obj_class->class_name); + obj->obj_class->class_name.string); *tofree = r; } else @@ -6795,13 +6799,13 @@ var2fpos( char_u *name; static pos_T pos; pos_T *pp; + int error = FALSE; // Argument can be [lnum, col, coladd]. if (varp->v_type == VAR_LIST) { list_T *l; int len; - int error = FALSE; listitem_T *li; l = varp->vval.v_list; @@ -6853,11 +6857,16 @@ var2fpos( if (name == NULL) return NULL; + error = TRUE; pos.lnum = 0; - if (name[0] == '.' && (!in_vim9script() || name[1] == NUL)) + if (name[0] == '.') { - // cursor - pos = curwin->w_cursor; + if (!in_vim9script() || name[1] == NUL) + { + error = FALSE; + // cursor + pos = curwin->w_cursor; + } } else if (name[0] == 'v' && name[1] == NUL) { @@ -6867,14 +6876,17 @@ var2fpos( else pos = curwin->w_cursor; } - else if (name[0] == '\'' && (!in_vim9script() - || (name[1] != NUL && name[2] == NUL))) + else if (name[0] == '\'') { - // mark - pp = getmark_buf_fnum(curbuf, name[1], FALSE, fnum); - if (pp == NULL || pp == (pos_T *)-1 || pp->lnum <= 0) - return NULL; - pos = *pp; + if (!in_vim9script() || (name[1] != NUL && name[2] == NUL)) + { + error = FALSE; + // mark + pp = getmark_buf_fnum(curbuf, name[1], FALSE, fnum); + if (pp == NULL || pp == (pos_T *)-1 || pp->lnum <= 0) + return NULL; + pos = *pp; + } } if (pos.lnum != 0) { @@ -6925,7 +6937,7 @@ var2fpos( } return &pos; } - if (in_vim9script()) + if (in_vim9script() && error) semsg(_(e_invalid_value_for_line_number_str), name); return NULL; } diff --git a/src/evalfunc.c b/src/evalfunc.c index b01ab08e2a..479335abb9 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -226,7 +226,7 @@ check_arg_type( type_T *actual, argcontext_T *context) { - return need_type(actual, expected, FALSE, + return need_type(actual, expected, 0, context->arg_idx - context->arg_count, context->arg_idx + 1, context->arg_cctx, FALSE, FALSE); } @@ -240,7 +240,7 @@ check_arg_type_mod( type_T *actual, argcontext_T *context) { - if (need_type(actual, expected, FALSE, + if (need_type(actual, expected, 0, context->arg_idx - context->arg_count, context->arg_idx + 1, context->arg_cctx, FALSE, FALSE) == FAIL) return FAIL; @@ -2128,8 +2128,6 @@ static const funcentry_T global_functions[] = ret_number_bool, f_complete_check}, {"complete_info", 0, 1, FEARG_1, arg1_list_string, ret_dict_any, f_complete_info}, - {"complete_match", 0, 2, 0, NULL, - ret_list_any, f_complete_match}, {"confirm", 1, 4, FEARG_1, arg4_string_string_number_string, ret_number, f_confirm}, {"copy", 1, 1, FEARG_1, NULL, @@ -2728,6 +2726,10 @@ static const funcentry_T global_functions[] = ret_list_dict_any, f_readdirex}, {"readfile", 1, 3, FEARG_1, arg3_string_string_number, ret_list_string, f_readfile}, + {"redraw_listener_add", 1, 1, FEARG_1, arg1_dict_any, + ret_number, f_redraw_listener_add}, + {"redraw_listener_remove", 1, 1, FEARG_1, arg1_number, + ret_void, f_redraw_listener_remove}, {"reduce", 2, 3, FEARG_1, arg23_reduce, ret_any, f_reduce}, {"reg_executing", 0, 0, 0, NULL, @@ -5151,7 +5153,9 @@ f_feedkeys(typval_T *argvars, typval_T *rettv UNUSED) ++ex_normal_busy; ++in_feedkeys; } + ++allow_osc_key; exec_normal(TRUE, lowlevel, TRUE); + --allow_osc_key; if (!dangerous) { --ex_normal_busy; @@ -6179,8 +6183,17 @@ getregionpos( { colnr_T sc1, ec1, sc2, ec2; + #ifdef FEAT_LINEBREAK + int lbr_saved = reset_lbr(); + #endif + getvvcol(curwin, p1, &sc1, NULL, &ec1); getvvcol(curwin, p2, &sc2, NULL, &ec2); + + #ifdef FEAT_LINEBREAK + restore_lbr(lbr_saved); + #endif + oap->motion_type = MBLOCK; oap->inclusive = TRUE; oap->op_type = OP_NOP; @@ -6839,7 +6852,7 @@ f_has(typval_T *argvars, typval_T *rettv) {"builtin_terms", 1}, {"all_builtin_terms", 1}, {"browsefilter", -#if defined(FEAT_BROWSE) && (defined(USE_FILE_CHOOSER) \ +#if defined(FEAT_BROWSE) && (defined(FEAT_GUI_GTK) \ || defined(FEAT_GUI_MSWIN) \ || defined(FEAT_GUI_MOTIF)) 1 @@ -6874,6 +6887,13 @@ f_has(typval_T *argvars, typval_T *rettv) 1 #else 0 +#endif + }, + {"clipboard_provider", +#ifdef FEAT_CLIPBOARD_PROVIDER + 1 +#else + 0 #endif }, {"cmdline_compl", 1}, @@ -7606,14 +7626,6 @@ f_has(typval_T *argvars, typval_T *rettv) 1 #else 0 -#endif - }, - {"unnamedplus", -#if defined(FEAT_CLIPBOARD) && (defined(FEAT_X11) \ - || defined(FEAT_WAYLAND_CLIPBOARD)) - 1 -#else - 0 #endif }, {"user-commands", 1}, // was accidentally included in 5.4 @@ -7961,7 +7973,27 @@ f_has(typval_T *argvars, typval_T *rettv) { x = TRUE; #ifdef FEAT_CLIPBOARD - n = clip_star.available; + n = clipmethod == CLIPMETHOD_PROVIDER ? TRUE : clip_star.available; +#endif + } + else if (STRICMP(name, "unnamedplus") == 0) + { + x = TRUE; +#ifdef FEAT_CLIPBOARD + // The + register is available when clipmethod is set to a provider, + // but becomes unavailable if on a platform that doesn't support it + // and clipmethod is "none". + // (Windows, MacOS). +# if defined(FEAT_X11) || defined(FEAT_WAYLAND_CLIPBOARD) + n = TRUE; +# elif defined(FEAT_EVAL) + if (clipmethod == CLIPMETHOD_PROVIDER) + n = TRUE; + else + n = FALSE; +# else + n = FALSE; +# endif #endif } } @@ -11536,7 +11568,7 @@ f_setpos(typval_T *argvars, typval_T *rettv) /* * Translate a register type string to the yank type and block length */ - static int + int get_yank_type(char_u **pp, char_u *yank_type, long *block_len) { char_u *stropt = *pp; diff --git a/src/evalvars.c b/src/evalvars.c index 964b3a1ee8..caf34dfb82 100644 --- a/src/evalvars.c +++ b/src/evalvars.c @@ -167,6 +167,8 @@ static struct vimvar {VV_NAME("clipmethod", VAR_STRING), NULL, VV_RO}, {VV_NAME("termda1", VAR_STRING), NULL, VV_RO}, {VV_NAME("termosc", VAR_STRING), NULL, VV_RO}, + {VV_NAME("vim_did_init", VAR_NUMBER), NULL, VV_RO}, + {VV_NAME("clipproviders", VAR_DICT), NULL, VV_RO}, // MacVim-specific value go here {VV_NAME("os_appearance", VAR_NUMBER), NULL, VV_RO}, }; @@ -1089,8 +1091,6 @@ ex_let(exarg_T *eap) argend = skip_var_list(arg, TRUE, &var_count, &semicolon, FALSE); if (argend == NULL) return; - if (argend > arg && argend[-1] == '.') // for var.='str' - --argend; expr = skipwhite(argend); concat = expr[0] == '.' && ((expr[1] == '=' && in_old_script(2)) @@ -2023,7 +2023,7 @@ ex_let_one( void ex_unlet(exarg_T *eap) { - ex_unletlock(eap, eap->arg, 0, 0, do_unlet_var, NULL); + ex_unletlock(eap, eap->arg, 0, eap->forceit ? GLV_QUIET : 0, do_unlet_var, NULL); } /* @@ -2260,7 +2260,7 @@ report_lockvar_member(char *msg, lval_T *lp) int did_alloc = FALSE; char_u *vname = (char_u *)""; char_u *class_name = lp->ll_class != NULL - ? lp->ll_class->class_name : (char_u *)""; + ? lp->ll_class->class_name.string : (char_u *)""; if (lp->ll_name != NULL) { if (lp->ll_name_end == NULL) @@ -2988,7 +2988,7 @@ reset_reg_var(void) // Adjust the register according to 'clipboard', so that when // "unnamed" is present it becomes '*' or '+' instead of '"'. -#ifdef FEAT_CLIPBOARD +#ifdef HAVE_CLIPMETHOD adjust_clip_reg(®name); #endif set_reg_var(regname); diff --git a/src/evalwindow.c b/src/evalwindow.c index 05c3d1d9bb..57620b61bb 100644 --- a/src/evalwindow.c +++ b/src/evalwindow.c @@ -416,6 +416,7 @@ get_win_info(win_T *wp, short tpnr, short winnr) dict_add_number(dict, "winnr", winnr); dict_add_number(dict, "winid", wp->w_id); dict_add_number(dict, "height", wp->w_height); + dict_add_number(dict, "status_height", wp->w_status_height); dict_add_number(dict, "winrow", wp->w_winrow + 1); dict_add_number(dict, "topline", wp->w_topline); dict_add_number(dict, "botline", wp->w_botline - 1); @@ -1199,10 +1200,14 @@ f_winrestcmd(typval_T *argvars UNUSED, typval_T *rettv) winnr = 1; FOR_ALL_WINDOWS(wp) { - sprintf((char *)buf, ":%dresize %d|", winnr, wp->w_height); - ga_concat(&ga, buf); - sprintf((char *)buf, "vert :%dresize %d|", winnr, wp->w_width); - ga_concat(&ga, buf); + size_t buflen; + + buflen = vim_snprintf_safelen((char *)buf, sizeof(buf), + ":%dresize %d|", winnr, wp->w_height); + ga_concat_len(&ga, buf, buflen); + buflen = vim_snprintf_safelen((char *)buf, sizeof(buf), + "vert :%dresize %d|", winnr, wp->w_width); + ga_concat_len(&ga, buf, buflen); ++winnr; } } diff --git a/src/ex_cmds.c b/src/ex_cmds.c index bb58e47f02..c9b4974c2b 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -1253,7 +1253,7 @@ do_bang( msg_putchar('!'); msg_outtrans(newcmd); msg_clr_eos(); - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); do_shell(newcmd, 0); } @@ -1404,7 +1404,7 @@ do_filter( if (cmd_buf == NULL) goto filterend; - windgoto((int)Rows - 1, 0); + windgoto((int)Rows - 1, cmdline_col_off); cursor_on(); /* @@ -1659,7 +1659,7 @@ do_shell( // This windgoto is required for when the '\n' resulted in a "delete line // 1" command to the terminal. if (!swapping_screen()) - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); cursor_on(); (void)call_shell(cmd, SHELL_COOKED | flags); did_check_timestamps = FALSE; @@ -2509,9 +2509,9 @@ do_wqall(exarg_T *eap) FOR_ALL_BUFFERS(buf) { #ifdef FEAT_TERMINAL - if (exiting && term_job_running(buf->b_term)) + if (exiting && !eap->forceit && term_job_running(buf->b_term)) { - no_write_message_nobang(buf); + no_write_message_buf(buf); ++error; } else @@ -4694,7 +4694,7 @@ ex_substitute(exarg_T *eap) msg_no_more = FALSE; msg_scroll = i; showruler(TRUE); - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); RedrawingDisabled = save_RedrawingDisabled; #ifdef USE_ON_FLY_SCROLL @@ -5489,12 +5489,18 @@ ex_global(exarg_T *eap) } else { +#ifdef FEAT_CLIPBOARD_PROVIDER + inc_clip_provider(); +#endif #ifdef FEAT_CLIPBOARD start_global_changes(); #endif global_exe(cmd); #ifdef FEAT_CLIPBOARD end_global_changes(); +#endif +#ifdef FEAT_CLIPBOARD_PROVIDER + dec_clip_provider(); #endif } diff --git a/src/ex_cmds.h b/src/ex_cmds.h index 61a9ce34b5..fa4cf9d96c 100644 --- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -234,7 +234,7 @@ EXCMD(CMD_breakdel, "breakdel", ex_breakdel, EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_breaklist, "breaklist", ex_breaklist, - EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, + EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK, ADDR_NONE), EXCMD(CMD_browse, "browse", ex_wrongmodifier, EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK, @@ -693,8 +693,8 @@ EXCMD(CMD_help, "help", ex_help, EX_BANG|EX_EXTRA|EX_NOTRLCOM, ADDR_NONE), EXCMD(CMD_helpclose, "helpclose", ex_helpclose, - EX_RANGE|EX_COUNT|EX_TRLBAR, - ADDR_OTHER), + EX_TRLBAR, + ADDR_NONE), EXCMD(CMD_helpfind, "helpfind", ex_helpfind, EX_EXTRA|EX_NOTRLCOM, ADDR_NONE), @@ -1653,8 +1653,8 @@ EXCMD(CMD_tlnoremenu, "tlnoremenu", ex_menu, EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK, ADDR_OTHER), EXCMD(CMD_tlunmenu, "tlunmenu", ex_menu, - EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK, - ADDR_OTHER), + EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK, + ADDR_NONE), EXCMD(CMD_tmenu, "tmenu", ex_menu, EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK, ADDR_OTHER), @@ -1979,6 +1979,8 @@ struct exarg void *cookie; // argument for getline() #ifdef FEAT_EVAL cstack_T *cstack; // condition stack for ":if" etc. + class_T *ea_class; // Name of class being defined. Used by :class + // and :enum commands. #endif }; diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index 6f3523f45c..7c3bcaf816 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -607,6 +607,9 @@ ex_listdo(exarg_T *eap) #ifdef FEAT_CLIPBOARD start_global_changes(); #endif +#ifdef FEAT_CLIPBOARD_PROVIDER + inc_clip_provider(); +#endif if (eap->cmdidx == CMD_windo || eap->cmdidx == CMD_tabdo @@ -831,6 +834,9 @@ ex_listdo(exarg_T *eap) #ifdef FEAT_CLIPBOARD end_global_changes(); #endif +#ifdef FEAT_CLIPBOARD_PROVIDER + dec_clip_provider(); +#endif } #ifdef FEAT_EVAL diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 3b3ce7c78a..2cfd9cdce4 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -376,7 +376,7 @@ static void ex_folddo(exarg_T *eap); #if !defined(FEAT_WAYLAND) # define ex_wlrestore ex_ni #endif -#if !defined(FEAT_CLIPBOARD) +#if !defined(HAVE_CLIPMETHOD) # define ex_clipreset ex_ni #endif #if !defined(FEAT_PROP_POPUP) @@ -2378,7 +2378,7 @@ do_one_cmd( && (!IS_USER_CMDIDX(ea.cmdidx) || *ea.arg != '=') && !((ea.argt & EX_COUNT) && VIM_ISDIGIT(*ea.arg))) { -#ifndef FEAT_CLIPBOARD +#if !defined(FEAT_CLIPBOARD) && !defined(FEAT_CLIPBOARD_PROVIDER) // check these explicitly for a more specific error message if (*ea.arg == '*' || *ea.arg == '+') { @@ -6690,7 +6690,7 @@ ex_stop(exarg_T *eap) if (!eap->forceit) autowrite_all(); apply_autocmds(EVENT_VIMSUSPEND, NULL, NULL, FALSE, NULL); - windgoto((int)Rows - 1, 0); + windgoto((int)Rows - 1, cmdline_col_off); out_char('\n'); out_flush(); stoptermcap(); @@ -8864,6 +8864,10 @@ ex_redir(exarg_T *eap) close_redir(); ++arg; if (ASCII_ISALPHA(*arg) +# ifdef HAVE_CLIPMETHOD + || (clipmethod == CLIPMETHOD_PROVIDER + && (*arg == '*' || *arg == '+')) +# endif # ifdef FEAT_CLIPBOARD || *arg == '*' || *arg == '+' @@ -10424,6 +10428,9 @@ ex_folddo(exarg_T *eap) # ifdef FEAT_CLIPBOARD start_global_changes(); # endif +#ifdef FEAT_CLIPBOARD_PROVIDER + inc_clip_provider(); +#endif // First set the marks for all lines closed/open. for (lnum = eap->line1; lnum <= eap->line2; ++lnum) @@ -10436,6 +10443,9 @@ ex_folddo(exarg_T *eap) # ifdef FEAT_CLIPBOARD end_global_changes(); # endif +#ifdef FEAT_CLIPBOARD_PROVIDER + dec_clip_provider(); +#endif } #endif diff --git a/src/ex_getln.c b/src/ex_getln.c index f940c435e6..588cf925b2 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -1167,7 +1167,7 @@ cmdline_erase_chars( { #ifdef FEAT_RIGHTLEFT if (cmdmsg_rl) - msg_col = Columns; + msg_col = cmdline_width; else #endif msg_col = 0; @@ -1375,8 +1375,8 @@ cmdline_left_right_mouse(int c, int *ignore_drag_release) int i; i = cmdline_charsize(ccline.cmdpos); - if (mouse_row <= cmdline_row + ccline.cmdspos / Columns - && mouse_col < ccline.cmdspos % Columns + i) + if (mouse_row <= cmdline_row + ccline.cmdspos / cmdline_width + && mouse_col < ccline.cmdspos % cmdline_width + i) break; if (has_mbyte) { @@ -2114,7 +2114,7 @@ getcmdline_int( goto cmdline_changed; if (!cmd_silent) { - windgoto(msg_row, 0); + windgoto(msg_row, cmdline_col_off); out_flush(); } break; @@ -2285,7 +2285,7 @@ getcmdline_int( if (ccline.cmdpos >= ccline.cmdlen) break; i = cmdline_charsize(ccline.cmdpos); - if (KeyTyped && ccline.cmdspos + i >= Columns * Rows) + if (KeyTyped && ccline.cmdspos + i >= cmdline_width * Rows) break; ccline.cmdspos += i; if (has_mbyte) @@ -3019,8 +3019,8 @@ set_cmdspos_cursor(void) set_cmdspos(); if (KeyTyped) { - m = Columns * Rows; - if (m < 0) // overflow, Columns or Rows at weird value + m = cmdline_width * Rows; + if (m < 0) // overflow, cmdline_width or Rows at weird value m = MAXCOL; } else @@ -3052,7 +3052,7 @@ correct_cmdspos(int idx, int cells) { if ((*mb_ptr2len)(ccline.cmdbuff + idx) > 1 && (*mb_ptr2cells)(ccline.cmdbuff + idx) > 1 - && ccline.cmdspos % Columns + cells > Columns) + && ccline.cmdspos % cmdline_width + cells > cmdline_width) ccline.cmdspos++; } @@ -3252,7 +3252,7 @@ getexmodeline( } } msg_clr_eos(); - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); continue; } @@ -3325,7 +3325,7 @@ getexmodeline( line_ga.ga_len += len; escaped = FALSE; - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len; // We are done when a NL is entered, but not when it comes after a @@ -3443,8 +3443,8 @@ redrawcmd_preedit(void) cmdpos += preedit_start_col; } - msg_row = cmdline_row + (cmdspos / (int)Columns); - msg_col = cmdspos % (int)Columns; + msg_row = cmdline_row + (cmdspos / cmdline_width); + msg_col = cmdspos % cmdline_width; if (msg_row >= Rows) msg_row = Rows - 1; @@ -3819,7 +3819,7 @@ put_on_cmdline(char_u *str, int len, int redraw) msg_col -= i; if (msg_col < 0) { - msg_col += Columns; + msg_col += cmdline_width; --msg_row; } } @@ -3838,8 +3838,8 @@ put_on_cmdline(char_u *str, int len, int redraw) } if (KeyTyped) { - m = Columns * Rows; - if (m < 0) // overflow, Columns or Rows at weird value + m = cmdline_width * Rows; + if (m < 0) // overflow, cmdline_width or Rows at weird value m = MAXCOL; } else @@ -4063,7 +4063,7 @@ redrawcmdprompt(void) if (ccline.cmdprompt != NULL) { msg_puts_attr((char *)ccline.cmdprompt, ccline.cmdattr); - ccline.cmdindent = msg_col + (msg_row - cmdline_row) * Columns; + ccline.cmdindent = msg_col + (msg_row - cmdline_row) * cmdline_width; // do the reverse of set_cmdspos() if (ccline.cmdfirstc != NUL) --ccline.cmdindent; @@ -4087,7 +4087,7 @@ redrawcmd(void) // when 'incsearch' is set there may be no command line while redrawing if (ccline.cmdbuff == NULL) { - windgoto(cmdline_row, 0); + windgoto(cmdline_row, cmdline_col_off); msg_clr_eos(); return; } @@ -4142,21 +4142,21 @@ cursorcmd(void) #ifdef FEAT_RIGHTLEFT if (cmdmsg_rl) { - msg_row = cmdline_row + (ccline.cmdspos / (int)(Columns - 1)); - msg_col = (int)Columns - (ccline.cmdspos % (int)(Columns - 1)) - 1; + msg_row = cmdline_row + (ccline.cmdspos / (cmdline_width - 1)); + msg_col = cmdline_width - (ccline.cmdspos % (cmdline_width - 1)) - 1; if (msg_row <= 0) msg_row = Rows - 1; } else #endif { - msg_row = cmdline_row + (ccline.cmdspos / (int)Columns); - msg_col = ccline.cmdspos % (int)Columns; + msg_row = cmdline_row + (ccline.cmdspos / cmdline_width); + msg_col = ccline.cmdspos % cmdline_width; if (msg_row >= Rows) msg_row = Rows - 1; } - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); #if defined(FEAT_XIM) && (defined(FEAT_GUI_GTK) || defined(FEAT_GUI_MACVIM)) if (p_imst == IM_ON_THE_SPOT) redrawcmd_preedit(); @@ -4172,13 +4172,13 @@ gotocmdline(int clr) msg_start(); #ifdef FEAT_RIGHTLEFT if (cmdmsg_rl) - msg_col = Columns - 1; + msg_col = cmdline_width - 1; else #endif msg_col = 0; // always start in column 0 if (clr) // clear the bottom line(s) msg_clr_eos(); // will reset clear_cmdline - windgoto(cmdline_row, 0); + windgoto(cmdline_row, cmdline_col_off); } /* @@ -4492,7 +4492,7 @@ f_getcmdscreenpos(typval_T *argvars UNUSED, typval_T *rettv) { cmdline_info_T *p = get_ccline_ptr(); - rettv->vval.v_number = p != NULL ? p->cmdspos + 1 : 0; + rettv->vval.v_number = p != NULL ? cmdline_col_off + p->cmdspos + 1 : 0; } /* diff --git a/src/feature.h b/src/feature.h index 8bad714fc2..b7354d808f 100644 --- a/src/feature.h +++ b/src/feature.h @@ -516,7 +516,7 @@ /* * GUI dark theme variant */ -#if defined(FEAT_GUI_GTK) && defined(USE_GTK3) +#if (defined(FEAT_GUI_GTK) && defined(USE_GTK3)) || defined(FEAT_GUI_MSWIN) # define FEAT_GUI_DARKTHEME #endif diff --git a/src/getchar.c b/src/getchar.c index 03d1ceee57..596321646d 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -439,7 +439,7 @@ stuff_empty(void) #if defined(FEAT_EVAL) /* * Return TRUE if readbuf1 is empty. There may still be redo characters in - * redbuf2. + * readbuf2. */ int readbuf1_empty(void) @@ -1977,6 +1977,9 @@ vgetc(void) } c = TO_SPECIAL(c2, c); + if (allow_osc_key == 0 && c == K_OSC) + continue; + // K_ESC is used to avoid ambiguity with the single Esc // character that might be the start of an escape sequence. // Convert it back to a single Esc here. @@ -2448,10 +2451,11 @@ getchar_common(typval_T *argvars, typval_T *rettv, int allow_number) if (cursor_flag == 'h') cursor_sleep(); else if (cursor_flag == 'm') - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); ++no_mapping; ++allow_keys; + ++allow_osc_key; if (!simplify) ++no_reduce_keys; for (;;) @@ -2479,6 +2483,7 @@ getchar_common(typval_T *argvars, typval_T *rettv, int allow_number) } --no_mapping; --allow_keys; + --allow_osc_key; if (!simplify) --no_reduce_keys; @@ -4296,7 +4301,7 @@ getcmdkeycmd( } else if (c1 == K_SNR) { - ga_concat(&line_ga, (char_u *)""); + ga_concat_len(&line_ga, (char_u *)"", 5); } else { diff --git a/src/globals.h b/src/globals.h index 97adfa9045..12c3a9dac1 100644 --- a/src/globals.h +++ b/src/globals.h @@ -146,6 +146,8 @@ EXTERN int vgetc_char INIT(= 0); * update_screen(). */ EXTERN int cmdline_row; +EXTERN int cmdline_col_off; +EXTERN int cmdline_width; EXTERN int redraw_cmdline INIT(= FALSE); // cmdline must be redrawn EXTERN int redraw_mode INIT(= FALSE); // mode must be redrawn @@ -978,19 +980,28 @@ EXTERN Clipboard_T clip_plus; // CLIPBOARD selection in X11/Wayland # define clip_plus clip_star // there is only one clipboard # define ONE_CLIPBOARD # endif +#endif +#ifdef HAVE_CLIPMETHOD # define CLIP_UNNAMED 1 # define CLIP_UNNAMED_PLUS 2 EXTERN int clip_unnamed INIT(= 0); // above two values or'ed +# ifdef FEAT_CLIPBOARD EXTERN int clip_autoselect_star INIT(= FALSE); EXTERN int clip_autoselect_plus INIT(= FALSE); EXTERN int clip_autoselectml INIT(= FALSE); EXTERN int clip_html INIT(= FALSE); EXTERN regprog_T *clip_exclude_prog INIT(= NULL); EXTERN int clip_unnamed_saved INIT(= 0); +# endif +#endif + +#ifdef FEAT_CLIPBOARD_PROVIDER +EXTERN char_u *clip_provider INIT(= NULL); #endif + /* * All regular windows are linked in a list. "firstwin" points to the first * entry, "lastwin" to the last entry (can be the same as firstwin) and @@ -2018,7 +2029,7 @@ EXTERN listitem_T range_list_item; EXTERN evalarg_T EVALARG_EVALUATE # ifdef DO_INIT = {EVAL_EVALUATE, 0, NULL, NULL, NULL, NULL, GA_EMPTY, GA_EMPTY, NULL, - {0, 0, (int)sizeof(char_u *), 20, NULL}, 0, NULL} + {0, 0, (int)sizeof(char_u *), 20, NULL}, 0, NULL, NULL} # endif ; #endif @@ -2069,7 +2080,10 @@ EXTERN char_u showcmd_buf[SHOWCMD_BUFLEN]; EXTERN int p_tgc_set INIT(= FALSE); #endif -#ifdef FEAT_CLIPBOARD +// If we've already warned about missing/unavailable clipboard +EXTERN bool did_warn_clipboard INIT(= FALSE); + +#ifdef HAVE_CLIPMETHOD EXTERN clipmethod_T clipmethod INIT(= CLIPMETHOD_NONE); #endif @@ -2081,6 +2095,9 @@ EXTERN char *wayland_display_name INIT(= NULL); // Special mime type used to identify selection events that came from us setting // the selection. Is in format of "application/x-vim-instance-" where // is the PID of the Vim process. Set in main.c +// +// This is more reliable than just checking if our data source is non-NULL, as +// that may be subject to data races in the Wayland protocol. EXTERN char wayland_vim_special_mime[ sizeof("application/x-vim-instance-") + NUMBUFLEN - 1]; // Includes NUL @@ -2120,3 +2137,12 @@ INIT(= CLIENTSERVER_METHOD_NONE); // Path to socket of last client that communicated with us EXTERN char_u *client_socket INIT(= NULL); #endif + +// If the key should be propagated from vgetc() +EXTERN int allow_osc_key INIT(= 0); + +#ifdef FEAT_EVAL +// Global singly linked list of redraw listeners +EXTERN redraw_listener_T *redraw_listeners INIT(= NULL); +EXTERN bool inside_redraw_on_start_cb INIT(= false); +#endif diff --git a/src/gui.c b/src/gui.c index 41f9581dd7..7afc92ed8d 100644 --- a/src/gui.c +++ b/src/gui.c @@ -146,9 +146,11 @@ gui_start(char_u *arg UNUSED) emsg(msg); #endif } +#ifdef HAVE_CLIPMETHOD else // Reset clipmethod to CLIPMETHOD_NONE choose_clipmethod(); +#endif #ifdef FEAT_SOCKETSERVER // Install socket server listening socket if we are running it @@ -156,6 +158,12 @@ gui_start(char_u *arg UNUSED) gui_gtk_init_socket_server(); #endif +#ifdef FEAT_GUI_MSWIN + // Enable fullscreen mode + if (vim_strchr(p_go, GO_FULLSCREEN) != NULL) + gui_mch_set_fullscreen(TRUE); +#endif + vim_free(old_term); // If the GUI started successfully, trigger the GUIEnter event, otherwise @@ -1101,7 +1109,7 @@ gui_get_wide_font(void) #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_MSWIN) /* * Set list of ascii characters that combined can create ligature. - * Store them in char map for quick access from gui_gtk2_draw_string. + * Store them in char map for quick access from gui_gtk_draw_string. */ void gui_set_ligatures(void) @@ -2576,7 +2584,7 @@ gui_outstr_nowrap( */ #ifdef FEAT_GUI_GTK // The value returned is the length in display cells - len = gui_gtk2_draw_string(gui.row, col, s, len, draw_flags); + len = gui_gtk_draw_string(gui.row, col, s, len, draw_flags); #elif defined(FEAT_GUI_MACVIM) /* The value returned is the length in display cells */ len = gui_macvim_draw_string(gui.row, col, s, len, draw_flags); @@ -3307,6 +3315,8 @@ gui_send_mouse_event( */ if ((State == MODE_NORMAL || State == MODE_NORMAL_BUSY || (State & MODE_INSERT)) + && X_2_COL(x) >= firstwin->w_wincol + && X_2_COL(x) < firstwin->w_wincol + topframe->fr_width && Y_2_ROW(y) >= topframe->fr_height + firstwin->w_winrow && button != MOUSE_DRAG # ifdef FEAT_MOUSESHAPE @@ -3525,7 +3535,7 @@ static int prev_which_scrollbars[3]; gui_init_which_components(char_u *oldval UNUSED) { #ifdef FEAT_GUI_DARKTHEME - static int prev_dark_theme = -1; + static int prev_dark_theme = FALSE; int using_dark_theme = FALSE; #endif #ifdef FEAT_MENU @@ -3539,8 +3549,11 @@ gui_init_which_components(char_u *oldval UNUSED) int using_tabline; #endif #ifdef FEAT_GUI_MSWIN - static int prev_titlebar = -1; + static int prev_titlebar = FALSE; int using_titlebar = FALSE; + + static int prev_fullscreen = FALSE; + int using_fullscreen = FALSE; #endif #if defined(FEAT_MENU) static int prev_tearoff = -1; @@ -3615,6 +3628,9 @@ gui_init_which_components(char_u *oldval UNUSED) case GO_TITLEBAR: using_titlebar = TRUE; break; + case GO_FULLSCREEN: + using_fullscreen = TRUE; + break; #endif #ifdef FEAT_TOOLBAR case GO_TOOLBAR: @@ -3643,6 +3659,12 @@ gui_init_which_components(char_u *oldval UNUSED) gui_mch_set_titlebar_colors(); prev_titlebar = using_titlebar; } + + if (using_fullscreen != prev_fullscreen) + { + gui_mch_set_fullscreen(using_fullscreen); + prev_fullscreen = using_fullscreen; + } #endif #ifdef FEAT_GUI_DARKTHEME @@ -5003,7 +5025,12 @@ xy2win(int x, int y, mouse_find_T popup) # endif wp = mouse_find_win(&row, &col, popup); if (wp == NULL) + { +#ifdef FEAT_MOUSESHAPE + update_mouseshape(-2); +#endif return NULL; + } #ifdef FEAT_MOUSESHAPE if (State == MODE_HITRETURN || State == MODE_ASKMORE) { @@ -5346,26 +5373,26 @@ gui_do_findrepl( ga_init2(&ga, 1, 100); if (type == FRD_REPLACEALL) - ga_concat(&ga, (char_u *)"%s/"); + ga_concat_len(&ga, (char_u *)"%s/", 3); - ga_concat(&ga, (char_u *)"\\V"); + ga_concat_len(&ga, (char_u *)"\\V", 2); if (flags & FRD_MATCH_CASE) - ga_concat(&ga, (char_u *)"\\C"); + ga_concat_len(&ga, (char_u *)"\\C", 2); else - ga_concat(&ga, (char_u *)"\\c"); + ga_concat_len(&ga, (char_u *)"\\c", 2); if (flags & FRD_WHOLE_WORD) - ga_concat(&ga, (char_u *)"\\<"); + ga_concat_len(&ga, (char_u *)"\\<", 2); // escape slash and backslash p = vim_strsave_escaped(find_text, (char_u *)"/\\"); if (p != NULL) ga_concat(&ga, p); vim_free(p); if (flags & FRD_WHOLE_WORD) - ga_concat(&ga, (char_u *)"\\>"); + ga_concat_len(&ga, (char_u *)"\\>", 2); if (type == FRD_REPLACEALL) { - ga_concat(&ga, (char_u *)"/"); + ga_concat_len(&ga, (char_u *)"/", 1); // Escape slash and backslash. // Also escape tilde and ampersand if 'magic' is set. p = vim_strsave_escaped(repl_text, @@ -5373,7 +5400,7 @@ gui_do_findrepl( if (p != NULL) ga_concat(&ga, p); vim_free(p); - ga_concat(&ga, (char_u *)"/g"); + ga_concat_len(&ga, (char_u *)"/g", 2); } ga_append(&ga, NUL); diff --git a/src/gui_gtk.c b/src/gui_gtk.c index 593215306f..305e761a5c 100644 --- a/src/gui_gtk.c +++ b/src/gui_gtk.c @@ -1190,47 +1190,6 @@ gui_mch_destroy_scrollbar(scrollbar_T *sb) * Implementation of the file selector related stuff */ -#ifndef USE_FILE_CHOOSER - static void -browse_ok_cb(GtkWidget *widget UNUSED, gpointer cbdata) -{ - gui_T *vw = (gui_T *)cbdata; - - if (vw->browse_fname != NULL) - g_free(vw->browse_fname); - - vw->browse_fname = (char_u *)g_strdup(gtk_file_selection_get_filename( - GTK_FILE_SELECTION(vw->filedlg))); - gtk_widget_hide(vw->filedlg); -} - - static void -browse_cancel_cb(GtkWidget *widget UNUSED, gpointer cbdata) -{ - gui_T *vw = (gui_T *)cbdata; - - if (vw->browse_fname != NULL) - { - g_free(vw->browse_fname); - vw->browse_fname = NULL; - } - gtk_widget_hide(vw->filedlg); -} - - static gboolean -browse_destroy_cb(GtkWidget *widget UNUSED) -{ - if (gui.browse_fname != NULL) - { - g_free(gui.browse_fname); - gui.browse_fname = NULL; - } - gui.filedlg = NULL; - gtk_main_quit(); - return FALSE; -} -#endif - /* * Put up a file requester. * Returns the selected name in allocated memory, or NULL for Cancel. @@ -1249,13 +1208,11 @@ gui_mch_browse(int saving, char_u *initdir, char_u *filter) { -#ifdef USE_FILE_CHOOSER # if GTK_CHECK_VERSION(3,20,0) GtkFileChooserNative *fc; # else GtkWidget *fc; # endif -#endif char_u dirbuf[MAXPATHL]; guint log_handler; const gchar *domain = "Gtk"; @@ -1278,7 +1235,6 @@ gui_mch_browse(int saving, log_handler = g_log_set_handler(domain, G_LOG_LEVEL_WARNING, recent_func_log_func, NULL); -#ifdef USE_FILE_CHOOSER // We create the dialog each time, so that the button text can be "Open" // or "Save" according to the action. # if GTK_CHECK_VERSION(3,20,0) @@ -1352,7 +1308,7 @@ gui_mch_browse(int saving, if (gtk_native_dialog_run(GTK_NATIVE_DIALOG(fc)) == GTK_RESPONSE_ACCEPT) # else if (gtk_dialog_run(GTK_DIALOG(fc)) == GTK_RESPONSE_ACCEPT) -#endif +# endif { char *filename; @@ -1366,43 +1322,6 @@ gui_mch_browse(int saving, gtk_widget_destroy(GTK_WIDGET(fc)); # endif -#else // !USE_FILE_CHOOSER - - if (gui.filedlg == NULL) - { - GtkFileSelection *fs; // shortcut - - gui.filedlg = gtk_file_selection_new((const gchar *)title); - gtk_window_set_modal(GTK_WINDOW(gui.filedlg), TRUE); - gtk_window_set_transient_for(GTK_WINDOW(gui.filedlg), - GTK_WINDOW(gui.mainwin)); - fs = GTK_FILE_SELECTION(gui.filedlg); - - gtk_container_border_width(GTK_CONTAINER(fs), 4); - - gtk_signal_connect(GTK_OBJECT(fs->ok_button), - "clicked", GTK_SIGNAL_FUNC(browse_ok_cb), &gui); - gtk_signal_connect(GTK_OBJECT(fs->cancel_button), - "clicked", GTK_SIGNAL_FUNC(browse_cancel_cb), &gui); - // gtk_signal_connect() doesn't work for destroy, it causes a hang - gtk_signal_connect_object(GTK_OBJECT(gui.filedlg), - "destroy", GTK_SIGNAL_FUNC(browse_destroy_cb), - GTK_OBJECT(gui.filedlg)); - } - else - gtk_window_set_title(GTK_WINDOW(gui.filedlg), (const gchar *)title); - - // Concatenate "initdir" and "dflt". - if (dflt != NULL && *dflt != NUL - && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL) - STRCAT(dirbuf, dflt); - - gtk_file_selection_set_filename(GTK_FILE_SELECTION(gui.filedlg), - (const gchar *)dirbuf); - - gtk_widget_show(gui.filedlg); - gtk_main(); -#endif // !USE_FILE_CHOOSER g_log_remove_handler(domain, log_handler); CONVERT_TO_UTF8_FREE(title); diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c index 2b310ab3b6..ec845a36e6 100644 --- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -2750,9 +2750,7 @@ mainwin_realize(GtkWidget *widget UNUSED, gpointer data UNUSED) icon_theme = gtk_icon_theme_get_default(); if (icon_theme && gtk_icon_theme_has_icon(icon_theme, "gvim")) - { gtk_window_set_icon_name(GTK_WINDOW(gui.mainwin), "gvim"); - } else { /* @@ -2770,7 +2768,6 @@ mainwin_realize(GtkWidget *widget UNUSED, gpointer data UNUSED) g_list_foreach(icons, (GFunc)(void *)&g_object_unref, NULL); g_list_free(icons); } - g_object_unref(icon_theme); } #if !defined(USE_GNOME_SESSION) @@ -5185,7 +5182,7 @@ static PangoEngineShape *default_shape_engine = NULL; /* * Create a map from ASCII characters in the range [32,126] to glyphs - * of the current font. This is used by gui_gtk2_draw_string() to skip + * of the current font. This is used by gui_gtk_draw_string() to skip * the itemize and shaping process for the most common case. */ static void @@ -5900,7 +5897,7 @@ draw_under(int flags, int row, int col, int cells) } int -gui_gtk2_draw_string(int row, int col, char_u *s, int len, int flags) +gui_gtk_draw_string(int row, int col, char_u *s, int len, int flags) { char_u *conv_buf = NULL; // result of UTF-8 conversion char_u *new_conv_buf; @@ -6062,8 +6059,8 @@ gui_gtk2_draw_string(int row, int col, char_u *s, int len, int flags) backup_ch = *(cs + slen); *(cs + slen) = NUL; } - len_sum += gui_gtk2_draw_string_ext(row, col + len_sum, - cs, slen, flags, needs_pango); + len_sum += gui_gtk_draw_string_ext(row, col + len_sum, cs, slen, flags, + needs_pango); if (slen < len) *(cs + slen) = backup_ch; cs += slen; @@ -6075,7 +6072,7 @@ gui_gtk2_draw_string(int row, int col, char_u *s, int len, int flags) } int -gui_gtk2_draw_string_ext( +gui_gtk_draw_string_ext( int row, int col, char_u *s, diff --git a/src/gui_w32.c b/src/gui_w32.c index abaa766c36..59f2880797 100644 --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -315,6 +315,10 @@ gui_mch_set_rendering_options(char_u *s) # define SPI_SETWHEELSCROLLCHARS 0x006D #endif +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +# define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + #ifndef DWMWA_CAPTION_COLOR # define DWMWA_CAPTION_COLOR 35 #endif @@ -417,6 +421,16 @@ static HINSTANCE hLibDwm = NULL; static HRESULT (WINAPI *pDwmSetWindowAttribute)(HWND, DWORD, LPCVOID, DWORD); static void dyn_dwm_load(void); +static int fullscreen_on = FALSE; + +#ifdef FEAT_GUI_DARKTHEME + +static HINSTANCE hUxThemeLib = NULL; +static DWORD (WINAPI *pSetPreferredAppMode)(DWORD) = NULL; +static void (WINAPI *pFlushMenuThemes)(void) = NULL; +static void dyn_uxtheme_load(void); +#endif + static int WINAPI stubGetSystemMetricsForDpi(int nIndex, UINT dpi UNUSED) { @@ -3116,6 +3130,118 @@ gui_mch_set_curtab(int nr) #endif +#ifdef FEAT_GUI_DARKTHEME +extern BOOL win10_22H2_or_later; // this is in os_win32.c + + void +gui_mch_set_dark_theme(int dark) +{ + if (!win10_22H2_or_later) + return; + + if (pDwmSetWindowAttribute != NULL) + pDwmSetWindowAttribute(s_hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE, &dark, + sizeof(dark)); + + if (pSetPreferredAppMode != NULL) + pSetPreferredAppMode(dark); + + if (pFlushMenuThemes != NULL) + pFlushMenuThemes(); +} + + static void +dyn_uxtheme_load(void) +{ + hUxThemeLib = vimLoadLib("uxtheme.dll"); + if (hUxThemeLib == NULL) + return; + + pSetPreferredAppMode = (DWORD (WINAPI *)(DWORD)) + GetProcAddress(hUxThemeLib, MAKEINTRESOURCE(135)); + pFlushMenuThemes = (void (WINAPI *)(void)) + GetProcAddress(hUxThemeLib, MAKEINTRESOURCE(136)); + + if (pSetPreferredAppMode == NULL || pFlushMenuThemes == NULL) + { + FreeLibrary(hUxThemeLib); + hUxThemeLib = NULL; + return; + } +} + +#endif // FEAT_GUI_DARKTHEME + +/* + * When flag is true, set fullscreen on. + * When flag is false, set fullscreen off. + */ + void +gui_mch_set_fullscreen(int flag) +{ + static RECT normal_rect; + static LONG_PTR normal_style, normal_exstyle; + HMONITOR mon; + MONITORINFO moninfo; + RECT rc; + + if (!full_screen) // Windows not set yet. + return; + + if (flag) + { + if (fullscreen_on) + return; + + // Enter fullscreen mode + GetWindowRect(s_hwnd, &rc); + + moninfo.cbSize = sizeof(MONITORINFO); + mon = MonitorFromRect(&rc, MONITOR_DEFAULTTONEAREST); + if (mon == NULL || !GetMonitorInfo(mon, &moninfo)) + return; + + // Save current window state + GetWindowRect(s_hwnd, &normal_rect); + normal_style = GetWindowLongPtr(s_hwnd, GWL_STYLE); + normal_exstyle = GetWindowLongPtr(s_hwnd, GWL_EXSTYLE); + + // Set fullscreen styles + SetWindowLongPtr(s_hwnd, GWL_STYLE, + normal_style & ~(WS_CAPTION | WS_THICKFRAME)); + SetWindowLongPtr(s_hwnd, GWL_EXSTYLE, + normal_exstyle & ~(WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE | + WS_EX_CLIENTEDGE | WS_EX_STATICEDGE)); + SetWindowPos(s_hwnd, NULL, + moninfo.rcMonitor.left, + moninfo.rcMonitor.top, + moninfo.rcMonitor.right - moninfo.rcMonitor.left, + moninfo.rcMonitor.bottom - moninfo.rcMonitor.top, + SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); + + fullscreen_on = TRUE; + } + else + { + if (!fullscreen_on) + return; + + // Exit fullscreen mode + SetWindowLongPtr(s_hwnd, GWL_STYLE, normal_style); + SetWindowLongPtr(s_hwnd, GWL_EXSTYLE, normal_exstyle); + + // Restore original window position and size + SetWindowPos(s_hwnd, NULL, + normal_rect.left, + normal_rect.top, + normal_rect.right - normal_rect.left, + normal_rect.bottom - normal_rect.top, + SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); + + fullscreen_on = FALSE; + } +} + /* * ":simalt" command. */ @@ -5646,6 +5772,10 @@ gui_mch_init(void) load_dpi_func(); +#ifdef FEAT_GUI_DARKTHEME + dyn_uxtheme_load(); +#endif + dyn_dwm_load(); s_dpi = pGetDpiForSystem(); @@ -7066,14 +7196,12 @@ gui_mch_menu_grey( * is this a toolbar button? */ if (menu->submenu_id == (HMENU)-1) - { SendMessage(s_toolbarhwnd, TB_ENABLEBUTTON, - (WPARAM)menu->id, (LPARAM) MAKELONG((grey ? FALSE : TRUE), 0)); - } + (WPARAM)menu->id, (LPARAM) MAKELONG((grey ? FALSE : TRUE), 0)); else # endif - (void)EnableMenuItem(menu->parent ? menu->parent->submenu_id : s_menuBar, - menu->id, MF_BYCOMMAND | (grey ? MF_GRAYED : MF_ENABLED)); + (void)EnableMenuItem(menu->parent ? menu->parent->submenu_id : s_menuBar, + menu->id, MF_BYCOMMAND | (grey ? MF_GRAYED : MF_ENABLED)); # ifdef FEAT_TEAROFF if ((menu->parent != NULL) && (IsWindow(menu->parent->tearoff_handle))) diff --git a/src/highlight.c b/src/highlight.c index ae0eb68929..b484670897 100644 --- a/src/highlight.c +++ b/src/highlight.c @@ -3447,7 +3447,7 @@ syn_list_header( name_col = msg_col; endcol = 15; } - else if (msg_col + outlen + 1 >= Columns) + else if (msg_col + outlen + 1 >= cmdline_width) { msg_putchar('\n'); if (got_int) @@ -3461,15 +3461,15 @@ syn_list_header( if (msg_col >= endcol) // output at least one space endcol = msg_col + 1; - if (Columns <= (long)endcol) // avoid hang for tiny window - endcol = (int)(Columns - 1); + if (cmdline_width <= endcol) // avoid hang for tiny window + endcol = cmdline_width - 1; msg_advance(endcol); // Show "xxx" with the attributes. if (!did_header) { - if (endcol == Columns - 1 && endcol <= name_col) + if (endcol == cmdline_width - 1 && endcol <= name_col) msg_putchar(' '); msg_puts_attr("xxx", syn_id2attr(id)); msg_putchar(' '); diff --git a/src/if_cscope.c b/src/if_cscope.c index de27d7ef6b..7d246b58b5 100644 --- a/src/if_cscope.c +++ b/src/if_cscope.c @@ -2084,7 +2084,7 @@ cs_print_tags_priv(char **matches, char **cntxts, int num_matches) (void)sprintf(buf, cntxformat, context); // print the context only if it fits on the same line - if (msg_col + (int)strlen(buf) >= (int)Columns) + if (msg_col + (int)strlen(buf) >= cmdline_width) msg_putchar('\n'); msg_advance(12); msg_outtrans_long_attr((char_u *)buf, 0); diff --git a/src/if_py_both.h b/src/if_py_both.h index 7fc055db53..e0020519b0 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -1039,7 +1039,7 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookup_dict) char buf[NUMBUFLEN]; // For backwards compatibility numbers are stored as strings. - sprintf(buf, "%ld", (long)our_tv->vval.v_number); + sprintf(buf, "%lld", (long long)our_tv->vval.v_number); ret = PyString_FromString((char *)buf); } else if (our_tv->v_type == VAR_FLOAT) diff --git a/src/if_ruby.c b/src/if_ruby.c index 6af508becc..913936174a 100644 --- a/src/if_ruby.c +++ b/src/if_ruby.c @@ -73,6 +73,11 @@ # define rb_num2int rb_num2int_stub # endif +# if RUBY_VERSION >= 20 +// USE_TYPEDDATA is not defined yet. We just check for 2.0. +# define rb_check_typeddata rb_check_typeddata_stub +#endif + # if RUBY_VERSION == 21 // Ruby 2.1 adds new GC called RGenGC and RARRAY_PTR uses // rb_gc_writebarrier_unprotect_promoted if USE_RGENGC @@ -243,9 +248,6 @@ static int ruby_convert_to_vim_value(VALUE val, typval_T *rettv); # if RUBY_VERSION < 30 # define rb_check_type dll_rb_check_type # endif -# ifdef USE_TYPEDDATA -# define rb_check_typeddata dll_rb_check_typeddata -# endif # define rb_class_path dll_rb_class_path # ifdef USE_TYPEDDATA # if RUBY_VERSION >= 23 @@ -601,6 +603,12 @@ rb_unexpected_type_stub(VALUE self, int t) dll_rb_unexpected_type(self, t); } # endif +# ifdef USE_TYPEDDATA +void *rb_check_typeddata_stub(VALUE obj, const rb_data_type_t *data_type) +{ + return dll_rb_check_typeddata(obj, data_type); +} +# endif # endif // ifndef PROTO static HINSTANCE hinstRuby = NULL; // Instance of ruby.dll diff --git a/src/if_xcmdsrv.c b/src/if_xcmdsrv.c index 03358f3e99..2c12672a82 100644 --- a/src/if_xcmdsrv.c +++ b/src/if_xcmdsrv.c @@ -666,7 +666,7 @@ serverGetVimNames(Display *dpy) if (WindowValid(dpy, (Window)w)) { ga_concat(&ga, p + 1); - ga_concat(&ga, (char_u *)"\n"); + ga_concat_len(&ga, (char_u *)"\n", 1); } while (*p != 0) p++; @@ -1343,7 +1343,7 @@ server_parse_message( ga_concat(&reply, (char_u *)_(e_invalid_expression_received)); ga_append(&reply, 0); - ga_concat(&reply, (char_u *)"-c 1"); + ga_concat_len(&reply, (char_u *)"-c 1", 4); } ga_append(&reply, NUL); (void)AppendPropCarefully(dpy, resWindow, commProperty, diff --git a/src/insexpand.c b/src/insexpand.c index 64ad1a115f..f78c538a1d 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -137,11 +137,8 @@ static compl_T *compl_shown_match = NULL; static compl_T *compl_old_match = NULL; // list used to store the compl_T which have the max score -// used for completefuzzycollect static compl_T **compl_best_matches = NULL; static int compl_num_bests = 0; -// inserted a longest when completefuzzycollect enabled -static int compl_cfc_longest_ins = FALSE; // After using a cursor key selects a match in the popup menu, // otherwise it inserts a line break. @@ -827,19 +824,12 @@ ins_compl_add_infercase( } /* - * Check if ctrl_x_mode has been configured in 'completefuzzycollect' + * Check if fuzzy matching is enabled */ static int -cfc_has_mode(void) +cot_fuzzy(void) { - if (ctrl_x_mode_normal() || ctrl_x_mode_dictionary()) - return (cfc_flags & CFC_KEYWORD) != 0; - else if (ctrl_x_mode_files()) - return (cfc_flags & CFC_FILES) != 0; - else if (ctrl_x_mode_whole_line()) - return (cfc_flags & CFC_WHOLELINE) != 0; - else - return FALSE; + return (get_cot_flags() & COT_FUZZY) != 0; } /* @@ -848,9 +838,8 @@ cfc_has_mode(void) static int is_nearest_active(void) { - int flags = get_cot_flags(); - return (compl_autocomplete || (flags & COT_NEAREST)) - && !(flags & COT_FUZZY); + return (compl_autocomplete || (get_cot_flags() & COT_NEAREST)) + && !cot_fuzzy(); } /* @@ -996,14 +985,13 @@ ins_compl_add( // current match in the list of matches . if (compl_first_match == NULL) match->cp_next = match->cp_prev = NULL; - else if (cfc_has_mode() && score != FUZZY_SCORE_NONE && compl_get_longest) + else if (cot_fuzzy() && score != FUZZY_SCORE_NONE && compl_get_longest) { current = compl_first_match->cp_next; prev = compl_first_match; inserted = FALSE; - // The direction is ignored when using longest and - // completefuzzycollect, because matches are inserted - // and sorted by score. + // The direction is ignored when using longest and fuzzy match, because + // matches are inserted and sorted by score. while (current != NULL && current != compl_first_match) { if (current->cp_score < score) @@ -1046,7 +1034,7 @@ ins_compl_add( compl_curr_match = match; // Find the longest common string if still doing that. - if (compl_get_longest && (flags & CP_ORIGINAL_TEXT) == 0 && !cfc_has_mode() + if (compl_get_longest && (flags & CP_ORIGINAL_TEXT) == 0 && !cot_fuzzy() && !ins_compl_preinsert_longest()) ins_compl_longest_match(match); @@ -1110,7 +1098,7 @@ ins_compl_col_range_attr(linenr_T lnum, int col) || ins_compl_preinsert_longest(); int attr; - if ((get_cot_flags() & COT_FUZZY) + if (cot_fuzzy() || (!compl_hi_on_autocompl_longest && ins_compl_preinsert_longest()) || (attr = syn_name2attr(has_preinsert ? (char_u *)"PreInsert" : (char_u *)"ComplMatchIns")) == 0) @@ -1647,10 +1635,8 @@ ins_compl_build_pum(void) int shown_match_ok = FALSE; int i = 0; int cur = -1; - unsigned int cur_cot_flags = get_cot_flags(); - int compl_no_select = (cur_cot_flags & COT_NOSELECT) != 0 + int compl_no_select = (get_cot_flags() & COT_NOSELECT) != 0 || (compl_autocomplete && !ins_compl_has_preinsert()); - int fuzzy_filter = (cur_cot_flags & COT_FUZZY) != 0; compl_T *match_head = NULL; compl_T *match_tail = NULL; compl_T *match_next = NULL; @@ -1691,14 +1677,14 @@ ins_compl_build_pum(void) // Apply 'smartcase' behavior during normal mode if (ctrl_x_mode_normal() && !p_inf && leader->string - && !ignorecase(leader->string) && !fuzzy_filter) + && !ignorecase(leader->string) && !cot_fuzzy()) compl->cp_flags &= ~CP_ICASE; if (!match_at_original_text(compl) && (leader->string == NULL || ins_compl_equal(compl, leader->string, (int)leader->length) - || (fuzzy_filter && compl->cp_score != FUZZY_SCORE_NONE))) + || (cot_fuzzy() && compl->cp_score != FUZZY_SCORE_NONE))) { // Limit number of items from each source if max_items is set. int match_limit_exceeded = FALSE; @@ -1721,7 +1707,7 @@ ins_compl_build_pum(void) match_tail->cp_match_next = compl; match_tail = compl; - if (!shown_match_ok && !fuzzy_filter) + if (!shown_match_ok && !cot_fuzzy()) { if (compl == compl_shown_match || did_find_shown_match) { @@ -1737,7 +1723,7 @@ ins_compl_build_pum(void) shown_compl = compl; cur = i; } - else if (fuzzy_filter) + else if (cot_fuzzy()) { if (i == 0) shown_compl = compl; @@ -1752,7 +1738,7 @@ ins_compl_build_pum(void) } } - if (compl == compl_shown_match && !fuzzy_filter) + if (compl == compl_shown_match && !cot_fuzzy()) { did_find_shown_match = TRUE; @@ -1777,7 +1763,7 @@ ins_compl_build_pum(void) if (compl_match_arraysize == 0) return -1; - if (fuzzy_filter && !compl_no_select && !shown_match_ok) + if (cot_fuzzy() && !compl_no_select && !shown_match_ok) { compl_shown_match = shown_compl; shown_match_ok = TRUE; @@ -1993,8 +1979,8 @@ ins_compl_dictionaries( # endif if (count > 0) // avoid warning for using "files" uninit { - ins_compl_files(count, files, thesaurus, flags, - (cfc_has_mode() ? NULL : ®match), buf, &dir); + ins_compl_files(count, files, thesaurus, flags, ®match, buf, + &dir); if (flags != DICT_EXACT) FreeWild(count, files); } @@ -2084,12 +2070,11 @@ ins_compl_files( int add_r; char_u *leader = NULL; int leader_len = 0; - int in_fuzzy_collect = cfc_has_mode(); int score = 0; int len = 0; char_u *line_end = NULL; - if (in_fuzzy_collect) + if (cot_fuzzy()) { leader = ins_compl_leader(); leader_len = (int)ins_compl_leader_len(); @@ -2116,7 +2101,28 @@ ins_compl_files( && !vim_fgets(buf, LSIZE, fp)) { ptr = buf; - if (regmatch != NULL) + if (cot_fuzzy() && leader_len > 0) + { + line_end = find_line_end(ptr); + while (ptr < line_end) + { + if (fuzzy_match_str_in_line(&ptr, leader, &len, NULL, &score)) + { + char_u *end_ptr = ctrl_x_mode_line_or_eval() + ? find_line_end(ptr) : find_word_end(ptr); + add_r = ins_compl_add_infercase(ptr, (int)(end_ptr - ptr), + p_ic, files[i], *dir, FALSE, score); + if (add_r == FAIL) + break; + ptr = end_ptr; // start from next word + if (compl_get_longest && ctrl_x_mode_normal() + && compl_first_match->cp_next + && score == compl_first_match->cp_next->cp_score) + compl_num_bests++; + } + } + } + else if (regmatch != NULL) { while (vim_regexec(regmatch, buf, (colnr_T)(ptr - buf))) { @@ -2144,27 +2150,6 @@ ins_compl_files( break; } } - else if (in_fuzzy_collect && leader_len > 0) - { - line_end = find_line_end(ptr); - while (ptr < line_end) - { - if (fuzzy_match_str_in_line(&ptr, leader, &len, NULL, &score)) - { - char_u *end_ptr = ctrl_x_mode_line_or_eval() - ? find_line_end(ptr) : find_word_end(ptr); - add_r = ins_compl_add_infercase(ptr, (int)(end_ptr - ptr), - p_ic, files[i], *dir, FALSE, score); - if (add_r == FAIL) - break; - ptr = end_ptr; // start from next word - if (compl_get_longest && ctrl_x_mode_normal() - && compl_first_match->cp_next - && score == compl_first_match->cp_next->cp_score) - compl_num_bests++; - } - } - } line_breakcheck(); ins_compl_check_keys(50, FALSE); } @@ -2284,7 +2269,6 @@ ins_compl_clear(void) { compl_cont_status = 0; compl_started = FALSE; - compl_cfc_longest_ins = FALSE; compl_matches = 0; compl_selected_item = -1; compl_ins_end_col = 0; @@ -2496,18 +2480,20 @@ ins_compl_fuzzy_sort(void) { int cur_cot_flags = get_cot_flags(); - // set the fuzzy score in cp_score + // Set the fuzzy score in cp_score and sort set_fuzzy_score(); - // Sort the matches linked list based on fuzzy score if (!(cur_cot_flags & COT_NOSORT)) { sort_compl_match_list(cp_compare_fuzzy); - if ((cur_cot_flags & (COT_NOINSERT | COT_NOSELECT)) == COT_NOINSERT - && compl_first_match) + // Reset the shown item since sorting reorders items + if ((cur_cot_flags & (COT_NOINSERT | COT_NOSELECT)) == COT_NOINSERT) { - compl_shown_match = compl_first_match; - if (compl_shows_dir_forward() && !compl_autocomplete) - compl_shown_match = compl_first_match->cp_next; + int none_selected = compl_shown_match == (compl_shows_dir_forward() + ? compl_first_match : compl_first_match->cp_prev); + if (!none_selected) + compl_shown_match + = (!compl_autocomplete && compl_shows_dir_forward()) + ? compl_first_match->cp_next : compl_first_match; } } } @@ -2539,7 +2525,7 @@ ins_compl_new_leader(void) ins_compl_set_original_text(compl_leader.string, compl_leader.length); if (is_cpt_func_refresh_always()) cpt_compl_refresh(); - if (get_cot_flags() & COT_FUZZY) + if (cot_fuzzy()) ins_compl_fuzzy_sort(); } else @@ -3337,14 +3323,21 @@ copy_global_to_buflocal_cb(callback_T *globcb, callback_T *bufcb) * lambda expression. */ char * -did_set_completefunc(optset_T *args UNUSED) +did_set_completefunc(optset_T *args) { - if (option_set_callback_func(curbuf->b_p_cfu, &cfu_cb) == FAIL) - return e_invalid_argument; + int retval; - set_buflocal_cfu_callback(curbuf); + if (args->os_flags & OPT_LOCAL) + retval = option_set_callback_func(args->os_newval.string, + &curbuf->b_cfu_cb); + else + { + retval = option_set_callback_func(args->os_newval.string, &cfu_cb); + if (retval == OK && !(args->os_flags & OPT_GLOBAL)) + set_buflocal_cfu_callback(curbuf); + } - return NULL; + return retval == FAIL ? e_invalid_argument : NULL; } /* @@ -3366,13 +3359,21 @@ set_buflocal_cfu_callback(buf_T *buf UNUSED) * lambda expression. */ char * -did_set_omnifunc(optset_T *args UNUSED) +did_set_omnifunc(optset_T *args) { - if (option_set_callback_func(curbuf->b_p_ofu, &ofu_cb) == FAIL) - return e_invalid_argument; + int retval; - set_buflocal_ofu_callback(curbuf); - return NULL; + if (args->os_flags & OPT_LOCAL) + retval = option_set_callback_func(args->os_newval.string, + &curbuf->b_ofu_cb); + else + { + retval = option_set_callback_func(args->os_newval.string, &ofu_cb); + if (retval == OK && !(args->os_flags & OPT_GLOBAL)) + set_buflocal_ofu_callback(curbuf); + } + + return retval == FAIL ? e_invalid_argument : NULL; } /* @@ -3939,163 +3940,6 @@ f_complete_check(typval_T *argvars UNUSED, typval_T *rettv) RedrawingDisabled = save_RedrawingDisabled; } -/* - * Add match item to the return list. - * Returns FAIL if out of memory, OK otherwise. - */ - static int -add_match_to_list( - typval_T *rettv, - char_u *str, - int len, - int pos) -{ - list_T *match; - int ret; - - match = list_alloc(); - if (match == NULL) - return FAIL; - - if ((ret = list_append_number(match, pos + 1)) == FAIL - || (ret = list_append_string(match, str, len)) == FAIL - || (ret = list_append_list(rettv->vval.v_list, match)) == FAIL) - { - vim_free(match); - return FAIL; - } - - return OK; -} - -/* - * "complete_match()" function - */ - void -f_complete_match(typval_T *argvars, typval_T *rettv) -{ - linenr_T lnum; - colnr_T col; - char_u *line = NULL; - char_u *ise = NULL; - regmatch_T regmatch; - char_u *before_cursor = NULL; - char_u *cur_end = NULL; - int bytepos = 0; - char_u part[MAXPATHL]; - int ret; - - if (rettv_list_alloc(rettv) == FAIL) - return; - - ise = curbuf->b_p_ise[0] != NUL ? curbuf->b_p_ise : p_ise; - - if (argvars[0].v_type == VAR_UNKNOWN) - { - lnum = curwin->w_cursor.lnum; - col = curwin->w_cursor.col; - } - else if (argvars[1].v_type == VAR_UNKNOWN) - { - emsg(_(e_invalid_argument)); - return; - } - else - { - lnum = (linenr_T)tv_get_number(&argvars[0]); - col = (colnr_T)tv_get_number(&argvars[1]); - if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count) - { - semsg(_(e_invalid_line_number_nr), lnum); - return; - } - if (col < 1 || col > ml_get_buf_len(curbuf, lnum)) - { - semsg(_(e_invalid_column_number_nr), col + 1); - return; - } - } - - line = ml_get_buf(curbuf, lnum, FALSE); - if (line == NULL) - return; - - before_cursor = vim_strnsave(line, col); - if (before_cursor == NULL) - return; - - if (ise == NULL || *ise == NUL) - { - regmatch.regprog = vim_regcomp((char_u *)"\\k\\+$", RE_MAGIC); - if (regmatch.regprog != NULL) - { - if (vim_regexec_nl(®match, before_cursor, (colnr_T)0)) - { - char_u *trig = vim_strnsave(regmatch.startp[0], - regmatch.endp[0] - regmatch.startp[0]); - if (trig == NULL) - { - vim_free(before_cursor); - vim_regfree(regmatch.regprog); - return; - } - - bytepos = (int)(regmatch.startp[0] - before_cursor); - ret = add_match_to_list(rettv, trig, -1, bytepos); - vim_free(trig); - if (ret == FAIL) - { - vim_free(before_cursor); - vim_regfree(regmatch.regprog); - return; - } - } - vim_regfree(regmatch.regprog); - } - } - else - { - char_u *p = ise; - char_u *p_space = NULL; - - cur_end = before_cursor + (int)STRLEN(before_cursor); - - while (*p != NUL) - { - int len = 0; - if (p_space) - { - len = p - p_space - 1; - memcpy(part, p_space + 1, len); - p_space = NULL; - } - else - { - char_u *next_comma = vim_strchr((*p == ',') ? p + 1 : p, ','); - if (next_comma && *(next_comma + 1) == ' ') - p_space = next_comma; - - len = copy_option_part(&p, part, MAXPATHL, ","); - } - - if (len > 0 && len <= col) - { - if (STRNCMP(cur_end - len, part, len) == 0) - { - bytepos = col - len; - if (add_match_to_list(rettv, part, len, bytepos) == FAIL) - { - vim_free(before_cursor); - return; - } - } - } - } - } - - vim_free(before_cursor); -} - /* * Return Insert completion mode name string */ @@ -4727,7 +4571,6 @@ fuzzy_longest_match(void) if (prefix != NULL) { ins_compl_longest_insert(prefix); - compl_cfc_longest_ins = TRUE; vim_free(prefix); } @@ -4751,7 +4594,7 @@ get_next_filename_completion(void) int score; char_u *leader = ins_compl_leader(); size_t leader_len = ins_compl_leader_len();; - int in_fuzzy_collect = (cfc_has_mode() && leader_len > 0); + int in_fuzzy_collect = (cot_fuzzy() && leader_len > 0); int *fuzzy_indices_data; char_u *last_sep = NULL; int need_collect_bests = in_fuzzy_collect && compl_get_longest; @@ -5063,8 +4906,7 @@ get_next_default_completion(ins_compl_next_state_T *st, pos_T *start_pos) char_u *ptr = NULL; int len = 0; int in_fuzzy_collect = !compl_status_adding() - && ((cfc_has_mode() && compl_length > 0) - || ((get_cot_flags() & COT_FUZZY) && compl_autocomplete)); + && cot_fuzzy() && compl_length > 0; char_u *leader = ins_compl_leader(); int score = FUZZY_SCORE_NONE; int in_curbuf = st->ins_buf == curbuf; @@ -5605,7 +5447,7 @@ ins_compl_get_exp(pos_T *ini) && (!compl_started || st.found_all)) { int status = process_next_cpt_value(&st, &type, &start_pos, - cfc_has_mode(), &may_advance_cpt_idx); + cot_fuzzy(), &may_advance_cpt_idx); if (status == INS_COMPL_CPT_END) break; @@ -5699,7 +5541,7 @@ ins_compl_get_exp(pos_T *ini) && !ctrl_x_mode_line_or_eval())) match_count = ins_compl_make_cyclic(); - if (cfc_has_mode() && compl_get_longest && compl_num_bests > 0) + if (cot_fuzzy() && compl_get_longest && compl_num_bests > 0) fuzzy_longest_match(); if (compl_old_match != NULL) @@ -5714,11 +5556,14 @@ ins_compl_get_exp(pos_T *ini) } may_trigger_modechanged(); - if (is_nearest_active() && !ins_compl_has_preinsert()) - sort_compl_match_list(cp_compare_nearest); + if (match_count > 0 && !ctrl_x_mode_spell()) + { + if (is_nearest_active() && !ins_compl_has_preinsert()) + sort_compl_match_list(cp_compare_nearest); - if ((get_cot_flags() & COT_FUZZY) && ins_compl_leader_len() > 0) - ins_compl_fuzzy_sort(); + if (cot_fuzzy() && ins_compl_leader_len() > 0) + ins_compl_fuzzy_sort(); + } return match_count; } @@ -6142,7 +5987,6 @@ find_next_completion_match( unsigned int cur_cot_flags = get_cot_flags(); int compl_no_select = (cur_cot_flags & COT_NOSELECT) != 0 || (compl_autocomplete && !ins_compl_has_preinsert()); - int compl_fuzzy_match = (cur_cot_flags & COT_FUZZY) != 0; string_T *leader; @@ -6219,7 +6063,7 @@ find_next_completion_match( && leader->string != NULL && !ins_compl_equal(compl_shown_match, leader->string, (int)leader->length) - && !(compl_fuzzy_match + && !(cot_fuzzy() && compl_shown_match->cp_score != FUZZY_SCORE_NONE)) ++todo; else @@ -6272,7 +6116,6 @@ ins_compl_next( unsigned int cur_cot_flags = get_cot_flags(); int compl_no_insert = (cur_cot_flags & COT_NOINSERT) != 0 || (compl_autocomplete && !ins_compl_has_preinsert()); - int compl_fuzzy_match = (cur_cot_flags & COT_FUZZY) != 0; int compl_preinsert = ins_compl_has_preinsert(); int has_autocomplete_delay = (compl_autocomplete && p_acl > 0); @@ -6283,7 +6126,7 @@ ins_compl_next( if (compl_leader.string != NULL && !match_at_original_text(compl_shown_match) - && !compl_fuzzy_match) + && !cot_fuzzy()) // Update "compl_shown_match" to the actually shown match ins_compl_update_shown_match(); @@ -7371,6 +7214,7 @@ ins_complete(int c, int enable_pum) compl_curr_buf = curwin->w_buffer; compl_shown_match = compl_curr_match; compl_shows_dir = compl_direction; + compl_num_bests = 0; // Find next match (and following matches). save_w_wrow = curwin->w_wrow; diff --git a/src/job.c b/src/job.c index d8256d4939..7700de0d2b 100644 --- a/src/job.c +++ b/src/job.c @@ -1464,7 +1464,7 @@ job_start( for (i = 0; i < argc; ++i) { if (i > 0) - ga_concat(&ga, (char_u *)" "); + ga_concat_len(&ga, (char_u *)" ", 2); ga_concat(&ga, (char_u *)argv[i]); } ga_append(&ga, NUL); diff --git a/src/keymap.h b/src/keymap.h index f1e430fa0c..22b6efe75a 100644 --- a/src/keymap.h +++ b/src/keymap.h @@ -280,12 +280,13 @@ enum key_extra , KE_SID = 106 // special key, followed by {nr}; , KE_ESC = 107 // used for K_ESC , KE_WILD = 108 // triggers wildmode completion + , KE_OSC = 109 // finished OSC sequence #ifdef FEAT_GUI_MACVIM - , KE_SWIPELEFT = 109 // Swipe trackpad left - , KE_SWIPERIGHT = 110 // Swipe trackpad right - , KE_SWIPEUP = 111 // Swipe trackpad up - , KE_SWIPEDOWN = 112 // Swipe trackpad down - , KE_FORCECLICK = 113 // Force click on trackpad + , KE_SWIPELEFT = 110 // Swipe trackpad left + , KE_SWIPERIGHT = 111 // Swipe trackpad right + , KE_SWIPEUP = 112 // Swipe trackpad up + , KE_SWIPEDOWN = 113 // Swipe trackpad down + , KE_FORCECLICK = 114 // Force click on trackpad #endif }; @@ -485,6 +486,7 @@ enum key_extra #define K_MOUSERIGHT TERMCAP2KEY(KS_EXTRA, KE_MOUSERIGHT) #define K_CSI TERMCAP2KEY(KS_EXTRA, KE_CSI) +#define K_OSC TERMCAP2KEY(KS_EXTRA, KE_OSC) #define K_SNR TERMCAP2KEY(KS_EXTRA, KE_SNR) #define K_PLUG TERMCAP2KEY(KS_EXTRA, KE_PLUG) #define K_CMDWIN TERMCAP2KEY(KS_EXTRA, KE_CMDWIN) diff --git a/src/list.c b/src/list.c index f8c365af82..7d6793c59e 100644 --- a/src/list.c +++ b/src/list.c @@ -2083,11 +2083,10 @@ item_compare2(const void *s1, const void *s2) res = ITEM_COMPARE_FAIL; else { - res = (int)tv_get_number_chk(&rettv, &sortinfo->item_compare_func_err); - if (res > 0) - res = 1; - else if (res < 0) - res = -1; + varnumber_T n; + + n = tv_get_number_chk(&rettv, &sortinfo->item_compare_func_err); + res = (n > 0) ? 1 : (n < 0) ? -1 : 0; } if (sortinfo->item_compare_func_err) res = ITEM_COMPARE_FAIL; // return value has wrong type diff --git a/src/main.c b/src/main.c index 2f0d231d6b..e5c5766536 100644 --- a/src/main.c +++ b/src/main.c @@ -414,7 +414,10 @@ main #endif cmdline_row = Rows - p_ch; + cmdline_col_off = 0; + cmdline_width = (int)Columns; msg_row = cmdline_row; + msg_col = 0; screenalloc(FALSE); // allocate screen buffers set_init_2(); TIME_MSG("inits 2"); @@ -449,6 +452,9 @@ main // Source startup scripts. source_startup_scripts(¶ms); +#ifdef FEAT_EVAL + set_vim_var_nr(VV_VIM_DID_INIT, 1L); +#endif #ifdef FEAT_GUI_MACVIM gui_macvim_release_autoreleasepool(autoreleasePool); #endif @@ -720,7 +726,7 @@ vim_main2(void) } #endif -#ifdef FEAT_CLIPBOARD +#ifdef HAVE_CLIPMETHOD choose_clipmethod(); #endif diff --git a/src/menu.c b/src/menu.c index ea61b32201..8f0b477e04 100644 --- a/src/menu.c +++ b/src/menu.c @@ -722,19 +722,19 @@ add_menu_path( if (tearpath != NULL) { char_u *s; - int idx; + int len; STRCPY(tearpath, menu_path); - idx = (int)(next_name - path_name - 1); - for (s = tearpath; *s && s < tearpath + idx; MB_PTR_ADV(s)) + len = (int)(next_name - path_name - 1); + for (s = tearpath; *s && s < tearpath + len; MB_PTR_ADV(s)) { if ((*s == '\\' || *s == Ctrl_V) && s[1]) { - ++idx; + ++len; ++s; } } - tearpath[idx] = NUL; + tearpath[len] = NUL; gui_add_tearoff(tearpath, pri_tab, pri_idx); vim_free(tearpath); } diff --git a/src/message.c b/src/message.c index 8d137fe245..f6029c5903 100644 --- a/src/message.c +++ b/src/message.c @@ -194,7 +194,7 @@ msg_attr_keep( retval = msg_end(); if (keep && retval && vim_strsize((char_u *)s) - < (int)(Rows - cmdline_row - 1) * Columns + sc_col) + < (int)(Rows - cmdline_row - 1) * cmdline_width + sc_col) set_keep_msg((char_u *)s, 0); need_fileinfo = FALSE; @@ -228,10 +228,10 @@ msg_strtrunc( #endif ) // Use all the columns. - room = (int)(Rows - msg_row) * Columns - 1; + room = (int)(Rows - msg_row) * cmdline_width - 1; else // Use up to 'showcmd' column. - room = (int)(Rows - msg_row - 1) * Columns + sc_col - 1; + room = (int)(Rows - msg_row - 1) * cmdline_width + sc_col - 1; if (len > room && room > 0) { if (enc_utf8) @@ -989,7 +989,7 @@ msg_may_trunc(int force, char_u *s) // If 'cmdheight' is zero or something unexpected happened "room" may be // negative. - room = (int)(Rows - cmdline_row - 1) * Columns + sc_col - 1; + room = (int)(Rows - cmdline_row - 1) * cmdline_width + sc_col - 1; if (room > 0 && (force || (shortmess(SHM_TRUNC) && !exmode_active)) && (n = (int)STRLEN(s) - room) > 0) { @@ -1287,6 +1287,11 @@ wait_return(int redraw) c = CAR; // no need for a return in ex mode got_int = FALSE; } + else if (!stuff_empty()) + // When there are stuffed characters, the next stuffed character will + // dismiss the hit-enter prompt immediately and have to be put back, so + // instead just don't show the hit-enter prompt at all. + c = CAR; else { // Make sure the hit-return prompt is on screen when 'guioptions' was @@ -1368,7 +1373,7 @@ wait_return(int redraw) c = K_IGNORE; msg_col = #ifdef FEAT_RIGHTLEFT - cmdmsg_rl ? Columns - 1 : + cmdmsg_rl ? cmdline_width - 1 : #endif 0; } @@ -1419,7 +1424,8 @@ wait_return(int redraw) if (c == K_LEFTMOUSE || c == K_MIDDLEMOUSE || c == K_RIGHTMOUSE || c == K_X1MOUSE || c == K_X2MOUSE) (void)jump_to_mouse(MOUSE_SETPOS, NULL, 0); - else if (vim_strchr((char_u *)"\r\n ", c) == NULL && c != Ctrl_C) + else if (vim_strchr((char_u *)"\r\n ", c) == NULL && c != Ctrl_C + && c != 'q') { // Put the character back in the typeahead buffer. Don't use // the stuff buffer, because lmaps wouldn't work. @@ -1477,7 +1483,7 @@ wait_return(int redraw) lines_left = -1; // reset lines_left at next msg_start() reset_last_sourcing(); if (keep_msg != NULL && vim_strsize(keep_msg) >= - (Rows - cmdline_row - 1) * Columns + sc_col) + (Rows - cmdline_row - 1) * cmdline_width + sc_col) VIM_CLEAR(keep_msg); // don't redisplay message, it's too long if (tmpState == MODE_SETWSIZE) // got resize event while in vgetc() @@ -1591,7 +1597,7 @@ msg_start(void) msg_row = cmdline_row; msg_col = #ifdef FEAT_RIGHTLEFT - cmdmsg_rl ? Columns - 1 : + cmdmsg_rl ? cmdline_width - 1 : #endif 0; } @@ -2233,21 +2239,21 @@ screen_puts_mbyte(char_u *s, int l, int attr) #ifdef FEAT_RIGHTLEFT cmdmsg_rl ? msg_col <= 1 : #endif - msg_col == Columns - 1)) + msg_col == cmdline_width - 1)) { // Doesn't fit, print a highlighted '>' to fill it up. msg_screen_putchar('>', HL_ATTR(HLF_AT)); return s; } - screen_puts_len(s, l, msg_row, msg_col, attr); + screen_puts_len(s, l, msg_row, cmdline_col_off + msg_col, attr); #ifdef FEAT_RIGHTLEFT if (cmdmsg_rl) { msg_col -= cw; if (msg_col == 0) { - msg_col = Columns; + msg_col = cmdline_width; ++msg_row; } } @@ -2255,7 +2261,7 @@ screen_puts_mbyte(char_u *s, int l, int attr) #endif { msg_col += cw; - if (msg_col >= Columns) + if (msg_col >= cmdline_width) { msg_col = 0; ++msg_row; @@ -2291,7 +2297,7 @@ msg_outtrans_long_len_attr(char_u *longstr, int len, int attr) int slen = len; int room; - room = Columns - msg_col; + room = cmdline_width - msg_col; if (len > room && room >= 20) { slen = (room - 3) / 2; @@ -2488,6 +2494,13 @@ msg_puts_display( did_wait_return = FALSE; while ((maxlen < 0 || (int)(s - str) < maxlen) && *s != NUL) { +#ifdef HAS_MESSAGE_WINDOW + // For echowindow, use full width; for regular messages, leave last column + int wrap_col = msg_win != NULL ? cmdline_width : cmdline_width - 1; +#else + int wrap_col = cmdline_width - 1; +#endif + /* * We are at the end of the screen line when: * - When outputting a newline. @@ -2502,10 +2515,11 @@ msg_puts_display( || (has_mbyte && (*mb_ptr2cells)(s) > 1 && msg_col <= 2)) : #endif - ((*s != '\r' && msg_col + t_col >= Columns - 1) - || (*s == TAB && msg_col + t_col >= ((Columns - 1) & ~7)) + ((*s != '\r' && msg_col + t_col >= wrap_col) + || (*s == TAB && msg_col + t_col + >= (wrap_col & ~7)) || (has_mbyte && (*mb_ptr2cells)(s) > 1 - && msg_col + t_col >= Columns - 2))))) + && msg_col + t_col >= wrap_col - 1))))) { /* * The screen is scrolled up when at the last row (some terminals @@ -2519,6 +2533,8 @@ msg_puts_display( if (msg_win != NULL) { put_msg_win(msg_win, where, t_s, s, lnum); + if (where == PUT_BELOW) + ++lnum; t_col = 0; where = PUT_BELOW; } @@ -2537,9 +2553,16 @@ msg_puts_display( // Scroll the screen up one line. msg_scroll_up(); - msg_row = Rows - 2; - if (msg_col >= Columns) // can happen after screen resize - msg_col = Columns - 1; +#ifdef HAS_MESSAGE_WINDOW + if (msg_win == NULL) + { +#endif + msg_row = Rows - 2; + if (msg_col >= cmdline_width) // can happen after screen resize + msg_col = cmdline_width - 1; +#ifdef HAS_MESSAGE_WINDOW + } +#endif // Display char in last column before showing more-prompt. if (*s >= ' ' @@ -2607,9 +2630,9 @@ msg_puts_display( } wrap = *s == '\n' - || msg_col + t_col >= Columns + || msg_col + t_col >= wrap_col || (has_mbyte && (*mb_ptr2cells)(s) > 1 - && msg_col + t_col >= Columns - 1); + && msg_col + t_col >= wrap_col - 1); if (t_col > 0 && (wrap || *s == '\r' || *s == '\b' || *s == '\t' || *s == BELL)) { @@ -2618,8 +2641,13 @@ msg_puts_display( if (msg_win != NULL) { put_msg_win(msg_win, where, t_s, s, lnum); + if (where == PUT_BELOW) + ++lnum; t_col = 0; where = PUT_BELOW; + // Reset msg_col after outputting to new line in echowindow + if (wrap) + msg_col = 0; } else #endif @@ -2642,13 +2670,14 @@ msg_puts_display( put_msg_win(msg_win, PUT_BELOW, t_s, t_s, lnum); ++lnum; } + msg_col = 0; // Reset column for new line } else #endif msg_didout = FALSE; // remember that line is empty #ifdef FEAT_RIGHTLEFT if (cmdmsg_rl) - msg_col = Columns - 1; + msg_col = cmdline_width - 1; else #endif msg_col = 0; @@ -2704,7 +2733,7 @@ msg_puts_display( # ifdef FEAT_RIGHTLEFT cmdmsg_rl || # endif - (cw > 1 && msg_col + t_col >= Columns - 1)) + (cw > 1 && msg_col + t_col >= wrap_col)) { if (l > 1) s = screen_puts_mbyte(s, l, attr) - 1; @@ -2786,8 +2815,8 @@ msg_scroll_up(void) // Scrolling up doesn't result in the right background. Set the // background here. It's not efficient, but avoids that we have to do // it all over the code. - screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, - ' ', ' ', HL_ATTR(HLF_MSG)); + screen_fill((int)Rows - 1, (int)Rows, cmdline_col_off, + cmdline_col_off + cmdline_width, ' ', ' ', HL_ATTR(HLF_MSG)); // Also clear the last char of the last but one line if it was not // cleared before to avoid a scroll-up. @@ -3073,7 +3102,8 @@ disp_sb_line(int row, msgchunk_T *smp, int clear_to_eol) // If clearing the screen did not work (e.g. because of a background // color and t_ut isn't set) clear until the last column here. if (clear_to_eol) - screen_fill(row, row + 1, msg_col, (int)Columns, + screen_fill(row, row + 1, + cmdline_col_off + msg_col, cmdline_col_off + cmdline_width, ' ', ' ', HL_ATTR(HLF_MSG)); if (mp->sb_eol || mp->sb_next == NULL) @@ -3095,14 +3125,15 @@ t_puts( { // output postponed text msg_didout = TRUE; // remember that line is not empty - screen_puts_len(t_s, (int)(s - t_s), msg_row, msg_col, attr); + screen_puts_len(t_s, (int)(s - t_s), msg_row, cmdline_col_off + msg_col, + attr); msg_col += *t_col; *t_col = 0; // If the string starts with a composing character don't increment the // column position for it. if (enc_utf8 && utf_iscomposing(utf_ptr2char(t_s))) --msg_col; - if (msg_col >= Columns) + if (msg_col >= cmdline_width) { msg_col = 0; ++msg_row; @@ -3178,7 +3209,7 @@ msg_puts_printf(char_u *str, int maxlen) if (cmdmsg_rl) { if (*s == CAR || *s == NL) - msg_col = Columns - 1; + msg_col = cmdline_width - 1; else --msg_col; } @@ -3456,7 +3487,8 @@ do_more_prompt(int typed_char) // scroll up, display line at bottom msg_scroll_up(); inc_msg_scrolled(); - screen_fill((int)Rows - 2, (int)Rows - 1, 0, (int)Columns, + screen_fill((int)Rows - 2, (int)Rows - 1, + cmdline_col_off, cmdline_col_off + cmdline_width, ' ', ' ', msg_attr); mp_last = disp_sb_line((int)Rows - 2, mp_last, FALSE); --toscroll; @@ -3466,8 +3498,8 @@ do_more_prompt(int typed_char) if (toscroll <= 0) { // displayed the requested text, more prompt again - screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, - ' ', ' ', msg_attr); + screen_fill((int)Rows - 1, (int)Rows, cmdline_col_off, + cmdline_col_off + cmdline_width, ' ', ' ', msg_attr); msg_moremsg(FALSE); continue; } @@ -3480,7 +3512,8 @@ do_more_prompt(int typed_char) } // clear the --more-- message - screen_fill((int)Rows - 1, (int)Rows, 0, (int)Columns, ' ', ' ', msg_attr); + screen_fill((int)Rows - 1, (int)Rows, cmdline_col_off, + cmdline_col_off + cmdline_width, ' ', ' ', msg_attr); State = oldState; setmouse(); if (quit_more) @@ -3490,7 +3523,7 @@ do_more_prompt(int typed_char) } #ifdef FEAT_RIGHTLEFT else if (cmdmsg_rl) - msg_col = Columns - 1; + msg_col = cmdline_width - 1; #endif entered = FALSE; @@ -3703,20 +3736,20 @@ mch_msg(char *str) msg_screen_putchar(int c, int attr) { msg_didout = TRUE; // remember that line is not empty - screen_putchar(c, msg_row, msg_col, attr); + screen_putchar(c, msg_row, cmdline_col_off + msg_col, attr); #ifdef FEAT_RIGHTLEFT if (cmdmsg_rl) { if (--msg_col == 0) { - msg_col = Columns; + msg_col = cmdline_width; ++msg_row; } } else #endif { - if (++msg_col >= Columns) + if (++msg_col >= cmdline_width) { msg_col = 0; ++msg_row; @@ -3731,11 +3764,11 @@ msg_moremsg(int full) char_u *s = (char_u *)_("-- More --"); attr = HL_ATTR(HLF_M); - screen_puts(s, (int)Rows - 1, 0, attr); + screen_puts(s, (int)Rows - 1, cmdline_col_off, attr); if (full) screen_puts((char_u *) _(" SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "), - (int)Rows - 1, vim_strsize(s), attr); + (int)Rows - 1, cmdline_col_off + vim_strsize(s), attr); } /* @@ -3759,7 +3792,7 @@ repeat_message(void) #endif else if (State == MODE_EXTERNCMD) { - windgoto(msg_row, msg_col); // put cursor back + windgoto(msg_row, cmdline_col_off + msg_col); // put cursor back } else if (State == MODE_HITRETURN || State == MODE_SETWSIZE) { @@ -3791,8 +3824,8 @@ msg_check_screen(void) if (msg_row >= Rows) msg_row = Rows - 1; - if (msg_col >= Columns) - msg_col = Columns - 1; + if (msg_col >= cmdline_width) + msg_col = cmdline_width - 1; return TRUE; } @@ -3838,17 +3871,21 @@ msg_clr_eos_force(void) #ifdef FEAT_RIGHTLEFT if (cmdmsg_rl) { - screen_fill(msg_row, msg_row + 1, 0, msg_col + 1, + screen_fill(msg_row, msg_row + 1, + cmdline_col_off, cmdline_col_off + msg_col + 1, ' ', ' ', msg_attr); - screen_fill(msg_row + 1, (int)Rows, 0, (int)Columns, + screen_fill(msg_row + 1, (int)Rows, + cmdline_col_off, cmdline_col_off + cmdline_width, ' ', ' ', msg_attr); } else #endif { - screen_fill(msg_row, msg_row + 1, msg_col, (int)Columns, + screen_fill(msg_row, msg_row + 1, + cmdline_col_off + msg_col, cmdline_col_off + cmdline_width, ' ', ' ', msg_attr); - screen_fill(msg_row + 1, (int)Rows, 0, (int)Columns, + screen_fill(msg_row + 1, (int)Rows, + cmdline_col_off, cmdline_col_off + cmdline_width, ' ', ' ', msg_attr); } } @@ -4157,11 +4194,11 @@ msg_advance(int col) msg_col = col; // for redirection, may fill it up later return; } - if (col >= Columns) // not enough room - col = Columns - 1; + if (col >= cmdline_width) // not enough room + col = cmdline_width - 1; #ifdef FEAT_RIGHTLEFT if (cmdmsg_rl) - while (msg_col > Columns - col) + while (msg_col > cmdline_width - col) msg_putchar(' '); else #endif @@ -4173,37 +4210,17 @@ msg_advance(int col) * Warn about missing Clipboard Support */ void -msg_warn_missing_clipboard(bool plus UNUSED, bool star UNUSED) +msg_warn_missing_clipboard(void) { -#ifndef FEAT_CLIPBOARD - static bool did_warn; - - if (!global_busy && !did_warn) + if (!global_busy && !did_warn_clipboard) { - msg(_("W24: Clipboard register not available. See :h W24")); - did_warn = true; - } +#ifdef FEAT_CLIPBOARD + msg(_("W23: Clipboard register not available, using register 0")); #else - if (!global_busy) - { - if (plus && star && !clip_plus.did_warn && !clip_star.did_warn) - { - msg(_("W23: Clipboard register not available, using register 0")); - clip_plus.did_warn = true; - clip_star.did_warn = true; - } - else if (plus && !clip_plus.did_warn) - { - msg(_("W23: Clipboard register + not available, using register 0")); - clip_plus.did_warn = true; - } - else if (star && !clip_star.did_warn) - { - msg(_("W23: Clipboard register * not available, using register 0")); - clip_star.did_warn = true; - } - } + msg(_("W24: Clipboard register not available. See :h W24")); #endif + did_warn_clipboard = TRUE; + } } #if defined(FEAT_CON_DIALOG) diff --git a/src/misc1.c b/src/misc1.c index dc64c03afd..ff337d3a87 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -1024,7 +1024,7 @@ get_number( ++allow_keys; // no mapping here, but recognize keys for (;;) { - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); c = safe_vgetc(); if (VIM_ISDIGIT(c)) { @@ -2290,7 +2290,7 @@ prepare_to_exit(void) else #endif { - windgoto((int)Rows - 1, 0); + windgoto((int)Rows - 1, cmdline_col_off); /* * Switch terminal mode back now, so messages end up on the "normal" diff --git a/src/misc2.c b/src/misc2.c index 907ddc129b..c3268d4b8a 100644 --- a/src/misc2.c +++ b/src/misc2.c @@ -1056,6 +1056,7 @@ static struct key_name_entry {TRUE, NL, STRING_INIT("NewLine"), TRUE}, {TRUE, NL, STRING_INIT("NL"), FALSE}, {TRUE, K_ZERO, STRING_INIT("Nul"), FALSE}, + {TRUE, OSC, STRING_INIT("OSC"), FALSE}, {TRUE, K_PAGEDOWN, STRING_INIT("PageDown"), FALSE}, {TRUE, K_PAGEUP, STRING_INIT("PageUp"), FALSE}, {TRUE, K_PE, STRING_INIT("PasteEnd"), FALSE}, @@ -1120,6 +1121,7 @@ static struct key_name_entry {TRUE, K_XF4, STRING_INIT("xF4"), FALSE}, {TRUE, K_XHOME, STRING_INIT("xHome"), FALSE}, {TRUE, K_XLEFT, STRING_INIT("xLeft"), FALSE}, + {TRUE, K_OSC, STRING_INIT("xOSC"), FALSE}, {TRUE, K_XRIGHT, STRING_INIT("xRight"), FALSE}, {TRUE, K_XUP, STRING_INIT("xUp"), FALSE}, {TRUE, K_ZEND, STRING_INIT("zEnd"), FALSE}, diff --git a/src/mouse.c b/src/mouse.c index 3d91944a1d..0eef451b0b 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -485,9 +485,8 @@ do_mouse( // Check for clicking in the tab page panel. #if defined(FEAT_TABPANEL) - if (mouse_row < firstwin->w_winrow + topframe->fr_height - && (mouse_col < firstwin->w_wincol - || mouse_col >= firstwin->w_wincol + topframe->fr_width)) + if (mouse_col < firstwin->w_wincol + || mouse_col >= firstwin->w_wincol + topframe->fr_width) { tp_label.is_panel = true; tp_label.just_in = true; @@ -2337,6 +2336,10 @@ check_termcode_mouse( * 0x23 = any button release * 0x60 = button 4 down (scroll wheel down) * 0x61 = button 5 down (scroll wheel up) + * 0x62 = button 6 down (scroll wheel left) + * 0x63 = button 7 down (scroll wheel right) + * 0xa0 = button 8 down (backward button) + * 0xa1 = button 9 down (forward button) * add 0x04 for SHIFT * add 0x08 for ALT * add 0x10 for CTRL @@ -2491,7 +2494,7 @@ check_termcode_mouse( * Linux console with GPM and the MS-DOS or Win32 console * (multi-clicks use >= 0x60). */ - if (mouse_code >= MOUSEWHEEL_LOW + if (mouse_code >= MOUSEWHEEL_LOW && mouse_code < MOUSESIDEBUTTONS_LOW # ifdef FEAT_GUI && !gui.in_use # endif @@ -3014,7 +3017,13 @@ check_termcode_mouse( held_button = MOUSE_RELEASE; } else + { +#if defined(UNIX) + if (use_xterm_mouse() && orig_mouse_code >= MOUSESIDEBUTTONS_LOW) + current_button = (current_button) ? MOUSE_X2 : MOUSE_X1; +#endif key_name[1] = get_pseudo_mouse_code(current_button, is_click, is_drag); + } // Make sure the mouse position is valid. Some terminals may return weird diff --git a/src/normal.c b/src/normal.c index 74ad66fba8..b5ff4cf0a8 100644 --- a/src/normal.c +++ b/src/normal.c @@ -1153,7 +1153,8 @@ end_visual_mode_keep_button(void) // we need to paste it somewhere while we still own the selection. // Only do this when the clipboard is already owned. Don't want to grab // the selection when hitting ESC. - if (clip_star.available && clip_star.owned) + if ((clip_star.available && clip_star.owned) + || (clip_plus.available && clip_plus.owned)) clip_auto_select(); # if defined(FEAT_EVAL) @@ -1858,12 +1859,13 @@ display_showcmd(void) else // 'showcmdloc' is "last" or empty { if (!showcmd_is_clear) - screen_puts(showcmd_buf, (int)Rows - 1, sc_col, 0); + screen_puts(showcmd_buf, (int)Rows - 1, + cmdline_col_off + sc_col, 0); // clear the rest of an old message by outputting up to SHOWCMD_COLS // spaces screen_puts((char_u *)" " + len, - (int)Rows - 1, sc_col + len, 0); + (int)Rows - 1, cmdline_col_off + sc_col + len, 0); } setcursor(); // put cursor back where it belongs @@ -5938,7 +5940,7 @@ nv_g_dollar_cmd(cmdarg_T *cap) { do i = gchar_cursor(); - while (VIM_ISWHITE(i) && oneleft() == OK); + while (IS_WHITE_OR_NUL(i) && oneleft() == OK); curwin->w_valid &= ~VALID_WCOL; } } @@ -7426,7 +7428,7 @@ nv_put_opt(cmdarg_T *cap, int fix_indent) was_visual = TRUE; regname = cap->oap->regname; keep_registers = cap->cmdchar == 'P'; -#ifdef FEAT_CLIPBOARD +#ifdef HAVE_CLIPMETHOD adjust_clip_reg(®name); #endif if (regname == 0 || regname == '"' diff --git a/src/ops.c b/src/ops.c index 1544f34d47..3fad2b44fd 100644 --- a/src/ops.c +++ b/src/ops.c @@ -754,6 +754,11 @@ block_insert( // the insert in the first line. curbuf->b_op_end.lnum = oap->end.lnum; curbuf->b_op_end.col = offset; + if (curbuf->b_visual.vi_end.coladd) + { + curbuf->b_visual.vi_end.col += curbuf->b_visual.vi_end.coladd; + curbuf->b_visual.vi_end.coladd = 0; + } } } // for all lnum @@ -795,7 +800,7 @@ op_delete(oparg_T *oap) // use register given with CTRL_R, defaults to zero oap->regname = VIsual_select_reg; -#ifdef FEAT_CLIPBOARD +#ifdef HAVE_CLIPMETHOD adjust_clip_reg(&oap->regname); #endif @@ -852,12 +857,18 @@ op_delete(oparg_T *oap) */ if (oap->regname != '_') { +#ifdef FEAT_CLIPBOARD_PROVIDER + inc_clip_provider(); +#endif if (oap->regname != 0) { // check for read-only register if (!valid_yank_reg(oap->regname, TRUE)) { beep_flush(); +#ifdef FEAT_CLIPBOARD_PROVIDER + dec_clip_provider(); +#endif return OK; } get_yank_register(oap->regname, TRUE); // yank into specif'd reg. @@ -883,7 +894,7 @@ op_delete(oparg_T *oap) // Yank into small delete register when no named register specified // and the delete is within one line. if (( -#ifdef FEAT_CLIPBOARD +#ifdef HAVE_CLIPMETHOD ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') || ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') || #endif @@ -913,6 +924,9 @@ op_delete(oparg_T *oap) if (n != 'y') { emsg(_(e_command_aborted)); +#ifdef FEAT_CLIPBOARD_PROVIDER + dec_clip_provider(); +#endif return FAIL; } } @@ -920,6 +934,9 @@ op_delete(oparg_T *oap) #if defined(FEAT_EVAL) if (did_yank && has_textyankpost()) yank_do_autocmd(oap, get_y_current()); +#endif +#ifdef FEAT_CLIPBOARD_PROVIDER + dec_clip_provider(); #endif } @@ -2034,6 +2051,7 @@ adjust_cursor_eol(void) int adj_cursor = (curwin->w_cursor.col > 0 && gchar_cursor() == NUL && (cur_ve_flags & VE_ONEMORE) == 0 + && (cur_ve_flags & VE_ALL) == 0 && !(restart_edit || (State & MODE_INSERT))); if (!adj_cursor) return; @@ -2381,7 +2399,7 @@ do_join( * Reset 'linebreak' and take care of side effects. * Returns the previous value, to be passed to restore_lbr(). */ - static int + int reset_lbr(void) { if (!curwin->w_p_lbr) @@ -2395,7 +2413,7 @@ reset_lbr(void) /* * Restore 'linebreak' and take care of side effects. */ - static void + void restore_lbr(int lbr_saved) { if (curwin->w_p_lbr || !lbr_saved) diff --git a/src/option.c b/src/option.c index b8a8e499b4..f6d352af46 100644 --- a/src/option.c +++ b/src/option.c @@ -392,7 +392,7 @@ set_init_clean_rtp(void) * vimrc found is located in '$XDG_CONFIG_HOME/vim/vimrc'. * In case the '$XDG_CONFIG_HOME' variable is not set, '$HOME/.config' is used * as a fallback as is defined in the XDG base dir specification: - * + * */ static void set_init_xdg_rtp(void) @@ -716,6 +716,9 @@ set_init_1(int clean_arg) curbuf->b_p_initialized = TRUE; curbuf->b_p_ac = -1; curbuf->b_p_ar = -1; // no local 'autoread' value +#ifdef HAVE_FSYNC + curbuf->b_p_fs = -1; // no local 'fsync' value +#endif curbuf->b_p_ul = NO_LOCAL_UNDOLEVEL; check_buf_options(curbuf); check_win_options(curwin); @@ -2234,6 +2237,10 @@ do_set_option_bool( value = -1; else if ((int *)varp == &curbuf->b_p_ac && opt_flags == OPT_LOCAL) value = -1; +#ifdef HAVE_FSYNC + else if ((int *)varp == &curbuf->b_p_fs && opt_flags == OPT_LOCAL) + value = -1; +#endif else value = *(int *)get_varp_scope(&(options[opt_idx]), OPT_GLOBAL); } @@ -6633,6 +6640,11 @@ unset_global_local_option(char_u *name, void *from) case PV_AR: buf->b_p_ar = -1; break; +#ifdef HAVE_FSYNC + case PV_FS: + buf->b_p_fs = -1; + break; +#endif case PV_BKC: clear_string_option(&buf->b_p_bkc); buf->b_bkc_flags = 0; @@ -6662,9 +6674,6 @@ unset_global_local_option(char_u *name, void *from) clear_string_option(&buf->b_p_cot); buf->b_cot_flags = 0; break; - case PV_ISE: - clear_string_option(&buf->b_p_ise); - break; case PV_DICT: clear_string_option(&buf->b_p_dict); break; @@ -6770,6 +6779,9 @@ get_varp_scope(struct vimoption *p, int scope) switch ((int)p->indir) { case PV_FP: return (char_u *)&(curbuf->b_p_fp); +#ifdef HAVE_FSYNC + case PV_FS: return (char_u *)&(curbuf->b_p_fs); +#endif #ifdef FEAT_EVAL case PV_FFU: return (char_u *)&(curbuf->b_p_ffu); #endif @@ -6793,7 +6805,6 @@ get_varp_scope(struct vimoption *p, int scope) case PV_INC: return (char_u *)&(curbuf->b_p_inc); #endif case PV_COT: return (char_u *)&(curbuf->b_p_cot); - case PV_ISE: return (char_u *)&(curbuf->b_p_ise); case PV_DICT: return (char_u *)&(curbuf->b_p_dict); #ifdef FEAT_DIFF case PV_DIA: return (char_u *)&(curbuf->b_p_dia); @@ -6881,8 +6892,6 @@ get_varp(struct vimoption *p) #endif case PV_COT: return *curbuf->b_p_cot != NUL ? (char_u *)&(curbuf->b_p_cot) : p->var; - case PV_ISE: return *curbuf->b_p_ise != NUL - ? (char_u *)&(curbuf->b_p_ise) : p->var; case PV_DICT: return *curbuf->b_p_dict != NUL ? (char_u *)&(curbuf->b_p_dict) : p->var; #ifdef FEAT_DIFF @@ -6897,6 +6906,10 @@ get_varp(struct vimoption *p) #endif case PV_FP: return *curbuf->b_p_fp != NUL ? (char_u *)&(curbuf->b_p_fp) : p->var; +#ifdef HAVE_FSYNC + case PV_FS: return curbuf->b_p_fs >= 0 + ? (char_u *)&(curbuf->b_p_fs) : p->var; +#endif #ifdef FEAT_EVAL case PV_FFU: return *curbuf->b_p_ffu != NUL ? (char_u *)&(curbuf->b_p_ffu) : p->var; @@ -7020,9 +7033,7 @@ get_varp(struct vimoption *p) case PV_CINSD: return (char_u *)&(curbuf->b_p_cinsd); case PV_CINW: return (char_u *)&(curbuf->b_p_cinw); case PV_COM: return (char_u *)&(curbuf->b_p_com); -#ifdef FEAT_FOLDING case PV_CMS: return (char_u *)&(curbuf->b_p_cms); -#endif case PV_CPT: return (char_u *)&(curbuf->b_p_cpt); #ifdef BACKSLASH_IN_FILENAME case PV_CSL: return (char_u *)&(curbuf->b_p_csl); @@ -7614,10 +7625,8 @@ buf_copy_options(buf_T *buf, int flags) COPY_OPT_SCTX(buf, BV_SN); buf->b_p_com = vim_strsave(p_com); COPY_OPT_SCTX(buf, BV_COM); -#ifdef FEAT_FOLDING buf->b_p_cms = vim_strsave(p_cms); COPY_OPT_SCTX(buf, BV_CMS); -#endif buf->b_p_fo = vim_strsave(p_fo); COPY_OPT_SCTX(buf, BV_FO); buf->b_p_flp = vim_strsave(p_flp); @@ -7710,6 +7719,9 @@ buf_copy_options(buf_T *buf, int flags) // are not copied, start using the global value buf->b_p_ac = -1; buf->b_p_ar = -1; +#ifdef HAVE_FSYNC + buf->b_p_fs = -1; +#endif buf->b_p_ul = NO_LOCAL_UNDOLEVEL; buf->b_p_bkc = empty_option; buf->b_bkc_flags = 0; @@ -7743,7 +7755,6 @@ buf_copy_options(buf_T *buf, int flags) buf->b_p_dia = empty_option; #endif buf->b_p_tsr = empty_option; - buf->b_p_ise = empty_option; #ifdef FEAT_COMPL_FUNC buf->b_p_tsrfu = empty_option; #endif diff --git a/src/option.h b/src/option.h index ec3f0f7268..3f125d9b69 100644 --- a/src/option.h +++ b/src/option.h @@ -303,13 +303,14 @@ typedef enum { #define GO_ASELPLUS 'P' // autoselectPlus #define GO_RIGHT 'r' // use right scrollbar #define GO_VRIGHT 'R' // right scrollbar with vert split +#define GO_FULLSCREEN 's' // enter fullscreen #define GO_TEAROFF 't' // add tear-off menu items #define GO_TOOLBAR 'T' // add toolbar #define GO_FOOTER 'F' // add footer #define GO_VERTICAL 'v' // arrange dialog buttons vertically #define GO_KEEPWINSIZE 'k' // keep GUI window size // all possible flags for 'go' -#define GO_ALL "!aAbcCdefFghilLmMpPrRtTvk" +#define GO_ALL "!aAbcCdefFghilLmMpPrRstTvk" // flags for 'comments' option #define COM_NEST 'n' // comments strings nest @@ -505,14 +506,12 @@ EXTERN int p_cdh; // 'cdhome' EXTERN char_u *p_cino; // 'cinoptions' EXTERN char_u *p_cedit; // 'cedit' EXTERN long p_cwh; // 'cmdwinheight' -#ifdef FEAT_CLIPBOARD +#ifdef HAVE_CLIPMETHOD EXTERN char_u *p_cb; // 'clipboard' EXTERN char_u *p_cpm; // 'clipmethod' #endif EXTERN long p_ch; // 'cmdheight' -#ifdef FEAT_FOLDING EXTERN char_u *p_cms; // 'commentstring' -#endif EXTERN char_u *p_cpt; // 'complete' EXTERN long p_cto; // 'completetimeout' #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) @@ -753,7 +752,6 @@ EXTERN char_u *p_inde; // 'indentexpr' EXTERN char_u *p_indk; // 'indentkeys' #endif EXTERN int p_im; // 'insertmode' -EXTERN char_u *p_ise; // 'isexpand' EXTERN char_u *p_isf; // 'isfname' EXTERN char_u *p_isi; // 'isident' EXTERN char_u *p_isk; // 'iskeyword' @@ -1217,9 +1215,7 @@ enum , BV_CINSD , BV_CINW , BV_CM -#ifdef FEAT_FOLDING , BV_CMS -#endif , BV_COM , BV_COT , BV_CPT @@ -1253,6 +1249,9 @@ enum , BV_FF , BV_FLP , BV_FO +#ifdef HAVE_FSYNC + , BV_FS +#endif , BV_FT , BV_IMI , BV_IMS diff --git a/src/optiondefs.h b/src/optiondefs.h index 541b2b295f..3f8ecf793b 100644 --- a/src/optiondefs.h +++ b/src/optiondefs.h @@ -48,9 +48,7 @@ #define PV_CINSD OPT_BUF(BV_CINSD) #define PV_CINW OPT_BUF(BV_CINW) #define PV_CM OPT_BOTH(OPT_BUF(BV_CM)) -#ifdef FEAT_FOLDING -# define PV_CMS OPT_BUF(BV_CMS) -#endif +#define PV_CMS OPT_BUF(BV_CMS) #define PV_COM OPT_BUF(BV_COM) #define PV_COT OPT_BOTH(OPT_BUF(BV_COT)) #define PV_CPT OPT_BUF(BV_CPT) @@ -84,6 +82,9 @@ #define PV_FF OPT_BUF(BV_FF) #define PV_FLP OPT_BUF(BV_FLP) #define PV_FO OPT_BUF(BV_FO) +#ifdef HAVE_FSYNC +# define PV_FS OPT_BOTH(OPT_BUF(BV_FS)) +#endif #define PV_FT OPT_BUF(BV_FT) #define PV_IMI OPT_BUF(BV_IMI) #define PV_IMS OPT_BUF(BV_IMS) @@ -95,7 +96,6 @@ # define PV_INEX OPT_BUF(BV_INEX) #endif #define PV_INF OPT_BUF(BV_INF) -#define PV_ISE OPT_BOTH(OPT_BUF(BV_ISE)) #define PV_ISK OPT_BUF(BV_ISK) #ifdef FEAT_CRYPT # define PV_KEY OPT_BUF(BV_KEY) @@ -669,7 +669,7 @@ static struct vimoption options[] = (char_u *)0L} SCTX_INIT}, {"clipboard", "cb", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP, -#ifdef FEAT_CLIPBOARD +#ifdef HAVE_CLIPMETHOD (char_u *)&p_cb, PV_NONE, did_set_clipboard, expand_set_clipboard, # if defined(FEAT_XCLIPBOARD) || defined(FEAT_WAYLAND_CLIPBOARD) {(char_u *)"autoselect,exclude:cons\\|linux", @@ -683,7 +683,7 @@ static struct vimoption options[] = #endif SCTX_INIT}, {"clipmethod", "cpm", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP, -#ifdef FEAT_CLIPBOARD +#ifdef HAVE_CLIPMETHOD (char_u *)&p_cpm, PV_NONE, did_set_clipmethod, expand_set_clipmethod, # ifdef UNIX {(char_u *)"wayland,x11", (char_u *)0L} @@ -726,13 +726,8 @@ static struct vimoption options[] = (char_u *)0L} SCTX_INIT}, {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF, -#ifdef FEAT_FOLDING (char_u *)&p_cms, PV_CMS, did_set_commentstring, NULL, {(char_u *)"/* %s */", (char_u *)0L} -#else - (char_u *)NULL, PV_NONE, NULL, NULL, - {(char_u *)0L, (char_u *)0L} -#endif SCTX_INIT}, // P_PRI_MKRC isn't needed here, optval_default() // always returns TRUE for 'compatible' @@ -1235,7 +1230,7 @@ static struct vimoption options[] = {(char_u *)"", (char_u *)0L} SCTX_INIT}, {"fsync", "fs", P_BOOL|P_SECURE|P_VI_DEF, #ifdef HAVE_FSYNC - (char_u *)&p_fs, PV_NONE, NULL, NULL, + (char_u *)&p_fs, PV_FS, NULL, NULL, {(char_u *)TRUE, (char_u *)0L} #else (char_u *)NULL, PV_NONE, NULL, NULL, @@ -1583,10 +1578,6 @@ static struct vimoption options[] = {"insertmode", "im", P_BOOL|P_VI_DEF|P_VIM, (char_u *)&p_im, PV_NONE, did_set_insertmode, NULL, {(char_u *)FALSE, (char_u *)0L} SCTX_INIT}, - {"isexpand", "ise", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP, - (char_u *)&p_ise, PV_ISE, did_set_isexpand, NULL, - {(char_u *)"", (char_u *)0L} - SCTX_INIT}, {"isfname", "isf", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, (char_u *)&p_isf, PV_NONE, did_set_isopt, NULL, { diff --git a/src/optionstr.c b/src/optionstr.c index d8ab0a6a3c..29af7aee52 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -41,11 +41,13 @@ static char *(p_dip_inline_values[]) = {"none", "simple", "char", "word", NULL}; #endif static char *(p_nf_values[]) = {"bin", "octal", "hex", "alpha", "unsigned", "blank", NULL}; static char *(p_ff_values[]) = {FF_UNIX, FF_DOS, FF_MAC, NULL}; -#ifdef FEAT_CLIPBOARD +#ifdef HAVE_CLIPMETHOD // Note: Keep this in sync with did_set_clipboard() -static char *(p_cb_values[]) = {"unnamed", "unnamedplus", "autoselect", "autoselectplus", "autoselectml", "html", "exclude:", NULL}; -// Note: Keep this in sync with get_clipmethod() -static char *(p_cpm_values[]) = {"wayland", "x11", NULL}; +static char *(p_cb_values[]) = {"unnamed", "unnamedplus", +# ifdef FEAT_CLIPBOARD + "autoselect", "autoselectplus", "autoselectml", "html", "exclude:", +# endif + NULL}; #endif #ifdef FEAT_CRYPT static char *(p_cm_values[]) = {"zip", "blowfish", "blowfish2", @@ -161,7 +163,6 @@ didset_string_options(void) (void)opt_strings_flags(p_cmp, p_cmp_values, &cmp_flags, TRUE); (void)opt_strings_flags(p_bkc, p_bkc_values, &bkc_flags, TRUE); (void)opt_strings_flags(p_bo, p_bo_values, &bo_flags, TRUE); - (void)opt_strings_flags(p_cfc, p_cfc_values, &cfc_flags, TRUE); (void)opt_strings_flags(p_cot, p_cot_values, &cot_flags, TRUE); #ifdef FEAT_SESSION (void)opt_strings_flags(p_ssop, p_ssop_values, &ssop_flags, TRUE); @@ -307,9 +308,7 @@ check_buf_options(buf_T *buf) check_string_option(&buf->b_p_flp); check_string_option(&buf->b_p_isk); check_string_option(&buf->b_p_com); -#ifdef FEAT_FOLDING check_string_option(&buf->b_p_cms); -#endif check_string_option(&buf->b_p_nf); check_string_option(&buf->b_p_qe); #ifdef FEAT_SYN_HL @@ -332,7 +331,6 @@ check_buf_options(buf_T *buf) check_string_option(&buf->b_p_cinw); check_string_option(&buf->b_p_cot); check_string_option(&buf->b_p_cpt); - check_string_option(&buf->b_p_ise); #ifdef FEAT_COMPL_FUNC check_string_option(&buf->b_p_cfu); check_string_option(&buf->b_p_ofu); @@ -1401,7 +1399,7 @@ expand_set_casemap(optexpand_T *args, int *numMatches, char_u ***matches) matches); } -#if defined(FEAT_CLIPBOARD) +#if defined(HAVE_CLIPMETHOD) int expand_set_clipboard(optexpand_T *args, int *numMatches, char_u ***matches) { @@ -1412,7 +1410,9 @@ expand_set_clipboard(optexpand_T *args, int *numMatches, char_u ***matches) numMatches, matches); } +#endif +#ifdef HAVE_CLIPMETHOD char * did_set_clipmethod(optset_T *args UNUSED) { @@ -1422,12 +1422,61 @@ did_set_clipmethod(optset_T *args UNUSED) int expand_set_clipmethod(optexpand_T *args, int *numMatches, char_u ***matches) { - return expand_set_opt_string( + // We want to expand using the predefined clipmethod values + clipboard + // provider names. + int result; + char **values; + int count, pos = 0, start = 0; +#ifdef FEAT_EVAL + dict_T *providers = get_vim_var_dict(VV_CLIPPROVIDERS); +#else + dict_T *providers = NULL; +#endif + hashtab_T *ht = providers == NULL ? NULL : &providers->dv_hashtab; + + count = (ht == NULL ? 0 : ht->ht_used); +#ifdef FEAT_WAYLAND_CLIPBOARD + count++; + start++; +#endif +#ifdef FEAT_XCLIPBOARD + count++; + start++; +#endif + values = ALLOC_MULT(char *, count + 1); // Add NULL terminator too + + if (values == NULL) + return FAIL; + +#ifdef FEAT_WAYLAND_CLIPBOARD + values[pos++] = "wayland"; +#endif +#ifdef FEAT_XCLIPBOARD + values[pos++] = "x11"; +#endif + + if (ht != NULL) + for (long_u i = 0; i < ht->ht_mask + 1; i++) + { + hashitem_T *hi = ht->ht_array + i; + + if (!HASHITEM_EMPTY(hi)) + values[pos++] = (char *)vim_strsave(hi->hi_key); + } + values[pos++] = NULL; + + result = expand_set_opt_string( args, - p_cpm_values, - ARRAY_LENGTH(p_cpm_values) - 1, + values, + count, numMatches, matches); + + for (int i = start; i < count; i++) + vim_free(values[i]); + vim_free(values); + + return result; } #endif @@ -1587,7 +1636,6 @@ did_set_comments(optset_T *args) return errmsg; } -#if defined(FEAT_FOLDING) /* * The 'commentstring' option is changed. */ @@ -1601,7 +1649,6 @@ did_set_commentstring(optset_T *args) return NULL; } -#endif /* * Check if value for 'complete' is valid when 'complete' option is changed. @@ -2935,48 +2982,6 @@ did_set_imactivatekey(optset_T *args UNUSED) } #endif -/* - * The 'isexpand' option is changed. - */ - char * -did_set_isexpand(optset_T *args) -{ - char_u *ise = p_ise; - char_u *p; - int last_was_comma = FALSE; - - if (args->os_flags & OPT_LOCAL) - ise = curbuf->b_p_ise; - - for (p = ise; *p != NUL;) - { - if (*p == '\\' && p[1] == ',') - { - p += 2; - last_was_comma = FALSE; - continue; - } - - if (*p == ',') - { - if (last_was_comma) - return e_invalid_argument; - last_was_comma = TRUE; - p++; - continue; - } - - last_was_comma = FALSE; - MB_PTR_ADV(p); - } - - if (last_was_comma) - return e_invalid_argument; - - return NULL; -} - - /* * The 'iskeyword' option is changed. */ @@ -4040,6 +4045,7 @@ did_set_signcolumn(optset_T *args) { char_u **varp = (char_u **)args->os_varp; +#if defined(FEAT_LINEBREAK) if (check_opt_strings(*varp, p_scl_values, FALSE) != OK) return e_invalid_argument; // When changing the 'signcolumn' to or from 'number', recompute the @@ -4048,6 +4054,7 @@ did_set_signcolumn(optset_T *args) || (*curwin->w_p_scl == 'n' && *(curwin->w_p_scl + 1) =='u')) && (curwin->w_p_nu || curwin->w_p_rnu)) curwin->w_nrwidth_line_count = 0; +#endif return NULL; } diff --git a/src/os_haiku.h b/src/os_haiku.h index c9ce8fcf4f..cd6feb2c16 100644 --- a/src/os_haiku.h +++ b/src/os_haiku.h @@ -26,8 +26,8 @@ #ifdef RUNTIME_GLOBAL # ifdef RUNTIME_GLOBAL_AFTER # define DFLT_RUNTIMEPATH USR_VIM_DIR "," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER "," USR_VIM_DIR "/after" -# define XDG_RUNTIMEPATH "$XDG_CONFIG_HOME/vim," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER "/after,$XDG_CONFIG_HOME/vim/after" -# define XDG_RUNTIMEPATH_FB "~/config/settings/vim," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER "/after,~/config/settings/vim/after" +# define XDG_RUNTIMEPATH "$XDG_CONFIG_HOME/vim," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER ",$XDG_CONFIG_HOME/vim/after" +# define XDG_RUNTIMEPATH_FB "~/config/settings/vim," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER ",~/config/settings/vim/after" # define CLEAN_RUNTIMEPATH RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER # else # define DFLT_RUNTIMEPATH USR_VIM_DIR "," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL "/after," USR_VIM_DIR "/after" diff --git a/src/os_macosx.m b/src/os_macosx.m index c49678150c..6139723314 100644 --- a/src/os_macosx.m +++ b/src/os_macosx.m @@ -386,7 +386,7 @@ #ifdef FEAT_SOUND -static NSMutableDictionary *sounds_list = nil; +static NSMutableDictionary *sounds_list = nil; /// A delegate for handling when a sound has stopped playing, in /// order to clean up the sound and to send a callback. @@ -463,9 +463,9 @@ - (void) sound:(NSSound *)sound didFinishPlaying:(BOOL)flag if (sounds_list == nil) { - sounds_list = [[NSMutableDictionary alloc] init]; + sounds_list = [[NSMutableDictionary alloc] init]; } - sounds_list[[NSNumber numberWithLong:sound_id]] = sound; + [sounds_list setObject:sound forKey:[NSNumber numberWithLong:sound_id]]; // Make a delegate to handle when the sound stops. No need to call // autorelease because NSSound only holds a weak reference to it. @@ -482,7 +482,7 @@ - (void) sound:(NSSound *)sound didFinishPlaying:(BOOL)flag { @autoreleasepool { - NSSound *sound = sounds_list[[NSNumber numberWithLong:sound_id]]; + NSSound *sound = [sounds_list objectForKey:[NSNumber numberWithLong:sound_id]]; if (sound != nil) { // Stop the sound. No need to release it because the delegate will do diff --git a/src/os_mswin.c b/src/os_mswin.c index e407b563b0..0869772e7a 100644 --- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -407,7 +407,19 @@ mswin_stat_impl(const WCHAR *name, stat_T *stp, const int resolve) DWORD flag = 0; WIN32_FIND_DATAW findDataW; -#ifdef _UCRT +#if 0 && defined(_UCRT) + // This code was disabled because the behavior of MSVC's _wstat (actually + // _wstat64) for empty symlinks varies depending on the C runtime you link + // to. + // + // The expected behavior here is for _wstat() to fail for empty symlinks. + // The expected behavior occurs when linking to a static runtime. However, + // the expected behavior does not occur when linking to a dynamic runtime, + // and it succeeds for empty symlinks. This causes Test_glob_symlinks in + // test_functions.vim to fail when linking to a dynamic runtime. + // + // For more details, see: + // https://github.com/koron/vc-stat-behavior-verification if (resolve) // Universal CRT can handle symlinks properly. return _wstat(name, stp); @@ -2234,7 +2246,7 @@ enumWindowsGetNames(HWND hwnd, LPARAM lparam) // Add the name to the list ga_concat(ga, (char_u *)server); - ga_concat(ga, (char_u *)"\n"); + ga_concat_len(ga, (char_u *)"\n", 1); return TRUE; } diff --git a/src/os_unix.c b/src/os_unix.c index 25c6d1890e..d2d308f949 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -3687,8 +3687,10 @@ mch_early_init(void) * threads’ quality of service classes clamped. */ #ifdef MACOS_X +# ifdef MAC_OS_X_VERSION_10_7 integer_t policy = TASK_DEFAULT_APPLICATION; task_policy_set(mach_task_self(), TASK_CATEGORY_POLICY, &policy, 1); +# endif #endif } @@ -3759,7 +3761,7 @@ exit_scroll(void) { restore_cterm_colors(); // get original colors back msg_clr_eos_force(); // clear the rest of the display - windgoto((int)Rows - 1, 0); // may have moved the cursor + windgoto((int)Rows - 1, cmdline_col_off); // may have moved the cursor } } @@ -5583,7 +5585,7 @@ mch_call_shell_fork( else msg_outtrans_len(ta_buf + i, 1); } - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); out_flush(); } @@ -5705,7 +5707,7 @@ mch_call_shell_fork( msg_puts((char *)buffer); } - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); cursor_on(); out_flush(); # if FEAT_GUI_MACVIM @@ -9394,8 +9396,8 @@ socket_server_uninit(void) socket_server_list_sockets(void) { garray_T str; - char_u *buf; - char_u *path; + string_T buf; + string_T path; DIR *dirp; struct dirent *dp; struct sockaddr_un addr; @@ -9405,13 +9407,15 @@ socket_server_list_sockets(void) (char_u *)"/tmp" }; - if ((buf = alloc(sizeof(addr.sun_path))) == NULL) + if ((buf.string = alloc(sizeof(addr.sun_path))) == NULL) return NULL; - if ((path = alloc(sizeof(addr.sun_path))) == NULL) + if ((path.string = alloc(sizeof(addr.sun_path))) == NULL) { - vim_free(buf); + vim_free(buf.string); return NULL; } + buf.length = 0; + path.length = 0; ga_init2(&str, 1, 100); @@ -9424,15 +9428,13 @@ socket_server_list_sockets(void) if (STRCMP(dir, "/tmp") == 0 || (known_dirs[1] != NULL && STRCMP(dir, known_dirs[1]) == 0)) - vim_snprintf((char *)path, sizeof(addr.sun_path), "%s/vim-%lu", - dir, (unsigned long int)getuid()); + path.length = vim_snprintf_safelen((char *)path.string, sizeof(addr.sun_path), + "%s/vim-%lu", dir, (unsigned long int)getuid()); else - vim_snprintf((char *)path, sizeof(addr.sun_path), "%s/vim", dir); - - dir = path; - - dirp = opendir((char *)dir); + path.length = vim_snprintf_safelen((char *)path.string, sizeof(addr.sun_path), + "%s/vim", dir); + dirp = opendir((char *)path.string); if (dirp == NULL) continue; @@ -9442,15 +9444,15 @@ socket_server_list_sockets(void) if (STRCMP(dp->d_name, ".") == 0 || STRCMP(dp->d_name, "..") == 0) continue; - vim_snprintf((char *)buf, sizeof(addr.sun_path), "%s/%s", - dir, dp->d_name); + buf.length = vim_snprintf_safelen((char *)buf.string, sizeof(addr.sun_path), + "%s/%s", path.string, dp->d_name); // Try sending an ALIVE command. This is more assuring than a // simple connect, and *also seems to make tests less flaky*. - if (!socket_server_check_alive(buf)) + if (!socket_server_check_alive(buf.string)) continue; - ga_concat(&str, (char_u *)dp->d_name); + ga_concat_len(&str, (char_u *)dp->d_name, buf.length - (path.length + 1)); ga_append(&str, '\n'); } @@ -9459,8 +9461,8 @@ socket_server_list_sockets(void) break; } - vim_free(path); - vim_free(buf); + vim_free(path.string); + vim_free(buf.string); ga_append(&str, NUL); diff --git a/src/os_unix.h b/src/os_unix.h index 145a404e03..2125ae7bad 100644 --- a/src/os_unix.h +++ b/src/os_unix.h @@ -359,8 +359,8 @@ typedef struct dsc$descriptor DESC; # ifdef RUNTIME_GLOBAL # ifdef RUNTIME_GLOBAL_AFTER # define DFLT_RUNTIMEPATH "~/.vim," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER ",~/.vim/after" -# define XDG_RUNTIMEPATH "$XDG_CONFIG_HOME/vim," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER "/after,$XDG_CONFIG_HOME/vim/after" -# define XDG_RUNTIMEPATH_FB "~/.config/vim," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER "/after,~/.config/vim/after" +# define XDG_RUNTIMEPATH "$XDG_CONFIG_HOME/vim," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER ",$XDG_CONFIG_HOME/vim/after" +# define XDG_RUNTIMEPATH_FB "~/.config/vim," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER ",~/.config/vim/after" # define CLEAN_RUNTIMEPATH RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL_AFTER # else # define DFLT_RUNTIMEPATH "~/.vim," RUNTIME_GLOBAL ",$VIMRUNTIME," RUNTIME_GLOBAL "/after,~/.vim/after" diff --git a/src/os_win32.c b/src/os_win32.c index 43a3da5d87..83f1b1ce3a 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -161,7 +161,7 @@ static int suppress_winsize = 1; // don't fiddle with console static WCHAR *exe_pathw = NULL; static BOOL win8_or_later = FALSE; -static BOOL win10_22H2_or_later = FALSE; +BOOL win10_22H2_or_later = FALSE; BOOL win11_or_later = FALSE; // used in gui_mch_set_titlebar_colors(void) #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL) @@ -2867,7 +2867,8 @@ executable_exists( goto theend; } - if (mch_getenv("NoDefaultCurrentDirectoryInExePath") == NULL) + if (mch_getenv("NoDefaultCurrentDirectoryInExePath") == NULL && + strstr((char *)gettail(p_sh), "cmd.exe") != NULL) { STRCPY(pathbuf.string, ".;"); pathbuf.length = 2; @@ -2919,7 +2920,7 @@ executable_exists( (char *)buf, sizeof(buf), "%.*s%s%s", (int)(e - p), p, - !after_pathsep(p, e - 1) ? PATHSEPSTR : "", + !after_pathsep(p, e) ? PATHSEPSTR : "", name); } @@ -4436,7 +4437,7 @@ handler_routine( case CTRL_CLOSE_EVENT: case CTRL_LOGOFF_EVENT: case CTRL_SHUTDOWN_EVENT: - windgoto((int)Rows - 1, 0); + windgoto((int)Rows - 1, cmdline_col_off); g_fForceExit = TRUE; vim_snprintf((char *)IObuff, IOSIZE, _("Vim: Caught %s event\n"), @@ -5058,7 +5059,7 @@ dump_pipe(int options, msg_puts((char *)buffer); } - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); cursor_on(); out_flush(); } @@ -5257,7 +5258,7 @@ mch_system_piped(char *cmd, int options) else msg_outtrans_len(ta_buf + i, 1); } - windgoto(msg_row, msg_col); + windgoto(msg_row, cmdline_col_off + msg_col); out_flush(); ta_len += len; @@ -5483,6 +5484,21 @@ mch_call_shell_terminal( return retval; } #endif +/* Restore a previous environment variable value, or unset it if NULL. + * 'must_free' indicates whether 'old_value' was allocated. + */ + static void +restore_env_var(char_u *name, char_u *old_value, int must_free) +{ + if (old_value != NULL) + { + vim_setenv(name, old_value); + if (must_free) + vim_free(old_value); + return; + } + vim_unsetenv(name); +} /* * Either execute a command by calling the shell or start a new shell @@ -5495,6 +5511,8 @@ mch_call_shell( int x = 0; int tmode = cur_tmode; WCHAR szShellTitle[512]; + int must_free; + char_u *oldval; #ifdef FEAT_EVAL ch_log(NULL, "executing shell command: %s", cmd); @@ -5519,6 +5537,11 @@ mch_call_shell( } } } + // do not execute anything from the current directory by setting the + // environment variable $NoDefaultCurrentDirectoryInExePath + oldval = vim_getenv((char_u *)"NoDefaultCurrentDirectoryInExePath", + &must_free); + vim_setenv((char_u *)"NoDefaultCurrentDirectoryInExePath", (char_u *)"1"); out_flush(); @@ -5552,6 +5575,8 @@ mch_call_shell( // Use a terminal window to run the command in. x = mch_call_shell_terminal(cmd, options); resettitle(); + restore_env_var((char_u *)"NoDefaultCurrentDirectoryInExePath", + oldval, must_free); return x; } } @@ -5776,6 +5801,10 @@ mch_call_shell( } } + // Restore original value of NoDefaultCurrentDirectoryInExePath + restore_env_var((char_u *)"NoDefaultCurrentDirectoryInExePath", + oldval, must_free); + if (tmode == TMODE_RAW) { // The shell may have messed with the mode, always set it. @@ -9045,22 +9074,38 @@ resize_console_buf(void) char * GetWin32Error(void) { - static char *oldmsg = NULL; - char *msg = NULL; + static char *oldmsg = NULL; + char *acp_msg = NULL; + DWORD acp_len; + char *enc_msg = NULL; + int enc_len = 0; + + // get formatted message from OS + acp_len = FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, + NULL, GetLastError(), 0, (LPSTR)&acp_msg, 0, NULL); + if (acp_len == 0 || acp_msg == NULL) + return NULL; - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, - NULL, GetLastError(), 0, (LPSTR)&msg, 0, NULL); + // clean oldmsg if remained. if (oldmsg != NULL) - LocalFree(oldmsg); - if (msg == NULL) + { + vim_free(oldmsg); + oldmsg = NULL; + } + + acp_to_enc((char_u *)acp_msg, (int)acp_len, (char_u **)&enc_msg, &enc_len); + LocalFree(acp_msg); + if (enc_msg == NULL) return NULL; // remove trailing \r\n - char *pcrlf = strstr(msg, "\r\n"); + char *pcrlf = strstr(enc_msg, "\r\n"); if (pcrlf != NULL) *pcrlf = NUL; - oldmsg = msg; - return msg; + + oldmsg = enc_msg; + return enc_msg; } #if defined(FEAT_RELTIME) diff --git a/src/po/check.vim b/src/po/check.vim old mode 100755 new mode 100644 diff --git a/src/po/de.po b/src/po/de.po index 4d0db25b3e..eb274404f3 100644 --- a/src/po/de.po +++ b/src/po/de.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Vim\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-07-18 20:09+0200\n" +"Report-Msgid-Bugs-To: vim-dev@vim.org\n" +"POT-Creation-Date: 2026-01-06 12:15+0000\n" "PO-Revision-Date: 2008-05-24 17:26+0200\n" "Last-Translator: Christian Brabandt \n" "Language-Team: German\n" @@ -162,8 +162,8 @@ msgid "%d%%" msgstr "%d%%" #, c-format -msgid "%2s" -msgstr "%2s" +msgid "%3s" +msgstr "%3s" #, c-format msgid " (%d of %d)" @@ -260,6 +260,9 @@ msgstr ": Versendung fehlgeschlagen. Versuche lokale Ausf msgid "%d of %d edited" msgstr "%d von %d bearbeitet" +msgid "Socket server not online:Send expression failed" +msgstr "Socket-Server nicht online: Versenden des Ausdrucks fehlgeschlagen." + msgid "No display: Send expression failed.\n" msgstr "Keine Anzeige: Versenden des Ausdrucks fehlgeschlagen.\n" @@ -1592,11 +1595,20 @@ msgstr "" msgid "" "\n" -"Where case is ignored prepend / to make flag upper case" +"Where command is down-cased, prepend / (like: -/R) to treat flag as upper-" +"case." +msgstr "" +"\n" +"Wenn der Befehl kleingeschrieben ist, setzen Sie ein / davor (wie: -/R)" +"um das Flag als Großbuchstaben zu behandeln." + +msgid "" +"\n" +"Or, where supported, SET PROC/PARSE=EXT, or else quote upper-case material." msgstr "" "\n" -"Wo Groß/Kleinschreibung ignoriert wird, füge / am Anfang hinzu um das Flag " -"groß zuschreiben" +"Oder, falls unterstützt, SET PROC/PARSE=EXT, oder Großbuchstaben in" +"Anführungszeichen setzen." msgid "" "\n" @@ -1770,6 +1782,9 @@ msgstr "-X\t\t\tStelle keine Verbindung zum X-server her" msgid "-Y\t\t\tDo not connect to Wayland compositor" msgstr "-Y\t\t\tStelle keine Verbindung zum Wayland Compositor her" +msgid "--clientserver Backend for clientserver communication" +msgstr "--clientserver Backend für den Client-server" + msgid "--remote \tEdit in a Vim server if possible" msgstr "" "--remote \tEditiere in einem Vim-Server falls möglich" @@ -2590,6 +2605,7 @@ msgstr "" "\n" "Vim: ein X11 Fehler trat auf\n" +#, c-format msgid "restoring X11 display %s" msgstr "Wiederherstellen des X11-Displays %s" @@ -2690,6 +2706,10 @@ msgstr "XSMP ICE Verbindungs msgid "XSMP SmcOpenConnection failed: %s" msgstr "XSMP SmcOpenConnection fehlgeschlagen: %s" +#, c-format +msgid "Failed creating socket directory: %s" +msgstr "Erstellen des Socket-Verzeichnisses fehlgeschlagen: %s" + msgid "At line" msgstr "In Zeile" @@ -3617,10 +3637,10 @@ msgstr "" msgid "" "\n" -"OpenVMS version" +"OpenVMS (build) arch, version" msgstr "" "\n" -"OpenVMS Version" +"OpenVMS (build) Arch, Version" msgid "" "\n" @@ -3769,8 +3789,8 @@ msgstr "Vim ist Open Source und kann frei weitergegeben werden" msgid "Help poor children in Uganda!" msgstr "Hilf armen Kindern in Uganda!" -msgid "type :help iccf for information " -msgstr "Tippe :help iccf für Informationen darüber " +msgid "type :help Kuwasha for information " +msgstr "Tippe :help Kuwasha für mehr Informationen " msgid "type :q to exit " msgstr "Tippe :q zum Beenden " @@ -3813,17 +3833,11 @@ msgstr " f msgid "Sponsor Vim development!" msgstr "Unterstützen Sie die Entwicklung von Vim" -msgid "Become a registered Vim user!" -msgstr "Werd ein registrierter Vim-Nutzer!" - msgid "type :help sponsor for information " msgstr "Tippe :help sponsor für mehr Informationen " -msgid "type :help register for information " -msgstr "Tippe :help register für mehr Informationen " - -msgid "menu Help->Sponsor/Register for information " -msgstr "Menü Hilfe->Sponsor/Register für mehr Informationen " +msgid "menu Help->Sponsor for information " +msgstr "Menü Hilfe->Sponsor für mehr Informationen " msgid "global" msgstr "global" @@ -3975,11 +3989,13 @@ msgstr "Schreiben der viminfo-Datei \"%s\"" msgid "wayland protocol error -> " msgstr "Wayland Protokoll Fehler -> " +#, c-format msgid "restoring Wayland display %s" msgstr "Wiederherstellen des Wayland Displays %s" msgid "failed restoring, lost connection to Wayland display" -msgstr "Wiederherstellung fehlgeschlagen, Verbindung zur Wayland-Anzeige verloren" +msgstr "" +"Wiederherstellung fehlgeschlagen, Verbindung zur Wayland-Anzeige verloren" msgid "Already only one window" msgstr "Bereits nur ein Fenster" @@ -7948,6 +7964,7 @@ msgstr "E1115: \"assert_fails()\" viertes Argument muss eine Zahl sein" msgid "E1116: \"assert_fails()\" fifth argument must be a string" msgstr "E1116: \"assert_fails()\" fünftes Argument muss eine Zahl sein" +#, c-format msgid "E1117: Cannot use ! with nested %s" msgstr "E1117: Kann nicht ! innerhalb verschachtelter %s verwenden" @@ -8398,8 +8415,8 @@ msgid "E1238: Blob required for argument %d" msgstr "E1238: Blob erforderlich für Argument %d" #, c-format -msgid "E1239: Invalid value for blob: %d" -msgstr "E1239: Ungültiger Wert für Blob: %d" +msgid "E1239: Invalid value for blob: 0x%lX" +msgstr "E1239: Ungültiger Wert für Blob: 0x%lX" msgid "E1240: Resulting text too long" msgstr "E1240: resultierender Text zu lang" @@ -8732,8 +8749,8 @@ msgid "E1329: Invalid class variable declaration: %s" msgstr "E1329: Ungültige Klassen-Variablen-Deklaration: %s" #, c-format -msgid "E1330: Invalid type for object variable: %s" -msgstr "E1330: Ungültiger Typ für Objekt-Variable: %s" +msgid "E1330: Invalid type used in variable declaration: %s" +msgstr "E1330: Ungültiger Typ in der Variablen-Deklaration verwendet: %s" msgid "" "E1331: public must be followed by \"var\" or \"static\" or \"final\" or " @@ -9102,6 +9119,39 @@ msgstr "" "E1431: Abstrakte Methode \"%s\" in Klasse \"%s\" kann nicht direkt " "aufgerufen werden" +#, c-format +msgid "" +"E1432: Overriding generic method \"%s\" in class \"%s\" with a concrete " +"method" +msgstr "" +"1432: Generische Methode \"%s\" in Klasse \"%s\" wird durch konkrete Methode " +"überschrieben" + +#, c-format +msgid "" +"E1433: Overriding concrete method \"%s\" in class \"%s\" with a generic " +"method" +msgstr "" +"1433: Konkrete Methode \"%s\" in Klasse \"%s\" wird durch generische Methode " +"überschrieben" + +#, c-format +msgid "" +"E1434: Mismatched number of type variables for generic method \"%s\" in " +"class \"%s\"" +msgstr "" +"E1434: Anzahl der Typvariablen stimmt nicht für generische Methode \"%s\" " +"in Klasse \"%s\"" + +msgid "E1435: Enum can only be used in a script" +msgstr "E1435: Enum kann nur innerhalb eines Scripts verwendet werden" + +msgid "E1436: Interface can only be used in a script" +msgstr "E1436: Interface kann nur innerhalbe eines Scripts verwendet werden" + +msgid "E1437: Can only compare Object with Object" +msgstr "E1437: Kann ein Objekt nur mit einem Objekt vergleichen" + #, c-format msgid "E1500: Cannot mix positional and non-positional arguments: %s" msgstr "" @@ -9290,6 +9340,7 @@ msgstr "E1547: Diese Version von Vim unterst msgid "E1548: Wayland connection is unavailable" msgstr "E1548: Wayland Verbindung nicht verfügbar" +#, c-format msgid "E1549: Cannot have more than %d diff anchors" msgstr "E1549: Mehr als %d Diff-Anker sind nicht zulässig" @@ -9299,6 +9350,80 @@ msgstr "E1550: Nicht alle Diff-Anker konnten gefunden werden" msgid "E1551: Cannot open a popup window to a closing buffer" msgstr "E1551: Kann kein Popup Fenster für einen zu schließenden Buffer öffnen" +#, c-format +msgid "E1552: Type variable name must start with an uppercase letter: %s" +msgstr "E1552: Typenvariable muss mit einen Großbuchstaben anfangen: %s" + +#, c-format +msgid "E1553: Missing comma after type in generic function: %s" +msgstr "E1553: Fehlendes Komma nach Typ in generischer Funktion: %s" + +#, c-format +msgid "E1554: Missing '>' in generic function: %s" +msgstr "E1554: Fehlendes '>' in generischer Funktion: %s" + +#, c-format +msgid "E1555: Empty type list specified for generic function '%s'" +msgstr "E1555: Leere Typenliste für die generische Funktion '%s' angegeben" + +#, c-format +msgid "E1556: Too many types specified for generic function '%s'" +msgstr "E1556: Zu viele Typen für die generische Funktion: '%s' angegeben" + +#, c-format +msgid "E1557: Not enough types specified for generic function '%s'" +msgstr "E1557: Nicht genügend Typen für die generische Funktion: '%s' angegeben" + +#, c-format +msgid "E1558: Unknown generic function: %s" +msgstr "E1558: Unbekannte generische Funktion: %s" + +#, c-format +msgid "E1559: Type arguments missing for generic function '%s'" +msgstr "E1559: Typargumente für die generische Funktion '%s' fehlen" + +#, c-format +msgid "E1560: Not a generic function: %s" +msgstr "E1560: Keine generische Funktion: %s" + +#, c-format +msgid "E1561: Duplicate type variable name: %s" +msgstr "E1561: Doppelte Typvariablenbezeichnung: %s" + +msgid "E1562: Diff anchors cannot be used with hidden diff windows" +msgstr "E1562: Diff-Anker können nicht mit versteckten Diff-Fenstern genutzt werden" + +msgid "E1563: Socket path is too big" +msgstr "E1563: Socket-Pfad ist zu lang" + +msgid "E1564: Socket name cannot have slashes in it without being a path" +msgstr "E1564: Socket-Name darf keine Schrägstriche enthalten ohne Pfadangabe zu sein" + + +msgid "E1565: Socket server is not online, call remote_startserver() first" +msgstr "E1565: Socket-Server ist nicht online, rufe zuerst remote_startserver() auf" + +#, c-format +msgid "E1566: Failed connecting to socket %s: %s" +msgstr "E1566: Verbindung zum Socket fehlgeschlagen: %s: %s" + +msgid "E1567: Cannot start socket server, socket path is unavailable" +msgstr "E1567: Socket-Server kann nicht gestartet werden, Socket-Pfad ist nicht verfügbar" + +#, c-format +msgid "E1568: OSC command response timed out: %.*s" +msgstr "E1568: Timeout bei OSC-Befehlsantwort: %.*s" + + +msgid "E1569: Cannot use listener_add in a listener callback" +msgstr "E1569: listener_add kann in einem Listener Callback nicht verwendet werden" + +msgid "E1570: Cannot use redraw_listener_add in a redraw listener callback" +msgstr "E1570: redraw_listener_add kann in einem Redraw-Listener Callback nicht verwendet werden" + +msgid "E1571: Must specify at least one callback for redraw_listener_add" +msgstr "E1571: Es muss mindestens ein Callback für redraw_listener_add angegeben werden" + msgid "--No lines in buffer--" msgstr "--Keine Zeilen im Buffer--" @@ -9907,10 +10032,10 @@ msgstr "" "füge \"uhex\" hinzu um nicht druckbare Zeichen als Hex-Wert anzuzeigen" msgid "" -"characters to use for the status line, folds, diffs, buffer text, filler " -"lines and truncation in the completion menu" +"characters to use for the status line, folds, diffs,\n" +"buffer text, filler lines and truncation in the completion menu" msgstr "" -"zu verwendende Zeichen für die Statuszeile, Folds, Diffs Buffertext, " +"zu verwendende Zeichen für die Statuszeile, Folds, Diffs, Buffertext, " "Füllzeilen und Truncation-Zeichen im Completion Menü" msgid "number of lines used for the command-line" @@ -10205,6 +10330,9 @@ msgstr "wenn nicht leer, Symboltext des Fensters setzen" msgid "restore the screen contents when exiting Vim" msgstr "den Bildschirminhalt beim Beenden wiederherstellen" +msgid "timeout used for terminal OSC responses" +msgstr "Timeout, der für Terminal-OSC-Antworten verwendet wird" + msgid "using the mouse" msgstr "Mausnutzung" @@ -10267,7 +10395,9 @@ msgstr "Gr msgid "room (in pixels) left above/below the window" msgstr "reservierter Platz (in Pixel) oberhalb/unterhalb des Fensters" -msgid "list of ASCII characters that can be combined into complex shapes" +msgid "" +"list of ASCII characters that can be combined into complex\n" +"shapes" msgstr "" "Liste von ASCII-Zeichen, die zu komplexen Formen kombiniert werden können" @@ -10278,8 +10408,8 @@ msgid "use a pseudo-tty for I/O to external commands" msgstr "ein Pseudo-TTY für I/O zu externen Befehlen verwenden" msgid "" -"\"last\", \"buffer\" or \"current\": which directory used for the file " -"browser" +"\"last\", \"buffer\" or \"current\": which directory used for\n" +"the file browser" msgstr "" "\"last\", \"buffer\" oder \"current\": zu nutzendes Verzeichnis für den " "Dateibrowser" @@ -10302,8 +10432,12 @@ msgstr "Verz msgid "use balloon evaluation in the GUI" msgstr "verwende die Ballon-eval Funktion in der GUI" -msgid "use balloon evaluation in the terminal" -msgstr "verwende die Ballon-eval Funktion im Terminal" +msgid "" +" \n" +"use balloon evaluation in the terminal" +msgstr "" +" \n" +"verwende die Ballon-eval Funktion im Terminal" msgid "expression to show in balloon eval" msgstr "Textausdruck, der bei der Verwendung des Ballons angezeigt werden soll" @@ -10427,7 +10561,8 @@ msgstr "zu verwendender Wayland-Seat (Sitz)" msgid "" "Enable wayland focus stealing functionality in order to access the clipboard" msgstr "" -"Aktiviere die Wayland-Fokus-Steal-Funktionalität, um auf die Zwischenablage zuzugreifen" +"Aktiviere die Wayland-Fokus-Steal-Funktionalität, um auf die Zwischenablage " +"zuzugreifen" msgid "\"startsel\" and/or \"stopsel\"; what special keys can do" msgstr "\"startsel\" und/oder \"stopsel\"; was bestimmte Tasten machen" @@ -10468,6 +10603,9 @@ msgstr "definiert, wie sich , CTRL-W etc. im Einf msgid "definition of what comment lines look like" msgstr "Definition einer Kommentarzeile" +msgid "template for comments; used to put the marker in" +msgstr "Template für Kommentare; wird verwendet um Faltungs-Marker einzufügen" + msgid "list of flags that tell how automatic formatting works" msgstr "Liste von Flags, die automatisches Formatieren beeinflußen" @@ -10482,15 +10620,41 @@ msgstr "" "legt fest, wie Vervollständigen im Einfüge-Modus mit CTRL-N und CTRL-P " "funktioniert" -msgid "use fuzzy collection for specific completion modes" -msgstr "Fuzzy-Sammlung für spezifische Vervollständigungsmodi verwenden" +msgid "automatic completion in insert mode" +msgstr "automatisches Vervollständigen im Einfüge Modus" + +msgid "" +" \n" +"initial decay timeout for 'autocomplete' algorithm" +msgstr "" +" \n" +"Anfangszeit, nach der die Gewichtung früherer 'autocomplete'-Vorschläge abnimmt" + +msgid "" +" \n" +"initial decay timeout for CTRL-N and CTRL-P completion" +msgstr "" +" \n" +"Anfangszeit, nach der die Gewichtung früherer Vorschläge bei CTRL-N und CTRL-P abnimmt" + +msgid "" +" \n" +"delay in msec before menu appears after typing" +msgstr "" +" \n" +"Verzögerung in ms, bevor das Menü nach der Eingabe erscheint" + msgid "whether to use a popup menu for Insert mode completion" msgstr "" "ob ein Popup-Menü bei der Verfollständigen im Einfüge-Modus genutzt wird" -msgid "popup menu item align order" -msgstr "Ausrichtungsreihenfolge im Popup-Menü" +msgid "" +" \n" +"popup menu item align order" +msgstr "" +" \n" +"Ausrichtungsreihenfolge im Popup-Menü" msgid "options for the Insert mode completion info popup" msgstr "Optionen für das Popup bei der Einfüge-Modus Vervollständigung" @@ -10504,6 +10668,9 @@ msgstr "minimale Breite des Popup-Men msgid "maximum width of the popup menu" msgstr "maximale Breite des Popup-Menüs" +msgid "popup border style" +msgstr "Popup Rahmenstil" + msgid "user defined function for Insert mode completion" msgstr "benutzerdefinierte Funktion für Vervollständigung im Einfüge-Modus" @@ -10650,9 +10817,6 @@ msgstr "definiert f msgid "minimum number of screen lines for a fold to be closed" msgstr "minimale Anzahl an Bildschirmzeilen damit Faltung geschlossen wird" -msgid "template for comments; used to put the marker in" -msgstr "Template für Kommentare; wird verwendet um Faltungs-Marker einzufügen" - msgid "" "folding type: \"manual\", \"indent\", \"expr\", \"marker\",\n" "\"syntax\" or \"diff\"" @@ -10934,8 +11098,12 @@ msgstr "Liste an Formaten f msgid "encoding of the \":make\" and \":grep\" output" msgstr "Kodierung von \":make\" und \":grep\" Ausgabe" -msgid "function to display text in the quickfix window" -msgstr "Funktion um Text im Quickfix Fenster anzuzeigen" +msgid "" +" \n" +"function to display text in the quickfix window" +msgstr "" +" \n" +"Funktion um Text im Quickfix Fenster anzuzeigen" msgid "system specific" msgstr "System spezifisch" @@ -10955,9 +11123,6 @@ msgstr "spezifiziert Zeichen in einem Dateinamen" msgid "specifies the characters in an identifier" msgstr "spezifiziert Zeichen in einer Kennung (identifier)" -msgid "defines trigger strings for complete_match()" -msgstr "definiert Trigger Zeichenketten für complete_match()" - msgid "specifies the characters in a keyword" msgstr "spezifiziert Zeichen in einem Keyword" @@ -11158,8 +11323,12 @@ msgstr "Name des Python 2 Home-Verzeichnis" msgid "name of the Python 3 dynamic library" msgstr "Name der dynamischen Python 3 Bibliothek" -msgid "name of the Python 3 home directory" -msgstr "Name des Python 3 Home-Verzeichnis" +msgid "" +" \n" +"name of the Python 3 home directory" +msgstr "" +" \n" +"Name des Python 3 Home-Verzeichnis" msgid "name of the Ruby dynamic library" msgstr "Name der dynamischen Ruby Bibliothek" diff --git a/src/po/hy.po b/src/po/hy.po index bf6d225b46..fe413d000d 100644 --- a/src/po/hy.po +++ b/src/po/hy.po @@ -4,17 +4,19 @@ # Do ":help credits" in Vim to see a list of people who contributed. # # Gagik Hakobyan 2015 -# option - կարգանշան +# option - ընտրանք # unload - բեռնաթափել # load - բեռնել # loop - շրջակցում +# range - միջակայք +# Color - երկկետ # prefix - նախածանց # nested - ներդրված # flag - դրոշմանիշ # compound - պարփակ -# region - +# region - ռեգիոն # include - կցաֆայլ -# cluster - hամակարգ +# cluster - կլաստեր/համակարգ # highlight - գունանշում # attribute - բնորոշիչ # garbage - աղբ @@ -31,67 +33,96 @@ # equal - համարժեք # settings - կարգաբերում # duplicate - կրկնակի -# find - # found - հայտնաբերված # support - աջակցում # class - դաս # fold - փաթաթ # soundfold - ձայնափաթաթ -# swap - -# menu - +# swap - փոխատեղում +# menu - մենյու/ընտրացանկ # undo - չեղարկում -# overwrite - -# skipp - -# owner - -# failed - -# list +# overwrite - վերագրել +# skip - +# owner - օգտատեր # match - համընկնում -# autocommand - -# case - depq, +# autocommand - ինքնահրաման +# case - դեպք, # fatal - օրհասական # mark - նշակ -# key - banali -# character - ?? +# key - բանալի +# keyword - հիմնաբառ +# character - նշան/տառ # demage - վնասված -# abort -# event - -# read-only -# option +# abort - ընդհատում +# event - իրադարձություն +# read-only - չխմբագրվող +# option - ընտրանք # preview - Նախադիտում # spell - ուղղագրում # directory - թղթապանակ +# swapfile - սվեփ ֆայլ +# Insert mode -> Ներդիր ռեժիմ +# Popup - Սահապատ +# Custom - Անհատականացված +# Completion - Ավտոլրացում +# Clipboard - Սեղմատախտակ msgid "" msgstr "" "Project-Id-Version: vim_9.1_am\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-24 21:58+0300\n" -"PO-Revision-Date: 2024-10-11 11:18+0000\n" +"Report-Msgid-Bugs-To: vim-dev@vim.org\n" +"POT-Creation-Date: 2025-12-20 20:54+0400\n" +"PO-Revision-Date: 2025-12-21 15:32+0400\n" "Last-Translator: Gagik Hakobyan \n" "Language-Team: Armenian\n" "Language: hy\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Loco-Source-Locale: en_AM\n" -"X-Generator: Loco https://localise.biz/\n" +"X-Generator: Poedit 3.8\n" "X-Poedit-KeywordsList: փաթաթ;միջակայք\n" -"X-Loco-Parser: loco_parse_po" +"X-Loco-Parser: loco_parse_po\n" msgid "ERROR: " msgstr "ՍԽԱԼ: " #, c-format +msgid "" +"\n" +"[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n" +msgstr "" +"\n" +"[բայթ] ընդհանուր հատկացում-ազատում %lu-%lu, ընթացիկ օգտագործում %lu, " +"առավելագույն օգտագործում %lu\n" +"\n" + +#, c-format +msgid "" +"[calls] total re/malloc()'s %lu, total free()'s %lu\n" +"\n" +msgstr "" +"[կանչեր] re/malloc() ֆունկցիայի ընդհանուր կանչեր՝ %lu, free() ֆունկցիայի " +"ընդհանուր կանչեր՝ %lu\n" +"\n" + msgid "--Deleted--" msgstr "--Ջնջված է--" #, c-format msgid "auto-removing autocommand: %s " -msgstr "ինքնա֊ջնջող ինքնահրաման: %s <բուֆեր=%d>" +msgstr "ինքնաջնջող ինքնահրաման: %s <բուֆեր=%d>" msgid "W19: Deleting augroup that is still in use" msgstr "W19: Օգտագործվող ինքնախմբի ջնջում" +msgid "" +"\n" +"--- Autocommands ---" +msgstr "" +"\n" +"--- Ինքնահրամաններ ---" + #, c-format msgid "No matching autocommands: %s" msgstr "Չկան համապատասխան ինքնահրամաններ: %s" @@ -195,6 +226,10 @@ msgstr "Վերևում" msgid "%d%%" msgstr "%d%%" +#, c-format +msgid "%3s" +msgstr "%3s" + #, c-format msgid " (%d of %d)" msgstr " (%d %d-ից)" @@ -279,51 +314,50 @@ msgstr "W10: Զգուշացում: Փոփոխվում է կարդալու թու msgid "No display" msgstr "Էկրան չկա" -msgid "" -": Send failed.\n" -msgstr "" -": Հնարավոր չեղավ ուղարկել.\n" +msgid ": Send failed.\n" +msgstr ": Հնարավոր չեղավ ուղարկել.\n" -msgid "" -": Send failed. Trying to execute locally\n" -msgstr "" -": Հնարավոր չեղավ ուղարկել. Լոկալ կատարման փորձ\n" +msgid ": Send failed. Trying to execute locally\n" +msgstr ": Հնարավոր չեղավ ուղարկել. Լոկալ կատարման փորձ\n" #, c-format msgid "%d of %d edited" msgstr "%d֊ը %d֊ից խմբագրվել է" -msgid "" -"No display: Send expression failed.\n" -msgstr "" -"Էկրան չկա: Հնարավոր չեղավ ուղարկել արտահայտությունը.\n" +msgid "Socket server not online:Send expression failed" +msgstr "Էկրան չկա: Հնարավոր չեղավ ուղարկել արտահայտությունը" -msgid "" -": Send expression failed.\n" -msgstr "" -": Հնարավոր չեղավ ուղարկել արտահայտությունը.\n" +msgid "No display: Send expression failed.\n" +msgstr "Էկրան չկա: Հնարավոր չեղավ ուղարկել արտահայտությունը.\n" + +msgid ": Send expression failed.\n" +msgstr ": Հնարավոր չեղավ ուղարկել արտահայտությունը.\n" msgid "Used CUT_BUFFER0 instead of empty selection" msgstr "Օգտագործվել է CUT_BUFFER0 դատարկ ընտրության փոխարեն" +msgid "Could not find a way to access the clipboard." +msgstr "Չհաջողվեց սեղմատախտակին (clipboard) հասանելիության եղանակ գտնել." + +#, c-format +msgid "Switched to clipboard method '%s'." +msgstr "Սեղմատախտակի մեթոդը փոխվեց «%s»-ի." + msgid "tagname" msgstr "պիտակի անուն" -msgid "" -" kind file\n" -msgstr "" -" ֆայլի տիպ\n" +msgid " kind file\n" +msgstr " ֆայլի տիպ\n" msgid "'history' option is zero" -msgstr "'history' կարգանշանը դատարկ է" +msgstr "'history' ընտրանքը զրո է" msgid "Warning: Using a weak encryption method; see :help 'cm'" msgstr "Զգուշացում։ Օգտագործվում է թույլ կոդավորման մեթոդ, տես․ :help 'cm'" msgid "Note: Encryption of swapfile not supported, disabling swap file" msgstr "" -"Նշում․ փոխանակման ֆայլի կոդավորումը չի աջակցվում, ապաակտիվացվում է " -"փոխանակման ֆայլը" +"Նշում․ սվեփ ֆայլի կոդավորումը չի աջակցվում, ապաակտիվացվում է սվեփ ֆայլը" msgid "Enter encryption key: " msgstr "Կոդավորման համար մուտթագրեք գաղտնաբառը: " @@ -340,8 +374,8 @@ msgstr "[կոդավորված]" #, c-format msgid "xchacha20v2: using custom opslimit \"%llu\" for Key derivation." msgstr "" -"xchacha20v2: օգտագործելով \"%llu\" մաքսային սահմանաչափը բանալիների ածանցման " -"համար:" +"xchacha20v2: օգտագործում է \"%llu\" անհատականացված սահմանաչափ բանալիների " +"ածանցման համար:" #, c-format msgid "xchacha20v2: using default opslimit \"%llu\" for Key derivation." @@ -351,7 +385,8 @@ msgstr "" #, c-format msgid "xchacha20v2: using custom memlimit \"%lu\" for Key derivation." msgstr "" -"xchacha20v2: օգտագործելով հատուկ memlimit \"%lu\" հիմնական ածանցման համար:" +"xchacha20v2: օգտագործում է անհատականացված memlimit \"%lu\" բանալիների " +"ածանցման համար:" #, c-format msgid "xchacha20v2: using default memlimit \"%lu\" for Key derivation." @@ -361,7 +396,8 @@ msgstr "" #, c-format msgid "xchacha20v2: using custom algorithm \"%d\" for Key derivation." msgstr "" -"xchacha20v2: օգտագործելով \"%d\" հատուկ ալգորիթմը բանալիների ածանցման համար:" +"xchacha20v2: օգտագործում է \"%d\" անհատականացված ալգորիթմ բանալիների " +"ածանցման համար:" #, c-format msgid "xchacha20v2: using default algorithm \"%d\" for Key derivation." @@ -388,7 +424,6 @@ msgstr "տող %ld: %s" msgid "cmd: %s" msgstr "հրաման: %s" -#| msgid "E726: Stride is zero" msgid "frame is zero" msgstr "շրջանակը զրո է" @@ -424,7 +459,7 @@ msgid "Patch file" msgstr "Նմանակման ֆայլ" msgid "Custom" -msgstr "Հարմարեցված" +msgstr "Անհատականացված" msgid "Latin supplement" msgstr "Լատինական հավելում" @@ -498,6 +533,10 @@ msgstr "Կատականա" msgid "Bopomofo" msgstr "Բոպոմոֆո" +#, c-format +msgid "%ld," +msgstr "%ld," + msgid "" "\n" "\tLast set from " @@ -552,10 +591,8 @@ msgstr[1] "%ld տողեր տեղափոխվել են" msgid "%ld lines filtered" msgstr "%ld տողեր ֆիլտրվել են" -msgid "" -"[No write since last change]\n" -msgstr "" -"[Փոփոխությունները պահպանված չեն]\n" +msgid "[No write since last change]\n" +msgstr "[Փոփոխությունները պահպանված չեն]\n" msgid "Save As" msgstr "Պահպանել որպես" @@ -576,7 +613,7 @@ msgid "" "'readonly' option is set for \"%s\".\n" "Do you wish to write anyway?" msgstr "" -"\"%s\"-ի համար 'readonly' կարգանշումը միացված է.\n" +"\"%s\"-ի համար 'readonly' ընտրանքը միացված է.\n" "Պահպանել?" #, c-format @@ -585,7 +622,7 @@ msgid "" "It may still be possible to write it.\n" "Do you wish to try?" msgstr "" -"\"%s\" ֆայլն ունի միայն կարդալու հնարավորություն.\n" +"\"%s\" ֆայլը չխմբագրվող իրավունքներով է.\n" "Հնարավոր է, որ այն կարելի է ամրագրել.\n" "Ու՞զում եք փորձել?" @@ -640,7 +677,7 @@ msgstr "Պահպանե՞լ փոփոխությունները \"%s\"?" msgid "Warning: Entered other buffer unexpectedly (check autocommands)" msgstr "" -"Զգուշացում: Անսպասելու անցում է կատարվել դեպի այլ բուֆեր (ստուգեք " +"Զգուշացում: Անսպասելի անցում է կատարվել դեպի այլ բուֆեր (ստուգեք " "ինքնահրամանննրը)" #, c-format @@ -764,7 +801,7 @@ msgid "is not a file" msgstr "ֆայլ չէ" msgid "is a device (disabled with 'opendevice' option)" -msgstr "սարք է ('opendevice' կարգանշանն անջատված է)" +msgstr "սարք է ('opendevice' ընտրանքը անջատված է)" msgid "[New DIRECTORY]" msgstr "[Նոր ցանկ]" @@ -775,10 +812,8 @@ msgstr "[ֆայլը շատ մեծ է]" msgid "[Permission Denied]" msgstr "[Թույլատրված չէ]" -msgid "" -"Vim: Reading from stdin...\n" -msgstr "" -"Vim: Ընթերցում ստանդարտ մուտքից...\n" +msgid "Vim: Reading from stdin...\n" +msgstr "Vim: Ընթերցում ստանդարտ մուտքից...\n" msgid "Reading from stdin..." msgstr "Ընթերցում ստանդարտ մուտքից..." @@ -837,10 +872,14 @@ msgid "[unix format]" msgstr "[format unix]" #, c-format -msgid "%ld line, " -msgid_plural "%ld lines, " -msgstr[0] "տող: %ld, " -msgstr[1] "տողեր: %ld, " +msgid "%s%ldL, %lldB" +msgstr "%s%ldL, %lldB" + +#, c-format +msgid "%s%ld line, " +msgid_plural "%s%ld lines, " +msgstr[0] "տող: %s%ld, " +msgstr[1] "տողեր: %s%ld " #, c-format msgid "%lld byte" @@ -1008,10 +1047,8 @@ msgstr "Փոխարինել բոլորը" msgid "_Close" msgstr "_Փակել" -msgid "" -"Vim: Received \"die\" request from session manager\n" -msgstr "" -"Vim: Սեսսիայի զեկավարությունից ստացվել է մահվան պահանջ\n" +msgid "Vim: Received \"die\" request from session manager\n" +msgstr "Vim: Սեսսիայի զեկավարությունից ստացվել է մահվան պահանջ\n" msgid "Close tab" msgstr "Փակել թաբը" @@ -1022,10 +1059,8 @@ msgstr "Նոր թաբ" msgid "Open Tab..." msgstr "Բացել թաբ..." -msgid "" -"Vim: Main window unexpectedly destroyed\n" -msgstr "" -"Vim: Գլխավոր պատուհանն անսպասելի ավերվել է\n" +msgid "Vim: Main window unexpectedly destroyed\n" +msgstr "Vim: Գլխավոր պատուհանն անսպասելի ավերվել է\n" msgid "&Filter" msgstr "&Ֆիլտր" @@ -1078,10 +1113,8 @@ msgstr "Փնտրել և Փոխարինել" msgid "Not Used" msgstr "Օգտագործված չէ" -msgid "" -"Directory\t*.nothing\n" -msgstr "" -"Թղթապանակ\t*.ոչինչ\n" +msgid "Directory\t*.nothing\n" +msgstr "Թղթապանակ\t*.ոչինչ\n" #, c-format msgid "Font0: %s" @@ -1186,10 +1219,8 @@ msgstr "Վերանախապատրաստել կապերը" msgid "Show connections" msgstr "Ցուցադրել կապերը" -msgid "" -"This cscope command does not support splitting the window.\n" -msgstr "" -"Այս cscope հրամանը պատուհանի բաժանմանը չի աջակցում.\n" +msgid "This cscope command does not support splitting the window.\n" +msgstr "Այս cscope հրամանը պատուհանի բաժանմանը չի աջակցում.\n" #, c-format msgid "Added cscope database %s" @@ -1207,10 +1238,8 @@ msgstr "cs_create_connection: fdopen֊ն հնարավոր չի կատարել to msgid "cs_create_connection: fdopen for fr_fp failed" msgstr "cs_create_connection: հնարավոր չի կատարել fr_fp֊ի համար" -msgid "" -"cscope commands:\n" -msgstr "" -"cscope հրամանները:\n" +msgid "cscope commands:\n" +msgstr "cscope հրամանները:\n" #, c-format msgid "%-5s: %s%*s (Usage: %s)" @@ -1253,23 +1282,17 @@ msgstr "" "\n" " # տող" -msgid "" -"filename / context / line\n" -msgstr "" -"ֆայլի անուն / կոնտեքստ / տող\n" +msgid "filename / context / line\n" +msgstr "ֆայլի անուն / կոնտեքստ / տող\n" msgid "All cscope databases reset" msgstr "Ողջ cscope տվյալների բազաների վերաբեռնում" -msgid "" -"no cscope connections\n" -msgstr "" -"չկան cscope կապեր\n" +msgid "no cscope connections\n" +msgstr "չկան cscope կապեր\n" -msgid "" -" # pid database name prepend path\n" -msgstr "" -" # pid տվյալների բազայի անվանումը prepend path\n" +msgid " # pid database name prepend path\n" +msgstr " # pid տվյալների բազայի անվանումը prepend path\n" msgid "Lua library cannot be loaded." msgstr "Հնարավոր չէ բեռնել Lua գրադարանը." @@ -1284,10 +1307,10 @@ msgid "expressions disabled at compile time" msgstr "արտահայտոթյուններն անջատված են կառուցման ժամանակ" msgid "hidden option" -msgstr "թաքցված կարգանշան" +msgstr "թաքցված ընտրանք" msgid "unknown option" -msgstr "անծանոթ կարգանշան" +msgstr "անծանոթ ընտրանք" msgid "window index is out of range" msgstr "պատուհանի համարն միջակայքից դուրս է եկել" @@ -1328,14 +1351,6 @@ msgstr "տողի համարը միջակայքից դուրս է եկել" msgid "not allowed in the Vim sandbox" msgstr "չի թույլատրվում Vim sandbox" -#, c-format -msgid "E370: Could not load library %s" -msgstr "E370: Հնարավոր չէր բեռնել %s գրադարանը" - -msgid "Sorry, this command is disabled: the Perl library could not be loaded." -msgstr "" -"Ներողություն, այս հրամանն անջատված է: հնարավոր չէ բեռնել Perl գրադարանը." - msgid "invalid buffer number" msgstr "անվավեր բուֆերի համար" @@ -1399,52 +1414,55 @@ msgstr[0] "%ld տող խորացվել է " msgstr[1] "%ld տողեր խորացվել են " msgid " Keyword completion (^N^P)" -msgstr "Հիմնաբառերի ավտոմատ լրացում (^N^P)" +msgstr " Հիմնաբառերի ավտոլրացում (^N^P)" -msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)" -msgstr " ^X ավտոմատ լրացման ռեժիմ (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)" +msgid " ^X mode (^]^D^E^F^I^K^L^N^O^P^Rs^U^V^Y)" +msgstr " ^X ավտոլրացման ռեժիմ (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)" msgid " Whole line completion (^L^N^P)" -msgstr " Տողի ամբողջական լրացում (^L^N^P)" +msgstr " Տողի ավտոլրացում (^L^N^P)" msgid " File name completion (^F^N^P)" -msgstr " Ֆայլի անունի ավոտմատ լրացում (^F^N^P)" +msgstr " Ֆայլի անունի ավտոլրացում (^F^N^P)" msgid " Tag completion (^]^N^P)" -msgstr " Պիտակի ավտոմատ լրացում (^]^N^P)" +msgstr " Պիտակի ավտոլրացում (^]^N^P)" msgid " Path pattern completion (^N^P)" -msgstr " Ճանապարհի ավոտմատ լրացում (^N^P)" +msgstr " Ճանապարհի ավտոլրացում (^N^P)" msgid " Definition completion (^D^N^P)" -msgstr " Սահմանման ավտոմատ լրացում (^D^N^P)" +msgstr " Սահմանման ավտոլրացում (^D^N^P)" msgid " Dictionary completion (^K^N^P)" -msgstr " Բառարանի ավտոմատ լրացում (^K^N^P)" +msgstr " Բառարանի ավտոլրացում (^K^N^P)" msgid " Thesaurus completion (^T^N^P)" -msgstr " Հոմանիշների ավտոմատ լրացում (^T^N^P)" +msgstr " Հոմանիշների ավտոլրացում (^T^N^P)" msgid " Command-line completion (^V^N^P)" -msgstr " Հրամանի տողի ավտոմատ լրացում (^V^N^P)" +msgstr " Հրամանի տողի ավտոլրացում (^V^N^P)" msgid " User defined completion (^U^N^P)" -msgstr " Օգտագործողի սահմանած ավտոմատ լրացում (^U^N^P)" +msgstr " Օգտագործողի սահմանած ավտոլրացում (^U^N^P)" msgid " Omni completion (^O^N^P)" -msgstr " Omni-լրացում (^O^N^P)" +msgstr " Omni ավտոլրացում (^O^N^P)" msgid " Spelling suggestion (^S^N^P)" msgstr " Ուղղագրական ճշգրտում (^S^N^P)" msgid " Keyword Local completion (^N^P)" -msgstr "Հիմնաբառերի ավտոմատ լրացում (^N^P)" +msgstr " Տեղային հիմնաբառերի ավտոլրացում (^N^P)" + +msgid " Register completion (^N^P)" +msgstr " Ռեգիստրերի ավտոլրացում (^N^P)" msgid "'dictionary' option is empty" -msgstr "'dictionary' կարգանշանը դատարկ է" +msgstr "'dictionary' ընտրանքը դատարկ է" msgid "'thesaurus' option is empty" -msgstr "'thesaurus' կարգանշանը դատարկ է" +msgstr "'thesaurus' ընտրանքը դատարկ է" #, c-format msgid "Scanning dictionary: %s" @@ -1530,7 +1548,7 @@ msgid "Current %slanguage: \"%s\"" msgstr "Օգտագործվող %sլեզուն: \"%s\"" msgid "Unknown option argument" -msgstr "Անծանոթ կարգանշման արգումենտ" +msgstr "Անծանոթ ընտրանքի արգումենտ" msgid "Too many edit arguments" msgstr "Աննախադեպ շատ խմբագրման արգումենտներ" @@ -1539,7 +1557,7 @@ msgid "Argument missing after" msgstr "Արգումենտը տրված չէ" msgid "Garbage after option argument" -msgstr "Աղբ, կարգանշման արգումենտից հետո" +msgstr "Աղբ՝ ընտրանքի արգումենտից հետո" msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments" msgstr "Աննախադեպ շատ \"+command\", \"-c command\" կամ \"--cmd command\"" @@ -1548,20 +1566,14 @@ msgid "Invalid argument for" msgstr "Անվավեր արգումենտ" #, c-format -msgid "" -"%d files to edit\n" -msgstr "" -"խմագրվելիք ֆայլերի քանակը: %d\n" +msgid "%d files to edit\n" +msgstr "խմագրվելիք ֆայլերի քանակը: %d\n" -msgid "" -"netbeans is not supported with this GUI\n" -msgstr "" -"netbeans-ը չի աջակցվում այս գրաֆիկական ինտերֆեյսի հետ\n" +msgid "netbeans is not supported with this GUI\n" +msgstr "netbeans-ը չի աջակցվում այս գրաֆիկական ինտերֆեյսի հետ\n" -msgid "" -"'-nb' cannot be used: not enabled at compile time\n" -msgstr "" -"'-nb'֊ն չի կարող օգտագործվել: չի միացվել կառուցման ժամանակ\n" +msgid "'-nb' cannot be used: not enabled at compile time\n" +msgstr "'-nb'֊ն չի կարող օգտագործվել: չի միացվել կառուցման ժամանակ\n" msgid "This Vim was not compiled with the diff feature." msgstr "Այս Vim-ը չի կառուցվել diff հատկությամբ." @@ -1575,25 +1587,17 @@ msgstr "Հնարավոր չէ բացել ընթերցման համար: \"" msgid "Cannot open for script output: \"" msgstr "Հնարավոր չէ բացել սկրիպտի ելքի համար : \"" -msgid "" -"Vim: Error: Failure to start gvim from NetBeans\n" -msgstr "" -"Vim: Սխալ: հնարավոր չէ բացել gvim֊ը NetBeans֊ից\n" +msgid "Vim: Error: Failure to start gvim from NetBeans\n" +msgstr "Vim: Սխալ: հնարավոր չէ բացել gvim֊ը NetBeans֊ից\n" -msgid "" -"Vim: Error: This version of Vim does not run in a Cygwin terminal\n" -msgstr "" -"Vim. Սխալ. Vim-ի այս տարբերակը չի աշխատում Cygwin տերմինալում\n" +msgid "Vim: Error: This version of Vim does not run in a Cygwin terminal\n" +msgstr "Vim. Սխալ. Vim-ի այս տարբերակը չի աշխատում Cygwin տերմինալում\n" -msgid "" -"Vim: Warning: Output is not to a terminal\n" -msgstr "" -"Vim: Զգուշացում: Ելքը տերմինալ չէ\n" +msgid "Vim: Warning: Output is not to a terminal\n" +msgstr "Vim: Զգուշացում: Ելքը տերմինալ չէ\n" -msgid "" -"Vim: Warning: Input is not from a terminal\n" -msgstr "" -"Vim: Զգուշացում: Մուտքը տերմինալից չէ\n" +msgid "Vim: Warning: Input is not from a terminal\n" +msgstr "Vim: Զգուշացում: Մուտքը տերմինալից չէ\n" msgid "pre-vimrc command line" msgstr "pre-vimrc հրամանային տող" @@ -1640,10 +1644,19 @@ msgstr "" msgid "" "\n" -"Where case is ignored prepend / to make flag upper case" +"Where command is down-cased, prepend / (like: -/R) to treat flag as upper-" +"case." +msgstr "" +"\n" +"Where դեպքն անտեսվել է, ավելացրեք ՛/՛՝ դրոշմանիշը մեծատառ դարձնելու համար." + +msgid "" +"\n" +"Or, where supported, SET PROC/PARSE=EXT, or else quote upper-case material." msgstr "" "\n" -"Where դեպքն անտեսվել է, ավելացրեք ՛/՛՝ դրոշմանիշը մեծատառ դարձնելու համար" +"Կամ, եթե աջակցվում է, կարգավորեք SET PROC/PARSE=EXT, հակառակ դեպքում " +"մեջբերեք մեծատառ նյութը." msgid "" "\n" @@ -1815,6 +1828,12 @@ msgstr "-display <էկրան>\tԿպցել Vim-ն այս X-server-ին" msgid "-X\t\t\tDo not connect to X server" msgstr "-X\t\t\tՉկպցնել X-server֊ին" +msgid "-Y\t\t\tDo not connect to Wayland compositor" +msgstr "-Y\t\t\tՉկպցնել X-server֊ին" + +msgid "--clientserver Backend for clientserver communication" +msgstr "--clientserver clientserver հաղորդակցության backend" + msgid "--remote \tEdit in a Vim server if possible" msgstr "--remote <ֆայլեր>\tԽմբագրել <ֆայլեր>֊ը Vim server֊ում, եթե հնարավոր է" @@ -1892,8 +1911,8 @@ msgstr "" msgid "-font \t\tUse for normal text (also: -fn)" msgstr "" -"-font <տառատեսակ>\t\tՕգտագործել <տառատեսակ>֊ը նորմալ տեքստերի համար (նաև: -" -"fn)" +"-font <տառատեսակ>\t\tՕգտագործել <տառատեսակ>֊ը նորմալ տեքստերի համար (նաև: " +"-fn)" msgid "-boldfont \tUse for bold text" msgstr "-boldfont <տառատեսակ>\tՕգտագործել <տառատեսակ>֊ը չաղ տեքստերի համար" @@ -1946,10 +1965,8 @@ msgstr "-P <ծնողի անուն>\tԲացել Vim֊ը ծնող ծրագրի ն msgid "--windowid \tOpen Vim inside another win32 widget" msgstr "--windowid \tԲացել Vim֊ը այլ win32 ծրագրի ներսում" -msgid "" -"Seen modifyOtherKeys: true\n" -msgstr "" -"Տեսել է modifyOtherKeys՝ ճշմարիտ\n" +msgid "Seen modifyOtherKeys: true\n" +msgstr "Տեսել է modifyOtherKeys՝ ճշմարիտ\n" msgid "Unknown" msgstr "Անծանոթ" @@ -1967,16 +1984,12 @@ msgid "Cleared" msgstr "Մաքրված" #, c-format -msgid "" -"modifyOtherKeys detected: %s\n" -msgstr "" -"modifyOtherKeys-ը հայտնաբերվեց՝ %s\n" +msgid "modifyOtherKeys detected: %s\n" +msgstr "modifyOtherKeys-ը հայտնաբերվեց՝ %s\n" #, c-format -msgid "" -"Kitty keyboard protocol: %s\n" -msgstr "" -"Kitty ստեղնաշարի արձանագրություն՝ %s\n" +msgid "Kitty keyboard protocol: %s\n" +msgstr "Kitty ստեղնաշարի արձանագրություն՝ %s\n" msgid "No abbreviation found" msgstr "Հապավումը չի հայտնաբերվել" @@ -2021,20 +2034,14 @@ msgstr "" "\n" "Փոփոխություններ չկան, կամ Vim-ը չի թարմացրել սվեփ ֆայլը." -msgid "" -" cannot be used with this version of Vim.\n" -msgstr "" -" հնարավոր չէ օգտագործել այս տարբերակի Vim-ի հետ.\n" +msgid " cannot be used with this version of Vim.\n" +msgstr " հնարավոր չէ օգտագործել այս տարբերակի Vim-ի հետ.\n" -msgid "" -"Use Vim version 3.0.\n" -msgstr "" -"Օգտագերծել 3.0 Vim տարբերակը.\n" +msgid "Use Vim version 3.0.\n" +msgstr "Օգտագերծել 3.0 Vim տարբերակը.\n" -msgid "" -" cannot be used on this computer.\n" -msgstr "" -" հնարավոր չէ օգտագործել այս համակարգչում.\n" +msgid " cannot be used on this computer.\n" +msgstr " հնարավոր չէ օգտագործել այս համակարգչում.\n" msgid "The file was created on " msgstr "Ֆայլը ստեղծվել է " @@ -2046,10 +2053,8 @@ msgstr "" ",\n" "կամ ֆայլը վնասված է." -msgid "" -" has been damaged (page size is smaller than minimum value).\n" -msgstr "" -" վնասված է (էջի չափը ավելի փոքր է քան մինիմում արժեքը).\n" +msgid " has been damaged (page size is smaller than minimum value).\n" +msgstr " վնասված է (էջի չափը ավելի փոքր է քան մինիմում արժեքը).\n" #, c-format msgid "Using swap file \"%s\"" @@ -2152,31 +2157,23 @@ msgstr "" "\n" "Նշում. գործընթացը ԴԵՌ ԿԱՏԱՐՎՈՒՄ Է. " -msgid "" -"Using crypt key from swap file for the text file.\n" -msgstr "" -"Տեքստ ֆայլի համար օգտագործվում է կոդավորման բանալի սվեփ ֆայլից.\n" +msgid "Using crypt key from swap file for the text file.\n" +msgstr "Տեքստ ֆայլի համար օգտագործվում է կոդավորման բանալի սվեփ ֆայլից.\n" msgid "Swap files found:" msgstr "Հայտնավերված սվեփ ֆայլեր:" -msgid "" -" In current directory:\n" -msgstr "" -" Այս թղթապանակում:\n" +msgid " In current directory:\n" +msgstr " Այս թղթապանակում:\n" -msgid "" -" Using specified name:\n" -msgstr "" -" Տրված անվանմամբ:\n" +msgid " Using specified name:\n" +msgstr " Տրված անվանմամբ:\n" msgid " In directory " msgstr " Թղթապանակ " -msgid "" -" -- none --\n" -msgstr "" -" -- ոչ --\n" +msgid " -- none --\n" +msgstr " -- ոչ --\n" msgid " owned by: " msgstr " պատկանելիություն: " @@ -2284,10 +2281,8 @@ msgstr "Ֆայլը բացելու դեպքում \"" msgid " CANNOT BE FOUND" msgstr " ՀԱՅՏՆԱԲԵՐՎԱԾ ՉԷ" -msgid "" -" NEWER than swap file!\n" -msgstr "" -" Ավելի ՆՈՐ, քան սվեփ ֆայլը!\n" +msgid " NEWER than swap file!\n" +msgstr " Ավելի ՆՈՐ, քան սվեփ ֆայլը!\n" msgid "" "\n" @@ -2300,10 +2295,8 @@ msgstr "" " ապա հոգ տարեք որ խմբագրելուց հետո չունենաք նույն ֆայլի երկու տարբեր\n" " խմբագրված օրինակներ.\n" -msgid "" -"(2) An edit session for this file crashed.\n" -msgstr "" -"(2) Այս ֆայլի խմբագրման սեանսը ավարտվել է անհաջողությամբ.\n" +msgid "(2) An edit session for this file crashed.\n" +msgstr "(2) Այս ֆայլի խմբագրման սեանսը ավարտվել է անհաջողությամբ.\n" msgid " If this is the case, use \":recover\" or \"vim -r " msgstr "" @@ -2327,7 +2320,7 @@ msgstr "" " այս հաղորդագրությունը հետագայում չստանալու համար.\n" msgid "Found a swap file that is not useful, deleting it" -msgstr "Գտնվել է փոխանակման ֆայլ, որն օգտակար չէ, ջնջում ենք այն" +msgstr "Գտնվել է սվեփ ֆայլ, որն օգտակար չէ, ջնջում ենք այն" msgid "Swap file \"" msgstr "Սվեփ ֆայլ \"" @@ -2348,7 +2341,7 @@ msgid "" "&Quit\n" "&Abort" msgstr "" -"&Բացել միայն կարդալու համար\n" +"&Բացել չխմբագրվող ռեժիմով\n" "&Խմբագրել\n" "&Վերականգնել\n" "&Դուրս գալ\n" @@ -2362,7 +2355,7 @@ msgid "" "&Quit\n" "&Abort" msgstr "" -"&OԲացել միայն կարդալու համար\n" +"&O Բացել չխմբագրվող ռեժիմով\n" "&E Խմբագրել\n" "&R Վերականգնել\n" "&D Ջնջել\n" @@ -2410,6 +2403,12 @@ msgstr "-- Տեսնել ավելին --" msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit " msgstr " SPACE/d/j: էկրան/էջ/տողը ներքևից, b/u/k: վերև, q: ելք " +msgid "W23: Clipboard register not available, using register 0" +msgstr "W23: Սեղմատախտակի ռեգիստրը հասանելի չէ, օգտագործվում է 0 ռեգիստրը" + +msgid "W24: Clipboard register not available. See :h W24" +msgstr "W24: Սեղմատախտակի ռեգիստրը անհասանելի է։ Տես՝ :h W24" + msgid "Question" msgstr "Հարց" @@ -2435,8 +2434,8 @@ msgstr "" msgid "Type number and or click with the mouse (q or empty cancels): " msgstr "" -"Մուտքագրել թիվ և կամ կտտացնել մկնիկով (q կամ դատարկ՝ չեղարկման համար)" -": " +"Մուտքագրել թիվ և կամ կտտացնել մկնիկով (q կամ դատարկ՝ չեղարկման " +"համար): " msgid "Type number and (q or empty cancels): " msgstr "Մուտքագրել թիվ և (դատարկ՝ չեղարկման համար): " @@ -2546,64 +2545,50 @@ msgid "" "--- Global option values ---" msgstr "" "\n" -"--- Գլոբալ կարգանշման արժեքները ---" +"--- Գլոբալ ընտրանքների արժեքները ---" msgid "" "\n" "--- Local option values ---" msgstr "" "\n" -"--- Լոկալ կարգանշման արժեքները ---" +"--- Լոկալ ընտրանքների արժեքները ---" msgid "" "\n" "--- Options ---" msgstr "" "\n" -"--- Կարգանշաններ ---" +"--- Ընտրանքներ ---" msgid "cannot open " msgstr "չի կարող բացվել " -msgid "" -"VIM: Can't open window!\n" -msgstr "" -"VIM: Հնարավոր չէ բացել պատուհանը!\n" +msgid "VIM: Can't open window!\n" +msgstr "VIM: Հնարավոր չէ բացել պատուհանը!\n" -msgid "" -"Need Amigados version 2.04 or later\n" -msgstr "" -"Պետք է Amigados տարբերակ 2.04 կամ ավելի նոր տարբերակ\n" +msgid "Need Amigados version 2.04 or later\n" +msgstr "Պետք է Amigados տարբերակ 2.04 կամ ավելի նոր տարբերակ\n" #, c-format -msgid "" -"Need %s version %ld\n" -msgstr "" -"Անհրաժեշտ է %s տարբերակ %ld\n" +msgid "Need %s version %ld\n" +msgstr "Անհրաժեշտ է %s տարբերակ %ld\n" -msgid "" -"Cannot open NIL:\n" -msgstr "" -"Անհնար է բացել NIL:\n" +msgid "Cannot open NIL:\n" +msgstr "Անհնար է բացել NIL:\n" msgid "Cannot create " msgstr "Անհնար է ստեղծել " #, c-format -msgid "" -"Vim exiting with %d\n" -msgstr "" -"Vim-ը ավարտվում է %d-ով\n" +msgid "Vim exiting with %d\n" +msgstr "Vim-ը ավարտվում է %d-ով\n" -msgid "" -"cannot change console mode ?!\n" -msgstr "" -"չեք կարող փոխել վահանակի ռեժիմը ?!\n" +msgid "cannot change console mode ?!\n" +msgstr "չեք կարող փոխել վահանակի ռեժիմը ?!\n" -msgid "" -"mch_get_shellsize: not a console??\n" -msgstr "" -"mch_get_shellsize: не в консоли??\n" +msgid "mch_get_shellsize: not a console??\n" +msgstr "mch_get_shellsize: не в консоли??\n" msgid "Cannot execute " msgstr "Անհնար է կատարել " @@ -2611,10 +2596,8 @@ msgstr "Անհնար է կատարել " msgid "shell " msgstr "տերմինալ " -msgid "" -" returned\n" -msgstr "" -" ավարտել է\n" +msgid " returned\n" +msgstr " ավարտել է\n" msgid "ANCHOR_BUF_SIZE too small." msgstr "ANCHOR_BUF_SIZE չափազանց փոքր է:" @@ -2647,8 +2630,8 @@ msgstr "" "\n" "Vim: X-ի սխալ\n" -#| msgid "Testing the X display failed" -msgid "restoring display %s" +#, c-format +msgid "restoring X11 display %s" msgstr "էկրանի վերականգնում %s" msgid "Testing the X display failed" @@ -2671,15 +2654,11 @@ msgstr "" "\n" "Հնարավոր չէ կարգավորել գաղտնի կոտնտեքստ " -#| msgid "" -#| "\n" -#| "Could not set security context for " +#, c-format msgid "Could not set security context %s for %s" msgstr "Հնարավոր չէ %s-ի համար կարգավորել գաղտնի կոնտեքստ %s-ը" -#| msgid "" -#| "\n" -#| "Could not get security context for " +#, c-format msgid "Could not get security context %s for %s. Removing it!" msgstr "" "Չհաջողվեց ստանալ անվտանգության համատեքստ %s %s-ի համար: Հեռացնում ենք այն!" @@ -2753,14 +2732,16 @@ msgstr "XSMP ICE կապակցման դիտարկումն անհաջող է ավ msgid "XSMP SmcOpenConnection failed: %s" msgstr "XSMP SmcOpenConnection անհաջող է ավարտվել: %s" +#, c-format +msgid "Failed creating socket directory: %s" +msgstr "Չհաջողվեց ստեղծել socket-ի թղթապանակը: %s" + msgid "At line" msgstr "Տողում" #, c-format -msgid "" -"Vim: Caught %s event\n" -msgstr "" -"Vim: Բռնվել է %s բացառումը\n" +msgid "Vim: Caught %s event\n" +msgstr "Vim: Բռնվել է %s բացառումը\n" msgid "close" msgstr "փակել" @@ -2814,10 +2795,8 @@ msgstr "չի կարող ունենալ և՛ ցուցակ, և՛ \"what\" փաստ msgid "Switching to backtracking RE engine for pattern: " msgstr "Նախշի համար անցում կատարվող RE շարժիչին. " -msgid "" -"External submatches:\n" -msgstr "" -"Արտաքին ենթահամընկնում:\n" +msgid "External submatches:\n" +msgstr "Արտաքին ենթահամընկնում:\n" msgid "Could not open temporary log file for writing, displaying on stderr... " msgstr "" @@ -2976,10 +2955,8 @@ msgstr "--- Կցաֆայլեր " msgid "not found " msgstr "չի հայտնաբերվել " -msgid "" -"in path ---\n" -msgstr "" -"ճանապարհում ---\n" +msgid "in path ---\n" +msgstr "ճանապարհում ---\n" msgid " (Already listed)" msgstr " (Արդեն ցուցադրված է)" @@ -3068,7 +3045,7 @@ msgstr "Բառի ծառի սեղմում..." msgid "Reading spell file \"%s\"" msgstr "\"%s\" ուղղագրման ֆայլի ընթերցում" -#| msgid "Reading undo file: %s" +#, c-format msgid "Reading affix file %s..." msgstr "Կարդում է կցված ֆայլը %s..." @@ -3138,9 +3115,8 @@ msgid "" "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s " "line %d: %s" msgstr "" -"Affix֊ը օգտագործվել է նաև " -"BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST֊ի համար՝ %s֊ում, տող %d: " -"%s" +"Affix-ը օգտագործվել է նաև BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST-" +"ի համար՝ %s-ում, տող %d: %s" #, c-format msgid "Expected Y or N in %s line %d: %s" @@ -3202,11 +3178,11 @@ msgstr "Չթույլատրված դրոշմանիշ, %s տող %d: %s" msgid "%s value differs from what is used in another .aff file" msgstr "%s արժեքը տարբերէ այլ .aff ֆայլում օգտագործված արժեքից" -#| msgid "Reading undo file: %s" +#, c-format msgid "Reading dictionary file %s..." msgstr "Բառարանի ֆայլի ընթերցում %s..." -#| msgid "line %ld: %s" +#, c-format msgid "line %6d, word %6ld - %s" msgstr "տող %6d, բառ %6ld - %s" @@ -3226,15 +3202,15 @@ msgstr "%d կրկնվող բառեր՝ %s֊ում" msgid "Ignored %d word(s) with non-ASCII characters in %s" msgstr "Անտեսված %d բառեր՝ ոչ ASCII նշաններով, %s" -#| msgid "Reading undo file: %s" +#, c-format msgid "Reading word file %s..." msgstr "Word ֆայլի ընթերցում %s..." -#| msgid "Conversion failure for word in %s line %d: %s" +#, c-format msgid "Conversion failure for word in %s line %ld: %s" msgstr "%s տող %ld բառի փոխակերպման ձախողում. %s" -#| msgid "Duplicate /regions= line ignored in %s line %ld: %s" +#, c-format msgid "Duplicate /encoding= line ignored in %s line %ld: %s" msgstr "Կրկնվող /encoding= տողը անտեսվել է %s տողում %ld՝ %s" @@ -3256,7 +3232,7 @@ msgstr "/ տեղն անտեսվել է %s֊ում, տող %ld: %s" #, c-format msgid "Invalid region nr in %s line %ld: %s" -msgstr "Անվավեր տարածաշրջանի թիվ %s տողում %ld՝ %s" +msgstr "Անվավեր ռեգիոնի թիվ %s տողում %ld՝ %s" #, c-format msgid "Unrecognized flags in %s line %ld: %s" @@ -3284,7 +3260,7 @@ msgstr "Բառերի քանակը՝ ձայնափաթաթից հետո: %ld" msgid "Total number of words: %d" msgstr "Բառերի ընդհանուր քանակը՝ %d" -#| msgid "Writing spell file %s..." +#, c-format msgid "Writing suggestion file %s..." msgstr "Առաջարկի ֆայլը գրուվում է %s..." @@ -3306,7 +3282,6 @@ msgstr "Ավարտված է!" msgid "Word '%.*s' removed from %s" msgstr "'%.*s' բառը հեռացվել է %s-ից" -#| msgid "E294: Seek error in swap file read" msgid "Seek error in spellfile" msgstr "Սխալ փնտրեք spellfile-ում" @@ -3338,16 +3313,12 @@ msgstr "'redrawtime'-ը գերազանցվել է, ուղղագրական գու msgid "syntax iskeyword not set" msgstr "ուղղագրական iskeyword-ը սահմանված չէ" -#| msgid "" -#| "\n" -#| "syncing on items" msgid "syncing on C-style comments" msgstr "C-style մեկնաբանությունների համաժամանակեցում" msgid "no syncing" msgstr "առանց սինխրոնիզացման" -#| msgid "syncing starts " msgid "syncing starts at the first line" msgstr "համաժամացումը սկսվում է առաջին տողից" @@ -3378,7 +3349,6 @@ msgstr "" "\n" "--- Ուղղագրական էլեմենտներ ---" -#| msgid "Word from other line" msgid "from the first line" msgstr "առաջին տողից" @@ -3417,10 +3387,8 @@ msgstr " Օգտագործելով տարբեր գործերով պիտակ!" msgid " # pri kind tag" msgstr " #pri kind պիտակ" -msgid "" -"file\n" -msgstr "" -"ֆայլ\n" +msgid "file\n" +msgstr "ֆայլ\n" msgid "" "\n" @@ -3464,7 +3432,6 @@ msgstr "Վթարել աշխատանքը \"%s\"?" msgid "Terminal" msgstr "Տերմինալ" -#| msgid "finished" msgid "Terminal-finished" msgstr "Տերմինալը ավարտված է" @@ -3490,21 +3457,18 @@ msgid_plural "%ld seconds ago" msgstr[0] "%ld վայրկյան առաջ" msgstr[1] "%ld վայրկյաններ առաջ" -msgid "" -"new shell started\n" -msgstr "" -"սկսվեց նոր կեղևը\n" +msgid "new shell started\n" +msgstr "սկսվեց նոր կեղևը\n" -msgid "" -"Vim: Error reading input, exiting...\n" -msgstr "" -"Vim: Մուքի ընթերցման սխալ, ավարտում...\n" +msgid "Vim: Error reading input, exiting...\n" +msgstr "Vim: Մուտքի ընթերցման սխալ, ավարտում...\n" msgid "No undo possible; continue anyway" msgstr "Չեղարկումն անհնար է; այնուամենայնիվ շարունակել" msgid "Cannot write undo file in any directory in 'undodir'" -msgstr "Հնարավոր չէ ամրագրել չեղրկման ֆայլը՝ 'undodir'-ի որևԷ ենթաթղթապանակում" +msgstr "" +"Հնարավոր չէ ամրագրել չեղարկման ֆայլը՝ 'undodir'-ի որևէ ենթաթղթապանակում" #, c-format msgid "Will not overwrite with undo file, cannot read: %s" @@ -3588,7 +3552,7 @@ msgstr "" msgid "No user-defined commands found" msgstr "Օգտատիրոջ սահմանած հրամաններ չեն հայտնաբերվել" -#| msgid "E123: Undefined function: %s" +#, c-format msgid "W22: Text found after :endfunction: %s" msgstr "W22: Տեքստը գտնվել է :endfunction-ից հետո՝ %s" @@ -3608,7 +3572,7 @@ msgstr "%s վերադարձնում է #%ld" msgid "%s returning %s" msgstr "%s վերադարձնում է %s" -#| msgid "function %s does not exist" +#, c-format msgid "Function %s%s%s does not need compiling" msgstr "%s%s%s ֆունկցիան չի պահանջում կամպիլիացիա" @@ -3616,6 +3580,13 @@ msgstr "%s%s%s ֆունկցիան չի պահանջում կամպիլիացիա msgid "%s (%s, compiled %s)" msgstr "%s (%s, կազմվել է %s)" +msgid "" +"\n" +"MS-Windows ARM64 GUI/console version" +msgstr "" +"\n" +"MS-Windows ARM64 գրաֆիկական/կոնսոլ տարբերակ" + msgid "" "\n" "MS-Windows 64-bit GUI/console version" @@ -3630,6 +3601,13 @@ msgstr "" "\n" "MS-Windows 32 բիթանոց կոնսոլ տարբերակ" +msgid "" +"\n" +"MS-Windows ARM64 GUI version" +msgstr "" +"\n" +"MS-Windows ARM64 գրաֆիկական տարբերակ" + msgid "" "\n" "MS-Windows 64-bit GUI version" @@ -3647,6 +3625,13 @@ msgstr "" msgid " with OLE support" msgstr " OLE աջակցումով" +msgid "" +"\n" +"MS-Windows ARM64 console version" +msgstr "" +"\n" +"MS-Windows ARM64 կոնսոլ տարբերակ" + msgid "" "\n" "MS-Windows 64-bit console version" @@ -3668,9 +3653,6 @@ msgstr "" "\n" "տարբերակ՝ macOS-ի համար" -#| msgid "" -#| "\n" -#| "macOS version" msgid "" "\n" "macOS version w/o darwin feat." @@ -3680,10 +3662,10 @@ msgstr "" msgid "" "\n" -"OpenVMS version" +"OpenVMS (build) arch, version" msgstr "" "\n" -"Տարբերակ՝ OpenVMS-ի համար" +"OpenVMS (build) ճարտատարապետություն, տարբերակ" msgid "" "\n" @@ -3736,7 +3718,6 @@ msgstr "" msgid "without GUI." msgstr "առանց գրաֆիկական ինտերֆեյսի." -#| msgid "with GTK2 GUI." msgid "with GTK3 GUI." msgstr "GTK3 GUI-ով:" @@ -3749,7 +3730,6 @@ msgstr "GTK2 GUI-ով:" msgid "with X11-Motif GUI." msgstr "X11-Motif GUI-ով:" -#| msgid "with GUI." msgid "with Haiku GUI." msgstr "Haiku GUI-ի հետ:" @@ -3759,10 +3739,8 @@ msgstr "Photon GUI-ով:" msgid "with GUI." msgstr "GUI-ով:" -msgid "" -" Features included (+) or not (-):\n" -msgstr "" -" Առանձնահատկությունների միացում (+) և անջաատում (-):\n" +msgid " Features included (+) or not (-):\n" +msgstr " Առանձնահատկությունների միացում (+) և անջաատում (-):\n" msgid " system vimrc file: \"" msgstr " համակարգային vimrc: \"" @@ -3797,7 +3775,6 @@ msgstr "օգտատիրոջ երկրորդ ֆայլ gvimrc: \"" msgid "3rd user gvimrc file: \"" msgstr "օգտատիրոջ երրորդ ֆայլ gvimrc: \"" -#| msgid " user exrc file: \"" msgid " defaults file: \"" msgstr " լռելյայն ֆայլ." @@ -3837,8 +3814,9 @@ msgstr "Vim֊ը բաց կոդով և ազատ տարածվող ծրագիր է" msgid "Help poor children in Uganda!" msgstr "Օգնեցեք ՈՒգանդացի աղքատ երեխաներին!" -msgid "type :help iccf for information " -msgstr "հավելյալ տեղեկատվության համար տալ :help iccf հրամանը " +msgid "type :help Kuwasha for information " +msgstr "" +"հավելյալ տեղեկատվություն ստանալու համար տալ :help sponsor հրամանը " msgid "type :q to exit " msgstr "ծրագրից դուրս գալու համար տալ :q հրամանը " @@ -3852,7 +3830,6 @@ msgstr "այս տարբերակի մասին իմանալու համար տալ msgid "Running in Vi compatible mode" msgstr "Աշխատանք Vi հարմարեցված մոդում" -#| msgid "type :help iccf for information " msgid "type :set nocp for Vim defaults" msgstr "տեսակ :set nocp Vim կանխադրվածների համար" @@ -3871,7 +3848,6 @@ msgstr "մենյու Խմբագրել->Գլոբալ կարգավորումներ msgid " for two modes " msgstr " երկակի ռեժիմների համար " -#| msgid "menu Edit->Global Settings->Toggle Insert Mode " msgid "menu Edit->Global Settings->Toggle Vi Compatible" msgstr "մենյու Խմբագրել->Գլոբալ կարգավորումներ->Փոխարկել Vi Compatible" @@ -3881,18 +3857,11 @@ msgstr " Vim-ի լռելիությամբ արժ msgid "Sponsor Vim development!" msgstr "Օգնեցեք բարելավել Vim֊ը!" -msgid "Become a registered Vim user!" -msgstr "Դարձեք Vim-ի ռեգիստրացված օգտատեր!" - msgid "type :help sponsor for information " msgstr "" "հավելյալ տեղեկատվություն ստանալու համար տալ :help sponsor հրամանը " -msgid "type :help register for information " -msgstr "" -"հավելյալ տեղեկատվություն ստանալու համար տալ :help register հրամանը " - -msgid "menu Help->Sponsor/Register for information " +msgid "menu Help->Sponsor for information " msgstr "մենյու Օգնություն->Հովանավոր/Գրանցվել տեղեկությունների համար " msgid "global" @@ -3937,7 +3906,6 @@ msgstr "Արտահայտություն" msgid "Input Line" msgstr "Զետեղման տող" -#| msgid "Input Line" msgid "Debug Line" msgstr "Վրիպազերծման գիծ" @@ -4010,10 +3978,8 @@ msgstr "" "# Jumplist (սկզբում ամենանորը).\n" #, c-format -msgid "" -"# This viminfo file was generated by Vim %s.\n" -msgstr "" -"# Այս viminfo ֆայլը ստեղծվել է Vim %s-ի կողմից:\n" +msgid "# This viminfo file was generated by Vim %s.\n" +msgstr "# Այս viminfo ֆայլը ստեղծվել է Vim %s-ի կողմից:\n" msgid "" "# You may edit it if you're careful!\n" @@ -4022,10 +3988,8 @@ msgstr "" "# Դուք կարող եք խմբագրել այն, եթե զգույշ լինեք:\n" "\n" -msgid "" -"# Value of 'encoding' when this file was written\n" -msgstr "" -"# 'encoding'-ի արժեքը, երբ այս ֆայլը գրվել է\n" +msgid "# Value of 'encoding' when this file was written\n" +msgstr "# 'encoding'-ի արժեքը, երբ այս ֆայլը գրվել է\n" #, c-format msgid "Reading viminfo file \"%s\"%s%s%s%s" @@ -4047,10 +4011,27 @@ msgstr " ԱՆՀԱՋՈՂ" msgid "Writing viminfo file \"%s\"" msgstr "Viminfo ֆայլի փոփոխում \"%s\"" +msgid "wayland protocol error -> " +msgstr "wayland պրոտոկոլի սխալ-> " + +#, c-format +msgid "restoring Wayland display %s" +msgstr "Wayland էկրանի վերականգնում %s" + +msgid "failed restoring, lost connection to Wayland display" +msgstr "վերականգնումը չհաջողվեց, կապը Wayland էկրանի (display)-ի հետ կորել է" + msgid "Already only one window" msgstr "Արդեն միայն մեկ պատուհան է" -#| msgid "Edit File in new tab page" +#, c-format +msgid "E370: Could not load library %s" +msgstr "E370: Հնարավոր չէր բեռնել %s գրադարանը" + +msgid "Sorry, this command is disabled: the Perl library could not be loaded." +msgstr "" +"Ներողություն, այս հրամանն անջատված է: հնարավոր չէ բեռնել Perl գրադարանը." + msgid "Edit with Vim using &tabpages" msgstr "Խմբագրել Vim-ի հետ՝ օգտագործելով &ներդիր էջերը" @@ -4105,7 +4086,7 @@ msgstr "E16: Անվավեր միջակայք" #, c-format msgid "E17: \"%s\" is a directory" -msgstr "E17: \"%s\"-ը ֆայլերի պահոց է" +msgstr "E17: \"%s\" թղթապանակ է" msgid "E18: Unexpected characters in :let" msgstr "E18: Չսպասված տառ :let հրամանում" @@ -4134,15 +4115,12 @@ msgstr "E24: Նման հապավում չկա" msgid "E25: GUI cannot be used: Not enabled at compile time" msgstr "E25: Գրաֆիկակակն ինտերֆեյսն անջատված է կառուցման ժամանակ" -msgid "" -"E26: Hebrew cannot be used: Not enabled at compile time\n" +msgid "E26: Hebrew cannot be used: Not enabled at compile time\n" msgstr "" "E26: Եբրայերենը հնարավոր չէ օգտագործել, այն անջատված է կառուցման ժամանակ\n" -msgid "" -"E27: Farsi support has been removed\n" -msgstr "" -"E27: պարսկերենի աջակցությունը հանվել է\n" +msgid "E27: Farsi support has been removed\n" +msgstr "E27: պարսկերենի աջակցությունը հանվել է\n" #, c-format msgid "E28: No such highlight group name: %s" @@ -4192,14 +4170,14 @@ msgid "E42: No Errors" msgstr "E42: Սխալներ չկան" msgid "E45: 'readonly' option is set (add ! to override)" -msgstr "E45: 'readonly' կարգանշանը միացված է (անցման համար ավելացնել !)" +msgstr "E45: 'readonly' ընտրանքը միացված է (անցման համար ավելացնել !)" msgid "E46: Cannot change read-only variable" -msgstr "E46: Հնարավոր չէ փոփոխել միայն կարդալու համար տրված փոփոխականը" +msgstr "E46: Հնարավոր չէ փոփոխել չխմբագրվող փոփոխականը" #, c-format msgid "E46: Cannot change read-only variable \"%s\"" -msgstr "E46: Հնարավոր չէ փոփխել միայն կարդալու համար տրված փոփխականը \"%s\"" +msgstr "E46: Հնարավոր չէ փոփոխել չխմբագրվող փոփոխականը \"%s\"" msgid "E47: Error while reading errorfile" msgstr "E47: Սխալների ֆայլի ընթերցման սխալ" @@ -4314,8 +4292,8 @@ msgstr "E82: Հնարավոր չէ առանձնացնել գոնե մեկ բու msgid "E83: Cannot allocate buffer, using other one..." msgstr "" -"E83: Հնարավոր չէ առանձնացնել բուֆերի հիշողություն, ուրիշ մեկն է օգտագործվում." -".." +"E83: Հնարավոր չէ առանձնացնել բուֆերի հիշողություն, ուրիշ մեկն է " +"օգտագործվում..." msgid "E84: No modified buffer found" msgstr "E84: Փոփոխված բուֆերներ չեն հայտնաբերվել" @@ -4336,14 +4314,14 @@ msgstr "E88: Սա առաջին բուֆերն է" #, c-format msgid "E89: No write since last change for buffer %d (add ! to override)" msgstr "" -"E89: %d բուֆերի փոփոխությունները չեն ամրագրվել, (ամրագրելու համար ավելացրեք !" -")" +"E89: %d բուֆերի փոփոխությունները չեն ամրագրվել, (ամրագրելու համար " +"ավելացրեք !)" msgid "E90: Cannot unload last buffer" msgstr "E90: Հնարավոր չէ բեռնաթափել վերջին բուֆերը" msgid "E91: 'shell' option is empty" -msgstr "E91: 'shell' կարգանշանը դատարկ է" +msgstr "E91: 'shell' ընտրանքը դատարկ է" #, c-format msgid "E92: Buffer %d not found" @@ -4393,7 +4371,7 @@ msgstr "E104: Escape֊ը չի կարելի օգտագործել digraph֊ում" msgid "E105: Using :loadkeymap not in a sourced file" msgstr "E105: loadkeymap հրամանի օգտագործում չկցված ֆայլից" -#| msgid "E375: Unsupported %%%c in format string" +#, c-format msgid "E106: Unsupported diff output format: %s" msgstr "E106: Չաջակցվող տարբերության ելքային ձևաչափ՝ %s" @@ -4416,11 +4394,11 @@ msgstr "E111: Բացակայող ']'" #, c-format msgid "E112: Option name missing: %s" -msgstr "E112: Կարգանշանի անունը տրված չէ: %s" +msgstr "E112: Ընտրանքի անունը տրված չէ: %s" #, c-format msgid "E113: Unknown option: %s" -msgstr "E113: Անծանոթ կարգանշան: %s" +msgstr "E113: Անծանոթ ընտրանք: %s" #, c-format msgid "E114: Missing double quote: %s" @@ -4500,12 +4478,11 @@ msgstr "E132: ֆունկցիայի կանչի խորությունը մեծ է ' msgid "E133: :return not inside a function" msgstr "E133: :return ոչ ֆունկցիայի ներսից" -#| msgid "E164: Cannot go before first file" msgid "E134: Cannot move a range of lines into itself" msgstr "E134: Հնարավոր չէ տեղափոխել մի շարք տողեր իր մեջ" msgid "E135: *Filter* Autocommands must not change current buffer" -msgstr "E135: *Filter* Ինքնահրամանները չպետք է փոխեն տվյալ բուֆերը" +msgstr "E135: *Filter* Ինքնահրամանները չպետք է փոխեն տվյալ բուֆերը" msgid "E136: viminfo: Too many errors, skipping rest of file" msgstr "" @@ -4531,11 +4508,11 @@ msgstr "E141: %ld բուֆերի համար չկա ֆայլի անուն" msgid "E142: File not written: Writing is disabled by 'write' option" msgstr "" -"E142: Ֆայլն ամրագրված չէ: ամրագրոըմն անջատված է 'write' կարգանշման միջոցով" +"E142: Ֆայլն ամրագրված չէ: ամրագրոըմն անջատված է 'write' ընտրանքի միջոցով" #, c-format msgid "E143: Autocommands unexpectedly deleted new buffer %s" -msgstr "E143:Ինքնահրամանը անսպասելի ջնջել է նոր բուֆերը։ %s" +msgstr "E143: Ինքնահրամանը անսպասելի ջնջել է նոր բուֆերը։ %s" msgid "E144: Non-numeric argument to :z" msgstr "E144: Ոչ թվային արգումենտ :z-ին" @@ -4627,7 +4604,6 @@ msgstr "E168: :finish հրամանը օգտագործվում է կցվող ֆա msgid "E169: Command too recursive" msgstr "E169: Հրամանը շատ ռեկուրսիվ է" -#| msgid "E171: Missing :endif" msgid "E170: Missing :endwhile" msgstr "E170: Բացակայում է :endwhile" @@ -4638,7 +4614,7 @@ msgid "E171: Missing :endif" msgstr "E171: Հրամանը բացակայում է :endif" msgid "E172: Missing marker" -msgstr "E172: Բացակայում կարգանշում" +msgstr "E172: Բացակայող նշիչ" #, c-format msgid "E173: %d more file to edit" @@ -4719,7 +4695,6 @@ msgstr "E192: :normal հրամանի ռեկուրսիվ կանչը շատ խոր msgid "E193: %s not inside a function" msgstr "E193: %s ոչ ֆունկցիայի ներսից" -#| msgid "E498: No :source file name to substitute for \"\"" msgid "E194: No alternate file name to substitute for '#'" msgstr "E194: '#'-ը փոխարինող ֆայլի այլընտրանքային անուն չկա" @@ -4749,7 +4724,7 @@ msgid "E203: Autocommands deleted or unloaded buffer to be written" msgstr "E203: Բուֆերը կամ ջնջվել է կամ բեռնաթափվել է ինքնահրամանների միջոցով" msgid "E204: Autocommand changed number of lines in unexpected way" -msgstr "E204: Ինքնահրամանը անսպասելի փոխել է տողերը" +msgstr "E204: Ինքնահրամանն անսպասելի փոխել է տողերը" msgid "E205: Patchmode: can't save original file" msgstr "E205: Patchmode: հնարավոր չէ պահպանել նախնական ֆայլը" @@ -4799,7 +4774,7 @@ msgstr "E216: Իրադարձությունը կամ խումբը գոյությ msgid "E217: Can't execute autocommands for ALL events" msgstr "" -"E217: Հնարավոր չէ կատարել ինքնահրամանները բոլոր իրադարձությունների համար" +"E217: Հնարավոր չէ կատարել ինքնահրամանները ԲՈԼՈՐ իրադարձությունների համար" msgid "E218: Autocommand nesting too deep" msgstr "E218: Ինքնահրամանը շատ է ներդրված" @@ -4875,7 +4850,6 @@ msgstr "E240: X սերվերի հետ կապ չկա" msgid "E241: Unable to send to %s" msgstr "E241: Անհնար է ուղարկել հաղորդագրությունը %s֊ին" -#| msgid "E345: Can't find file \"%s\" in path" msgid "E242: Can't split a window while closing another" msgstr "E242: Չի կարելի պատուհանը բաժանել մյուսը փակելիս" @@ -4902,7 +4876,6 @@ msgstr "E247: \"%s\" սերվերը ռեգիստրացված չէ" msgid "E248: Failed to send command to the destination program" msgstr "E248: Հարամանը չի հաջողվել ուղարկել նշանակման վայր" -#| msgid "E881: Line count changed unexpectedly" msgid "E249: Window layout changed unexpectedly" msgstr "E249: Պատուհանի դասավորությունը անսպասելիորեն փոխվել է" @@ -4995,11 +4968,10 @@ msgstr "E273: Անծանոթ longjmp ստատուս %d" msgid "E274: No white space allowed before parenthesis" msgstr "E274: Փակագծերից առաջ տարածություն չի թույլատրվում" -#| msgid "E87: Cannot go beyond last buffer" msgid "E275: Cannot add text property to unloaded buffer" msgstr "E275: Չի կարող տեքստային հատկություն ավելացնել բեռնաթափված բուֆերին" -#| msgid "E1061: Cannot find function %s" +#, c-format msgid "E276: Cannot use function as a method: %s" msgstr "E276: Հնարավոր չէ օգտագործել ֆունկցիան որպես մեթոդ՝ %s" @@ -5035,7 +5007,6 @@ msgstr "E288: Մուտքային մեթոդը չի աջակցում ոչ մի ս msgid "E289: Input method doesn't support my preedit type" msgstr "E289: Մուտքային մեթոդը չի աջակցում ոչ մի նախախմբագրման տիպ" -#| msgid "E897: List or Blob required" msgid "E290: List or number required" msgstr "E290: Ցանկ կամ թիվ է պահանջվում" @@ -5122,7 +5093,7 @@ msgid "E326: Too many swap files found" msgstr "E326: Հայտնաբերվել են աննախադեպ շատ քանակությամբ սվեփ ֆայլեր" msgid "E327: Part of menu-item path is not sub-menu" -msgstr "E327: Մենյուի֊ի մասի ճանապարհը ենթամենյու չէ" +msgstr "E327: Մենյուի մասի ճանապարհը ենթամենյու չէ" msgid "E328: Menu only exists in another mode" msgstr "E328: Այս ռեժիմում մենյու չկա" @@ -5135,13 +5106,13 @@ msgid "E330: Menu path must not lead to a sub-menu" msgstr "E330: Մենյուի ճանապարհը չի կարող լինել ենթամենյու" msgid "E331: Must not add menu items directly to menu bar" -msgstr "E331: Մենյույի էլեմենտները չեն կարող ավելցավել մենյու բարում" +msgstr "E331: Մենյուի էլեմենտները չեն կարող ավելցավել մենյու բարում" msgid "E332: Separator cannot be part of a menu path" -msgstr "E332: Բաժանիչը չի կարող լինել մենյույի ճանապարհի մաս" +msgstr "E332: Բաժանիչը չի կարող լինել մենյուի ճանապարհի մաս" msgid "E333: Menu path must lead to a menu item" -msgstr "E333: Մենյույի ճանապարհը պետք է ներկայացնի մենյուի էլէմենտ" +msgstr "E333: Մենյուի ճանապարհը պետք է ներկայացնի մենյուի էլէմենտ" #, c-format msgid "E334: Menu not found: %s" @@ -5152,10 +5123,10 @@ msgid "E335: Menu not defined for %s mode" msgstr "E335: Մենյուն %s ռեժիմում սահմանված չէ" msgid "E336: Menu path must lead to a sub-menu" -msgstr "E336: Մենյուի ճանապարհը պետք հղվի ենթամենյույի" +msgstr "E336: Մենյուի ճանապարհը պետք հղվի ենթամենյուի" msgid "E337: Menu not found - check menu names" -msgstr "E337: Մենյուն չի հայտնաբերվել - ստուգել մենյույի անունները" +msgstr "E337: Մենյուն չի հայտնաբերվել - ստուգել մենյուի անունները" msgid "E338: Sorry, no file browser in console mode" msgstr "E338: Ներողություն, ֆայլի դիտարկիչ չկա տողային ռեժիմում" @@ -5220,7 +5191,7 @@ msgstr "E354: Ռեգիստրի անվավեր անուն: '%s'" #, c-format msgid "E355: Unknown option: %s" -msgstr "E355: Անծանոթ կարգանշան: %s" +msgstr "E355: Անծանոթ ընտրանք: %s" #, c-format msgid "E357: 'langmap': Matching character missing for %s" @@ -5234,9 +5205,8 @@ msgid "E359: Screen mode setting not supported" msgstr "E359: Տրված էկրանի ռեժիմն աջակցված չէ" msgid "E360: Cannot execute shell with -f option" -msgstr "E360: Հնարավոր չէ կատարել shell-ը -f կարգանշմամբ" +msgstr "E360: Հնարավոր չէ կատարել shell-ը -f ընտրանքով" -#| msgid "E891: Using a Funcref as a Float" msgid "E362: Using a boolean value as a Float" msgstr "E362: բուլյան արժեքի օգտագործումը որպես Float" @@ -5252,7 +5222,6 @@ msgstr "E364: Անհաջող կանչ \"%s()\"" msgid "E365: Failed to print PostScript file" msgstr "E365: Հնարավոր չէ պատճենել PostScript ֆայլը" -#| msgid "E788: Not allowed to edit another buffer now" msgid "E366: Not allowed to enter a popup window" msgstr "E366: Չի թույլատրվում մուտք գործել սահապատ" @@ -5311,7 +5280,7 @@ msgid "E381: At top of quickfix stack" msgstr "E381: quickfix ստեկի վերևում" msgid "E382: Cannot write, 'buftype' option is set" -msgstr "E382: Պահպանումն անհնար է, 'buftype' կարգանշանը միացված է" +msgstr "E382: Պահպանումն անհնար է, 'buftype' ընտրանքը միացված է" #, c-format msgid "E383: Invalid search string: %s" @@ -5457,7 +5426,7 @@ msgstr "E420: ֆոնի անծանոթ գույն" msgid "E421: Color name or number not recognized: %s" msgstr "E421: Անծանոթ գույնի անուն կամ համար։ %s" -#| msgid "E1011: Name too long: %s" +#, c-format msgid "E422: Terminal code too long: %s" msgstr "E422: Տերմինալի կոդը չափազանց երկար է՝ %s" @@ -5486,10 +5455,8 @@ msgid "E429: File \"%s\" does not exist" msgstr "E429: \"%s\" ֆայլը չի գտնվել" #, c-format -msgid "" -"E430: Tag file path truncated for %s\n" -msgstr "" -"E430: Նշումների ֆայլի ճանապարհը կարճվել է։ %s\n" +msgid "E430: Tag file path truncated for %s\n" +msgstr "E430: Նշումների ֆայլի ճանապարհը կարճվել է։ %s\n" #, c-format msgid "E431: Format error in tags file \"%s\"" @@ -5611,12 +5578,12 @@ msgid "E466: :winpos requires two number arguments" msgstr "E466: :winpos հրամանը պահանջում է երկու թվային արգումենտներ" msgid "E467: Custom completion requires a function argument" -msgstr "E467: սահմանած ավտոլրացումը պահանջում է ֆունկցիայի արգումենտ" +msgstr "E467: անհատականացված ավտոլրացումը պահանջում է ֆունկցիայի արգումենտ" msgid "E468: Completion argument only allowed for custom completion" msgstr "" -"E468: Ավտոլրացման արգումեն թույլատրվում է միայն սհամանված ավտոլրացումների " -"համար" +"E468: Ավտոլրացման արգումենտ թույլատրվում է միայն անհատականացված " +"ավտոլրացումների համար" #, c-format msgid "E469: Invalid cscopequickfix flag %c for %c" @@ -5709,14 +5676,13 @@ msgstr "E488: Ավելորդ նշաններ" msgid "E488: Trailing characters: %s" msgstr "E488: Ավելորդ նշաններ։ %s" -#| msgid "E498: No :source file name to substitute for \"\"" msgid "E489: No call stack to substitute for \"\"" msgstr "E489: Կանչերի կույտ չկա \"\"-ի համար" msgid "E490: No fold found" msgstr "E490: Փաթաթը չի հայտնաբերվել" -#| msgid "E1002: Syntax error at %s" +#, c-format msgid "E491: JSON decode error at '%s'" msgstr "E491: JSON վերծանման սխալ '%s'-ում" @@ -5730,13 +5696,13 @@ msgid "E494: Use w or w>>" msgstr "E494: Օգտագործել w կամ w>>" msgid "E495: No autocommand file name to substitute for \"\"" -msgstr "E495: փոխարինման համար չկա ֆայլի անունով ինքնահրաման \"\"" +msgstr "E495: Փոխարինման համար չկա ֆայլի անունով ինքնահրաման \"\"" msgid "E496: No autocommand buffer number to substitute for \"\"" -msgstr "E496: փոխարինման համար չկա բուֆերի անունով ինքնահրաման \"\"" +msgstr "E496: Փոխարինման համար չկա բուֆերի անունով ինքնահրաման \"\"" msgid "E497: No autocommand match name to substitute for \"\"" -msgstr "E497: փոխարինման համար չկա համընկնման անունով ինքնահրաման \"\"" +msgstr "E497: Փոխարինման համար չկա համընկնման անունով ինքնահրաման \"\"" msgid "E498: No :source file name to substitute for \"\"" msgstr "" @@ -5759,19 +5725,18 @@ msgstr "ֆայլ չէ կամ գրելի սարք" msgid "E503: \"%s\" is not a file or writable device" msgstr "E503: \"%s\" ֆայլ չէ կամ գրելի սարք" -#| msgid "E775: Eval feature not available" msgid "E503: Coffee is currently not available" msgstr "E503: Սուրճը ներկայումս հասանելի չէ" msgid "is read-only (cannot override: \"W\" in 'cpoptions')" -msgstr "միայն ընթերցելի է (\"W\" in 'cpoptions')" +msgstr "չխմբագրվող է (\"W\" in 'cpoptions')" msgid "is read-only (add ! to override)" -msgstr "միայն ընթերցելի է (ամրագրելու համար ավելացրեք !)" +msgstr "չխմբագրվող է (անցնելու համար ավելացրեք !)" #, c-format msgid "E505: \"%s\" is read-only (add ! to override)" -msgstr "E505: \"%s\" միայն կարդալու համար է (ավելացնել !)" +msgstr "E505: \"%s\" չխմբագրվող է (ավելացնել !)" msgid "E506: Can't write to backup file (add ! to override)" msgstr "" @@ -5822,10 +5787,10 @@ msgid "E517: No buffers were wiped out" msgstr "E517: Ոչ մի բուֆեր չի մաքրվել" msgid "E518: Unknown option" -msgstr "E518: Անծանոթ կարգանշան" +msgstr "E518: Անծանոթ ընտրանք" msgid "E519: Option not supported" -msgstr "E519: Կարգանշումը չի աջակցվում" +msgstr "E519: Ընտրանքը չի աջակցվում" msgid "E520: Not allowed in a modeline" msgstr "E520: Չի թույլատրվում տողային ռեժիմում" @@ -5868,7 +5833,6 @@ msgstr "E530: Գրաֆիկական ռեժիմում հնարավոր չէ փոխ msgid "E531: Use \":gui\" to start the GUI" msgstr "E531: Գրաֆիկական ինտերֆեյսին անցնելու համար կատարել \":gui\" հրամանը" -#| msgid "E1249: Highlight group name too long" msgid "E532: Highlighting color name too long in defineAnnoType" msgstr "E532: Գունանշման անվան չափազանց երկար ընդգծում defineAnnoType-ում" @@ -5973,7 +5937,6 @@ msgstr "E563: stat(%s) սխալ: %d" msgid "E564: %s is not a directory or a valid cscope database" msgstr "E564: %s֊ը թղթապանակ կամ cscope֊ի տվյալների բազա չէ" -#| msgid "E811: Not allowed to change buffer information now" msgid "E565: Not allowed to change text or change window" msgstr "E565: Չի թույլատրվում փոխել տեքստը կամ փոխել պատուհանը" @@ -6119,11 +6082,9 @@ msgstr "E608: Անհնար է նետել :throw 'Vim' նախածանցով" msgid "E609: Cscope error: %s" msgstr "E609: Cscope սխալ: %s" -#| msgid "E1005: Too many argument types" msgid "E610: No argument to delete" msgstr "E610: Ջնջելու արգումենտ չկա" -#| msgid "E1320: Using an Object as a Number" msgid "E611: Using a Special as a Number" msgstr "E611: Հատուկ համարի օգտագործումը" @@ -6134,7 +6095,7 @@ msgstr "E612: Սահմանվել են աննախադեպ շատ նշաններ" msgid "E613: Unknown printer font: %s" msgstr "E613: Անծանոթ տպագրման տառատեսակ %s" -#| msgid "E1210: Number required for argument %d" +#, c-format msgid "E616: Object required for argument %d" msgstr "E616: %d արգումենտի համար անհրաժեշտ է օբյեկտ" @@ -6182,7 +6143,7 @@ msgstr "E627: Բացակայող վերջակետ։ %s" msgid "E628: Missing ! or / in: %s" msgstr "E628: Բաց թողնված ! կամ /: %s" -#| msgid "E631: %s(): Write failed" +#, c-format msgid "E630: %s(): Write while not connected" msgstr "E630: %s(): Գրեք, քանի դեռ միացված չեք" @@ -6190,11 +6151,9 @@ msgstr "E630: %s(): Գրեք, քանի դեռ միացված չեք" msgid "E631: %s(): Write failed" msgstr "E631: %s(): թարմացման անհաջող փորձ" -#| msgid "E652: Invalid buffer identifier in getAnno" msgid "E632: Invalid buffer identifier in getLength" msgstr "E632: Անվավեր բուֆերի նույնացուցիչ getLength-ում" -#| msgid "E639: Invalid buffer identifier in setTitle" msgid "E633: Invalid buffer identifier in getText" msgstr "E633: Անվավեր բուֆերի նույնացուցիչ getText-ում" @@ -6207,22 +6166,18 @@ msgstr "E635: Անվավեր ավելացվող բուֆերի անուն" msgid "E636: Invalid buffer identifier in create" msgstr "E636: Անվավեր ստեղծվող բուֆերի անուն" -#| msgid "E639: Invalid buffer identifier in setTitle" msgid "E637: Invalid buffer identifier in startDocumentListen" msgstr "E637: Բուֆերի անվավեր նույնացուցիչ startDocumentListen-ում" -#| msgid "E639: Invalid buffer identifier in setTitle" msgid "E638: Invalid buffer identifier in stopDocumentListen" msgstr "E638: Անվավեր բուֆերի նույնացուցիչ stopDocumentListen-ում" msgid "E639: Invalid buffer identifier in setTitle" msgstr "E639: Անվավեր բուֆերի անուն setTitle-ում" -#| msgid "E647: Invalid buffer identifier in setDot" msgid "E640: Invalid buffer identifier in initDone" msgstr "E640: initDone-ում բուֆերի անվավեր նույնացուցիչ" -#| msgid "E645: Invalid buffer identifier in setVisible" msgid "E641: Invalid buffer identifier in setBufferNumber" msgstr "E641: բուֆերի անվավեր նույնացուցիչ setBufferNumber-ում" @@ -6230,18 +6185,15 @@ msgstr "E641: բուֆերի անվավեր նույնացուցիչ setBufferNu msgid "E642: File %s not found in setBufferNumber" msgstr "E642: %s ֆայլը չի գտնվել setBufferNumber-ում" -#| msgid "E639: Invalid buffer identifier in setTitle" msgid "E643: Invalid buffer identifier in setFullName" msgstr "E643: բուֆերի անվավեր նույնացուցիչ setFullName-ում" -#| msgid "E645: Invalid buffer identifier in setVisible" msgid "E644: Invalid buffer identifier in editFile" msgstr "E644: editFile-ում բուֆերի անվավեր նույնացուցիչ" msgid "E645: Invalid buffer identifier in setVisible" msgstr "E645: Անվավեր բուֆերի անուն setVisible-ում" -#| msgid "E645: Invalid buffer identifier in setVisible" msgid "E646: Invalid buffer identifier in setModified" msgstr "E646: Բուֆերի անվավեր նույնացուցիչ setModified-ում" @@ -6251,7 +6203,6 @@ msgstr "E647: Անվավեր բուֆերի անուն setDot-ում" msgid "E648: Invalid buffer identifier in close" msgstr "E648: Անվավեր բուֆերի անուն close-ում" -#| msgid "E651: Invalid buffer identifier in addAnno" msgid "E650: Invalid buffer identifier in defineAnnoType" msgstr "E650: Անվավեր բուֆերի նույնացուցիչ defineAnnoType-ում" @@ -6335,9 +6286,9 @@ msgid "E675: No default font specified for multi-byte printing." msgstr "" "E675: բազմաբայթ կոդավորման հետ տրված չէ լռելիությամբ սահմանված տառատեսակը." -#| msgid "No matching autocommands: %s" +#, c-format msgid "E676: No matching autocommands for buftype=%s buffer" -msgstr "E676: Buftype=%s բուֆերի համար համապատասխան ավտոմատ հրամաններ չկան" +msgstr "E676: Buftype=%s բուֆերի համար համապատասխան ինքնահրամաններ չկան" msgid "E677: Error writing temp file" msgstr "E677: Սխալ է տեղի ունեցել ժամանակավոր ֆայլում գրելու ընթացքում" @@ -6380,7 +6331,7 @@ msgstr "E687: Ավելի քիչ նշաններ քան ցանկի էլեմենտ msgid "E688: More targets than List items" msgstr "E688: Ավելի շատ նշաններ քան ցանկի էլեմենտները" -#| msgid "E790: undojoin is not allowed after undo" +#, c-format msgid "E689: Index not allowed after a %s: %s" msgstr "E689: ցուցիչը չի թույլատրվում %s-ից հետո՝ %s" @@ -6393,7 +6344,7 @@ msgstr "E691: Ցանկը պետք է համեմատել միայն ցանկի հ msgid "E692: Invalid operation for List" msgstr "E692: Ցանկի հետ չթույլատրված գործողություն" -#| msgid "E1206: Dictionary required for argument %d" +#, c-format msgid "E693: Class or class typealias required for argument %d" msgstr "E693: %d արգումենտի համար պահանջվում են դասի կամ դասի տիպեր" @@ -6463,7 +6414,7 @@ msgid "E712: Argument of %s must be a List or Dictionary" msgstr "E712: %s֊ի արգումենտ պետք է լինի ցանկ կամ բառարան" msgid "E713: Cannot use empty key for Dictionary" -msgstr "E713: Անհնար է օգտագործել դատարակ բառարանի բանալի" +msgstr "E713: Անհնար է օգտագործել դատարկ բառարանի բանալի" msgid "E714: List required" msgstr "E714: Ցանկ է անհրաժեշտ" @@ -6481,7 +6432,6 @@ msgstr "E717: Բառարանի էլեմենտն արդեն գոյություն msgid "E718: Funcref required" msgstr "E718: Անհրաժեշտ է Funcref" -#| msgid "E713: Cannot use empty key for Dictionary" msgid "E719: Cannot slice a Dictionary" msgstr "E719: Հնարավոր չէ կտրատել բառարանը" @@ -6576,8 +6526,7 @@ msgid "E743: Variable nested too deep for (un)lock" msgstr "E743: Փոփոխականը շատ խորն է ներդրված բլոկավորման/ապաբլոկավորման համար" msgid "E744: NetBeans does not allow changes in read-only files" -msgstr "" -"E744: NetBeans֊ը չի թույլատրում փոփոխություններ միայն կարդալու ֆայլերում" +msgstr "E744: NetBeans֊ը չի թույլատրում փոփոխություններ չխմբագրվող ֆայլերում" msgid "E745: Using a List as a Number" msgstr "E745: Ցանկ է օգտագործվել ամբողջի փոխարեն" @@ -6647,7 +6596,7 @@ msgstr "" #, c-format msgid "E764: Option '%s' is not set" -msgstr "E764: '%s' կարգանշանը սահմանված չէ" +msgstr "E764: '%s' ընտրանքը սահմանված չէ" #, c-format msgid "E765: 'spellfile' does not have %d entries" @@ -6757,12 +6706,12 @@ msgstr "E794: Հնարավոր չէ ստեղծել փոփոխական sandbox֊ msgid "E795: Cannot delete variable" msgstr "E795: Հնարավոր չէ ջնջել փոփոխականը" -#| msgid "E795: Cannot delete variable" +#, c-format msgid "E795: Cannot delete variable %s" msgstr "E795: Հնարավոր չէ ջնջել %s փոփոխականը" msgid "writing to device disabled with 'opendevice' option" -msgstr "սարքում գրելն արգելված է 'opendevice' կարգանշման միջոցով" +msgstr "սարքում գրելն արգելված է 'opendevice' ընտրանքի միջոցով" msgid "E797: SpellFileMissing autocommand deleted buffer" msgstr "" @@ -6776,12 +6725,10 @@ msgstr "E798: ID-ն վերապահված է \":match\"-ի համար՝ %d" msgid "E799: Invalid ID: %d (must be greater than or equal to 1)" msgstr "E799: Անվավեր համար։ %d (համարը պետք է լինի 1-ից մեծ կամ հավասար)" -msgid "" -"E800: Arabic cannot be used: Not enabled at compile time\n" -msgstr "" -"E800: Արաբերենը հնարավոր չէ օգտագործել, միացված չէ կառուղման ժամանակ\n" +msgid "E800: Arabic cannot be used: Not enabled at compile time\n" +msgstr "E800: Արաբերենը հնարավոր չէ օգտագործել, միացված չէ կառուղման ժամանակ\n" -#| msgid "E1073: Name already defined: %s" +#, c-format msgid "E801: ID already taken: %d" msgstr "E801: ID-ն արդեն վերցված է՝ %d" @@ -6919,7 +6866,7 @@ msgid "E838: NetBeans is not supported with this GUI" msgstr "E838: NetBeans֊ը չի աջակցվում այս գրաֆիկական ինտերֆեյսով" msgid "E840: Completion function deleted text" -msgstr "E840: Ավտոմատ լրացման գործառույթը ջնջել է տեքստը" +msgstr "E840: Ավտոլրացման ֆունկցիան ջնջել է տեքստը" msgid "E841: Reserved name, cannot be used for user defined command" msgstr "" @@ -6944,7 +6891,7 @@ msgid "E847: Too many syntax includes" msgstr "E847: Աննախադեպ շատ ուղղագրական կցումներ" msgid "E848: Too many syntax clusters" -msgstr "E848: Աննախադեպ շատ hամակարգեր" +msgstr "E848: Աննախադեպ շատ ուղղագրական համակարգեր" msgid "E849: Too many highlight and syntax groups" msgstr "E849: Աննախադեպ շատ գունանշման բնորոշիչներ և ուղղագրական խմբեր" @@ -6963,7 +6910,7 @@ msgid "E853: Duplicate argument name: %s" msgstr "E853: Կրկնված արգումենտի անուն: %s" msgid "E854: Path too long for completion" -msgstr "E854: Ճանապարհն անսպասելի երկար է ինքնահամալրման համար" +msgstr "E854: Ճանապարհն անսպասելի երկար է ավտոլրացման համար" msgid "E855: Autocommands caused command to abort" msgstr "E855: Ինքնահրամմանները ստիպել են հրամանին անհաջող ավարտվել" @@ -6988,20 +6935,18 @@ msgstr "E859: Հնարավոր չէ փոխակերպել վերադարձված msgid "E860: Need 'id' and 'type' or 'types' with 'both'" msgstr "E860: Պետք է 'id' և 'type' կամ 'types' և 'both'" -#| msgid "E810: Cannot read or write temp files" msgid "E861: Cannot open a second popup with a terminal" -msgstr "E861: Հնարավոր չէ բացել երկրորդ թռուցիկ պատուհանը տերմինալով" +msgstr "E861: Հնարավոր չէ բացել երկրորդ սահապատ պատուհանը տերմինալով" msgid "E862: Cannot use g: here" msgstr "E862: Հնարավոր չէ այստեղ օգտագործել g:֊ն" -#| msgid "E813: Cannot close autocmd or popup window" msgid "E863: Not allowed for a terminal in a popup window" -msgstr "E863: Չի թույլատրվում բացվող պատուհանում տերմինալի համար" +msgstr "E863: Չի թույլատրվում սահապատ պատուհանում տերմինալի համար" #, no-c-format msgid "" -"E864: \\%#= can only be followed by 0, 1, or 2: The automatic engine will be " +"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " "used" msgstr "" "E864: \\%#=-ին կարող է հետևել միայն 0, 1 կամ 2: Ավտոմատ շարժիչը կօգտագործվի" @@ -7100,7 +7045,7 @@ msgstr "" "E887: Ներողություն, այս հրամանն անջատված է, Python գրադարանը հնարավոր չէ " "բեռնել." -#| msgid "E867: (NFA regexp) Unknown operator '\\z%c'" +#, c-format msgid "E888: (NFA regexp) cannot repeat %s" msgstr "E888: (NFA regexp) չի կարող կրկնել %s" @@ -7114,15 +7059,12 @@ msgstr "E890: Ավելորդ նշաններ ']'-ից հետո: %s]%s" msgid "E891: Using a Funcref as a Float" msgstr "E891: Ֆունկցիայի հղումն օգտագործվել է սահող կետով թվի փոխարեն" -#| msgid "E891: Using a Funcref as a Float" msgid "E892: Using a String as a Float" msgstr "E892: Օգտագործելով լարը որպես բոց" -#| msgid "E891: Using a Funcref as a Float" msgid "E893: Using a List as a Float" msgstr "E893: Ցուցակի օգտագործումը որպես բոց" -#| msgid "E728: Using a Dictionary as a Number" msgid "E894: Using a Dictionary as a Float" msgstr "E894: Բառարանի օգտագործումը որպես բոց" @@ -7157,44 +7099,38 @@ msgstr "E901: getaddrinfo() channel_open(): %s" msgid "E901: gethostbyname() in channel_open()" msgstr "E901: gethostbyname() channel_open()-ում" -#| msgid "E254: Cannot allocate color %s" msgid "E902: Cannot connect to port" msgstr "E902: Հնարավոր չէ միանալ նավահանգիստին" msgid "E903: Received command with non-string argument" msgstr "E903: ստացված հրամանը ոչ լարային արգումենտով" -#| msgid "E904: Third argument for call must be a list" msgid "E904: Last argument for expr/call must be a number" msgstr "E904: expr/call-ի վերջին փաստարկը պետք է լինի թիվ" msgid "E904: Third argument for call must be a list" msgstr "E904: 3-րդ արգումենտը պետք է լինի ցանկ" -#| msgid "E160: Unknown sign command: %s" +#, c-format msgid "E905: Received unknown command: %s" msgstr "E905: ստացվել է անհայտ հրաման՝ %s" -#| msgid "E663: At end of changelist" msgid "E906: Not an open channel" msgstr "E906: Բաց ալիք չէ" -#| msgid "E891: Using a Funcref as a Float" msgid "E907: Using a special value as a Float" msgstr "E907: Հատուկ արժեքի օգտագործումը որպես Float" -#| msgid "E806: Using a Float as a String" +#, c-format msgid "E908: Using an invalid value as a String: %s" msgstr "E908: Անվավեր արժեքի օգտագործումը որպես տող՝ %s" msgid "E909: Cannot index a special variable" msgstr "E909: Անհնար է ինդեքսավորել հատուկ փոփոխականը" -#| msgid "E805: Using a Float as a Number" msgid "E910: Using a Job as a Number" msgstr "E910: Աշխատանքի օգտագործումը որպես համար" -#| msgid "E891: Using a Funcref as a Float" msgid "E911: Using a Job as a Float" msgstr "E911: Աշխատանքի օգտագործումը որպես բոց" @@ -7202,22 +7138,19 @@ msgid "E912: Cannot use ch_evalexpr()/ch_sendexpr() with a raw or nl channel" msgstr "" "E912: Հնարավոր չէ օգտագործել ch_evalexpr()/ch_sendexpr() հումքի կամ nl ալիքով" -#| msgid "E703: Using a Funcref as a Number" msgid "E913: Using a Channel as a Number" msgstr "E913: ալիքի օգտագործումը որպես համար" -#| msgid "E891: Using a Funcref as a Float" msgid "E914: Using a Channel as a Float" msgstr "E914: ալիքի օգտագործումը որպես բոց" msgid "E915: in_io buffer requires in_buf or in_name to be set" msgstr "E915: in_io բուֆերը պահանջում է տեղադրել in_buf կամ in_name" -#| msgid "E543: Not a valid codepage" msgid "E916: Not a valid job" msgstr "E916: Վավեր աշխատանք չէ" -#| msgid "E197: Cannot set language to \"%s\"" +#, c-format msgid "E917: Cannot use a callback with %s()" msgstr "E917: Հնարավոր չէ օգտագործել հետզանգ %s()-ով" @@ -7225,14 +7158,13 @@ msgstr "E917: Հնարավոր չէ օգտագործել հետզանգ %s()-ո msgid "E918: Buffer must be loaded: %s" msgstr "E918: Բուֆերը չի բեռնվել: %s" -#| msgid "not found in '%s': \"%s\"" +#, c-format msgid "E919: Directory not found in '%s': \"%s\"" -msgstr "E919: '%s'-ում գրացուցակը չի գտնվել. \"%s\"" +msgstr "E919: '%s'-ում թղթապանակը չի գտնվել. \"%s\"" msgid "E920: _io file requires _name to be set" msgstr "E920: _io ֆայլը պահանջում է սահմանել _name" -#| msgid "E474: Invalid argument" msgid "E921: Invalid callback argument" msgstr "E921: Անվավեր հետադարձ արգումենտ" @@ -7248,7 +7180,7 @@ msgstr "E925: ընթացիկ Quickfix ցուցակը փոխվել է" msgid "E926: Current location list was changed" msgstr "E926: Ներկայիս տեղադրության ցանկը փոխվել է" -#| msgid "E476: Invalid command: %s" +#, c-format msgid "E927: Invalid action: '%s'" msgstr "E927: Անվավեր գործողություն՝ '%s'" @@ -7269,18 +7201,17 @@ msgstr "E931: Բուֆերը չի կարող գրանցվել" msgid "E932: Closure function should not be at top level: %s" msgstr "E932: Փակման գործառույթը չպետք է լինի վերին մակարդակում՝ %s" -#| msgid "E129: Function name required" +#, c-format msgid "E933: Function was deleted: %s" msgstr "E933: ֆունկցիան ջնջվել է՝ %s" msgid "E934: Cannot jump to a buffer that does not have a name" msgstr "E934: Չի կարող անցնել բուֆեր, որն անուն չունի" -#| msgid "E964: Invalid column number: %ld" +#, c-format msgid "E935: Invalid submatch number: %d" msgstr "E935: Անվավեր ենթահամընկնման համար: %d" -#| msgid "E351: Cannot delete fold with current 'foldmethod'" msgid "E936: Cannot delete the current group" msgstr "E936: Հնարավոր չէ ջնջել ընթացիկ խումբը" @@ -7295,18 +7226,16 @@ msgstr "E938: Բանալու կրկնություն: \"%s\"" msgid "E939: Positive count required" msgstr "E939: Պահանջվում է դրական քանակ" -#| msgid "E46: Cannot change read-only variable \"%s\"" +#, c-format msgid "E940: Cannot lock or unlock variable %s" msgstr "E940: Հնարավոր չէ կողպել կամ ապակողպել %s փոփոխականը" msgid "E941: Already started a server" msgstr "E941: Արդեն գործարկել է սերվերը" -#| msgid "E775: Eval feature not available" msgid "E942: +clientserver feature not available" msgstr "E942: +clientserver առանձնահատկությունը հասանելի չէ" -#| msgid "E488: Trailing characters" msgid "E944: Reverse range in character class" msgstr "E944: Հակադարձ միջակայքը նիշերի դասում" @@ -7316,23 +7245,21 @@ msgstr "E945: Նիշերի դասի միջակայքը չափազանց մեծ msgid "E946: Cannot make a terminal with running job modifiable" msgstr "E946: Հնարավոր չէ կատարել տերմինալ՝ փոփոխվող գործող աշխատանքով" -#| msgid "E948: Job still running" +#, c-format msgid "E947: Job still running in buffer \"%s\"" msgstr "E947: Խնդիրը դեռևս կատարվում է \"%s\" բուֆերում" msgid "E948: Job still running" msgstr "E948: դեռևս կատարվում է" -#| msgid "E948: Job still running" msgid "E948: Job still running (add ! to end the job)" msgstr "" "E948: Աշխատանքը դեռ աշխատում է (ավելացրե՛ք ! աշխատանքը ավարտելու համար)" -#| msgid "E80: Error while writing" msgid "E949: File changed while writing" msgstr "E949: ֆայլը փոխվել է գրելիս" -#| msgid "E1354: Cannot extend %s" +#, c-format msgid "E950: Cannot convert between %s and %s" msgstr "E950: Հնարավոր չէ փոխարկել %s-ի և %s-ի միջև" @@ -7340,9 +7267,8 @@ msgstr "E950: Հնարավոր չէ փոխարկել %s-ի և %s-ի միջև" msgid "E951: \\% value too large" msgstr "E951: \\% արժեքը մի քիչ երկար է" -#| msgid "E855: Autocommands caused command to abort" msgid "E952: Autocommand caused recursive behavior" -msgstr "E952: Ավտոհրաման առաջացրել է ռեկուրսիվ վարքագիծ" +msgstr "E952: Ինքնահրամանն առաջացրել է ռեկուրսիվ վարքագիծ" #, c-format msgid "E953: File exists: %s" @@ -7351,22 +7277,18 @@ msgstr "E953: Ֆայլն արդեն գոյություն ունի: %s" msgid "E954: 24-bit colors are not supported on this environment" msgstr "E954: 24-բիթանոց գույները չեն ապահովվում այս միջավայրում" -#| msgid "E94: No matching buffer for %s" msgid "E955: Not a terminal buffer" msgstr "E955: Տերմինալային բուֆեր չէ" -#| msgid "E659: Cannot invoke Python recursively" msgid "E956: Cannot use pattern recursively" msgstr "E956: Նմուշը հնարավոր չէ օգտագործել ռեկուրսիվ" -#| msgid "E966: Invalid line number: %ld" msgid "E957: Invalid window number" msgstr "E957: պատուհանի համարն անվավեր է" msgid "E958: Job already finished" msgstr "E958: Աշխատանքն արդեն ավարտված է" -#| msgid "E534: Invalid wide font" msgid "E959: Invalid diff format." msgstr "E959: Տարբերության անվավեր ձևաչափ:" @@ -7376,7 +7298,7 @@ msgstr "E960: Ներքին տարբերություն ստեղծելու խնդ msgid "E961: No line number to use for \"\"" msgstr "E961: Տողի համարը տրված չէ \"\"" -#| msgid "E476: Invalid command: %s" +#, c-format msgid "E962: Invalid action: '%s'" msgstr "E962: Անվավեր գործողություն՝ '%s'" @@ -7388,7 +7310,6 @@ msgstr "E963: v:%s-ի արժեքը սխալ տիպի սահմանում" msgid "E964: Invalid column number: %ld" msgstr "E964: Անվավեր սյան համար: %ld" -#| msgid "E379: Missing or empty directory name" msgid "E965: Missing property type name" msgstr "E965: Բացակայում է սեփականության տիպի անվանումը" @@ -7396,7 +7317,6 @@ msgstr "E965: Բացակայում է սեփականության տիպի անվ msgid "E966: Invalid line number: %ld" msgstr "E966: Անվավեր տողի համար: %ld" -#| msgid "E593: Need at least %d lines" msgid "E968: Need at least one of 'id' or 'type'" msgstr "E968: Պետք է 'id' կամ 'type'-ից առնվազն մեկը" @@ -7408,42 +7328,35 @@ msgstr "E969: հատկության տեսակը %s արդեն սահմանված msgid "E970: Unknown highlight group name: '%s'" msgstr "E970: Անծանոթ գունանշման խումբ: '%s'" -#| msgid "E429: File \"%s\" does not exist" +#, c-format msgid "E971: Property type %s does not exist" msgstr "E971: %s հատկության տեսակը գոյություն չունի" -#| msgid "E711: List value does not have enough items" msgid "E972: Blob value does not have the right number of bytes" msgstr "E972: Blob արժեքը չունի բայթերի ճիշտ քանակ" msgid "E973: Blob literal should have an even number of hex characters" msgstr "E973: Blob literal-ը պետք է ունենա զույգ թվով վեցանկյուն նիշ" -#| msgid "E745: Using a List as a Number" msgid "E974: Using a Blob as a Number" msgstr "E974: բլբի օգտագործումը որպես թիվ" -#| msgid "E891: Using a Funcref as a Float" msgid "E975: Using a Blob as a Float" msgstr "E975: Բլոբի օգտագործումը որպես բոց" -#| msgid "E806: Using a Float as a String" msgid "E976: Using a Blob as a String" msgstr "E976: Բլոբի օգտագործումը որպես տող" -#| msgid "E691: Can only compare List with List" msgid "E977: Can only compare Blob with Blob" msgstr "E977: Կարող է համեմատել միայն Blob-ը Blob-ի հետ" -#| msgid "E692: Invalid operation for List" msgid "E978: Invalid operation for Blob" msgstr "E978: Անվավեր գործողություն Blob-ի համար" -#| msgid "E684: List index out of range: %ld" +#, c-format msgid "E979: Blob index out of range: %ld" msgstr "E979: Blob ինդեքսը դուրս է տիրույթից՝ %ld" -#| msgid "E519: Option not supported" msgid "E980: Lowlevel input not supported" msgstr "E980: Ցածր մակարդակի մուտքագրումը չի ապահովվում" @@ -7460,19 +7373,15 @@ msgstr "E983: Կրկնված արգումենտ: %s" msgid "E984: :scriptversion used outside of a sourced file" msgstr "E984: :scriptversion հրամանը օգտագործվում է կցվող ֆայլից դուրս" -#| msgid "E838: NetBeans is not supported with this GUI" msgid "E985: .= is not supported with script version >= 2" msgstr "E985: .= չի աջակցվում սկրիպտի տարբերակով >= 2" -#| msgid "E428: Cannot go beyond last matching tag" msgid "E986: Cannot modify the tag stack within tagfunc" msgstr "E986: Հնարավոր չէ փոփոխել պիտակների կույտը tagfunc-ում" -#| msgid "E178: Invalid default value for count" msgid "E987: Invalid return value from tagfunc" msgstr "E987: tagfunc-ից վերադարձված անվավեր արժեք" -#| msgid "E25: GUI cannot be used: Not enabled at compile time" msgid "E988: GUI cannot be used. Cannot execute gvim.exe." msgstr "E988: GUI-ն չի կարող օգտագործվել: Հնարավոր չէ գործարկել gvim.exe-ը:" @@ -7483,47 +7392,38 @@ msgstr "E989: Ոչ լռելյայն արգումենտը հաջորդում է msgid "E990: Missing end marker '%s'" msgstr "E990: Բացակայող նշման վերջ %s" -#| msgid "E862: Cannot use g: here" msgid "E991: Cannot use =<< here" msgstr "E991: Այստեղ հնարավոր չէ օգտագործել =<<" -#| msgid "E520: Not allowed in a modeline" msgid "E992: Not allowed in a modeline when 'modelineexpr' is off" msgstr "E992: Չի թույլատրվում մոդելում, երբ 'modelineexpr' ն անջատված է" -#| msgid "E813: Cannot close autocmd or popup window" +#, c-format msgid "E993: Window %d is not a popup window" -msgstr "E993: %d պատուհանը բացվող պատուհան չէ" +msgstr "E993: %d պատուհանը սահապատ պատուհան չէ" -#| msgid "E48: Not allowed in sandbox" msgid "E994: Not allowed in a popup window" -msgstr "E994: Չի թույլատրվում բացվող պատուհանում" +msgstr "E994: Չի թույլատրվում սահապատ պատուհանում" -#| msgid "E795: Cannot delete variable" msgid "E995: Cannot modify existing variable" msgstr "E995: Հնարավոր չէ փոփոխել գոյություն ունեցող փոփոխականը" -#| msgid "E795: Cannot delete variable" msgid "E996: Cannot lock a range" msgstr "E996: Հնարավոր չէ կողպել միջակայքը" -#| msgid "E1052: Cannot declare an option: %s" msgid "E996: Cannot lock an option" msgstr "E996: Հնարավոր չէ արգելափակել տարբերակը" -#| msgid "E90: Cannot unload last buffer" msgid "E996: Cannot lock a list or dict" msgstr "E996: Հնարավոր չէ կողպել ցուցակը կամ թելադրանքը" -#| msgid "E46: Cannot change read-only variable" msgid "E996: Cannot lock an environment variable" msgstr "E996: Հնարավոր չէ արգելափակել շրջակա միջավայրի փոփոխականը" -#| msgid "E90: Cannot unload last buffer" msgid "E996: Cannot lock a register" msgstr "E996: Հնարավոր չէ արգելափակել գրանցամատյանը" -#| msgid "E426: Tag not found: %s" +#, c-format msgid "E997: Tabpage not found: %d" msgstr "E997: ներդիրը չի գտնվել՝ %d" @@ -7531,11 +7431,11 @@ msgstr "E997: ներդիրը չի գտնվել՝ %d" msgid "E998: Reduce of an empty %s with no initial value" msgstr "E998: Կրճատել դատարկ %s առանց նախնական արժեքի" -#| msgid "E519: Option not supported" +#, c-format msgid "E999: scriptversion not supported: %d" msgstr "E999: սցենարի տարբերակը չի աջակցվում՝ %d" -#| msgid "E1122: Variable is locked: %s" +#, c-format msgid "E1001: Variable not found: %s" msgstr "E1001: փոփոխականը չի գտնվել՝ %s" @@ -7543,7 +7443,6 @@ msgstr "E1001: փոփոխականը չի գտնվել՝ %s" msgid "E1002: Syntax error at %s" msgstr "E1002: Ուղղագրական սխալ %s" -#| msgid "E1027: Missing return statement" msgid "E1003: Missing return value" msgstr "E1003: վերադարձի արժեքը բացակայում է" @@ -7554,11 +7453,10 @@ msgstr "E1004: '%s'-ում \"%s\"-ից առաջ և հետո պահանջվում msgid "E1005: Too many argument types" msgstr "E1005: Աննախադեպ շատ արգումենտի տիպեր" -#| msgid "E1035: % requires number arguments" +#, c-format msgid "E1006: %s is used as an argument" msgstr "E1006: %s-ն օգտագործվում է որպես արգումենտ" -#| msgid "Garbage after option argument" msgid "E1007: Mandatory argument after optional argument" msgstr "E1007: Պարտադիր փաստարկը կամընտիր փաստարկից հետո" @@ -7578,22 +7476,22 @@ msgstr "E1010: Անծանոթ տիպ։ %s" msgid "E1011: Name too long: %s" msgstr "E1011: Անունը մի քիչ երկար է: %s" -#| msgid "E1163: Variable %d: type mismatch, expected %s but got %s" +#, c-format msgid "E1012: Type mismatch; expected %s but got %s" msgstr "E1012: Տիպի անհամապատասխանություն; սպասվում էր %s, բայց ստացավ %s" -#| msgid "E1163: Variable %d: type mismatch, expected %s but got %s" +#, c-format msgid "E1012: Type mismatch; expected %s but got %s in %s" msgstr "" "E1012: Տիպի անհամապատասխանություն; սպասվում էր %s, բայց ստացավ %s %s-ում" -#| msgid "E1163: Variable %d: type mismatch, expected %s but got %s" +#, c-format msgid "E1013: Argument %d: type mismatch, expected %s but got %s" msgstr "" "E1013: արգումենտ %d. տեսակի անհամապատասխանություն, սպասվում էր %s, բայց " "ստացավ %s" -#| msgid "E1163: Variable %d: type mismatch, expected %s but got %s" +#, c-format msgid "E1013: Argument %d: type mismatch, expected %s but got %s in %s" msgstr "" "E1013: Փաստարկ %d. տիպի անհամապատասխանություն, սպասվում էր %s, բայց ստացավ " @@ -7603,51 +7501,46 @@ msgstr "" msgid "E1014: Invalid key: %s" msgstr "E1014: Անվավեր բանալի: %s" -#| msgid "E39: Number expected" +#, c-format msgid "E1015: Name expected: %s" msgstr "E1015: Անունը սպասվում է՝ %s" -#| msgid "E1052: Cannot declare an option: %s" +#, c-format msgid "E1016: Cannot declare a %s variable: %s" msgstr "E1016: Հնարավոր չէ հայտարարել %s փոփոխական՝ %s" -#| msgid "E1052: Cannot declare an option: %s" +#, c-format msgid "E1016: Cannot declare an environment variable: %s" msgstr "E1016: Հնարավոր չէ հայտարարել շրջակա միջավայրի փոփոխական՝ %s" -#| msgid "E1073: Name already defined: %s" +#, c-format msgid "E1017: Variable already declared: %s" msgstr "E1017: փոփոխականն արդեն հայտարարված է՝ %s" -#| msgid "E1061: Cannot find function %s" +#, c-format msgid "E1018: Cannot assign to a constant: %s" msgstr "E1018: Հնարավոր չէ վերագրել հաստատունին՝ %s" -#| msgid "E691: Can only compare List with List" msgid "E1019: Can only concatenate to string" msgstr "E1019: Կարող է միանալ միայն լարին" -#| msgid "E1052: Cannot declare an option: %s" +#, c-format msgid "E1020: Cannot use an operator on a new variable: %s" msgstr "E1020: հնարավոր չէ օպերատոր օգտագործել նոր փոփոխականի վրա՝ %s" -#| msgid "E709: [:] requires a List or Blob value" msgid "E1021: Const requires a value" msgstr "E1021: Const-ը արժեք է պահանջում" -#| msgid "E808: Number or Float required" msgid "E1022: Type or initialization required" msgstr "E1022: տեսակը կամ սկզբնավորումը պահանջվում է" -#| msgid "E891: Using a Funcref as a Float" +#, c-format msgid "E1023: Using a Number as a Bool: %lld" msgstr "E1023: Օգտագործելով թիվը որպես Bool՝ %lld" -#| msgid "E1324: Using an Object as a String" msgid "E1024: Using a Number as a String" msgstr "E1024: Օգտագործելով թիվը որպես տող" -#| msgid "E168: :finish used outside of a sourced file" msgid "E1025: Using } outside of a block scope" msgstr "E1025: }-ի օգտագործումը բլոկի շրջանակից դուրս" @@ -7657,19 +7550,17 @@ msgstr "E1026: Բացակայող }." msgid "E1027: Missing return statement" msgstr "E1027: Բացակայող return" -#| msgid "E702: Sort compare function failed" msgid "E1028: Compiling :def function failed" msgstr "E1028: :def ֆունկցիան կազմելը ձախողվեց" -#| msgid "E451: Expected }: %s" +#, c-format msgid "E1029: Expected %s but got %s" msgstr "E1029: Սպասվում էր %s, բայց ստացվեց %s" -#| msgid "E1320: Using an Object as a Number" +#, c-format msgid "E1030: Using a String as a Number: \"%s\"" msgstr "E1030: Օգտագործելով տողը որպես թիվ՝ \"%s\"" -#| msgid "E284: Cannot set IC values" msgid "E1031: Cannot use void value" msgstr "E1031: Չի կարող օգտագործել անվավեր արժեք" @@ -7679,7 +7570,7 @@ msgstr "E1032: Բացակայող :catch կամ :finally" msgid "E1033: Catch unreachable after catch-all" msgstr "E1033: Բռնելն անհասանելի է ամեն ինչից հետո" -#| msgid "E1354: Cannot extend %s" +#, c-format msgid "E1034: Cannot use reserved name %s" msgstr "E1034: Հնարավոր չէ օգտագործել վերապահված անունը %s" @@ -7687,15 +7578,14 @@ msgstr "E1034: Հնարավոր չէ օգտագործել վերապահված msgid "E1035: % requires number arguments" msgstr "E1035: % պահանջում է թվային արգումենտ" -#| msgid "E1035: % requires number arguments" +#, c-format msgid "E1036: %c requires number or float arguments" msgstr "E1036: %c-ը պահանջում է թվային կամ լողացող արգումենտներ" -#| msgid "E804: Cannot use '%' with Float" +#, c-format msgid "E1037: Cannot use \"%s\" with %s" msgstr "E1037: Հնարավոր չէ օգտագործել \"%s\"-ը %s-ի հետ" -#| msgid "E1399: Type can only be used in a script" msgid "E1038: \"vim9script\" can only be used in a script" msgstr "E1038: \"vim9script\" -ը կարող է օգտագործվել միայն սկրիպտում" @@ -7705,18 +7595,16 @@ msgstr "E1039: \"vim9script\" -ը պետք է լինի սկրիպտի առաջի msgid "E1040: Cannot use :scriptversion after :vim9script" msgstr "E1040: Հնարավոր չէ օգտագործել :scriptversion-ը :vim9script-ից հետո" -#| msgid "E1048: Item not found in script: %s" +#, c-format msgid "E1041: Redefining script item: \"%s\"" msgstr "E1041: Սկրիպտի տարրի վերասահմանում. \"%s\"" -#| msgid "E1399: Type can only be used in a script" msgid "E1042: Export can only be used in vim9script" msgstr "E1042: Արտահանումը կարող է օգտագործվել միայն vim9script-ում" msgid "E1043: Invalid command after :export" msgstr "E1043: Անվավեր հրամանի անուն :export-ից հետո" -#| msgid "E474: Invalid argument" msgid "E1044: Export with invalid argument" msgstr "E1044: Արտահանել անվավեր արգումենտով" @@ -7728,35 +7616,33 @@ msgstr "E1047: Ուղղագրական սխալ %s" msgid "E1048: Item not found in script: %s" msgstr "E1048: Նմուշը չի հայտնաբերվել: %s" -#| msgid "E1048: Item not found in script: %s" +#, c-format msgid "E1049: Item not exported in script: %s" msgstr "E1049: Տարրը չի արտահանվել սկրիպտով՝ %s" -#| msgid "E1206: Dictionary required for argument %d" +#, c-format msgid "E1050: Colon required before a range: %s" msgstr "E1050: երկու կետ պահանջվում է ընդգրկույթից առաջ՝ %s" -#| msgid "E1077: Missing argument type for %s" msgid "E1051: Wrong argument type for +" msgstr "E1051: +-ի համար սխալ արգումենտի տեսակ" #, c-format msgid "E1052: Cannot declare an option: %s" -msgstr "E1052: Հնարավոր չէ հայտարարել կարգանշանը: %s" +msgstr "E1052: Հնարավոր չէ հայտարարել ընտրանքը: %s" #, c-format msgid "E1053: Could not import \"%s\"" msgstr "E1053: Հնարավոր չէ բեռնել \"%s\"" -#| msgid "E1073: Name already defined: %s" +#, c-format msgid "E1054: Variable already declared in the script: %s" msgstr "E1054: փոփոխականն արդեն հայտարարված է սկրիպտում՝ %s" -#| msgid "E260: Missing name after ->" msgid "E1055: Missing name after ..." msgstr "E1055: Անունը բացակայում է ..." -#| msgid "E451: Expected }: %s" +#, c-format msgid "E1056: Expected a type: %s" msgstr "E1056: Ակնկալվում էր տեսակ՝ %s" @@ -7770,7 +7656,7 @@ msgstr "E1058: Ֆունկցիայի կանչը շատ է ներդրված" msgid "E1059: No white space allowed before colon: %s" msgstr "E1059: երկու կետից առաջ սպիտակ տարածություն չի թույլատրվում՝ %s" -#| msgid "E451: Expected }: %s" +#, c-format msgid "E1060: Expected dot after name: %s" msgstr "E1060: Ակնկալվող կետ անունից հետո՝ %s" @@ -7787,15 +7673,15 @@ msgstr "E1063: Փոփոխականի տիպի անհամապատասխանութ msgid "E1064: Yank register changed while using it" msgstr "E1064: Յանկ ռեգիստրը փոխվել է այն օգտագործելիս" -#| msgid "E1146: Command not recognized: %s" +#, c-format msgid "E1065: Command cannot be shortened: %s" msgstr "E1065: հրամանը հնարավոր չէ կրճատել՝ %s" -#| msgid "E1052: Cannot declare an option: %s" +#, c-format msgid "E1066: Cannot declare a register: %s" msgstr "E1066: հնարավոր չէ գրանցել՝ %s" -#| msgid "E151: No match: %s" +#, c-format msgid "E1067: Separator mismatch: %s" msgstr "E1067: բաժանարարի անհամապատասխանություն՝ %s" @@ -7807,11 +7693,11 @@ msgstr "E1068: '%s'-ից առաջ բացատ չի թույլատրվում: %s" msgid "E1069: White space required after '%s': %s" msgstr "E1069: '%s'-ից հետո պահանջվում է տարածություն: %s" -#| msgid "E1153: Invalid operation for %s" +#, c-format msgid "E1071: Invalid string for :import: %s" msgstr "E1071: Անվավեր տող :import՝ %s-ի համար" -#| msgid "E691: Can only compare List with List" +#, c-format msgid "E1072: Cannot compare %s with %s" msgstr "E1072: Հնարավոր չէ համեմատել %s-ը %s-ի հետ" @@ -7819,11 +7705,10 @@ msgstr "E1072: Հնարավոր չէ համեմատել %s-ը %s-ի հետ" msgid "E1073: Name already defined: %s" msgstr "E1073: Անունն արդեն սահմանված է: %s" -#| msgid "E790: undojoin is not allowed after undo" msgid "E1074: No white space allowed after dot" msgstr "E1074: Կետից հետո տարածություն չի թույլատրվում" -#| msgid "E1241: Separator not supported: %s" +#, c-format msgid "E1075: Namespace not supported: %s" msgstr "E1075: Անվանատարածքը չի աջակցվում՝ %s" @@ -7834,33 +7719,30 @@ msgstr "E1077: Բացակայող արգումենտի տիպ: %s" msgid "E1078: Invalid command \"nested\", did you mean \"++nested\"?" msgstr "E1078: \"nested\" հրամանը սխալ է, նկատի ունեիք \"++nested\"?" -#| msgid "E794: Cannot set variable in the sandbox" msgid "E1079: Cannot declare a variable on the command line" msgstr "E1079: Հնարավոր չէ փոփոխական հայտարարել հրամանի տողում" msgid "E1080: Invalid assignment" msgstr "E1080: Անվավեր վերագրում" -#| msgid "E1148: Cannot index a %s" +#, c-format msgid "E1081: Cannot unlet %s" msgstr "E1081: Հնարավոր չէ ապասահմանել %s" -#| msgid "E492: Not an editor command" msgid "E1082: Command modifier without command" msgstr "E1082: Հրամանի փոփոխիչ առանց հրամանի" msgid "E1083: Missing backtick" msgstr "E1083: Բացակայող ')'" -#| msgid "E1061: Cannot find function %s" +#, c-format msgid "E1084: Cannot delete Vim9 script function %s" msgstr "E1084: Հնարավոր չէ ջնջել Vim9 սկրիպտի ֆունկցիան %s" -#| msgid "E108: No such variable: \"%s\"" +#, c-format msgid "E1085: Not a callable type: %s" msgstr "E1085: Չկանչելի տեսակ՝ %s" -#| msgid "E909: Cannot index a special variable" msgid "E1087: Cannot use an index when declaring a variable" msgstr "E1087: փոփոխական հայտարարելիս չի կարող ինդեքս օգտագործել" @@ -7871,15 +7753,14 @@ msgstr "E1088: Սկրիպտը չի կարող ինքն իրեն ներմուծե msgid "E1089: Unknown variable: %s" msgstr "E1089: Չսահմանված փոփոխական: %s" -#| msgid "E197: Cannot set language to \"%s\"" +#, c-format msgid "E1090: Cannot assign to argument %s" msgstr "E1090: Հնարավոր չէ վերագրել արգումենտին %s" -#| msgid "E1146: Command not recognized: %s" +#, c-format msgid "E1091: Function is not compiled: %s" msgstr "E1091: Ֆունկցիան կազմված չէ՝ %s" -#| msgid "E1062: Cannot index a Number" msgid "E1092: Cannot nest :redir" msgstr "E1092: Չի կարող բույն դնել :redir" @@ -7887,11 +7768,10 @@ msgstr "E1092: Չի կարող բույն դնել :redir" msgid "E1093: Expected %d items but got %d" msgstr "E1093: Սպասվում էր %d տարր, բայց ստացվեց %d" -#| msgid "E1399: Type can only be used in a script" msgid "E1094: Import can only be used in a script" msgstr "E1094: Ներմուծումը կարող է օգտագործվել միայն սկրիպտում" -#| msgid "E215: Illegal character after *: %s" +#, c-format msgid "E1095: Unreachable code after :%s" msgstr "E1095: անհասանելի կոդ հետևյալից հետո՝%s" @@ -7901,11 +7781,10 @@ msgstr "E1096: վերադարձ առանց վերադարձի տեսակի ֆո msgid "E1097: Line incomplete" msgstr "E1097: Գիծը թերի է" -#| msgid "E897: List or Blob required" msgid "E1098: String, List or Blob required" msgstr "E1098: Պահանջվում է տող, ցուցակ կամ բլիթ" -#| msgid "E1089: Unknown variable: %s" +#, c-format msgid "E1099: Unknown error while executing %s" msgstr "E1099: անհայտ սխալ՝ %s-ն աշխատելիս" @@ -7913,11 +7792,11 @@ msgstr "E1099: անհայտ սխալ՝ %s-ն աշխատելիս" msgid "E1100: Command not supported in Vim9 script (missing :var?): %s" msgstr "E1100: հրամանը չի աջակցվում Vim9 սկրիպտում (բացակայում է :var?): %s" -#| msgid "E1052: Cannot declare an option: %s" +#, c-format msgid "E1101: Cannot declare a script variable in a function: %s" msgstr "E1101: Հնարավոր չէ սկրիպտի փոփոխական հայտարարել ֆունկցիայում՝ %s" -#| msgid "E161: Breakpoint not found: %s" +#, c-format msgid "E1102: Lambda function not found: %s" msgstr "E1102: Lambda ֆունկցիան չի գտնվել՝ %s" @@ -7927,7 +7806,7 @@ msgstr "E1103: Բառարանը սահմանված չէ" msgid "E1104: Missing >" msgstr "E1104: Բացակայող '>'" -#| msgid "E152: Cannot open %s for writing" +#, c-format msgid "E1105: Cannot convert %s to string" msgstr "E1105: Հնարավոր չէ փոխարկել %s-ը տողի" @@ -7937,15 +7816,14 @@ msgid_plural "E1106: %d arguments too many" msgstr[0] "E1106: Մեկ փաստարկ չափազանց շատ է" msgstr[1] "E1106: %d արգումենտները չափազանց շատ են" -#| msgid "E897: List or Blob required" msgid "E1107: String, List, Dict or Blob required" -msgstr "E1107: Պահանջվում է տող, ցուցակ, թելադրանք կամ բշտիկ" +msgstr "E1107: Պահանջվում է տող, ցուցակ, թելադրանք կամ բլոբ" -#| msgid "E711: List value does not have enough items" +#, c-format msgid "E1109: List item %d is not a List" msgstr "E1109: Ցուցակի %d տարրը ցուցակ չէ" -#| msgid "E711: List value does not have enough items" +#, c-format msgid "E1110: List item %d does not contain 3 numbers" msgstr "E1110: Ցանկի %d տարրը չի պարունակում 3 թվեր" @@ -7961,34 +7839,28 @@ msgstr "E1112: Ցանկի տարր %d բջիջի լայնությունը անվ msgid "E1113: Overlapping ranges for 0x%lx" msgstr "E1113: համընկնող միջակայքեր 0x%lx-ի համար" -#| msgid "E754: Only up to %d regions supported" msgid "E1114: Only values of 0x80 and higher supported" msgstr "E1114: Աջակցվում են միայն 0x80 և ավելի բարձր արժեքները" msgid "E1115: \"assert_fails()\" fourth argument must be a number" msgstr "E1115: \"assert_fails()\" չորրորդ արգումենտը պետք է լինի թիվ" -#| msgid "E899: Argument of %s must be a List or Blob" msgid "E1116: \"assert_fails()\" fifth argument must be a string" msgstr "E1116: \"assert_fails()\" հինգերորդ արգումենտը պետք է լինի տող" -#| msgid "E804: Cannot use '%' with Float" -msgid "E1117: Cannot use ! with nested :def" -msgstr "E1117: Հնարավոր չէ օգտագործել: բույնով :def" +#, c-format +msgid "E1117: Cannot use ! with nested %s" +msgstr "E1117: Հնարավոր չէ օգտագործել ! ներդրված %s-ով" -#| msgid "E742: Cannot change value" msgid "E1118: Cannot change locked list" msgstr "E1118: Հնարավոր չէ փոխել կողպված ցուցակը" -#| msgid "E165: Cannot go beyond last file" msgid "E1119: Cannot change locked list item" msgstr "E1119: Հնարավոր չէ փոխել ցանկի արգելափակված տարրը" -#| msgid "E742: Cannot change value" msgid "E1120: Cannot change dict" msgstr "E1120: Հնարավոր չէ փոխել թելադրանքը" -#| msgid "E742: Cannot change value" msgid "E1121: Cannot change dict item" msgstr "E1121: Հնարավոր չէ փոխել թելադրանքի տարրը" @@ -7996,49 +7868,41 @@ msgstr "E1121: Հնարավոր չէ փոխել թելադրանքի տարրը" msgid "E1122: Variable is locked: %s" msgstr "E1122: %s արժեքը բլոկավորված է" -#| msgid "E417: Missing argument: %s" +#, c-format msgid "E1123: Missing comma before argument: %s" msgstr "E1123: արգումենտից առաջ բացակայում է ստորակետը՝ %s" -#| msgid "E1399: Type can only be used in a script" +#, c-format msgid "E1124: \"%s\" cannot be used in legacy Vim script" msgstr "E1124: \"%s\"-ը չի կարող օգտագործվել հին Vim սկրիպտում" -#| msgid "E1035: % requires number arguments" msgid "E1125: Final requires a value" msgstr "E1125: Վերջնական արժեքը արժեք է պահանջում" msgid "E1126: Cannot use :let in Vim9 script" msgstr "E1126: Հնարավոր չէ օգտագործել :let-ը Vim9 սկրիպտում" -#| msgid "E260: Missing name after ->" msgid "E1127: Missing name after dot" msgstr "E1127: Անունը կետից հետո բացակայում է" msgid "E1128: } without {" msgstr "E1128: } առանց {" -#| msgid "E529: Cannot set 'term' to empty string" msgid "E1129: Throw with empty string" msgstr "E1129: Նետում դատարկ տեքստով" -#| msgid "E1362: Cannot use a non-null object" msgid "E1130: Cannot add to null list" msgstr "E1130: Չի կարող ավելացնել զրոյական ցուցակին" -#| msgid "E1362: Cannot use a non-null object" msgid "E1131: Cannot add to null blob" msgstr "E1131: Հնարավոր չէ ավելացնել null blob-ին" -#| msgid "E126: Missing :endfunction" msgid "E1132: Missing function argument" msgstr "E1132: Բացակայում է ֆունկցիայի արգումենտը" -#| msgid "E1354: Cannot extend %s" msgid "E1133: Cannot extend a null dict" msgstr "E1133: Չի կարող երկարաձգել անվավեր հրամանը" -#| msgid "E1354: Cannot extend %s" msgid "E1134: Cannot extend a null list" msgstr "E1134: Հնարավոր չէ ընդլայնել զրո ցուցակը" @@ -8049,19 +7913,17 @@ msgstr "E1135: Օգտագործելով տողը որպես Bool. \"%s\"" msgid "E1136: mapping must end with before second " msgstr "E1136: քարտեզագրումը պետք է ավարտվի վայրկյանից առաջ" -#| msgid "E805: Using a Float as a Number" msgid "E1138: Using a Bool as a Number" msgstr "E1138: Bool-ի օգտագործումը որպես թիվ" -#| msgid "E1389: Missing name after implements" msgid "E1139: Missing matching bracket after dict key" msgstr "E1139: Դիկտիվ ստեղնից հետո բացակայում է համապատասխան փակագիծը" -#| msgid "E1180: Variable arguments type must be a list: %s" -msgid "E1140: :for argument must be a sequence of lists" -msgstr "E1140: :for արգումենտը պետք է լինի ցուցակների հաջորդականություն" +msgid "E1140: :for argument must be a sequence of lists or tuples" +msgstr "" +"E1140: :for արգումենտը պետք է լինի ցուցակների կամ կրկնյակների " +"հաջորդականություն" -#| msgid "E714: List required" msgid "E1141: Indexable type required" msgstr "E1141: Պահանջվում է ինդեքսավորվող տեսակ" @@ -8077,7 +7939,7 @@ msgstr "E1143: Դատարկ արտահայտություն: \"%s\"" msgid "E1144: Command \"%s\" is not followed by white space: %s" msgstr "E1144: \"%s\" հրամանին չի հաջորդում բացատը՝ %s" -#| msgid "E990: Missing end marker '%s'" +#, c-format msgid "E1145: Missing heredoc end marker: %s" msgstr "E1145: heredoc վերջի նշիչը բացակայում է՝ %s" @@ -8085,7 +7947,6 @@ msgstr "E1145: heredoc վերջի նշիչը բացակայում է՝ %s" msgid "E1146: Command not recognized: %s" msgstr "E1146: Անծանոթ հրաման։ %s" -#| msgid "E1103: Dictionary not set" msgid "E1147: List not set" msgstr "E1147: Ցանկը սահմանված չէ" @@ -8100,7 +7961,6 @@ msgstr "E1149: Սկրիպտի փոփոխականն անվավեր է %s ֆուն msgid "E1150: Script variable type changed" msgstr "E1150: Սկրիպտի փոփոխականի տեսակը փոխվել է" -#| msgid "E1152: Mismatched enddef" msgid "E1151: Mismatched endfunction" msgstr "E1151: անհամապատասխան վերջնական ֆունկցիա" @@ -8116,9 +7976,8 @@ msgstr "E1154: Բաժանել զրոյի" msgid "E1155: Cannot define autocommands for ALL events" msgstr "" -"E1155: Հնարավոր չէ սահմանել ինքնահրամանները բոլոր իրադարձությունների համար" +"E1155: Հնարավոր չէ ԲՈԼՈՐ իրադարձությունների համար սահմանել ինքնահրամաններ" -#| msgid "E659: Cannot invoke Python recursively" msgid "E1156: Cannot change the argument list recursively" msgstr "E1156: Հնարավոր չէ փոխել արգումենտների ցանկը ռեկուրսիվորեն" @@ -8130,15 +7989,13 @@ msgstr "" "E1158: Հնարավոր չէ օգտագործել flatten() Vim9 սկրիպտում, օգտագործել " "flattennew()" -#| msgid "E90: Cannot unload last buffer" msgid "E1159: Cannot split a window when closing the buffer" msgstr "E1159: Բուֆերը փակելիս հնարավոր չէ բաժանել պատուհանը" -#| msgid "E909: Cannot index a special variable" msgid "E1160: Cannot use a default for variable arguments" msgstr "E1160: Չի կարող օգտագործել լռելյայն փոփոխական արգումենտների համար" -#| msgid "E1148: Cannot index a %s" +#, c-format msgid "E1161: Cannot json encode a %s" msgstr "E1161: json-ը չի կարող կոդավորել %s" @@ -8152,21 +8009,19 @@ msgstr "" "E1163: Փոփոխական %d: տիպի անհամապատասխանություն, սպասվում է %s, բայց տրվել է " "%s" -#| msgid "E1163: Variable %d: type mismatch, expected %s but got %s" +#, c-format msgid "E1163: Variable %d: type mismatch, expected %s but got %s in %s" msgstr "" "E1163: փոփոխական %d. տիպի անհամապատասխանություն, սպասվում էր %s, բայց ստացավ " "%s %s-ում" -#| msgid "E1356: \"super\" must be followed by a dot" msgid "E1164: vim9cmd must be followed by a command" msgstr "E1164: vim9cmd-ին պետք է հետևի հրաման" -#| msgid "E1365: Cannot use a return type with the \"new\" method" +#, c-format msgid "E1165: Cannot use a range with an assignment: %s" msgstr "E1165: Հնարավոր չէ օգտագործել ընդգրկույթ հանձնարարությամբ՝ %s" -#| msgid "E713: Cannot use empty key for Dictionary" msgid "E1166: Cannot use a range with a dictionary" msgstr "E1166: Հնարավոր չէ օգտագործել ընդգրկույթ բառարանով" @@ -8174,7 +8029,7 @@ msgstr "E1166: Հնարավոր չէ օգտագործել ընդգրկույթ msgid "E1167: Argument name shadows existing variable: %s" msgstr "E1167: Արգումենտի անունը համընկնում է փոփոխականի անվան հետ: %s" -#| msgid "E1167: Argument name shadows existing variable: %s" +#, c-format msgid "E1168: Argument already declared in the script: %s" msgstr "E1168: սկրիպտում արդեն հայտարարված արգումենտ. %s" @@ -8185,34 +8040,31 @@ msgstr "E1169: Արտահայտությունը շատ ռեկուրսիվ է: %s msgid "E1170: Cannot use #{ to start a comment" msgstr "E1170: Չի կարող օգտագործել #{ մեկնաբանություն սկսելու համար" -#| msgid "E126: Missing :endfunction" msgid "E1171: Missing } after inline function" msgstr "E1171: Ներդիր ֆունկցիայից հետո բացակայում է }-ը" -#| msgid "E794: Cannot set variable in the sandbox" msgid "E1172: Cannot use default values in a lambda" msgstr "E1172: Հնարավոր չէ օգտագործել լամբդայի լռելյայն արժեքները" -#| msgid "E753: Not found: %s" +#, c-format msgid "E1173: Text found after %s: %s" msgstr "E1173: Տեքստը գտնվել է %s-ից հետո՝ %s" -#| msgid "E1210: Number required for argument %d" +#, c-format msgid "E1174: String required for argument %d" msgstr "E1174: %d արգումենտի համար անհրաժեշտ է տող" -#| msgid "E1210: Number required for argument %d" +#, c-format msgid "E1175: Non-empty string required for argument %d" msgstr "E1175: %d արգումենտի համար պահանջվում է ոչ դատարկ տող" msgid "E1176: Misplaced command modifier" msgstr "E1176: սխալ տեղակայված հրամանի փոփոխիչ" -#| msgid "E519: Option not supported" +#, c-format msgid "E1177: For loop on %s not supported" msgstr "E1177: For loop-ը %s-ում չի աջակցվում" -#| msgid "E909: Cannot index a special variable" msgid "E1178: Cannot lock or unlock a local variable" msgstr "E1178: Հնարավոր չէ կողպել կամ ապակողպել տեղական փոփոխականը" @@ -8228,26 +8080,24 @@ msgstr "" msgid "E1180: Variable arguments type must be a list: %s" msgstr "E1180: Փոփոխական արգումնետների տիպը պետք է լինի ցանկ: %s" -#| msgid "E862: Cannot use g: here" msgid "E1181: Cannot use an underscore here" msgstr "E1181: Այստեղ հնարավոր չէ օգտագործել ընդգծում" -#| msgid "E127: Cannot redefine function %s: It is in use" +#, c-format msgid "E1182: Cannot define a dict function in Vim9 script: %s" msgstr "E1182: Vim9 սկրիպտում հնարավոր չէ դիկտի ֆունկցիա սահմանել՝ %s" -#| msgid "E1365: Cannot use a return type with the \"new\" method" +#, c-format msgid "E1183: Cannot use a range with an assignment operator: %s" msgstr "E1183: Հնարավոր չէ օգտագործել ընդգրկույթ նշանակման օպերատորի հետ՝ %s" -#| msgid "E846: Key code not set" msgid "E1184: Blob not set" msgstr "E1184: Բլոբը կարգավորված չէ" msgid "E1185: Missing :redir END" msgstr "E1185: Հրամանը բացակայում է :redir END" -#| msgid "E1169: Expression too recursive: %s" +#, c-format msgid "E1186: Expression does not result in a value: %s" msgstr "E1186: Արտահայտությունը չի բերում արժեք՝ %s" @@ -8257,7 +8107,7 @@ msgstr "E1187: Չհաջողվեց մուտքագրել defaults.vim" msgid "E1188: Cannot open a terminal from the command line window" msgstr "E1188: Հնարավոր չէ բացել տերմինալը հրամանի տողի պատուհանից" -#| msgid "E794: Cannot set variable in the sandbox: \"%s\"" +#, c-format msgid "E1189: Cannot use :legacy with this command: %s" msgstr "E1189: Հնարավոր չէ օգտագործել :legacy այս հրամանով՝ %s" @@ -8267,7 +8117,7 @@ msgid_plural "E1190: %d arguments too few" msgstr[0] "E1190: Մեկ փաստարկ շատ քիչ է" msgstr[1] "E1190: %d արգումենտները չափազանց քիչ են" -#| msgid "E725: Calling dict function without Dictionary: %s" +#, c-format msgid "E1191: Call to function that failed to compile: %s" msgstr "E1191: Ֆունկցիայի կանչ, որը չի հաջողվել կոմպիլացնել՝ %s" @@ -8286,11 +8136,9 @@ msgstr "E1195: Հնարավոր չէ գաղտնագրել բուֆերը, բավ msgid "E1196: Cannot decrypt header, not enough space" msgstr "E1196: Չի հաջողվում վերծանել վերնագիրը, բավարար տարածք չկա" -#| msgid "E82: Cannot allocate any buffer, exiting..." msgid "E1197: Cannot allocate_buffer for encryption" msgstr "E1197: Հնարավոր չէ հատկացնել_բուֆեր կոդավորման համար" -#| msgid "E1200: Decryption failed!" msgid "E1198: Decryption failed: Header incomplete!" msgstr "E1198: Ապակոդավորումը ձախողվեց. Գլխագիրն ամբողջական չէ!" @@ -8300,7 +8148,6 @@ msgstr "E1199: Հնարավոր չէ վերծանել բուֆերը, բավար msgid "E1200: Decryption failed!" msgstr "E1200: Չեղարկման ֆայլի ապակոդավորումն ավարտվել է անհաջողությամբ!" -#| msgid "E1200: Decryption failed!" msgid "E1201: Decryption failed: pre-mature end of file!" msgstr "E1201: Ապակոդավորումը ձախողվեց. ֆայլի վաղաժամ ավարտ!" @@ -8308,7 +8155,7 @@ msgstr "E1201: Ապակոդավորումը ձախողվեց. ֆայլի վաղ msgid "E1202: No white space allowed after '%s': %s" msgstr "E1202: '%s'-ից հետո բացատ չի թույլատրվում: %s" -#| msgid "E370: Could not load library %s: %s" +#, c-format msgid "E1203: Dot not allowed after a %s: %s" msgstr "E1203: %s-ից հետո կետը չի թույլատրվում. %s" @@ -8323,14 +8170,14 @@ msgstr "E1205: Չի թույլատրվում սպիտակ տարածությու msgid "E1206: Dictionary required for argument %d" msgstr "E1206: Անհրաժեշտ է բառարան %d-ի համար" -#| msgid "E1169: Expression too recursive: %s" +#, c-format msgid "E1207: Expression without an effect: %s" msgstr "E1207: Արտահայտություն առանց էֆեկտի՝ %s" msgid "E1208: -complete used without allowing arguments" msgstr "E1208: - Ամբողջական, օգտագործվում է առանց արգումենտներ թույլ տալու" -#| msgid "E475: Invalid value for argument %s" +#, c-format msgid "E1209: Invalid value for a line number: \"%s\"" msgstr "E1209: Անվավեր արժեք տողի համարի համար: \"%s\"" @@ -8338,11 +8185,11 @@ msgstr "E1209: Անվավեր արժեք տողի համարի համար: \"%s\ msgid "E1210: Number required for argument %d" msgstr "E1210: Անհրաժեշտ է թիվ %d-ի համար" -#| msgid "E1210: Number required for argument %d" +#, c-format msgid "E1211: List required for argument %d" msgstr "E1211: ցանկը պահանջվում է արգումենտի համար %d" -#| msgid "E1210: Number required for argument %d" +#, c-format msgid "E1212: Bool required for argument %d" msgstr "E1212: Բուլ պահանջվում է արգումենտի համար %d" @@ -8364,60 +8211,60 @@ msgstr "" "E1216: digraph_setlist() արգումենտը պետք է լինի երկու տարր ունեցող " "ցուցակների ցանկ" -#| msgid "E1210: Number required for argument %d" +#, c-format msgid "E1217: Channel or Job required for argument %d" msgstr "E1217: արգումենտի համար պահանջվում է ալիք կամ աշխատանք %d" -#| msgid "E1210: Number required for argument %d" +#, c-format msgid "E1218: Job required for argument %d" msgstr "E1218: աշխատանք է պահանջվում արգումենտի համար %d" -#| msgid "E1210: Number required for argument %d" +#, c-format msgid "E1219: Float or Number required for argument %d" msgstr "E1219: արգումենտի համար պահանջվում է float կամ համար %d" -#| msgid "E1210: Number required for argument %d" +#, c-format msgid "E1220: String or Number required for argument %d" msgstr "E1220: %d արգումենտի համար պահանջվում է տող կամ համար" -#| msgid "E1206: Dictionary required for argument %d" +#, c-format msgid "E1221: String or Blob required for argument %d" msgstr "E1221: %d արգումենտի համար պահանջվում է տող կամ բլիթ" -#| msgid "E1206: Dictionary required for argument %d" +#, c-format msgid "E1222: String or List required for argument %d" msgstr "E1222: %d արգումենտի համար պահանջվում է տող կամ ցուցակ" -#| msgid "E1206: Dictionary required for argument %d" +#, c-format msgid "E1223: String or Dictionary required for argument %d" msgstr "E1223: %d արգումենտի համար պահանջվում է տող կամ բառարան" -#| msgid "E1210: Number required for argument %d" +#, c-format msgid "E1224: String, Number or List required for argument %d" msgstr "E1224: %d արգումենտի համար պահանջվում է տող, համար կամ ցուցակ" -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1225: String, List or Dictionary required for argument %d" -msgstr "E1225: %d արգումենտի համար պահանջվում է տող, ցուցակ կամ բառարան" +#, c-format +msgid "E1225: String, List, Tuple or Dictionary required for argument %d" +msgstr "" +"E1225: %d արգումենտի համար պահանջվում է տող, ցուցակ, կրկնյակ կամ բառարան" -#| msgid "E1206: Dictionary required for argument %d" +#, c-format msgid "E1226: List or Blob required for argument %d" msgstr "E1226: Ցուցակ կամ Բլոբ պահանջվում է արգումենտի համար %d" -#| msgid "E1206: Dictionary required for argument %d" +#, c-format msgid "E1227: List or Dictionary required for argument %d" msgstr "E1227: արգումենտի համար պահանջվում է ցուցակ կամ բառարան %d" -#| msgid "E1206: Dictionary required for argument %d" +#, c-format msgid "E1228: List, Dictionary or Blob required for argument %d" -msgstr "E1228: արգումենտի համար պահանջվում է ցուցակ, բառարան կամ բշտիկ %d" +msgstr "E1228: արգումենտի համար պահանջվում է ցուցակ, բառարան կամ բլոբ %d" #, c-format msgid "E1229: Expected dictionary for using key \"%s\", but got %s" msgstr "" "E1229: Բանալի \"%s\" օգտագործելու համար սպասվում էր բառարան, բայց ստացավ %s" -#| msgid "E1200: Decryption failed!" msgid "E1230: Encryption: sodium_mlock() failed" msgstr "E1230: Կոդավորումը՝ sodium_mlock() ձախողվեց" @@ -8429,15 +8276,17 @@ msgstr "" msgid "E1232: Argument of exists_compiled() must be a literal string" msgstr "E1232: exists_compiled()-ի արգումենտը պետք է լինի տող" -#| msgid "E785: complete() can only be used in Insert mode" msgid "E1233: exists_compiled() can only be used in a :def function" msgstr "" "E1233: exists_compiled()-ը կարող է օգտագործվել միայն :def ֆունկցիայի մեջ" -#| msgid "E1356: \"super\" must be followed by a dot" msgid "E1234: legacy must be followed by a command" msgstr "E1234: ժառանգությանը պետք է հետևի հրաման" +#, c-format +msgid "E1235: Bool or Number required for argument %d" +msgstr "E1235: %d արգումենտի համար պահանջվում է Bool կամ Number" + #, c-format msgid "E1236: Cannot use %s itself, it is imported" msgstr "E1236: Չի կարող օգտագործել %s ինքնին, այն ներմուծված է" @@ -8446,13 +8295,13 @@ msgstr "E1236: Չի կարող օգտագործել %s ինքնին, այն նե msgid "E1237: No such user-defined command in current buffer: %s" msgstr "E1237: Հերթական բուֆերում չկա նման օգտատիրոջ սահմանած հրաման: %s" -#| msgid "E1210: Number required for argument %d" +#, c-format msgid "E1238: Blob required for argument %d" msgstr "E1238: արգումենտի համար անհրաժեշտ է բլիթ %d" -#| msgid "E1291: Invalid argument: %ld" -msgid "E1239: Invalid value for blob: %d" -msgstr "E1239: անվավեր արժեք blob-ի համար՝ %d" +#, c-format +msgid "E1239: Invalid value for blob: 0x%lX" +msgstr "E1239: անվավեր արժեք blob-ի համար՝ 0x%lX" msgid "E1240: Resulting text too long" msgstr "E1240: Տողն անսպասելի երկար է" @@ -8468,14 +8317,14 @@ msgstr "E1242: Չի թույլատրվում սպիտակ տարածությու msgid "E1243: ASCII code not in 32-127 range" msgstr "E1243: ASCII կոդը 32-127 միջակայքում չէ" -#| msgid "E383: Invalid search string: %s" +#, c-format msgid "E1244: Bad color string: %s" msgstr "E1244: Վատ գույնի տող՝ %s" msgid "E1245: Cannot expand in a Vim9 function" msgstr "E1245: Հնարավոր չէ ընդլայնել Vim9 ֆունկցիայի մեջ" -#| msgid "E794: Cannot set variable in the sandbox: \"%s\"" +#, c-format msgid "E1246: Cannot find variable to (un)lock: %s" msgstr "E1246: Հնարավոր չէ գտնել փոփոխական (ապ)կողպելու համար՝ %s" @@ -8492,22 +8341,25 @@ msgstr "E1249: Գունանշման խմբի անունը շատ երկար է" msgid "E1250: Argument of %s must be a List, String, Dictionary or Blob" msgstr "E1250: %s֊ի արգումենտը պետք է լինի ցանկ կամ բառարան" -#| msgid "E1206: Dictionary required for argument %d" -msgid "E1251: List, Dictionary, Blob or String required for argument %d" -msgstr "E1251: արգումենտի համար պահանջվում է ցուցակ, բառարան, բլոկ կամ տող %d" +#, c-format +msgid "E1251: List, Tuple, Dictionary, Blob or String required for argument %d" +msgstr "E1251: արգումենտի համար պահանջվում է ցուցակ, բառարան, բլոբ կամ տող %d" -#| msgid "E1206: Dictionary required for argument %d" +#, c-format msgid "E1252: String, List or Blob required for argument %d" -msgstr "E1252: %d արգումենտի համար պահանջվում է տող, ցուցակ կամ բշտիկ" +msgstr "E1252: %d արգումենտի համար պահանջվում է տող, ցուցակ կամ բլոբ" + +#, c-format +msgid "E1253: String, List, Tuple or Blob required for argument %d" +msgstr "E1253: %d արգումենտի համար պահանջվում է տող, ցուցակ, կրկնյակ կամ բլոբ" -#| msgid "E794: Cannot set variable in the sandbox" msgid "E1254: Cannot use script variable in for loop" msgstr "E1254: Հնարավոր չէ օգտագործել սկրիպտի փոփոխական for loop-ում" msgid "E1255: mapping must end with " msgstr "E1255: քարտեզագրումը պետք է ավարտվի" -#| msgid "E1206: Dictionary required for argument %d" +#, c-format msgid "E1256: String or function required for argument %d" msgstr "E1256: %d արգումենտի համար պահանջվում է տող կամ ֆունկցիա" @@ -8516,11 +8368,11 @@ msgid "E1257: Imported script must use \"as\" or end in .vim: %s" msgstr "" "E1257: Ներմուծված սկրիպտը պետք է օգտագործի \"as\" կամ վերջանա .vim-ով: %s" -#| msgid "E253: Fontset name: %s" +#, c-format msgid "E1258: No '.' after imported name: %s" msgstr "E1258: Ոչ \"\": ներմուծված անունից հետո՝ %s" -#| msgid "E1389: Missing name after implements" +#, c-format msgid "E1259: Missing name after imported name: %s" msgstr "E1259: Ներմուծված անունից հետո անունը բացակայում է՝ %s" @@ -8531,7 +8383,7 @@ msgstr "E1260: Հնարավոր չէ ապասահմանել ներմուծված msgid "E1261: Cannot import .vim without using \"as\"" msgstr "E1261: Հնարավոր չէ ներմուծել .vim առանց \"as\" օգտագործելու" -#| msgid "E625: Cannot open cscope database: %s" +#, c-format msgid "E1262: Cannot import the same script twice: %s" msgstr "E1262: Հնարավոր չէ նույն սկրիպտն երկու անգամ ներմուծել՝ %s" @@ -8546,7 +8398,6 @@ msgstr "" "E1264: Ավտոբեռնման ներմուծումը չի կարող օգտագործել բացարձակ կամ հարաբերական " "ճանապարհ՝ %s" -#| msgid "E862: Cannot use g: here" msgid "E1265: Cannot use a partial here" msgstr "E1265: Այստեղ հնարավոր չէ մասնակին օգտագործել" @@ -8557,15 +8408,15 @@ msgstr "" "E1266: Կրիտիկական սխալ python3 սկզբնավորման ժամանակ, ստուգեք ձեր python3 " "տեղադրումը" -#| msgid "E128: Function name must start with a capital or \"s:\": %s" +#, c-format msgid "E1267: Function name must start with a capital: %s" msgstr "E1267: Ֆունկցիայի անունը պետք է սկսվի մեծատառով՝ %s" -#| msgid "E1048: Item not found in script: %s" +#, c-format msgid "E1268: Cannot use s: in Vim9 script: %s" msgstr "E1268: Հնարավոր չէ օգտագործել s: Vim9 սկրիպտում՝ %s" -#| msgid "E794: Cannot set variable in the sandbox: \"%s\"" +#, c-format msgid "E1269: Cannot create a Vim9 script variable in a function: %s" msgstr "E1269: Հնարավոր չէ ստեղծել Vim9 սցենարի փոփոխական ֆունկցիայում՝ %s" @@ -8576,7 +8427,7 @@ msgstr "E1270: Հնարավոր չէ օգտագործել :s\\/sub/ Vim9 սկր msgid "E1271: Compiling closure without context: %s" msgstr "E1271: Կազմում է փակումը առանց համատեքստի. %s" -#| msgid "E120: Using not in a script context: %s" +#, c-format msgid "E1272: Using type not in a script context: %s" msgstr "E1272: Օգտագործելով տիպը ոչ սցենարի համատեքստում՝ %s" @@ -8584,23 +8435,20 @@ msgstr "E1272: Օգտագործելով տիպը ոչ սցենարի համատ msgid "E1273: (NFA regexp) missing value in '\\%%%c'" msgstr "E1273: (NFA regexp) անսպասելի '\\%%%c'" -#| msgid "E498: No :source file name to substitute for \"\"" msgid "E1274: No script file name to substitute for \"