Compare commits
186 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ea4a7c3b7 | ||
|
|
10040bc9cd | ||
|
|
33f3965087 | ||
|
|
3918f3232f | ||
|
|
16d28548d2 | ||
|
|
d4fb31762e | ||
|
|
405e2fb6d5 | ||
|
|
d0b6ee320b | ||
|
|
ec3f79e037 | ||
|
|
b328686d6a | ||
|
|
fe3c27ce0b | ||
|
|
146d5da0d1 | ||
|
|
3c3050e648 | ||
|
|
f74a41620b | ||
|
|
c9d4c1dc43 | ||
|
|
c62342e5cf | ||
|
|
49e8630a28 | ||
|
|
73ba353c9d | ||
|
|
1c88aee1fa | ||
|
|
b30803b231 | ||
|
|
2c436be6f7 | ||
|
|
6ecff78129 | ||
|
|
c13232699d | ||
|
|
723c0acf25 | ||
|
|
237d77e07c | ||
|
|
1966a1c896 | ||
|
|
618a327ce6 | ||
|
|
f2e920321c | ||
|
|
0e31fb024c | ||
|
|
336533b355 | ||
|
|
01d9a1951f | ||
|
|
30d42855eb | ||
|
|
e666597622 | ||
|
|
68d3129a05 | ||
|
|
8bcae3ca5d | ||
|
|
6b26afea3b | ||
|
|
450895d86b | ||
|
|
1c299f2631 | ||
|
|
25e9fc44a8 | ||
|
|
b076c49282 | ||
|
|
ab02d65b1f | ||
|
|
21c0cd29f8 | ||
|
|
e6a84bb6b0 | ||
|
|
c78194e41d | ||
|
|
a414630393 | ||
|
|
490b737f3e | ||
|
|
0e02be1919 | ||
|
|
2041478e2a | ||
|
|
7cc73a6c66 | ||
|
|
60e925ca0e | ||
|
|
2252d2c1e5 | ||
|
|
bfa46a52f6 | ||
|
|
351a16c88f | ||
|
|
4c28794716 | ||
|
|
c72196529b | ||
|
|
91b402f575 | ||
|
|
f9cb0d14dc | ||
|
|
39875daec2 | ||
|
|
c4fe1e958a | ||
|
|
efbd482116 | ||
|
|
962a540d76 | ||
|
|
4b6f3f1d16 | ||
|
|
9d95410aa4 | ||
|
|
c922202ea2 | ||
|
|
fcc4276db3 | ||
|
|
6836599733 | ||
|
|
86dcb1878c | ||
|
|
efedcd1e6f | ||
|
|
dc4734448b | ||
|
|
105d65e29b | ||
|
|
86ae6858ab | ||
|
|
0802e00f2a | ||
|
|
8fd37e42a6 | ||
|
|
01be43047f | ||
|
|
e29f33ef51 | ||
|
|
71c10dcd58 | ||
|
|
dd40b1af5b | ||
|
|
871e6c6cf9 | ||
|
|
01e9670212 | ||
|
|
7e0eb5271e | ||
|
|
07faa961a0 | ||
|
|
2fbc69c9ad | ||
|
|
158947e294 | ||
|
|
d42b047f78 | ||
|
|
6c16ccaf61 | ||
|
|
f554a7c709 | ||
|
|
959817472d | ||
|
|
4a1bcc67b4 | ||
|
|
00285c035a | ||
|
|
3e2012914e | ||
|
|
9d9381fb28 | ||
|
|
c23aebdf99 | ||
|
|
72cefe6b72 | ||
|
|
3e194b1068 | ||
|
|
c2734dc03c | ||
|
|
3d224e42e7 | ||
|
|
ea7bf9aa8a | ||
|
|
ff41e9d853 | ||
|
|
c79edc0df9 | ||
|
|
317351c745 | ||
|
|
f3cba4a205 | ||
|
|
15e988810e | ||
|
|
fd836aab13 | ||
|
|
7ab76a8604 | ||
|
|
794c304479 | ||
|
|
8d23fcb603 | ||
|
|
c3c3478810 | ||
|
|
aef812446b | ||
|
|
a5b6c2d6e9 | ||
|
|
c4921023b1 | ||
|
|
f9981bbc8e | ||
|
|
4368ad34df | ||
|
|
f1dbca200c | ||
|
|
ea5084d1f1 | ||
|
|
002fddecde | ||
|
|
78954f86c2 | ||
|
|
48581f2ba9 | ||
|
|
365d58a539 | ||
|
|
b03970f41f | ||
|
|
a1f4259e68 | ||
|
|
ab4ebb62ee | ||
|
|
f07a1ed903 | ||
|
|
9e041457a5 | ||
|
|
46f530e517 | ||
|
|
5943c57173 | ||
|
|
3c79e33aeb | ||
|
|
77e7a40af2 | ||
|
|
18cd55dbc4 | ||
|
|
08bd9114c1 | ||
|
|
22db4a3c57 | ||
|
|
bd8b6c6b05 | ||
|
|
bc182ae56e | ||
|
|
a9d01da661 | ||
|
|
cb51add7ae | ||
|
|
b7205b6426 | ||
|
|
23be1889d1 | ||
|
|
af58a9f5e9 | ||
|
|
71a0a552cf | ||
|
|
863e85e00a | ||
|
|
aca677de0e | ||
|
|
ff6f277a4d | ||
|
|
28e75c5f31 | ||
|
|
b7cffc8434 | ||
|
|
880cf88ea6 | ||
|
|
9d83ca5ca2 | ||
|
|
b2fbb7c32d | ||
|
|
12f6f20552 | ||
|
|
964b7b5d7b | ||
|
|
0646047b68 | ||
|
|
b2ff915fe4 | ||
|
|
c91081d0e5 | ||
|
|
7088926316 | ||
|
|
fe05143f5d | ||
|
|
b2e55ed1d6 | ||
|
|
3e60f03d94 | ||
|
|
2c976d0de4 | ||
|
|
82ebaa79b0 | ||
|
|
8c8772c6b3 | ||
|
|
52169dbc28 | ||
|
|
75661a66a1 | ||
|
|
4cc3ab7401 | ||
|
|
309332a32e | ||
|
|
ac18dff65a | ||
|
|
e4502b6037 | ||
|
|
f4f175332c | ||
|
|
12c6417587 | ||
|
|
374f06ffd8 | ||
|
|
b5efce0765 | ||
|
|
e551e71d7e | ||
|
|
70afdfc127 | ||
|
|
068c0604c9 | ||
|
|
91900b9a5c | ||
|
|
aa5c9310f5 | ||
|
|
84a8ee4353 | ||
|
|
664701eb75 | ||
|
|
3c0f8000e1 | ||
|
|
211ceea602 | ||
|
|
b8a653a377 | ||
|
|
30bac359dc | ||
|
|
466b5f531a | ||
|
|
8ea5f27745 | ||
|
|
f89662722d | ||
|
|
d13f135295 | ||
|
|
8e29c35a04 | ||
|
|
80a0c355cf | ||
|
|
54b6c0c0e7 |
324
.github/actions/build_vim_on_linux/action.yml
vendored
Normal file
324
.github/actions/build_vim_on_linux/action.yml
vendored
Normal file
@@ -0,0 +1,324 @@
|
||||
name: Build Vim on Linux
|
||||
description: Build Vim on Linux
|
||||
|
||||
inputs:
|
||||
features:
|
||||
description: Vim features
|
||||
required: true
|
||||
compiler:
|
||||
description: Compiler
|
||||
required: true
|
||||
architecture:
|
||||
description: Architecture
|
||||
required: false
|
||||
extra:
|
||||
description: Extra flags
|
||||
required: true
|
||||
shadow:
|
||||
description: Shadow directory
|
||||
required: false
|
||||
interface:
|
||||
description: Interface of language interpreter
|
||||
required: false
|
||||
lua_ver:
|
||||
description: Lua version
|
||||
required: false
|
||||
python3:
|
||||
description: Python3 ABI type
|
||||
required: false
|
||||
coverage:
|
||||
description: Enable coverage
|
||||
required: false
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Check Filelist (for packaging)
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Check Filelist (for packaging)'
|
||||
# If any files in the repository are not listed in Filelist this will
|
||||
# exit with an error code and list the missing entries.
|
||||
make -f ci/unlisted.make
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Check hlgroups (are any new hlgroups added, but not handled in highlight.c)
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Check hlgroups (are any new hlgroups added, but not handled in highlight.c)'
|
||||
# If any highlight groups have been documented, but not handled in
|
||||
# highlight.c, nor listed as 'intentionally left out' in hlgroups.ignore,
|
||||
# exit with an error code and list the missing entries.
|
||||
make -C ci -f hlgroups.make
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Report executable syntax tests
|
||||
if: contains(fromJSON(inputs.extra), 'syn_test_execs')
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Report executable syntax tests'
|
||||
# Search and list all found executable syntax tests, and exit with
|
||||
# an error code.
|
||||
make -C runtime/syntax executables
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Add i386 packages to dpkg
|
||||
if: inputs.architecture == 'i386'
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Add i386 packages to dpkg'
|
||||
sudo dpkg --add-architecture i386
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Uninstall snap
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Uninstall snap'
|
||||
sudo bash ci/remove_snap.sh
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Enable debug packages
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Enable debug packages'
|
||||
# Some of the ASAN suppressions are in libraries linked with dlopen
|
||||
# and symbolization of them requires these debug packages.
|
||||
sudo apt install ubuntu-dbgsym-keyring
|
||||
sudo cp ci/ddebs.list /etc/apt/sources.list.d/ddebs.list
|
||||
sudo cp ci/pinned-pkgs /etc/apt/preferences.d/pinned-pkgs
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Install packages
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Install packages'
|
||||
# This is added by default, and it is often broken, but we don't need anything from it
|
||||
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
|
||||
PKGS=( \
|
||||
gettext \
|
||||
x11-utils \
|
||||
labwc \
|
||||
wl-clipboard \
|
||||
wayland-utils \
|
||||
libgtk-3-dev:${{ inputs.architecture }} \
|
||||
libgtk-3-bin:${{ inputs.architecture }} \
|
||||
desktop-file-utils \
|
||||
libc6-dbgsym:${{ inputs.architecture }} \
|
||||
libtool-bin \
|
||||
libncurses-dev:${{ inputs.architecture }} \
|
||||
libxt-dev:${{ inputs.architecture }} \
|
||||
libegl-mesa0:${{ inputs.architecture }} \
|
||||
libegl1:${{ inputs.architecture }} \
|
||||
libegl1-mesa-dev:${{ inputs.architecture }} \
|
||||
libepoxy-dev:${{ inputs.architecture }} \
|
||||
libwayland-egl1:${{ inputs.architecture }} \
|
||||
libwayland-client0:${{ inputs.architecture }} \
|
||||
libwayland-cursor0:${{ inputs.architecture }} \
|
||||
locales-all \
|
||||
software-properties-common \
|
||||
)
|
||||
if ${{ contains(fromJSON(inputs.extra), 'asan') }} && ${{ contains(inputs.architecture, 'native') }}; then
|
||||
PKGS+=( \
|
||||
libepoxy0-dbgsym:${{ inputs.architecture }} \
|
||||
libxdamage1-dbgsym:${{ inputs.architecture }} \
|
||||
libxcb1-dbgsym:${{ inputs.architecture }} \
|
||||
libgtk-3-bin-dbgsym:${{ inputs.architecture }} \
|
||||
libgtk-3-0t64-dbgsym:${{ inputs.architecture }} \
|
||||
libglib2.0-0t64-dbgsym:${{ inputs.architecture }} \
|
||||
libglib2.0-bin-dbgsym:${{ inputs.architecture }} \
|
||||
libglib2.0-dev-bin-dbgsym:${{ inputs.architecture }} \
|
||||
)
|
||||
fi
|
||||
if ${{ inputs.features == 'huge' }}; then
|
||||
LUA_VER=${{ inputs.lua_ver || '5.4' }}
|
||||
PKGS+=( \
|
||||
autoconf \
|
||||
gdb \
|
||||
lcov \
|
||||
libcanberra-dev \
|
||||
libperl-dev \
|
||||
python3-dev \
|
||||
liblua${LUA_VER}-dev \
|
||||
lua${LUA_VER} \
|
||||
ruby-dev \
|
||||
tcl-dev \
|
||||
cscope \
|
||||
libsodium-dev \
|
||||
attr \
|
||||
libattr1-dev
|
||||
)
|
||||
fi
|
||||
if ${{ contains(fromJSON(inputs.extra), 'proto') }}; then
|
||||
PKGS+=( python3-clang )
|
||||
fi
|
||||
sudo apt-get update && sudo apt-get upgrade -y --allow-downgrades && sudo apt-get install -y --allow-downgrades "${PKGS[@]}"
|
||||
|
||||
- name: Install gcc-${{ env.GCC_VER }}
|
||||
if: inputs.compiler == 'gcc'
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Install gcc-${{ env.GCC_VER }}'
|
||||
# ubuntu-toolchain-r/test PPA for gcc-13 compiler
|
||||
# disabled because the installation failed, causing test failures
|
||||
# sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y gcc-${{ env.GCC_VER }}:${{ inputs.architecture }}
|
||||
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ env.GCC_VER }} 100
|
||||
sudo update-alternatives --set gcc /usr/bin/gcc-${{ env.GCC_VER }}
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Install clang-${{ env.CLANG_VER }}
|
||||
if: inputs.compiler == 'clang'
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Install clang-${{ env.CLANG_VER }}'
|
||||
. /etc/lsb-release
|
||||
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/llvm-archive-keyring.gpg > /dev/null
|
||||
echo "Types: deb
|
||||
URIs: https://apt.llvm.org/${DISTRIB_CODENAME}/
|
||||
Suites: llvm-toolchain-${DISTRIB_CODENAME}-${{ env.CLANG_VER }}
|
||||
Components: main
|
||||
Signed-By: /usr/share/keyrings/llvm-archive-keyring.gpg" | sudo tee /etc/apt/sources.list.d/llvm-toolchain.sources > /dev/null
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y clang-${{ env.CLANG_VER }} llvm-${{ env.CLANG_VER }}
|
||||
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ env.CLANG_VER }} 100
|
||||
sudo update-alternatives --set clang /usr/bin/clang-${{ env.CLANG_VER }}
|
||||
sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${{ env.CLANG_VER }} 100
|
||||
sudo update-alternatives --install /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${{ env.CLANG_VER }} 100
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Set up environment
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Set up environment'
|
||||
mkdir -p "${LOG_DIR}"
|
||||
mkdir -p "${HOME}/bin"
|
||||
echo "${HOME}/bin" >> $GITHUB_PATH
|
||||
(
|
||||
echo "LINUX_VERSION=$(uname -r)"
|
||||
echo "NPROC=$(getconf _NPROCESSORS_ONLN)"
|
||||
echo "TMPDIR=$(mktemp -d -p /tmp)"
|
||||
|
||||
case "${{ inputs.features }}" in
|
||||
tiny)
|
||||
echo "TEST=testtiny"
|
||||
if ${{ contains(fromJSON(inputs.extra), 'nogui') }}; then
|
||||
CONFOPT="--disable-gui"
|
||||
fi
|
||||
;;
|
||||
normal)
|
||||
;;
|
||||
huge)
|
||||
echo "TEST=scripttests test_libvterm indenttest syntaxtest"
|
||||
INTERFACE=${{ inputs.interface || 'yes' }}
|
||||
if ${{ inputs.python3 == 'stable-abi' }}; then
|
||||
PYTHON3_CONFOPT="--with-python3-stable-abi=3.8"
|
||||
fi
|
||||
# The ubuntu-24.04 CI runner does not provide a python2 package.
|
||||
CONFOPT="--enable-perlinterp=${INTERFACE} --enable-pythoninterp=no --enable-python3interp=${INTERFACE} --enable-rubyinterp=${INTERFACE} --enable-luainterp=${INTERFACE} --enable-tclinterp=${INTERFACE} ${PYTHON3_CONFOPT}"
|
||||
;;
|
||||
esac
|
||||
|
||||
if ${{ contains(fromJSON(inputs.extra), 'no_x11_wl') }}; then
|
||||
CONFOPT="${CONFOPT} --without-x --disable-gui --without-wayland --enable-socketserver"
|
||||
fi
|
||||
if ${{ inputs.coverage == true }}; then
|
||||
CFLAGS="${CFLAGS} --coverage -DUSE_GCOV_FLUSH"
|
||||
echo "LDFLAGS=--coverage"
|
||||
fi
|
||||
if ${{ contains(fromJSON(inputs.extra), 'uchar') }}; then
|
||||
CFLAGS="${CFLAGS} -funsigned-char"
|
||||
fi
|
||||
if ${{ contains(fromJSON(inputs.extra), 'testgui') }}; then
|
||||
echo "TEST=-C src testgui"
|
||||
fi
|
||||
if ${{ contains(fromJSON(inputs.extra), 'unittests') }}; then
|
||||
echo "TEST=unittests"
|
||||
fi
|
||||
if ${{ contains(fromJSON(inputs.extra), 'asan') }}; then
|
||||
echo "SANITIZER_CFLAGS=-g -O0 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer"
|
||||
echo "ASAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/asan"
|
||||
echo "UBSAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/ubsan"
|
||||
echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/src/testdir/lsan-suppress.txt"
|
||||
fi
|
||||
if ${{ contains(fromJSON(inputs.extra), 'vimtags') }}; then
|
||||
echo "TEST=-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim"
|
||||
fi
|
||||
if ${{ contains(fromJSON(inputs.extra), 'proto') }}; then
|
||||
echo "TEST=-C src protoclean proto"
|
||||
fi
|
||||
echo "CFLAGS=${CFLAGS}"
|
||||
echo "CONFOPT=${CONFOPT}"
|
||||
# Disables GTK attempt to integrate with the accessibility service that does run in CI.
|
||||
echo "NO_AT_BRIDGE=1"
|
||||
) >> $GITHUB_ENV
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Set up system
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Set up system'
|
||||
if [[ ${CC} = clang ]]; then
|
||||
# Use llvm-cov instead of gcov when compiler is clang.
|
||||
ln -fs /usr/bin/llvm-cov ${HOME}/bin/gcov
|
||||
fi
|
||||
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0
|
||||
sudo usermod -a -G audio "${USER}"
|
||||
sudo bash ci/setup-xvfb.sh
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Check autoconf
|
||||
if: contains(fromJSON(inputs.extra), 'unittests')
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Check autoconf'
|
||||
make -C src autoconf
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Set up shadow dir
|
||||
if: inputs.shadow
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Set up shadow dir'
|
||||
make -C src shadow
|
||||
echo "SRCDIR=${{ inputs.shadow }}" >> $GITHUB_ENV
|
||||
echo "SHADOWOPT=-C ${{ inputs.shadow }}" >> $GITHUB_ENV
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Configure
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Configure'
|
||||
./configure --with-features=${{ inputs.features }} ${CONFOPT} --enable-fail-if-missing
|
||||
# Append various warning flags to CFLAGS.
|
||||
sed -i -f ci/config.mk.sed ${SRCDIR}/auto/config.mk
|
||||
sed -i -f ci/config.mk.${CC}.sed ${SRCDIR}/auto/config.mk
|
||||
if [[ ${CC} = clang ]]; then
|
||||
# Suppress some warnings produced by clang 12 and later.
|
||||
sed -i -f ci/config.mk.clang-12.sed ${SRCDIR}/auto/config.mk
|
||||
fi
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Build
|
||||
if: (!contains(fromJSON(inputs.extra), 'unittests'))
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Build'
|
||||
make ${SHADOWOPT} -j${NPROC}
|
||||
echo '::endgroup::'
|
||||
|
||||
- name: Check version
|
||||
if: (!contains(fromJSON(inputs.extra), 'unittests'))
|
||||
shell: bash
|
||||
run: |
|
||||
echo '::group::Check version'
|
||||
"${SRCDIR}"/vim --version
|
||||
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
|
||||
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
|
||||
if ${{ inputs.features == 'huge' }}; then
|
||||
# Also check that optional and dynamic features are configured and working
|
||||
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \
|
||||
-c "let g:required=['gettext', 'sodium', 'sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \
|
||||
-S ci/if_feat_check.vim -c quit
|
||||
fi
|
||||
echo '::endgroup::'
|
||||
11
.github/actions/test_artifacts/action.yml
vendored
11
.github/actions/test_artifacts/action.yml
vendored
@@ -1,10 +1,10 @@
|
||||
name: 'test_artifacts'
|
||||
name: "test_artifacts"
|
||||
description: "Upload failed test artifacts"
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Collect matrix properties for naming
|
||||
uses: actions/github-script@v8
|
||||
uses: actions/github-script@v9
|
||||
id: matrix-props
|
||||
env:
|
||||
MATRIX_PROPS: ${{ toJSON(matrix) }}
|
||||
@@ -40,9 +40,10 @@ runs:
|
||||
# A file, directory or wildcard pattern that describes what
|
||||
# to upload.
|
||||
path: |
|
||||
${{ github.workspace }}/runtime/indent/testdir/*.fail
|
||||
${{ github.workspace }}/runtime/syntax/testdir/failed/*
|
||||
${{ github.workspace }}/src/testdir/failed/*
|
||||
${{ github.workspace }}/logs/**/*.symbolized
|
||||
${{ github.workspace }}/runtime/indent/testdir/*.fail
|
||||
${{ github.workspace }}/runtime/syntax/testdir/failed/*
|
||||
${{ github.workspace }}/src/testdir/failed/*
|
||||
# The desired behavior if no files are found using the
|
||||
# provided path.
|
||||
if-no-files-found: ignore
|
||||
|
||||
361
.github/workflows/ci.yml
vendored
361
.github/workflows/ci.yml
vendored
@@ -2,7 +2,7 @@ name: GitHub CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ['**']
|
||||
branches: ["**"]
|
||||
pull_request:
|
||||
|
||||
# Cancels all previous workflow runs for pull requests that have not completed.
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
LEAK_CFLAGS: -DEXITFREE
|
||||
LOG_DIR: ${{ github.workspace }}/logs
|
||||
TERM: xterm
|
||||
DISPLAY: ':99'
|
||||
DISPLAY: ":99"
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
|
||||
strategy:
|
||||
@@ -67,12 +67,6 @@ jobs:
|
||||
coverage: true
|
||||
interface: dynamic
|
||||
extra: [uchar, testgui]
|
||||
- features: huge
|
||||
compiler: clang
|
||||
# Lua5.1 is the most widely used version (since it's what LuaJIT is
|
||||
# compatible with), so ensure it works
|
||||
lua_ver: '5.1'
|
||||
extra: [asan]
|
||||
- features: huge
|
||||
compiler: gcc
|
||||
coverage: true
|
||||
@@ -90,254 +84,26 @@ jobs:
|
||||
extra: [no_x11_wl]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository from github
|
||||
- name: Checkout repository from GitHub
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Check Filelist (for packaging)
|
||||
run: |
|
||||
# If any files in the repository are not listed in Filelist this will
|
||||
# exit with an error code and list the missing entries.
|
||||
make -f ci/unlisted.make
|
||||
|
||||
- name: Check hlgroups (are any new hlgroups added, but not handled in highlight.c)
|
||||
run: |
|
||||
# If any highlight groups have been documented, but not handled in
|
||||
# highlight.c, nor listed as 'intentionally left out' in hlgroups.ignore,
|
||||
# exit with an error code and list the missing entries.
|
||||
make -C ci -f hlgroups.make
|
||||
|
||||
- name: Report executable syntax tests
|
||||
if: contains(matrix.extra, 'syn_test_execs')
|
||||
run: |
|
||||
# Search and list all found executable syntax tests, and exit with
|
||||
# an error code.
|
||||
make -C runtime/syntax executables
|
||||
|
||||
- run: sudo dpkg --add-architecture i386
|
||||
if: matrix.architecture == 'i386'
|
||||
|
||||
- name: Uninstall snap
|
||||
run: |
|
||||
sudo bash ci/remove_snap.sh
|
||||
|
||||
- name: Enable debug packages
|
||||
run: |
|
||||
# Some of the ASAN suppressions are in libraries linked with dlopen
|
||||
# and symbolization of them requires these debug packages.
|
||||
sudo apt install ubuntu-dbgsym-keyring
|
||||
sudo cp ci/ddebs.list /etc/apt/sources.list.d/ddebs.list
|
||||
sudo cp ci/pinned-pkgs /etc/apt/preferences.d/pinned-pkgs
|
||||
|
||||
- name: Install packages
|
||||
run: |
|
||||
# This is added by default, and it is often broken, but we don't need anything from it
|
||||
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
|
||||
PKGS=( \
|
||||
gettext \
|
||||
x11-utils \
|
||||
labwc \
|
||||
wl-clipboard \
|
||||
wayland-utils \
|
||||
libgtk-3-dev:${{ matrix.architecture }} \
|
||||
libgtk-3-bin:${{ matrix.architecture }} \
|
||||
desktop-file-utils \
|
||||
libc6-dbgsym:${{ matrix.architecture }} \
|
||||
libtool-bin \
|
||||
libncurses-dev:${{ matrix.architecture }} \
|
||||
libxt-dev:${{ matrix.architecture }} \
|
||||
libegl-mesa0:${{ matrix.architecture }} \
|
||||
libegl1:${{ matrix.architecture }} \
|
||||
libegl1-mesa-dev:${{ matrix.architecture }} \
|
||||
libepoxy-dev:${{ matrix.architecture }} \
|
||||
libwayland-egl1:${{ matrix.architecture }} \
|
||||
libwayland-client0:${{ matrix.architecture }} \
|
||||
libwayland-cursor0:${{ matrix.architecture }} \
|
||||
locales-all \
|
||||
software-properties-common \
|
||||
)
|
||||
if ${{ contains(matrix.extra, 'asan') }} && ${{ contains(matrix.architecture, 'native') }}; then
|
||||
PKGS+=( \
|
||||
libepoxy0-dbgsym:${{ matrix.architecture }} \
|
||||
libxdamage1-dbgsym:${{ matrix.architecture }} \
|
||||
libxcb1-dbgsym:${{ matrix.architecture }} \
|
||||
libgtk-3-bin-dbgsym:${{ matrix.architecture }} \
|
||||
libgtk-3-0t64-dbgsym:${{ matrix.architecture }} \
|
||||
libglib2.0-0t64-dbgsym:${{ matrix.architecture }} \
|
||||
libglib2.0-bin-dbgsym:${{ matrix.architecture }} \
|
||||
libglib2.0-dev-bin-dbgsym:${{ matrix.architecture }} \
|
||||
)
|
||||
fi
|
||||
if ${{ matrix.features == 'huge' }}; then
|
||||
LUA_VER=${{ matrix.lua_ver || '5.4' }}
|
||||
PKGS+=( \
|
||||
autoconf \
|
||||
gdb \
|
||||
lcov \
|
||||
libcanberra-dev \
|
||||
libperl-dev \
|
||||
python3-dev \
|
||||
liblua${LUA_VER}-dev \
|
||||
lua${LUA_VER} \
|
||||
ruby-dev \
|
||||
tcl-dev \
|
||||
cscope \
|
||||
libsodium-dev \
|
||||
attr \
|
||||
libattr1-dev
|
||||
)
|
||||
fi
|
||||
if ${{ contains(matrix.extra, 'proto') }}; then
|
||||
PKGS+=( python3-clang )
|
||||
fi
|
||||
sudo apt-get update && sudo apt-get upgrade -y --allow-downgrades && sudo apt-get install -y --allow-downgrades "${PKGS[@]}"
|
||||
|
||||
- name: Install gcc-${{ env.GCC_VER }}
|
||||
if: matrix.compiler == 'gcc'
|
||||
run: |
|
||||
# ubuntu-toolchain-r/test PPA for gcc-13 compiler
|
||||
# disabled because the installation failed, causing test failures
|
||||
# sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y gcc-${{ env.GCC_VER }}:${{ matrix.architecture }}
|
||||
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ env.GCC_VER }} 100
|
||||
sudo update-alternatives --set gcc /usr/bin/gcc-${{ env.GCC_VER }}
|
||||
|
||||
- name: Install clang-${{ env.CLANG_VER }}
|
||||
if: matrix.compiler == 'clang'
|
||||
run: |
|
||||
. /etc/lsb-release
|
||||
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/llvm-archive-keyring.gpg > /dev/null
|
||||
echo "Types: deb
|
||||
URIs: https://apt.llvm.org/${DISTRIB_CODENAME}/
|
||||
Suites: llvm-toolchain-${DISTRIB_CODENAME}-${{ env.CLANG_VER }}
|
||||
Components: main
|
||||
Signed-By: /usr/share/keyrings/llvm-archive-keyring.gpg" | sudo tee /etc/apt/sources.list.d/llvm-toolchain.sources > /dev/null
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y clang-${{ env.CLANG_VER }} llvm-${{ env.CLANG_VER }}
|
||||
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ env.CLANG_VER }} 100
|
||||
sudo update-alternatives --set clang /usr/bin/clang-${{ env.CLANG_VER }}
|
||||
sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-${{ env.CLANG_VER }} 100
|
||||
sudo update-alternatives --install /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${{ env.CLANG_VER }} 100
|
||||
|
||||
- name: Set up environment
|
||||
run: |
|
||||
mkdir -p "${LOG_DIR}"
|
||||
mkdir -p "${HOME}/bin"
|
||||
echo "${HOME}/bin" >> $GITHUB_PATH
|
||||
(
|
||||
echo "LINUX_VERSION=$(uname -r)"
|
||||
echo "NPROC=$(getconf _NPROCESSORS_ONLN)"
|
||||
echo "TMPDIR=$(mktemp -d -p /tmp)"
|
||||
|
||||
case "${{ matrix.features }}" in
|
||||
tiny)
|
||||
echo "TEST=testtiny"
|
||||
if ${{ contains(matrix.extra, 'nogui') }}; then
|
||||
CONFOPT="--disable-gui"
|
||||
fi
|
||||
;;
|
||||
normal)
|
||||
;;
|
||||
huge)
|
||||
echo "TEST=scripttests test_libvterm indenttest syntaxtest"
|
||||
INTERFACE=${{ matrix.interface || 'yes' }}
|
||||
if ${{ matrix.python3 == 'stable-abi' }}; then
|
||||
PYTHON3_CONFOPT="--with-python3-stable-abi=3.8"
|
||||
fi
|
||||
# The ubuntu-24.04 CI runner does not provide a python2 package.
|
||||
CONFOPT="--enable-perlinterp=${INTERFACE} --enable-pythoninterp=no --enable-python3interp=${INTERFACE} --enable-rubyinterp=${INTERFACE} --enable-luainterp=${INTERFACE} --enable-tclinterp=${INTERFACE} ${PYTHON3_CONFOPT}"
|
||||
;;
|
||||
esac
|
||||
|
||||
if ${{ contains(matrix.extra, 'no_x11_wl') }}; then
|
||||
CONFOPT="${CONFOPT} --without-x --disable-gui --without-wayland --enable-socketserver"
|
||||
fi
|
||||
if ${{ matrix.coverage == true }}; then
|
||||
CFLAGS="${CFLAGS} --coverage -DUSE_GCOV_FLUSH"
|
||||
echo "LDFLAGS=--coverage"
|
||||
fi
|
||||
if ${{ contains(matrix.extra, 'uchar') }}; then
|
||||
CFLAGS="${CFLAGS} -funsigned-char"
|
||||
fi
|
||||
if ${{ contains(matrix.extra, 'testgui') }}; then
|
||||
echo "TEST=-C src testgui"
|
||||
fi
|
||||
if ${{ contains(matrix.extra, 'unittests') }}; then
|
||||
echo "TEST=unittests"
|
||||
fi
|
||||
if ${{ contains(matrix.extra, 'asan') }}; then
|
||||
echo "SANITIZER_CFLAGS=-g -O0 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer"
|
||||
echo "ASAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/asan"
|
||||
echo "UBSAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/ubsan"
|
||||
echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/src/testdir/lsan-suppress.txt"
|
||||
fi
|
||||
if ${{ contains(matrix.extra, 'vimtags') }}; then
|
||||
echo "TEST=-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim"
|
||||
fi
|
||||
if ${{ contains(matrix.extra, 'proto') }}; then
|
||||
echo "TEST=-C src protoclean proto"
|
||||
fi
|
||||
echo "CFLAGS=${CFLAGS}"
|
||||
echo "CONFOPT=${CONFOPT}"
|
||||
# Disables GTK attempt to integrate with the accessibility service that does run in CI.
|
||||
echo "NO_AT_BRIDGE=1"
|
||||
) >> $GITHUB_ENV
|
||||
|
||||
- name: Set up system
|
||||
run: |
|
||||
if [[ ${CC} = clang ]]; then
|
||||
# Use llvm-cov instead of gcov when compiler is clang.
|
||||
ln -fs /usr/bin/llvm-cov ${HOME}/bin/gcov
|
||||
fi
|
||||
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0
|
||||
sudo usermod -a -G audio "${USER}"
|
||||
sudo bash ci/setup-xvfb.sh
|
||||
|
||||
- name: Check autoconf
|
||||
if: contains(matrix.extra, 'unittests')
|
||||
run: |
|
||||
make -C src autoconf
|
||||
|
||||
- name: Set up shadow dir
|
||||
if: matrix.shadow
|
||||
run: |
|
||||
make -C src shadow
|
||||
echo "SRCDIR=${{ matrix.shadow }}" >> $GITHUB_ENV
|
||||
echo "SHADOWOPT=-C ${{ matrix.shadow }}" >> $GITHUB_ENV
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
./configure --with-features=${{ matrix.features }} ${CONFOPT} --enable-fail-if-missing
|
||||
# Append various warning flags to CFLAGS.
|
||||
sed -i -f ci/config.mk.sed ${SRCDIR}/auto/config.mk
|
||||
sed -i -f ci/config.mk.${CC}.sed ${SRCDIR}/auto/config.mk
|
||||
if [[ ${CC} = clang ]]; then
|
||||
# Suppress some warnings produced by clang 12 and later.
|
||||
sed -i -f ci/config.mk.clang-12.sed ${SRCDIR}/auto/config.mk
|
||||
fi
|
||||
|
||||
- name: Build
|
||||
if: (!contains(matrix.extra, 'unittests'))
|
||||
run: |
|
||||
make ${SHADOWOPT} -j${NPROC}
|
||||
|
||||
- name: Check version
|
||||
if: (!contains(matrix.extra, 'unittests'))
|
||||
run: |
|
||||
"${SRCDIR}"/vim --version
|
||||
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
|
||||
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
|
||||
if ${{ matrix.features == 'huge' }}; then
|
||||
# Also check that optional and dynamic features are configured and working
|
||||
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \
|
||||
-c "let g:required=['gettext', 'sodium', 'sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \
|
||||
-S ci/if_feat_check.vim -c quit
|
||||
fi
|
||||
timeout-minutes: 15
|
||||
uses: ./.github/actions/build_vim_on_linux
|
||||
with:
|
||||
features: ${{ matrix.features }}
|
||||
compiler: ${{ matrix.compiler }}
|
||||
architecture: ${{ matrix.architecture }}
|
||||
extra: ${{ toJSON(matrix.extra) }}
|
||||
shadow: ${{ matrix.shadow }}
|
||||
interface: ${{ matrix.interface }}
|
||||
lua_ver: ${{ matrix.lua_ver }}
|
||||
python3: ${{ matrix.python3 }}
|
||||
coverage: ${{ matrix.coverage }}
|
||||
|
||||
- name: Test
|
||||
timeout-minutes: 45
|
||||
run: |
|
||||
make ${SHADOWOPT} ${TEST}
|
||||
timeout-minutes: 20
|
||||
run: make ${SHADOWOPT} ${TEST}
|
||||
|
||||
# Enable to debug failing tests live and ssh into the CI runners
|
||||
# - name: Setup tmate session
|
||||
@@ -346,7 +112,8 @@ jobs:
|
||||
# with:
|
||||
# limit-access-to-actor: true
|
||||
|
||||
- if: ${{ !cancelled() }}
|
||||
- name: Upload failed test artifacts
|
||||
if: ${{ !cancelled() }}
|
||||
uses: ./.github/actions/test_artifacts
|
||||
|
||||
- name: Vim tags
|
||||
@@ -405,20 +172,78 @@ jobs:
|
||||
- name: Codecov
|
||||
timeout-minutes: 20
|
||||
if: matrix.coverage
|
||||
uses: codecov/codecov-action@v5
|
||||
uses: codecov/codecov-action@v6
|
||||
with:
|
||||
flags: linux,${{ matrix.features }}-${{ matrix.compiler }}-${{ join(matrix.extra, '-') }}
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
|
||||
linux-asan:
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
env:
|
||||
CC: clang
|
||||
CLANG_VER: 21
|
||||
SRCDIR: ./src
|
||||
LEAK_CFLAGS: -DEXITFREE
|
||||
LOG_DIR: ${{ github.workspace }}/logs
|
||||
TERM: xterm
|
||||
DISPLAY: ":99"
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
testset:
|
||||
- tinytests
|
||||
- newtests.1
|
||||
- newtests.2
|
||||
|
||||
steps:
|
||||
- name: Checkout repository from GitHub
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Build
|
||||
timeout-minutes: 15
|
||||
uses: ./.github/actions/build_vim_on_linux
|
||||
with:
|
||||
features: huge
|
||||
compiler: clang
|
||||
extra: '["asan"]'
|
||||
# Lua5.1 is the most widely used version (since it's what LuaJIT is
|
||||
# compatible with), so ensure it works
|
||||
lua_ver: "5.1"
|
||||
|
||||
- name: Test (tinytests)
|
||||
if: matrix.testset == 'tinytests'
|
||||
timeout-minutes: 20
|
||||
run: make ${TEST} NEW_TESTS_RES=
|
||||
|
||||
- name: Test (newtests)
|
||||
if: startsWith(matrix.testset, 'newtests')
|
||||
timeout-minutes: 20
|
||||
env:
|
||||
JOB_INDEX: ${{ strategy.job-index }}
|
||||
JOB_TOTAL: ${{ strategy.job-total }}
|
||||
run: |
|
||||
set -x
|
||||
make -C src/testdir SCRIPTS_TINY_OUT= \
|
||||
NEW_TESTS_RES="$(python3 ci/gen_testset.py $((JOB_TOTAL-1)) | jq -r --argjson i $((JOB_INDEX-1)) '.[$i]|join(" ")')"
|
||||
|
||||
- name: ASan logs
|
||||
if: contains(matrix.extra, 'asan') && !cancelled()
|
||||
if: ${{ !cancelled() }}
|
||||
run: |
|
||||
for f in $(grep -lR '#[[:digit:]]* *0x[[:xdigit:]]*' "${LOG_DIR}"); do
|
||||
echo "$f"
|
||||
asan_symbolize -l "$f"
|
||||
(
|
||||
echo "$f"
|
||||
asan_symbolize -l "$f"
|
||||
) | tee "$f".symbolized
|
||||
false # in order to fail a job
|
||||
done
|
||||
|
||||
- name: Upload failed test artifacts
|
||||
if: ${{ !cancelled() }}
|
||||
uses: ./.github/actions/test_artifacts
|
||||
|
||||
macos:
|
||||
runs-on: ${{ matrix.runner }}
|
||||
|
||||
@@ -436,7 +261,7 @@ jobs:
|
||||
runner: [macos-15-intel, macos-26]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository from github
|
||||
- name: Checkout repository from GitHub
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install packages
|
||||
@@ -503,7 +328,8 @@ jobs:
|
||||
run: |
|
||||
make ${TEST}
|
||||
|
||||
- if: ${{ !cancelled() }}
|
||||
- name: Upload failed test artifacts
|
||||
if: ${{ !cancelled() }}
|
||||
uses: ./.github/actions/test_artifacts
|
||||
|
||||
windows:
|
||||
@@ -513,7 +339,7 @@ jobs:
|
||||
# Interfaces
|
||||
# Lua
|
||||
LUA_VER: 54
|
||||
LUA_VER_DOT: '5.4'
|
||||
LUA_VER_DOT: "5.4"
|
||||
LUA_RELEASE: 5.4.2
|
||||
LUA32_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win32_dllw6_lib.zip
|
||||
LUA64_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win64_dllw6_lib.zip
|
||||
@@ -522,16 +348,16 @@ jobs:
|
||||
LUA_DIR_SLASH: D:/Lua
|
||||
# Python 2
|
||||
PYTHON_VER: 27
|
||||
PYTHON_VER_DOT: '2.7'
|
||||
PYTHON_VER_DOT: "2.7"
|
||||
PYTHON_DIR: 'C:\Python27'
|
||||
# Python 3
|
||||
PYTHON3_VER: 313
|
||||
PYTHON3_VER_DOT: '3.13'
|
||||
PYTHON3_VER_DOT: "3.13"
|
||||
# Other dependencies
|
||||
# winpty
|
||||
WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
|
||||
# libsodium
|
||||
SODIUM_VER: '1.0.20'
|
||||
SODIUM_VER: "1.0.20"
|
||||
# SODIUM_MSVC_URL: https://download.libsodium.org/libsodium/releases/libsodium-%SODIUM_VER%-stable-msvc.zip
|
||||
SODIUM_MSVC_URL: https://github.com/jedisct1/libsodium/releases/download/%SODIUM_VER%-RELEASE/libsodium-%SODIUM_VER%-msvc.zip
|
||||
SODIUM_MSVC_VER: v143
|
||||
@@ -609,7 +435,7 @@ jobs:
|
||||
echo "SODIUM_DIR=${SODIUM_DIR}" >> $GITHUB_ENV
|
||||
echo "GETTEXT_PATH=D:\gettext${{ matrix.arch == 'x64' && '64' || '32' }}" >> $GITHUB_ENV
|
||||
|
||||
- uses: msys2/setup-msys2@v2
|
||||
- uses: msys2/setup-msys2@v2.31.0
|
||||
if: matrix.toolchain == 'mingw'
|
||||
with:
|
||||
update: true
|
||||
@@ -619,7 +445,7 @@ jobs:
|
||||
msystem: ${{ env.MSYSTEM }}
|
||||
release: false
|
||||
|
||||
- name: Checkout repository from github
|
||||
- name: Checkout repository from GitHub
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Create a list of download URLs
|
||||
@@ -633,7 +459,7 @@ jobs:
|
||||
echo %GETTEXT64_URL%>> urls.txt
|
||||
|
||||
- name: Cache downloaded files
|
||||
uses: actions/cache@v5
|
||||
uses: actions/cache@v5.0.4
|
||||
with:
|
||||
path: downloads
|
||||
key: ${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('urls.txt') }}
|
||||
@@ -833,7 +659,8 @@ jobs:
|
||||
nmake -nologo -f Make_mvc.mak tiny VIMPROG=..\vim || exit 1
|
||||
)
|
||||
|
||||
- if: ${{ !cancelled() }}
|
||||
- name: Upload failed test artifacts
|
||||
if: ${{ !cancelled() }}
|
||||
uses: ./.github/actions/test_artifacts
|
||||
|
||||
- name: Generate gcov files
|
||||
@@ -846,7 +673,7 @@ jobs:
|
||||
- name: Codecov
|
||||
timeout-minutes: 20
|
||||
if: matrix.coverage
|
||||
uses: codecov/codecov-action@v5
|
||||
uses: codecov/codecov-action@v6
|
||||
with:
|
||||
directory: src
|
||||
flags: windows,${{ matrix.toolchain }}-${{ matrix.arch }}-${{ matrix.features }}
|
||||
|
||||
6
.github/workflows/codeql-analysis.yml
vendored
6
.github/workflows/codeql-analysis.yml
vendored
@@ -48,7 +48,7 @@ jobs:
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v4
|
||||
uses: github/codeql-action/init@v4.35.1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@@ -59,7 +59,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v4
|
||||
uses: github/codeql-action/autobuild@v4.35.1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -73,4 +73,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v4
|
||||
uses: github/codeql-action/analyze@v4.35.1
|
||||
|
||||
4
Filelist
4
Filelist
@@ -13,6 +13,7 @@ SRC_ALL = \
|
||||
.github/workflows/codeql-analysis.yml \
|
||||
.github/workflows/coverity.yml \
|
||||
.github/workflows/link-check.yml \
|
||||
.github/actions/build_vim_on_linux/action.yml \
|
||||
.github/actions/test_artifacts/action.yml \
|
||||
.github/dependabot.yml \
|
||||
.gitignore \
|
||||
@@ -23,6 +24,7 @@ SRC_ALL = \
|
||||
.editorconfig \
|
||||
ci/appveyor.bat \
|
||||
ci/config.mk*.sed \
|
||||
ci/gen_testset.py \
|
||||
ci/if_ver*.vim \
|
||||
ci/if_feat_check.vim \
|
||||
ci/lychee.toml \
|
||||
@@ -440,6 +442,7 @@ SRC_ALL = \
|
||||
src/libvterm/t/66screen_extent.test \
|
||||
src/libvterm/t/67screen_dbl_wh.test \
|
||||
src/libvterm/t/68screen_termprops.test \
|
||||
src/libvterm/t/69screen_pushline.test \
|
||||
src/libvterm/t/69screen_reflow.test \
|
||||
src/libvterm/t/90vttest_01-movement-1.test \
|
||||
src/libvterm/t/90vttest_01-movement-2.test \
|
||||
@@ -678,6 +681,7 @@ SRC_AMI = \
|
||||
src/Make_ami.mak \
|
||||
src/os_amiga.c \
|
||||
src/os_amiga.h \
|
||||
src/os_amiga_stubs.c \
|
||||
src/proto/os_amiga.pro \
|
||||
src/testdir/Make_amiga.mak \
|
||||
src/testdir/util/amiga.vim \
|
||||
|
||||
15
SECURITY.md
15
SECURITY.md
@@ -2,9 +2,16 @@
|
||||
|
||||
## Reporting a vulnerability
|
||||
|
||||
If you want to report a security issue, please privately disclose the issue to the vim-security mailing list
|
||||
vim-security@googlegroups.com
|
||||
|
||||
This is a private list, read only by the maintainers, but anybody can post, after moderation.
|
||||
If you want to report a security issue, please privately disclose the issue either via:
|
||||
- The vim-security mailing list: vim-security@googlegroups.com
|
||||
This is a private list, read only by the maintainers, but anybody can post.
|
||||
- [GitHub Security Advisories](https://github.com/vim/vim/security/advisories/new)
|
||||
|
||||
**Please don't publicly disclose the issue until it has been addressed by us.**
|
||||
|
||||
## Guidelines for reporting
|
||||
- Clearly explain **why** the behaviour is a security issue, not just that a bug exists.
|
||||
- Keep reports concise and focused.
|
||||
- Do not flood us with a list of issues. Report them one by one to ensure to not overwhelm us with the work load.
|
||||
- Do **not** submit AI-generated reports without carefully reviewing them first. Low-quality or
|
||||
speculative reports waste maintainer time and will be closed without action, and repeat offenders **will be banned**.
|
||||
|
||||
43
ci/gen_testset.py
Normal file
43
ci/gen_testset.py
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import itertools
|
||||
import json
|
||||
import re
|
||||
import subprocess
|
||||
|
||||
|
||||
def generate_testset(n):
|
||||
cp = subprocess.run(["make", "-C", "src/testdir", "-npq"], capture_output=True)
|
||||
|
||||
tests = set()
|
||||
for line in cp.stdout.decode().split("\n"):
|
||||
if re.match(r"^(NEW_TESTS_RES|TEST_VIM9_RES) = ", line):
|
||||
tests.update(re.findall(r"\btest\w+\.res\b", line))
|
||||
|
||||
tests = sorted(list(tests))
|
||||
# move test_alot*.res to the end
|
||||
tests = (
|
||||
[t for t in tests if not t.startswith("test_alot")]
|
||||
+ [t for t in tests if t.startswith("test_alot_")]
|
||||
+ ["test_alot.res"]
|
||||
)
|
||||
targets = tests
|
||||
|
||||
if n > 1:
|
||||
targets = [ts for ts in itertools.batched(tests, n)]
|
||||
targets = [[t for t in ts if t] for ts in itertools.zip_longest(*targets)]
|
||||
|
||||
return targets
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("n", type=int, nargs="?", default=1)
|
||||
args = parser.parse_args()
|
||||
|
||||
print(json.dumps(generate_testset(args.n)))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,4 +1,4 @@
|
||||
README.ru.txt для версии 9.1 программы Vim — Vi IMproved.
|
||||
Краткое описание для версии 9.2 программы Vim — Vi IMproved.
|
||||
|
||||
|
||||
ЧТО ТАКОЕ РЕДАКТОР VIM?
|
||||
@@ -10,8 +10,8 @@ README.ru.txt для версии 9.1 программы Vim — Vi IMproved.
|
||||
наименований файлов и команд, операции с произвольными блоками текста,
|
||||
встроенный язык программирования и т. д. Также доступен графический интерфейс
|
||||
пользователя (GUI). И при этом сохраняется совместимость с редактором Vi,
|
||||
и те, у кого Vi «в крови», будут чувствовать себя как дома. Подробности о
|
||||
различиях с редактором Vi см. в файле "runtime/doc/vi_diff.txt".
|
||||
и те, у кого Vi «в крови», будут чувствовать себя как дома. Подробности
|
||||
о различиях с редактором Vi см. в файле "runtime/doc/vi_diff.txt".
|
||||
|
||||
Этот редактор очень удобен для работы с исходным кодом программ, а также
|
||||
разного рода других текстовых файлов. Все команды вводятся набором обычных
|
||||
@@ -25,9 +25,9 @@ README.ru.txt для версии 9.1 программы Vim — Vi IMproved.
|
||||
функционала (обычно называемый vim.tiny). Данная сборка чаще всего используется
|
||||
во многих дистрибутивах Linux в качестве предустановленного редактора vi.
|
||||
|
||||
Редактор Vim работает в ОС MS Windows (7, 8, 10, 11), macOS, Haiku, VMS и
|
||||
практически во всех UNIX-подобных системах. А перенос на другие платформы не
|
||||
должен представлять особой сложности.
|
||||
Редактор Vim работает в ОС MS Windows (7, 8, 10, 11), macOS, Haiku, VMS
|
||||
и практически во всех UNIX-подобных системах. А перенос на другие платформы
|
||||
не должен представлять особой сложности.
|
||||
Предыдущие версии редактора Vim работают в операционных системах OS/2, MS-DOS,
|
||||
MS Windows 95/98/Me/NT/2000/XP/Vista, AmigaDOS, Atari MiNT, BeOS и RISC OS.
|
||||
Но поддержка этих версий больше не осуществляется.
|
||||
@@ -45,11 +45,11 @@ MS Windows 95/98/Me/NT/2000/XP/Vista, AmigaDOS, Atari MiNT, BeOS и RISC OS.
|
||||
программы. Этот архив включает в себя документацию, файлы подсветки синтаксиса
|
||||
и другие файлы, которые используются редактором во время работы. Чтобы
|
||||
запустить программу Vim, вы должны получить либо архив с исполняемыми файлами,
|
||||
либо архив с исходным кодом. Какой из них вам нужен, зависит от того, на какой
|
||||
системе вы хотите запустить редактор Vim, и есть ли для этой системы
|
||||
либо архив с исходным кодом. Какой из них вам нужен, зависит от того,
|
||||
на какой системе вы хотите запустить редактор Vim, и есть ли для этой системы
|
||||
исполняемые файлы или вы должны компилировать программу самостоятельно.
|
||||
Чтобы узнать о доступных в настоящее время пакетах программы, посмотрите на
|
||||
веб‐странице https://www.vim.org/download.php.
|
||||
Чтобы узнать о доступных в настоящее время пакетах программы, посмотрите
|
||||
на веб‐странице https://www.vim.org/download.php.
|
||||
|
||||
Несколько полезных мест, где можно получить последнюю версию редактора Vim:
|
||||
* Посмотрите в git-хранилище на GitHub: https://github.com/vim/vim.
|
||||
@@ -61,8 +61,8 @@ https://github.com/vim/vim-win32-installer/releases.
|
||||
КОМПИЛЯЦИЯ РЕДАКТОРА Vim
|
||||
|
||||
Если для вашей системы уже есть готовые исполняемые файлы, вам не нужно самому
|
||||
компилировать редактор Vim. Если вы скачали архив с исходным кодом, то всё
|
||||
необходимое для компиляции программы Vim находится в каталоге "src".
|
||||
компилировать редактор Vim. Если вы скачали архив с исходным кодом,
|
||||
то всё необходимое для компиляции программы Vim находится в каталоге "src".
|
||||
Инструкции смотрите в файле src/INSTALL.
|
||||
|
||||
|
||||
@@ -85,12 +85,12 @@ README_vms.txt VMS
|
||||
|
||||
ДОКУМЕНТАЦИЯ ПО РЕДАКТОРУ Vim
|
||||
|
||||
Учебник Vim — это часовой практический курс для начинающих. Как правило, для
|
||||
работы с ним нужно набрать команду "vimtutor". Чтобы получить дополнительную
|
||||
информацию, смотрите раздел документации ":help tutor".
|
||||
Учебник Vim — это часовой практический курс для начинающих. Как правило,
|
||||
для работы с ним нужно набрать команду "vimtutor". Чтобы получить
|
||||
дополнительную информацию, смотрите раздел документации ":help tutor".
|
||||
|
||||
Лучше всего воспользоваться командой ":help" в редакторе Vim. Если у вас ещё
|
||||
нет исполняемого файла программы, прочитайте файл "runtime/doc/help.txt".
|
||||
Лучше всего воспользоваться командой ":help" в редакторе Vim. Если у вас
|
||||
ещё нет исполняемого файла программы, прочитайте файл "runtime/doc/help.txt".
|
||||
В нём содержатся отсылки на другие полезные файлы документации. Руководство
|
||||
пользователя можно читать как книгу, и оно рекомендуется для обучения работе
|
||||
с редактором Vim. Смотрите ":help user-manual".
|
||||
@@ -100,7 +100,7 @@ README_vms.txt VMS
|
||||
|
||||
Редактор Vim является благотворительным программным обеспечением.
|
||||
Использование и копирование программы Vim не ограничено, однако рекомендуется
|
||||
сделать добровольное пожертвование для нуждающихся детей в Уганде. Чтобы узнать
|
||||
сделать добровольное пожертвование для нуждающихся детей в Уганде. Чтобы узнать
|
||||
подробности, прочитайте, пожалуйста, файл "runtime/doc/uganda.txt" (введите
|
||||
команду ":help uganda" в редакторе Vim).
|
||||
|
||||
@@ -125,8 +125,8 @@ README_vms.txt VMS
|
||||
будет способствовать повышению заинтересованности команды разработчиков
|
||||
в продолжении работы над редактором Vim!
|
||||
|
||||
Самая свежая информация об оказании финансовой поддержки публикуется на
|
||||
веб-сайте программы Vim:
|
||||
Самая свежая информация об оказании финансовой поддержки публикуется
|
||||
на веб-сайте программы Vim:
|
||||
https://www.vim.org/sponsor/
|
||||
|
||||
|
||||
@@ -142,8 +142,8 @@ README_vms.txt VMS
|
||||
Последние новости о редакторе Vim можно найти на его домашней странице:
|
||||
https://www.vim.org/
|
||||
|
||||
Если у вас возникли вопросы, посмотрите полезные советы или документацию по
|
||||
редактору Vim:
|
||||
Если у вас возникли вопросы, посмотрите полезные советы или документацию
|
||||
по редактору Vim:
|
||||
https://www.vim.org/docs.php
|
||||
https://vim.fandom.com/wiki/Vim_Tips_Wiki
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ vim9script
|
||||
# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
|
||||
# Former Maintainers: Nikolai Weibull <now@bitwi.se>
|
||||
# Latest Revision: 2026 Feb 03
|
||||
# Last Change:
|
||||
# 2026 Mar 30 by Vim project: Use fnameescape for the Log command
|
||||
|
||||
# Typesetting {{{
|
||||
import autoload './typeset.vim'
|
||||
@@ -33,7 +35,7 @@ export def Log(bufname: string)
|
||||
var logpath = typeset.LogPath(bufname)
|
||||
|
||||
if filereadable(logpath)
|
||||
execute 'edit' typeset.LogPath(bufname)
|
||||
execute 'edit' .. fnameescape(typeset.LogPath(bufname))
|
||||
return
|
||||
endif
|
||||
|
||||
|
||||
18
runtime/autoload/dist/ft.vim
vendored
18
runtime/autoload/dist/ft.vim
vendored
@@ -3,7 +3,7 @@ vim9script
|
||||
# Vim functions for file type detection
|
||||
#
|
||||
# Maintainer: The Vim Project <https://github.com/vim/vim>
|
||||
# Last Change: 2026 Mar 24
|
||||
# Last Change: 2026 Apr 20
|
||||
# Former Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
|
||||
# These functions are moved here from runtime/filetype.vim to make startup
|
||||
@@ -14,7 +14,13 @@ var prolog_pattern = '^\s*\(:-\|%\+\(\s\|$\)\|\/\*\)\|\.\s*$'
|
||||
def IsObjectScriptRoutine(): bool
|
||||
var line1 = getline(1)
|
||||
line1 = substitute(line1, '^\ufeff', '', '')
|
||||
return line1 =~? '^\s*routine\>\s\+[%A-Za-z][%A-Za-z0-9_.]*\%(\s*\[\|\s*;\|$\)'
|
||||
if line1 =~? '^\s*routine\>'
|
||||
return true
|
||||
endif
|
||||
if line1 =~? '\<iris\>'
|
||||
return true
|
||||
endif
|
||||
return join(getline(1, 3), '') =~# '%RO'
|
||||
enddef
|
||||
|
||||
export def Check_inp()
|
||||
@@ -909,7 +915,7 @@ export def FTinc()
|
||||
elseif line =~ '^\s*\%({\|(\*\)' || line =~? ft_pascal_keywords
|
||||
setf pascal
|
||||
return
|
||||
elseif line =~# '\<\%(require\|inherit\)\>' || line =~# '[A-Z][A-Za-z0-9_:${}/]*\s\+\%(??\|[?:+.]\)\?=.\? '
|
||||
elseif line =~# '\<\%(require\|inherit\)\>' || line =~# '[A-Z][A-Za-z0-9_:${}/]*\(\[[A-Za-z0-9_:/]\+\]\)*\s\+\%(??\|[?:+.]\)\?=.\? '
|
||||
setf bitbake
|
||||
return
|
||||
endif
|
||||
@@ -2669,6 +2675,8 @@ const ft_from_ext = {
|
||||
"rst": "rst",
|
||||
# RTF
|
||||
"rtf": "rtf",
|
||||
# ObjectScript Routine
|
||||
"rtn": "objectscript_routine",
|
||||
# Ruby
|
||||
"rb": "ruby",
|
||||
"rbw": "ruby",
|
||||
@@ -3105,7 +3113,9 @@ const ft_from_ext = {
|
||||
"bp": "bp",
|
||||
# Tiltfile
|
||||
"Tiltfile": "tiltfile",
|
||||
"tiltfile": "tiltfile"
|
||||
"tiltfile": "tiltfile",
|
||||
# Ghostty
|
||||
"ghostty": "ghostty",
|
||||
}
|
||||
# Key: file name (the final path component, excluding the drive and root)
|
||||
# Value: filetype
|
||||
|
||||
4
runtime/autoload/dist/script.vim
vendored
4
runtime/autoload/dist/script.vim
vendored
@@ -4,7 +4,7 @@ vim9script
|
||||
# Invoked from "scripts.vim" in 'runtimepath'
|
||||
#
|
||||
# Maintainer: The Vim Project <https://github.com/vim/vim>
|
||||
# Last Change: 2025 Dec 22
|
||||
# Last Change: 2026 Apr 09
|
||||
# Former Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
|
||||
export def DetectFiletype()
|
||||
@@ -115,7 +115,7 @@ export def Exe2filetype(name: string, line1: string): string
|
||||
return 'php'
|
||||
|
||||
# Python
|
||||
elseif name =~ 'python'
|
||||
elseif name =~ 'python' || (name == 'uv' && line1 =~ '\<uv run\>')
|
||||
return 'python'
|
||||
|
||||
# Groovy
|
||||
|
||||
8
runtime/autoload/dist/vim9.vim
vendored
8
runtime/autoload/dist/vim9.vim
vendored
@@ -3,7 +3,7 @@ vim9script
|
||||
# Vim runtime support library
|
||||
#
|
||||
# Maintainer: The Vim Project <https://github.com/vim/vim>
|
||||
# Last Change: 2026 Mar 10
|
||||
# Last Change: 2026 Apr 17
|
||||
|
||||
export def IsSafeExecutable(filetype: string, executable: string): bool
|
||||
if empty(exepath(executable))
|
||||
@@ -62,7 +62,7 @@ if has('unix')
|
||||
export def Launch(args: string)
|
||||
# Use job_start, because using !xdg-open is known not to work with zsh
|
||||
# ignore signals on exit
|
||||
job_start(split(args), {'stoponexit': ''})
|
||||
job_start(['sh', '-c', args], {'stoponexit': '', 'in_io': 'null', 'out_io': 'null', 'err_io': 'null'})
|
||||
enddef
|
||||
endif
|
||||
elseif has('win32')
|
||||
@@ -140,10 +140,8 @@ export def Open(file: string)
|
||||
defer setbufvar('%', '&shell', shell)
|
||||
endif
|
||||
if has('unix') && !has('win32unix') && !exists('$WSL_DISTRO_NAME')
|
||||
# Linux: using job_start, so do not use shellescape.
|
||||
Launch($"{Viewer()} {file}")
|
||||
Launch($"{Viewer()} {shellescape(file)}")
|
||||
else
|
||||
# Windows/WSL/Cygwin: NEEDS shellescape because Launch uses '!'
|
||||
Launch($"{Viewer()} {shellescape(file, 1)}")
|
||||
endif
|
||||
enddef
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
" Vim autoload file for editing compressed files.
|
||||
" Maintainer: The Vim Project <https://github.com/vim/vim>
|
||||
" Last Change: 2024 Nov 25
|
||||
" Last Change: 2026 Apr 26
|
||||
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
|
||||
" These functions are used by the gzip plugin.
|
||||
@@ -82,13 +82,8 @@ fun gzip#read(cmd)
|
||||
let empty = line("'[") == 1 && line("']") == line("$")
|
||||
let tmp = tempname()
|
||||
let tmpe = tmp . "." . expand("<afile>:e")
|
||||
if exists('*fnameescape')
|
||||
let tmp_esc = fnameescape(tmp)
|
||||
let tmpe_esc = fnameescape(tmpe)
|
||||
else
|
||||
let tmp_esc = escape(tmp, ' ')
|
||||
let tmpe_esc = escape(tmpe, ' ')
|
||||
endif
|
||||
let tmp_esc = fnameescape(tmp)
|
||||
let tmpe_esc = fnameescape(tmpe)
|
||||
" write the just read lines to a temp file "'[,']w tmp.gz"
|
||||
execute "silent '[,']w " . tmpe_esc
|
||||
" uncompress the temp file: call system("gzip -dn tmp.gz")
|
||||
@@ -101,22 +96,14 @@ fun gzip#read(cmd)
|
||||
let ok = 1
|
||||
" delete the compressed lines; remember the line number
|
||||
let l = line("'[") - 1
|
||||
if exists(":lockmarks")
|
||||
lockmarks '[,']d _
|
||||
else
|
||||
'[,']d _
|
||||
endif
|
||||
lockmarks '[,']d _
|
||||
" read in the uncompressed lines "'[-1r tmp"
|
||||
" Use ++edit if the buffer was empty, keep the 'ff' and 'fenc' options.
|
||||
setlocal nobin
|
||||
if exists(":lockmarks")
|
||||
if empty
|
||||
execute "silent lockmarks " . l . "r ++edit " . tmp_esc
|
||||
else
|
||||
execute "silent lockmarks " . l . "r " . tmp_esc
|
||||
endif
|
||||
if empty
|
||||
execute "silent lockmarks " . l . "r ++edit " . tmp_esc
|
||||
else
|
||||
execute "silent " . l . "r " . tmp_esc
|
||||
execute "silent lockmarks " . l . "r " . tmp_esc
|
||||
endif
|
||||
|
||||
" if buffer became empty, delete trailing blank line
|
||||
@@ -143,11 +130,7 @@ fun gzip#read(cmd)
|
||||
|
||||
" When uncompressed the whole buffer, do autocommands
|
||||
if ok && empty
|
||||
if exists('*fnameescape')
|
||||
let fname = fnameescape(expand("%:r"))
|
||||
else
|
||||
let fname = escape(expand("%:r"), " \t\n*?[{`$\\%#'\"|!<")
|
||||
endif
|
||||
let fname = fnameescape(expand("%:r"))
|
||||
if filereadable(undofile(expand("%")))
|
||||
exe "sil rundo " . fnameescape(undofile(expand("%")))
|
||||
endif
|
||||
@@ -191,8 +174,9 @@ fun gzip#appre(cmd)
|
||||
call s:set_compression(readfile(nm, "b", 1)[0])
|
||||
endif
|
||||
|
||||
" Rename to a weird name to avoid the risk of overwriting another file
|
||||
let nmt = expand("<afile>:p:h") . "/X~=@l9q5"
|
||||
" Rename to a unique name to avoid the risk of overwriting another file
|
||||
" or being targeted by a symlink in a shared directory.
|
||||
let nmt = s:samedir_tempname(nm)
|
||||
let nmte = nmt . "." . expand("<afile>:e")
|
||||
if rename(nm, nmte) == 0
|
||||
if &patchmode != "" && getfsize(nm . &patchmode) == -1
|
||||
@@ -208,22 +192,27 @@ fun gzip#appre(cmd)
|
||||
endfun
|
||||
|
||||
" find a file name for the file to be compressed. Use "name" without an
|
||||
" extension if possible. Otherwise use a weird name to avoid overwriting an
|
||||
" existing file.
|
||||
" extension if possible. Otherwise use a unique name to avoid overwriting an
|
||||
" existing file or following a symlink set up by another user.
|
||||
fun s:tempname(name)
|
||||
let fn = fnamemodify(a:name, ":r")
|
||||
if !filereadable(fn) && !isdirectory(fn)
|
||||
return fn
|
||||
endif
|
||||
return fnamemodify(a:name, ":p:h") . "/X~=@l9q5"
|
||||
return s:samedir_tempname(a:name)
|
||||
endfun
|
||||
|
||||
" Generate an unpredictable file name in the same directory as "name", using
|
||||
" the random component of tempname() to avoid symlink attacks in shared
|
||||
" directories (e.g. /tmp).
|
||||
fun s:samedir_tempname(name)
|
||||
let tmp = tempname()
|
||||
return fnamemodify(a:name, ":p:h") . "/" . fnamemodify(tmp, ":h:t") . fnamemodify(tmp, ":t")
|
||||
endfun
|
||||
|
||||
fun s:escape(name)
|
||||
" shellescape() was added by patch 7.0.111
|
||||
if exists("*shellescape")
|
||||
return shellescape(a:name)
|
||||
endif
|
||||
return "'" . a:name . "'"
|
||||
return shellescape(a:name)
|
||||
endfun
|
||||
|
||||
" vim: set sw=2 :
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
" Last Change:
|
||||
" 2025 Oct 27 by Vim project: don't use rustfmt as 'formatprg' by default
|
||||
" 2026 Jan 25 by Vim project: don't hide rustfmt errors, restore default var
|
||||
"
|
||||
" 2026 Mar 30 by Vim project: use fnameescape for :chdir commands
|
||||
"
|
||||
" Adapted from https://github.com/fatih/vim-go
|
||||
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
|
||||
@@ -135,7 +135,7 @@ function! s:RunRustfmt(command, tmpname, from_writepre)
|
||||
" chdir to the directory of the file
|
||||
let l:has_lcd = haslocaldir()
|
||||
let l:prev_cd = getcwd()
|
||||
execute 'lchdir! '.expand('%:h')
|
||||
execute 'lchdir! ' . fnameescape(expand('%:h'))
|
||||
|
||||
let l:buffer = getline(1, '$')
|
||||
if exists("*systemlist")
|
||||
@@ -215,6 +215,7 @@ function! s:RunRustfmt(command, tmpname, from_writepre)
|
||||
endif
|
||||
|
||||
" Restore the current directory if needed
|
||||
let l:prev_cd = fnameescape(l:prev_cd)
|
||||
if a:tmpname ==# ''
|
||||
if l:has_lcd
|
||||
execute 'lchdir! '.l:prev_cd
|
||||
|
||||
@@ -20,6 +20,11 @@
|
||||
" 2025 Jul 16 by Vim Project: update minimum vim version
|
||||
" 2026 Feb 06 by Vim Project: consider 'nowrapscan' (#19333)
|
||||
" 2026 Feb 07 by Vim Project: make the path traversal detection more robust (#19341)
|
||||
" 2026 Apr 06 by Vim Project: fix bugs with lz4 support (#19925)
|
||||
" 2026 Apr 09 by Vim Project: fix bugs with zstd support (#19930)
|
||||
" 2026 Apr 09 by Vim Project: fix bug with dotted filename (#19930)
|
||||
" 2026 Apr 15 by Vim Project: fix more path traversal issues (#19981)
|
||||
" 2026 Apr 16 by Vim Project: use g:tar_secure in tar#Extract()
|
||||
"
|
||||
" Contains many ideas from Michael Toren's <tar.vim>
|
||||
"
|
||||
@@ -609,114 +614,139 @@ fun! tar#Extract()
|
||||
let &report= repkeep
|
||||
return
|
||||
endif
|
||||
|
||||
let tarball = expand("%")
|
||||
let tarbase = substitute(tarball,'\..*$','','')
|
||||
if fname =~ '^[.]\?[.]/' || simplify(fname) =~ '\.\.[/\\]'
|
||||
call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!")
|
||||
let &report= repkeep
|
||||
return
|
||||
endif
|
||||
if has("unix")
|
||||
if fname =~ '^/'
|
||||
call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!")
|
||||
let &report= repkeep
|
||||
return
|
||||
endif
|
||||
else
|
||||
if fname =~ '^\%(\a:[\\/]\|[\\/]\)'
|
||||
call s:Msg('tar#Extract', 'error', "Path Traversal Attack detected, not extracting!")
|
||||
let &report= repkeep
|
||||
return
|
||||
endif
|
||||
endif
|
||||
|
||||
let extractcmd= s:WinPath(g:tar_extractcmd)
|
||||
if filereadable(tarbase.".tar")
|
||||
call system(extractcmd." ".shellescape(tarbase).".tar ".shellescape(fname))
|
||||
let tarball = expand("%")
|
||||
if !filereadable(tarball)
|
||||
let &report= repkeep
|
||||
return
|
||||
endif
|
||||
|
||||
if tarball =~# "\.tar$"
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ". fname
|
||||
endif
|
||||
|
||||
elseif filereadable(tarbase.".tgz")
|
||||
elseif tarball =~# "\.tgz$"
|
||||
let extractcmd= substitute(extractcmd,"-","-z","")
|
||||
call system(extractcmd." ".shellescape(tarbase).".tgz ".shellescape(fname))
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tgz {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ".fname
|
||||
endif
|
||||
|
||||
elseif filereadable(tarbase.".tar.gz")
|
||||
elseif tarball =~# "\.tar\.gz$"
|
||||
let extractcmd= substitute(extractcmd,"-","-z","")
|
||||
call system(extractcmd." ".shellescape(tarbase).".tar.gz ".shellescape(fname))
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.gz {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ".fname
|
||||
endif
|
||||
|
||||
elseif filereadable(tarbase.".tbz")
|
||||
elseif tarball =~# "\.tbz$"
|
||||
let extractcmd= substitute(extractcmd,"-","-j","")
|
||||
call system(extractcmd." ".shellescape(tarbase).".tbz ".shellescape(fname))
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tbz {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ".fname
|
||||
endif
|
||||
|
||||
elseif filereadable(tarbase.".tar.bz2")
|
||||
elseif tarball =~# "\.tar\.bz2$"
|
||||
let extractcmd= substitute(extractcmd,"-","-j","")
|
||||
call system(extractcmd." ".shellescape(tarbase).".tar.bz2 ".shellescape(fname))
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.bz2 {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ".fname
|
||||
endif
|
||||
|
||||
elseif filereadable(tarbase.".tar.bz3")
|
||||
elseif tarball =~# "\.tar\.bz3$"
|
||||
let extractcmd= substitute(extractcmd,"-","-j","")
|
||||
call system(extractcmd." ".shellescape(tarbase).".tar.bz3 ".shellescape(fname))
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.bz3 {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ".fname
|
||||
endif
|
||||
|
||||
elseif filereadable(tarbase.".txz")
|
||||
elseif tarball =~# "\.txz$"
|
||||
let extractcmd= substitute(extractcmd,"-","-J","")
|
||||
call system(extractcmd." ".shellescape(tarbase).".txz ".shellescape(fname))
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.txz {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ".fname
|
||||
endif
|
||||
|
||||
elseif filereadable(tarbase.".tar.xz")
|
||||
elseif tarball =~# "\.tar\.xz$"
|
||||
let extractcmd= substitute(extractcmd,"-","-J","")
|
||||
call system(extractcmd." ".shellescape(tarbase).".tar.xz ".shellescape(fname))
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.xz {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ".fname
|
||||
endif
|
||||
|
||||
elseif filereadable(tarbase.".tzst")
|
||||
let extractcmd= substitute(extractcmd,"-","--zstd","")
|
||||
call system(extractcmd." ".shellescape(tarbase).".tzst ".shellescape(fname))
|
||||
elseif tarball =~# "\.tzst$"
|
||||
let extractcmd= substitute(extractcmd,"-","--zstd -","")
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tzst {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ".fname
|
||||
endif
|
||||
|
||||
elseif filereadable(tarbase.".tar.zst")
|
||||
let extractcmd= substitute(extractcmd,"-","--zstd","")
|
||||
call system(extractcmd." ".shellescape(tarbase).".tar.zst ".shellescape(fname))
|
||||
elseif tarball =~# "\.tar\.zst$"
|
||||
let extractcmd= substitute(extractcmd,"-","--zstd -","")
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.zst {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ".fname
|
||||
endif
|
||||
|
||||
elseif filereadable(tarbase.".tlz4")
|
||||
let extractcmd= substitute(extractcmd,"-","-I lz4","")
|
||||
call system(extractcmd." ".shellescape(tarbase).".tlz4 ".shellescape(fname))
|
||||
elseif tarball =~# "\.tlz4$"
|
||||
if has("linux")
|
||||
let extractcmd= substitute(extractcmd,"-","-I lz4 -","")
|
||||
endif
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tlz4 {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ".fname
|
||||
endif
|
||||
|
||||
elseif filereadable(tarbase.".tar.lz4")
|
||||
let extractcmd= substitute(extractcmd,"-","-I lz4","")
|
||||
call system(extractcmd." ".shellescape(tarbase).".tar.lz4".shellescape(fname))
|
||||
elseif tarball =~# "\.tar\.lz4$"
|
||||
if has("linux")
|
||||
let extractcmd= substitute(extractcmd,"-","-I lz4 -","")
|
||||
endif
|
||||
call system(extractcmd." ".shellescape(tarball)." ".g:tar_secure.shellescape(fname))
|
||||
if v:shell_error != 0
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarbase}.tar.lz4 {fname}: failed!")
|
||||
call s:Msg('tar#Extract', 'error', $"{extractcmd} {tarball} {fname}: failed!")
|
||||
else
|
||||
echo "***note*** successfully extracted ".fname
|
||||
endif
|
||||
|
||||
@@ -3,6 +3,8 @@ vim9script
|
||||
# Language: Generic TeX typesetting engine
|
||||
# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
|
||||
# Latest Revision: 2026 Feb 19
|
||||
# Last Change:
|
||||
# 2026 Mar 30 by Vim project: Use fnameescape for the ProcessOutput command
|
||||
|
||||
# Constants and helpers {{{
|
||||
const SLASH = !exists("+shellslash") || &shellslash ? '/' : '\'
|
||||
@@ -60,7 +62,7 @@ def ProcessOutput(qfid: number, wd: string, efm: string, ch: channel, msg: strin
|
||||
endif
|
||||
|
||||
# Make sure the working directory is correct
|
||||
silent execute "lcd" wd
|
||||
silent execute "lcd" .. fnameescape(wd)
|
||||
setqflist([], 'a', {'id': qfid, 'lines': [msg], 'efm': efm})
|
||||
silent lcd -
|
||||
enddef
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
" vimball.vim : construct a file containing both paths and files
|
||||
" Maintainer: This runtime file is looking for a new maintainer.
|
||||
" Original Author: Charles E. Campbell
|
||||
" Date: Apr 11, 2016
|
||||
" Date: Apr 16, 2026
|
||||
" Version: 37 (with modifications from the Vim Project)
|
||||
" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
|
||||
" Last Change:
|
||||
" 2025 Feb 28 by Vim Project: add support for bzip3 (#16755)
|
||||
" Copyright: (c) 2004-2011 by Charles E. Campbell
|
||||
" The VIM LICENSE applies to Vimball.vim, and Vimball.txt
|
||||
" (see |copyright|) except use "Vimball" instead of "Vim".
|
||||
@@ -18,15 +17,14 @@ if &cp || exists("g:loaded_vimball")
|
||||
finish
|
||||
endif
|
||||
let g:loaded_vimball = "v37"
|
||||
if v:version < 702
|
||||
if v:version < 704
|
||||
echohl WarningMsg
|
||||
echo "***warning*** this version of vimball needs vim 7.2"
|
||||
echo "***warning*** this version of vimball needs vim 7.4"
|
||||
echohl Normal
|
||||
finish
|
||||
endif
|
||||
let s:keepcpo= &cpo
|
||||
set cpo&vim
|
||||
"DechoTabOn
|
||||
|
||||
" =====================================================================
|
||||
" Constants: {{{1
|
||||
@@ -47,20 +45,6 @@ if !exists("s:USAGE")
|
||||
let g:netrw_cygwin= 0
|
||||
endif
|
||||
endif
|
||||
|
||||
" set up g:vimball_mkdir if the mkdir() call isn't defined
|
||||
if !exists("*mkdir")
|
||||
if exists("g:netrw_local_mkdir")
|
||||
let g:vimball_mkdir= g:netrw_local_mkdir
|
||||
elseif executable("mkdir")
|
||||
let g:vimball_mkdir= "mkdir"
|
||||
elseif executable("makedir")
|
||||
let g:vimball_mkdir= "makedir"
|
||||
endif
|
||||
if !exists(g:vimball_mkdir)
|
||||
call vimball#ShowMesg(s:WARNING,"(vimball) g:vimball_mkdir undefined")
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
" =====================================================================
|
||||
@@ -81,7 +65,6 @@ endif
|
||||
" filesize
|
||||
" [file]
|
||||
fun! vimball#MkVimball(line1,line2,writelevel,...) range
|
||||
" call Dfunc("MkVimball(line1=".a:line1." line2=".a:line2." writelevel=".a:writelevel." vimballname<".a:1.">) a:0=".a:0)
|
||||
if a:1 =~ '\.vim$' || a:1 =~ '\.txt$'
|
||||
let vbname= substitute(a:1,'\.\a\{3}$','.vmb','')
|
||||
else
|
||||
@@ -90,15 +73,12 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
|
||||
if vbname !~ '\.vmb$'
|
||||
let vbname= vbname.'.vmb'
|
||||
endif
|
||||
" call Decho("vbname<".vbname.">")
|
||||
if !a:writelevel && a:1 =~ '[\/]'
|
||||
call vimball#ShowMesg(s:ERROR,"(MkVimball) vimball name<".a:1."> should not include slashes; use ! to insist")
|
||||
" call Dret("MkVimball : vimball name<".a:1."> should not include slashes")
|
||||
return
|
||||
endif
|
||||
if !a:writelevel && filereadable(vbname)
|
||||
call vimball#ShowMesg(s:ERROR,"(MkVimball) file<".vbname."> exists; use ! to insist")
|
||||
" call Dret("MkVimball : file<".vbname."> already exists; use ! to insist")
|
||||
return
|
||||
endif
|
||||
|
||||
@@ -120,17 +100,14 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
|
||||
" record current tab, initialize while loop index
|
||||
let curtabnr = tabpagenr()
|
||||
let linenr = a:line1
|
||||
" call Decho("curtabnr=".curtabnr)
|
||||
|
||||
while linenr <= a:line2
|
||||
let svfile = getline(linenr)
|
||||
" call Decho("svfile<".svfile.">")
|
||||
|
||||
if !filereadable(svfile)
|
||||
call vimball#ShowMesg(s:ERROR,"unable to read file<".svfile.">")
|
||||
call s:ChgDir(curdir)
|
||||
call vimball#RestoreSettings()
|
||||
" call Dret("MkVimball")
|
||||
call s:ChgDir(curdir)
|
||||
call vimball#RestoreSettings()
|
||||
return
|
||||
endif
|
||||
|
||||
@@ -145,20 +122,18 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
|
||||
|
||||
let lastline= line("$") + 1
|
||||
if lastline == 2 && getline("$") == ""
|
||||
call setline(1,'" Vimball Archiver by Charles E. Campbell')
|
||||
call setline(2,'UseVimball')
|
||||
call setline(3,'finish')
|
||||
let lastline= line("$") + 1
|
||||
call setline(1,'" Vimball Archiver by Charles E. Campbell')
|
||||
call setline(2,'UseVimball')
|
||||
call setline(3,'finish')
|
||||
let lastline= line("$") + 1
|
||||
endif
|
||||
call setline(lastline ,substitute(svfile,'$',' [[[1',''))
|
||||
call setline(lastline+1,0)
|
||||
|
||||
" write the file from the tab
|
||||
" call Decho("exe $r ".fnameescape(svfile))
|
||||
exe "$r ".fnameescape(svfile)
|
||||
|
||||
call setline(lastline+1,line("$") - lastline - 1)
|
||||
" call Decho("lastline=".lastline." line$=".line("$"))
|
||||
|
||||
" restore to normal tab
|
||||
exe "tabn ".curtabnr
|
||||
@@ -170,13 +145,10 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
|
||||
call s:ChgDir(curdir)
|
||||
setlocal ff=unix
|
||||
if a:writelevel
|
||||
" call Decho("exe w! ".fnameescape(vbname))
|
||||
exe "w! ".fnameescape(vbname)
|
||||
else
|
||||
" call Decho("exe w ".fnameescape(vbname))
|
||||
exe "w ".fnameescape(vbname)
|
||||
endif
|
||||
" call Decho("Vimball<".vbname."> created")
|
||||
echo "Vimball<".vbname."> created"
|
||||
|
||||
" remove the evidence
|
||||
@@ -187,7 +159,6 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
|
||||
" restore options
|
||||
call vimball#RestoreSettings()
|
||||
|
||||
" call Dret("MkVimball")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
@@ -195,17 +166,9 @@ endfun
|
||||
" (invoked the the UseVimball command embedded in
|
||||
" vimballs' prologue)
|
||||
fun! vimball#Vimball(really,...)
|
||||
" call Dfunc("vimball#Vimball(really=".a:really.") a:0=".a:0)
|
||||
|
||||
if v:version < 701 || (v:version == 701 && !exists('*fnameescape'))
|
||||
echoerr "your vim is missing the fnameescape() function (pls upgrade to vim 7.2 or later)"
|
||||
" call Dret("vimball#Vimball : needs 7.1 with patch 299 or later")
|
||||
return
|
||||
endif
|
||||
|
||||
if getline(1) !~ '^" Vimball Archiver'
|
||||
echoerr "(Vimball) The current file does not appear to be a Vimball!"
|
||||
" call Dret("vimball#Vimball")
|
||||
return
|
||||
endif
|
||||
|
||||
@@ -215,7 +178,6 @@ fun! vimball#Vimball(really,...)
|
||||
let vimballfile = expand("%:tr")
|
||||
|
||||
" set up vimball tab
|
||||
" call Decho("setting up vimball tab")
|
||||
tabnew
|
||||
sil! file Vimball
|
||||
let vbtabnr= tabpagenr()
|
||||
@@ -227,21 +189,18 @@ fun! vimball#Vimball(really,...)
|
||||
" If, however, the user did not specify a full path, set the home to be below the current directory
|
||||
let home= expand(a:1)
|
||||
if has("win32") || has("win95") || has("win64") || has("win16")
|
||||
if home !~ '^\a:[/\\]'
|
||||
let home= getcwd().'/'.a:1
|
||||
endif
|
||||
if home !~ '^\a:[/\\]'
|
||||
let home= getcwd().'/'.a:1
|
||||
endif
|
||||
elseif home !~ '^/'
|
||||
let home= getcwd().'/'.a:1
|
||||
let home= getcwd().'/'.a:1
|
||||
endif
|
||||
else
|
||||
let home= vimball#VimballHome()
|
||||
endif
|
||||
" call Decho("home<".home.">")
|
||||
|
||||
" save current directory and remove older same-named vimball, if any
|
||||
let curdir = getcwd()
|
||||
" call Decho("home<".home.">")
|
||||
" call Decho("curdir<".curdir.">")
|
||||
|
||||
call s:ChgDir(home)
|
||||
let s:ok_unablefind= 1
|
||||
@@ -260,56 +219,52 @@ fun! vimball#Vimball(really,...)
|
||||
endif
|
||||
|
||||
" apportion vimball contents to various files
|
||||
" call Decho("exe tabn ".curtabnr)
|
||||
exe "tabn ".curtabnr
|
||||
" call Decho("linenr=".linenr." line$=".line("$"))
|
||||
while 1 < linenr && linenr < line("$")
|
||||
let fname = substitute(getline(linenr),'\t\[\[\[1$','','')
|
||||
let fname = substitute(fname,'\\','/','g')
|
||||
let fname = resolve(simplify(fname))
|
||||
let fsize = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
|
||||
let fenc = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','')
|
||||
let filecnt = filecnt + 1
|
||||
" call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt. " fenc=".fenc)
|
||||
" Do not allow a leading /, .. anywhere, or a Windows drive letter
|
||||
" (e.g. C:/foo) in the file name. Backslashes were already converted
|
||||
" to forward slashes above, so this also catches \\server\share UNC
|
||||
" paths via the leading-slash check.
|
||||
if fname =~ '\.\.' || fname =~ '^/' || fname =~ '^\a:'
|
||||
echomsg "(Vimball) Path Traversal Attack detected, aborting..."
|
||||
exe "tabn ".curtabnr
|
||||
bw! Vimball
|
||||
call s:ChgDir(curdir)
|
||||
return
|
||||
endif
|
||||
|
||||
if a:really
|
||||
echomsg "extracted <".fname.">: ".fsize." lines"
|
||||
else
|
||||
echomsg "would extract <".fname.">: ".fsize." lines"
|
||||
endif
|
||||
" call Decho("using L#".linenr.": will extract file<".fname.">")
|
||||
" call Decho("using L#".(linenr+1).": fsize=".fsize)
|
||||
|
||||
" Allow AsNeeded/ directory to take place of plugin/ directory
|
||||
" when AsNeeded/filename is filereadable or was present in VimballRecord
|
||||
if fname =~ '\<plugin/'
|
||||
let anfname= substitute(fname,'\<plugin/','AsNeeded/','')
|
||||
if filereadable(anfname) || (exists("s:VBRstring") && s:VBRstring =~# anfname)
|
||||
" call Decho("using anfname<".anfname."> instead of <".fname.">")
|
||||
let fname= anfname
|
||||
endif
|
||||
let anfname= substitute(fname,'\<plugin/','AsNeeded/','')
|
||||
if filereadable(anfname) || (exists("s:VBRstring") && s:VBRstring =~# anfname)
|
||||
let fname= anfname
|
||||
endif
|
||||
endif
|
||||
|
||||
" make directories if they don't exist yet
|
||||
if a:really
|
||||
" call Decho("making directories if they don't exist yet (fname<".fname.">)")
|
||||
let fnamebuf= substitute(fname,'\\','/','g')
|
||||
let dirpath = substitute(home,'\\','/','g')
|
||||
" call Decho("init: fnamebuf<".fnamebuf.">")
|
||||
" call Decho("init: dirpath <".dirpath.">")
|
||||
let dirpath = substitute(home,'\\','/','g')
|
||||
while fnamebuf =~ '/'
|
||||
let dirname = dirpath."/".substitute(fnamebuf,'/.*$','','')
|
||||
let dirpath = dirname
|
||||
let dirpath = dirname
|
||||
let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','')
|
||||
" call Decho("dirname<".dirname.">")
|
||||
" call Decho("dirpath<".dirpath.">")
|
||||
if !isdirectory(dirname)
|
||||
" call Decho("making <".dirname.">")
|
||||
if exists("g:vimball_mkdir")
|
||||
call system(g:vimball_mkdir." ".shellescape(dirname))
|
||||
else
|
||||
call mkdir(dirname)
|
||||
endif
|
||||
call s:RecordInVar(home,"rmdir('".dirname."')")
|
||||
call mkdir(dirname)
|
||||
call s:RecordInVar(home,"rmdir('".dirname."')")
|
||||
endif
|
||||
endwhile
|
||||
endif
|
||||
@@ -319,13 +274,11 @@ fun! vimball#Vimball(really,...)
|
||||
" (skip over path/filename and qty-lines)
|
||||
let linenr = linenr + 2
|
||||
let lastline = linenr + fsize - 1
|
||||
" call Decho("exe ".linenr.",".lastline."yank a")
|
||||
" no point in handling a zero-length file
|
||||
if lastline >= linenr
|
||||
exe "silent ".linenr.",".lastline."yank a"
|
||||
|
||||
" copy "a" buffer into tab
|
||||
" call Decho('copy "a buffer into tab#'.vbtabnr)
|
||||
exe "tabn ".vbtabnr
|
||||
setlocal ma
|
||||
sil! %d
|
||||
@@ -336,38 +289,31 @@ fun! vimball#Vimball(really,...)
|
||||
" write tab to file
|
||||
if a:really
|
||||
let fnamepath= home."/".fname
|
||||
" call Decho("exe w! ".fnameescape(fnamepath))
|
||||
if fenc != ""
|
||||
exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
|
||||
else
|
||||
exe "silent w! ".fnameescape(fnamepath)
|
||||
endif
|
||||
echo "wrote ".fnameescape(fnamepath)
|
||||
call s:RecordInVar(home,"call delete('".fnamepath."')")
|
||||
if fenc != ""
|
||||
exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
|
||||
else
|
||||
exe "silent w! ".fnameescape(fnamepath)
|
||||
endif
|
||||
echo "wrote ".fnameescape(fnamepath)
|
||||
call s:RecordInVar(home,"call delete('".fnamepath."')")
|
||||
endif
|
||||
|
||||
" return to tab with vimball
|
||||
" call Decho("exe tabn ".curtabnr)
|
||||
exe "tabn ".curtabnr
|
||||
|
||||
" set up help if it's a doc/*.txt file
|
||||
" call Decho("didhelp<".didhelp."> fname<".fname.">")
|
||||
if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
|
||||
let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
|
||||
" call Decho("didhelp<".didhelp.">")
|
||||
let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
|
||||
endif
|
||||
endif
|
||||
|
||||
" update for next file
|
||||
" call Decho("update linenr= [linenr=".linenr."] + [fsize=".fsize."] = ".(linenr+fsize))
|
||||
let linenr= linenr + fsize
|
||||
endwhile
|
||||
|
||||
" set up help
|
||||
" call Decho("about to set up help: didhelp<".didhelp.">")
|
||||
if didhelp != ""
|
||||
let htpath= home."/".didhelp
|
||||
" call Decho("exe helptags ".htpath)
|
||||
exe "helptags ".fnameescape(htpath)
|
||||
echo "did helptags"
|
||||
endif
|
||||
@@ -388,8 +334,6 @@ fun! vimball#Vimball(really,...)
|
||||
exe "sil! tabc! ".vbtabnr
|
||||
call vimball#RestoreSettings()
|
||||
call s:ChgDir(curdir)
|
||||
|
||||
" call Dret("vimball#Vimball")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
@@ -399,23 +343,18 @@ endfun
|
||||
" Usage: RmVimball (assume current file is a vimball; remove)
|
||||
" RmVimball vimballname
|
||||
fun! vimball#RmVimball(...)
|
||||
" call Dfunc("vimball#RmVimball() a:0=".a:0)
|
||||
if exists("g:vimball_norecord")
|
||||
" call Dret("vimball#RmVimball : (g:vimball_norecord)")
|
||||
return
|
||||
endif
|
||||
|
||||
if a:0 == 0
|
||||
let curfile= expand("%:tr")
|
||||
" call Decho("case a:0=0: curfile<".curfile."> (used expand(%:tr))")
|
||||
else
|
||||
if a:1 =~ '[\/]'
|
||||
call vimball#ShowMesg(s:USAGE,"RmVimball vimballname [path]")
|
||||
" call Dret("vimball#RmVimball : suspect a:1<".a:1.">")
|
||||
return
|
||||
endif
|
||||
let curfile= a:1
|
||||
" call Decho("case a:0=".a:0.": curfile<".curfile.">")
|
||||
endif
|
||||
if curfile =~ '\.vmb$'
|
||||
let curfile= substitute(curfile,'\.vmb','','')
|
||||
@@ -428,75 +367,60 @@ fun! vimball#RmVimball(...)
|
||||
let home= vimball#VimballHome()
|
||||
endif
|
||||
let curdir = getcwd()
|
||||
" call Decho("home <".home.">")
|
||||
" call Decho("curfile<".curfile.">")
|
||||
" call Decho("curdir <".curdir.">")
|
||||
|
||||
call s:ChgDir(home)
|
||||
if filereadable(".VimballRecord")
|
||||
" call Decho(".VimballRecord is readable")
|
||||
" call Decho("curfile<".curfile.">")
|
||||
keepalt keepjumps 1split
|
||||
sil! keepalt keepjumps e .VimballRecord
|
||||
let keepsrch= @/
|
||||
" call Decho('search for ^\M'.curfile.'.\m: ')
|
||||
" call Decho('search for ^\M'.curfile.'.\m{vba|vmb}: ')
|
||||
" call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.{vba|vmb}: ')
|
||||
if search('^\M'.curfile."\m: ".'cw')
|
||||
let foundit= 1
|
||||
let foundit= 1
|
||||
elseif search('^\M'.curfile.".\mvmb: ",'cw')
|
||||
let foundit= 2
|
||||
let foundit= 2
|
||||
elseif search('^\M'.curfile.'\m[-0-9.]*\.vmb: ','cw')
|
||||
let foundit= 2
|
||||
let foundit= 2
|
||||
elseif search('^\M'.curfile.".\mvba: ",'cw')
|
||||
let foundit= 1
|
||||
let foundit= 1
|
||||
elseif search('^\M'.curfile.'\m[-0-9.]*\.vba: ','cw')
|
||||
let foundit= 1
|
||||
let foundit= 1
|
||||
else
|
||||
let foundit = 0
|
||||
endif
|
||||
if foundit
|
||||
if foundit == 1
|
||||
let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
|
||||
else
|
||||
let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','')
|
||||
endif
|
||||
if foundit == 1
|
||||
let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
|
||||
else
|
||||
let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','')
|
||||
endif
|
||||
let s:VBRstring= substitute(exestring,'call delete(','','g')
|
||||
let s:VBRstring= substitute(s:VBRstring,"[')]",'','g')
|
||||
" call Decho("exe ".exestring)
|
||||
sil! keepalt keepjumps exe exestring
|
||||
sil! keepalt keepjumps d
|
||||
let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g"))
|
||||
" call Decho("exestring<".exestring.">")
|
||||
echomsg "removed ".exestring." files"
|
||||
sil! keepalt keepjumps exe exestring
|
||||
sil! keepalt keepjumps d
|
||||
let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g"))
|
||||
echomsg "removed ".exestring." files"
|
||||
else
|
||||
let s:VBRstring= ''
|
||||
let curfile = substitute(curfile,'\.vmb','','')
|
||||
" call Decho("unable to find <".curfile."> in .VimballRecord")
|
||||
if !exists("s:ok_unablefind")
|
||||
let curfile = substitute(curfile,'\.vmb','','')
|
||||
if !exists("s:ok_unablefind")
|
||||
call vimball#ShowMesg(s:WARNING,"(RmVimball) unable to find <".curfile."> in .VimballRecord")
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
sil! keepalt keepjumps g/^\s*$/d
|
||||
sil! keepalt keepjumps wq!
|
||||
let @/= keepsrch
|
||||
endif
|
||||
call s:ChgDir(curdir)
|
||||
|
||||
" call Dret("vimball#RmVimball")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" vimball#Decompress: attempts to automatically decompress vimballs {{{2
|
||||
fun! vimball#Decompress(fname,...)
|
||||
" call Dfunc("Decompress(fname<".a:fname.">) a:0=".a:0)
|
||||
|
||||
" decompression:
|
||||
if expand("%") =~ '.*\.gz' && executable("gunzip")
|
||||
" handle *.gz with gunzip
|
||||
silent exe "!gunzip ".shellescape(a:fname)
|
||||
if v:shell_error != 0
|
||||
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">")
|
||||
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">")
|
||||
endif
|
||||
let fname= substitute(a:fname,'\.gz$','','')
|
||||
exe "e ".escape(fname,' \')
|
||||
@@ -506,7 +430,7 @@ fun! vimball#Decompress(fname,...)
|
||||
" handle *.gz with gzip -d
|
||||
silent exe "!gzip -d ".shellescape(a:fname)
|
||||
if v:shell_error != 0
|
||||
call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">")
|
||||
call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">")
|
||||
endif
|
||||
let fname= substitute(a:fname,'\.gz$','','')
|
||||
exe "e ".escape(fname,' \')
|
||||
@@ -516,7 +440,7 @@ fun! vimball#Decompress(fname,...)
|
||||
" handle *.bz2 with bunzip2
|
||||
silent exe "!bunzip2 ".shellescape(a:fname)
|
||||
if v:shell_error != 0
|
||||
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">")
|
||||
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">")
|
||||
endif
|
||||
let fname= substitute(a:fname,'\.bz2$','','')
|
||||
exe "e ".escape(fname,' \')
|
||||
@@ -526,7 +450,7 @@ fun! vimball#Decompress(fname,...)
|
||||
" handle *.bz2 with bzip2 -d
|
||||
silent exe "!bzip2 -d ".shellescape(a:fname)
|
||||
if v:shell_error != 0
|
||||
call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">")
|
||||
call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">")
|
||||
endif
|
||||
let fname= substitute(a:fname,'\.bz2$','','')
|
||||
exe "e ".escape(fname,' \')
|
||||
@@ -536,7 +460,7 @@ fun! vimball#Decompress(fname,...)
|
||||
" handle *.bz3 with bunzip3
|
||||
silent exe "!bunzip3 ".shellescape(a:fname)
|
||||
if v:shell_error != 0
|
||||
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip3 may have failed with <".a:fname.">")
|
||||
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip3 may have failed with <".a:fname.">")
|
||||
endif
|
||||
let fname= substitute(a:fname,'\.bz3$','','')
|
||||
exe "e ".escape(fname,' \')
|
||||
@@ -546,7 +470,7 @@ fun! vimball#Decompress(fname,...)
|
||||
" handle *.bz3 with bzip3 -d
|
||||
silent exe "!bzip3 -d ".shellescape(a:fname)
|
||||
if v:shell_error != 0
|
||||
call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip3 -d" may have failed with <'.a:fname.">")
|
||||
call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip3 -d" may have failed with <'.a:fname.">")
|
||||
endif
|
||||
let fname= substitute(a:fname,'\.bz3$','','')
|
||||
exe "e ".escape(fname,' \')
|
||||
@@ -556,7 +480,7 @@ fun! vimball#Decompress(fname,...)
|
||||
" handle *.zip with unzip
|
||||
silent exe "!unzip ".shellescape(a:fname)
|
||||
if v:shell_error != 0
|
||||
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">")
|
||||
call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">")
|
||||
endif
|
||||
let fname= substitute(a:fname,'\.zip$','','')
|
||||
exe "e ".escape(fname,' \')
|
||||
@@ -564,14 +488,11 @@ fun! vimball#Decompress(fname,...)
|
||||
endif
|
||||
|
||||
if a:0 == 0| setlocal noma bt=nofile fmr=[[[,]]] fdm=marker | endif
|
||||
|
||||
" call Dret("Decompress")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" vimball#ShowMesg: {{{2
|
||||
fun! vimball#ShowMesg(level,msg)
|
||||
" call Dfunc("vimball#ShowMesg(level=".a:level." msg<".a:msg.">)")
|
||||
|
||||
let rulerkeep = &ruler
|
||||
let showcmdkeep = &showcmd
|
||||
@@ -596,13 +517,10 @@ fun! vimball#ShowMesg(level,msg)
|
||||
|
||||
let &ruler = rulerkeep
|
||||
let &showcmd = showcmdkeep
|
||||
|
||||
" call Dret("vimball#ShowMesg")
|
||||
endfun
|
||||
" =====================================================================
|
||||
" s:ChgDir: change directory (in spite of Windoze) {{{2
|
||||
fun! s:ChgDir(newdir)
|
||||
" call Dfunc("ChgDir(newdir<".a:newdir.">)")
|
||||
if (has("win32") || has("win95") || has("win64") || has("win16"))
|
||||
try
|
||||
exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
|
||||
@@ -618,33 +536,22 @@ fun! s:ChgDir(newdir)
|
||||
exe 'silent cd '.fnameescape(a:newdir)
|
||||
endtry
|
||||
endif
|
||||
" call Dret("ChgDir : curdir<".getcwd().">")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" s:RecordInVar: record a un-vimball command in the .VimballRecord file {{{2
|
||||
fun! s:RecordInVar(home,cmd)
|
||||
" call Dfunc("RecordInVar(home<".a:home."> cmd<".a:cmd.">)")
|
||||
if a:cmd =~ '^rmdir'
|
||||
" if !exists("s:recorddir")
|
||||
" let s:recorddir= substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
|
||||
" else
|
||||
" let s:recorddir= s:recorddir."|".substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
|
||||
" endif
|
||||
elseif !exists("s:recordfile")
|
||||
if !exists("s:recordfile")
|
||||
let s:recordfile= a:cmd
|
||||
else
|
||||
let s:recordfile= s:recordfile."|".a:cmd
|
||||
endif
|
||||
" call Dret("RecordInVar : s:recordfile<".(exists("s:recordfile")? s:recordfile : "")."> s:recorddir<".(exists("s:recorddir")? s:recorddir : "").">")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" s:RecordInFile: {{{2
|
||||
fun! s:RecordInFile(home)
|
||||
" call Dfunc("s:RecordInFile()")
|
||||
if exists("g:vimball_norecord")
|
||||
" call Dret("s:RecordInFile : g:vimball_norecord")
|
||||
return
|
||||
endif
|
||||
|
||||
@@ -654,22 +561,19 @@ fun! s:RecordInFile(home)
|
||||
keepalt keepjumps 1split
|
||||
|
||||
let cmd= expand("%:tr").": "
|
||||
" call Decho("cmd<".cmd.">")
|
||||
|
||||
sil! keepalt keepjumps e .VimballRecord
|
||||
setlocal ma
|
||||
$
|
||||
if exists("s:recordfile") && exists("s:recorddir")
|
||||
let cmd= cmd.s:recordfile."|".s:recorddir
|
||||
let cmd= cmd.s:recordfile."|".s:recorddir
|
||||
elseif exists("s:recorddir")
|
||||
let cmd= cmd.s:recorddir
|
||||
let cmd= cmd.s:recorddir
|
||||
elseif exists("s:recordfile")
|
||||
let cmd= cmd.s:recordfile
|
||||
let cmd= cmd.s:recordfile
|
||||
else
|
||||
" call Dret("s:RecordInFile : neither recordfile nor recorddir exist")
|
||||
return
|
||||
return
|
||||
endif
|
||||
" call Decho("cmd<".cmd.">")
|
||||
|
||||
" put command into buffer, write .VimballRecord `file
|
||||
keepalt keepjumps put=cmd
|
||||
@@ -678,35 +582,28 @@ fun! s:RecordInFile(home)
|
||||
call s:ChgDir(curdir)
|
||||
|
||||
if exists("s:recorddir")
|
||||
" call Decho("unlet s:recorddir<".s:recorddir.">")
|
||||
unlet s:recorddir
|
||||
unlet s:recorddir
|
||||
endif
|
||||
if exists("s:recordfile")
|
||||
" call Decho("unlet s:recordfile<".s:recordfile.">")
|
||||
unlet s:recordfile
|
||||
unlet s:recordfile
|
||||
endif
|
||||
else
|
||||
" call Decho("s:record[file|dir] doesn't exist")
|
||||
endif
|
||||
|
||||
" call Dret("s:RecordInFile")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" vimball#VimballHome: determine/get home directory path (usually from rtp) {{{2
|
||||
fun! vimball#VimballHome()
|
||||
" call Dfunc("vimball#VimballHome()")
|
||||
if exists("g:vimball_home")
|
||||
let home= g:vimball_home
|
||||
else
|
||||
" go to vim plugin home
|
||||
for home in split(&rtp,',') + ['']
|
||||
if isdirectory(home) && filewritable(home) | break | endif
|
||||
let basehome= substitute(home,'[/\\]\.vim$','','')
|
||||
let basehome= substitute(home,'[/\\]\.vim$','','')
|
||||
if isdirectory(basehome) && filewritable(basehome)
|
||||
let home= basehome."/.vim"
|
||||
break
|
||||
endif
|
||||
let home= basehome."/.vim"
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
if home == ""
|
||||
" just pick the first directory
|
||||
@@ -717,18 +614,9 @@ fun! vimball#VimballHome()
|
||||
endif
|
||||
endif
|
||||
" insure that the home directory exists
|
||||
" call Decho("picked home<".home.">")
|
||||
if !isdirectory(home)
|
||||
if exists("g:vimball_mkdir")
|
||||
" call Decho("home<".home."> isn't a directory -- making it now with g:vimball_mkdir<".g:vimball_mkdir.">")
|
||||
" call Decho("system(".g:vimball_mkdir." ".shellescape(home).")")
|
||||
call system(g:vimball_mkdir." ".shellescape(home))
|
||||
else
|
||||
" call Decho("home<".home."> isn't a directory -- making it now with mkdir()")
|
||||
call mkdir(home)
|
||||
endif
|
||||
call mkdir(home)
|
||||
endif
|
||||
" call Dret("vimball#VimballHome <".home.">")
|
||||
return home
|
||||
endfun
|
||||
|
||||
@@ -758,13 +646,11 @@ fun! vimball#SaveSettings()
|
||||
endif
|
||||
" vimballs should be in unix format
|
||||
setlocal ff=unix
|
||||
" call Dret("SaveSettings")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" vimball#RestoreSettings: {{{2
|
||||
fun! vimball#RestoreSettings()
|
||||
" call Dfunc("RestoreSettings()")
|
||||
let @a = s:regakeep
|
||||
if exists("+acd")
|
||||
let &acd = s:acdkeep
|
||||
@@ -780,14 +666,12 @@ fun! vimball#RestoreSettings()
|
||||
let &l:ff = s:ffkeep
|
||||
if s:makeep[0] != 0
|
||||
" restore mark a
|
||||
" call Decho("restore mark-a: makeep=".string(makeep))
|
||||
call setpos("'a",s:makeep)
|
||||
endif
|
||||
if exists("+acd")
|
||||
unlet s:acdkeep
|
||||
endif
|
||||
unlet s:regakeep s:eikeep s:fenkeep s:hidkeep s:ickeep s:repkeep s:vekeep s:makeep s:lzkeep s:pmkeep s:ffkeep
|
||||
" call Dret("RestoreSettings")
|
||||
endfun
|
||||
|
||||
let &cpo = s:keepcpo
|
||||
@@ -795,4 +679,4 @@ unlet s:keepcpo
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" Modelines: {{{1
|
||||
" vim: fdm=marker
|
||||
" vim: fdm=marker et
|
||||
|
||||
@@ -5,7 +5,7 @@ vim9script
|
||||
# Shane-XB-Qian
|
||||
# Andrew Radev
|
||||
# thinca
|
||||
# Last Change: 2026 Feb 10
|
||||
# Last Change: 2026 Mar 30
|
||||
#
|
||||
# Vim script to handle jumping to the targets of several types of Vim commands
|
||||
# (:import, :packadd, :runtime, :colorscheme), and to autoloaded functions of
|
||||
@@ -168,7 +168,7 @@ def HandleImportLine(editcmd: string, curline: string) #{{{2
|
||||
"\<C-W>F": 'split',
|
||||
"\<C-W>gF": 'tab split',
|
||||
}[editcmd]
|
||||
execute how_to_split .. ' ' .. filepath
|
||||
execute how_to_split .. ' ' .. fnameescape(filepath)
|
||||
enddef
|
||||
|
||||
def Open(target: any, editcmd: string, search_pattern: string = '') #{{{2
|
||||
@@ -193,7 +193,7 @@ def Open(target: any, editcmd: string, search_pattern: string = '') #{{{2
|
||||
cmd = $'+silent\ call\ search(''{escaped_pattern}'')'
|
||||
endif
|
||||
|
||||
execute $'{split} {cmd} {fname}'
|
||||
execute $'{split} {cmd} {fnameescape(fname)}'
|
||||
|
||||
# If there are several files to open, put them into an arglist.
|
||||
if target->typename() == 'list<string>'
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
" 2025 Dec 20 by Vim Project: use :lcd instead of :cd
|
||||
" 2026 Feb 08 by Vim Project: use system() instead of :!
|
||||
" 2026 Mar 08 by Vim Project: Make ZipUpdatePS() check for powershell
|
||||
" 2026 Apr 01 by Vim Project: Detect more path traversal attacks
|
||||
" 2026 Apr 05 by Vim Project: Detect more path traversal attacks
|
||||
" 2026 Apr 14 by Vim Project: Detect more path traversal attacks on Windows
|
||||
" 2026 Apr 15 by Vim Project: Detect more path traversal attacks on Windows
|
||||
" 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,
|
||||
@@ -367,6 +371,11 @@ fun! zip#Write(fname)
|
||||
return
|
||||
endif
|
||||
|
||||
if simplify(a:fname) =~ '\.\.[/\\]'
|
||||
call s:Mess('Error', "***error*** (zip#Write) Path Traversal Attack detected, not writing!")
|
||||
return
|
||||
endif
|
||||
|
||||
let curdir= getcwd()
|
||||
let tmpdir= tempname()
|
||||
if tmpdir =~ '\.'
|
||||
@@ -389,9 +398,21 @@ fun! zip#Write(fname)
|
||||
if has("unix")
|
||||
let zipfile = substitute(a:fname,'zipfile://\(.\{-}\)::[^\\].*$','\1','')
|
||||
let fname = substitute(a:fname,'zipfile://.\{-}::\([^\\].*\)$','\1','')
|
||||
" fname should not start with a leading slash to avoid writing anywhere into the system
|
||||
if fname =~ '^/'
|
||||
call s:Mess('Error', "***error*** (zip#Write) Path Traversal Attack detected, not writing!")
|
||||
call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!")
|
||||
return
|
||||
endif
|
||||
else
|
||||
let zipfile = substitute(a:fname,'^.\{-}zipfile://\(.\{-}\)::[^\\].*$','\1','')
|
||||
let fname = substitute(a:fname,'^.\{-}zipfile://.\{-}::\([^\\].*\)$','\1','')
|
||||
" fname should not start with drive letter, UNC path, or leading slash
|
||||
if fname =~ '^\%(\a:[\\/]\|[\\/]\)'
|
||||
call s:Mess('Error', "***error*** (zip#Write) Path Traversal Attack detected, not writing!")
|
||||
call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!")
|
||||
return
|
||||
endif
|
||||
endif
|
||||
if fname =~ '^[.]\{1,2}/'
|
||||
let gnu_cmd = g:zip_zipcmd . ' -d ' . s:Escape(fnamemodify(zipfile,":p"),0) . ' ' . s:Escape(fname,0)
|
||||
@@ -481,10 +502,22 @@ fun! zip#Extract()
|
||||
if fname =~ '/$'
|
||||
call s:Mess('Error', "***error*** (zip#Extract) Please specify a file, not a directory")
|
||||
return
|
||||
elseif fname =~ '^[.]\?[.]/'
|
||||
elseif fname =~ '^[.]\?[.]/' || simplify(fname) =~ '\.\.[/\\]'
|
||||
call s:Mess('Error', "***error*** (zip#Browse) Path Traversal Attack detected, not extracting!")
|
||||
return
|
||||
endif
|
||||
" block absolute paths
|
||||
if has("unix")
|
||||
if fname =~ '^/'
|
||||
call s:Mess('Error', "***error*** (zip#Extract) Path Traversal Attack detected, not extracting!")
|
||||
return
|
||||
endif
|
||||
else
|
||||
if fname =~ '^\%(\a:[\\/]\|[\\/]\)'
|
||||
call s:Mess('Error', "***error*** (zip#Extract) Path Traversal Attack detected, not extracting!")
|
||||
return
|
||||
endif
|
||||
endif
|
||||
if filereadable(fname)
|
||||
call s:Mess('Error', "***error*** (zip#Extract) <" .. fname .."> already exists in directory, not overwriting!")
|
||||
return
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*builtin.txt* For Vim version 9.2. Last change: 2026 Mar 25
|
||||
*builtin.txt* For Vim version 9.2. Last change: 2026 Apr 20
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -82,7 +82,7 @@ browsedir({title}, {initdir}) String put up a directory requester
|
||||
bufadd({name}) Number add a buffer to the buffer list
|
||||
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
|
||||
bufload({buf}) none 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}
|
||||
@@ -105,9 +105,10 @@ ch_evalraw({handle}, {string} [, {options}])
|
||||
any evaluate {string} on raw {handle}
|
||||
ch_getbufnr({handle}, {what}) Number get buffer number for {handle}/{what}
|
||||
ch_getjob({channel}) Job get the Job of {channel}
|
||||
ch_info({handle}) String info about channel {handle}
|
||||
ch_info({handle}) Dict info about channel {handle}
|
||||
ch_listen({address} [, {options}])
|
||||
Channel listen on {address}
|
||||
Channel listen on {address} - port on loopback
|
||||
or UNIX domain socket
|
||||
ch_log({msg} [, {handle}]) none write {msg} in the channel log file
|
||||
ch_logfile({fname} [, {mode}]) none start logging channel activity
|
||||
ch_open({address} [, {options}])
|
||||
@@ -120,7 +121,7 @@ ch_readraw({handle} [, {options}])
|
||||
ch_sendexpr({handle}, {expr} [, {options}])
|
||||
any send {expr} over JSON {handle}
|
||||
ch_sendraw({handle}, {expr} [, {options}])
|
||||
any send {expr} over raw {handle}
|
||||
none send {expr} over raw {handle}
|
||||
ch_setoptions({handle}, {options})
|
||||
none set options for {handle}
|
||||
ch_status({handle} [, {options}])
|
||||
@@ -192,7 +193,7 @@ extendnew({expr1}, {expr2} [, {expr3}])
|
||||
List/Dict
|
||||
like |extend()| but creates a new List
|
||||
or Dictionary
|
||||
feedkeys({string} [, {mode}]) Number add key sequence to typeahead buffer
|
||||
feedkeys({string} [, {mode}]) none add key sequence to typeahead buffer
|
||||
filecopy({from}, {to}) Number |TRUE| if copying file {from} to {to}
|
||||
worked
|
||||
filereadable({file}) Number |TRUE| if {file} is a readable file
|
||||
@@ -219,7 +220,7 @@ foldtext() String line displayed for closed fold
|
||||
foldtextresult({lnum}) String text for closed fold at {lnum}
|
||||
foreach({expr1}, {expr2}) List/Tuple/Dict/Blob/String
|
||||
for each item in {expr1} call {expr2}
|
||||
foreground() Number bring the Vim window to the foreground
|
||||
foreground() none bring the Vim window to the foreground
|
||||
fullcommand({name} [, {vim9}]) String get full command from {name}
|
||||
funcref({name} [, {arglist}] [, {dict}])
|
||||
Funcref reference to function {name}
|
||||
@@ -351,7 +352,7 @@ inputsecret({prompt} [, {text}])
|
||||
insert({object}, {item} [, {idx}])
|
||||
List insert {item} in {object}
|
||||
[before {idx}]
|
||||
instanceof({object}, {class}) Number |TRUE| if {object} is an instance of
|
||||
instanceof({object}, {class}) Bool |TRUE| if {object} is an instance of
|
||||
{class}
|
||||
interrupt() none interrupt script execution
|
||||
invert({expr}) Number bitwise invert
|
||||
@@ -391,7 +392,7 @@ list2tuple({list}) Tuple turn {list} of items into a tuple
|
||||
listener_add({callback} [, {buf} [, {unbuffered}]])
|
||||
Number add a callback to listen to changes
|
||||
listener_flush([{buf}]) none invoke listener callbacks
|
||||
listener_remove({id}) none remove a listener callback
|
||||
listener_remove({id}) Number remove a listener callback
|
||||
localtime() Number current time
|
||||
log({expr}) Float natural logarithm (base e) of {expr}
|
||||
log10({expr}) Float logarithm of Float {expr} to base 10
|
||||
@@ -455,8 +456,8 @@ popup_clear() none close all popup windows
|
||||
popup_close({id} [, {result}]) none close popup window {id}
|
||||
popup_create({what}, {options}) Number create a popup window
|
||||
popup_dialog({what}, {options}) Number create a popup window used as a dialog
|
||||
popup_filter_menu({id}, {key}) Number filter for a menu popup window
|
||||
popup_filter_yesno({id}, {key}) Number filter for a dialog popup window
|
||||
popup_filter_menu({id}, {key}) Bool filter for a menu popup window
|
||||
popup_filter_yesno({id}, {key}) Bool filter for a dialog popup window
|
||||
popup_findecho() Number get window ID of popup for `:echowin`
|
||||
popup_findinfo() Number get window ID of info popup window
|
||||
popup_findpreview() Number get window ID of preview popup window
|
||||
@@ -486,7 +487,7 @@ 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
|
||||
Number 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}]])
|
||||
@@ -531,7 +532,7 @@ reltimefloat({time}) Float turn the time value into a Float
|
||||
reltimestr({time}) String turn time value into a String
|
||||
remote_expr({server}, {string} [, {idvar} [, {timeout}]])
|
||||
String send expression
|
||||
remote_foreground({server}) Number bring Vim server to the foreground
|
||||
remote_foreground({server}) none bring Vim server to the foreground
|
||||
remote_peek({serverid} [, {retvar}])
|
||||
Number check for reply string
|
||||
remote_read({serverid} [, {timeout}])
|
||||
@@ -581,7 +582,7 @@ setbufvar({buf}, {varname}, {val})
|
||||
none set {varname} in buffer {buf} to {val}
|
||||
setcellwidths({list}) none set character cell width overrides
|
||||
setcharpos({expr}, {list}) Number set the {expr} position to {list}
|
||||
setcharsearch({dict}) Dict set character search from {dict}
|
||||
setcharsearch({dict}) none set character search from {dict}
|
||||
setcmdline({str} [, {pos}]) Number set command-line
|
||||
setcmdpos({pos}) Number set cursor position in command-line
|
||||
setcursorcharpos({list}) Number move cursor to position in {list}
|
||||
@@ -642,7 +643,7 @@ sound_playfile({path} [, {callback}])
|
||||
Number play sound file {path}
|
||||
sound_stop({id}) none stop playing sound {id}
|
||||
soundfold({word}) String sound-fold {word}
|
||||
spellbadword() String badly spelled word at cursor
|
||||
spellbadword() List badly spelled word at cursor
|
||||
spellsuggest({word} [, {max} [, {capital}]])
|
||||
List spelling suggestions
|
||||
split({expr} [, {pat} [, {keepempty}]])
|
||||
@@ -699,8 +700,7 @@ synconcealed({lnum}, {col}) List info about concealing
|
||||
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}
|
||||
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}])
|
||||
@@ -739,7 +739,7 @@ term_setrestore({buf}, {command})
|
||||
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
|
||||
term_wait({buf} [, {time}]) Number wait for screen to be updated
|
||||
term_wait({buf} [, {time}]) none wait for screen to be updated
|
||||
terminalprops() Dict properties of the terminal
|
||||
test_alloc_fail({id}, {countdown}, {repeat})
|
||||
none make memory allocation fail
|
||||
@@ -747,11 +747,11 @@ test_autochdir() none enable 'autochdir' during startup
|
||||
test_feedinput({string}) none add key sequence to input buffer
|
||||
test_garbagecollect_now() none free memory right now for testing
|
||||
test_garbagecollect_soon() none free memory soon for testing
|
||||
test_getvalue({string}) any get value of an internal variable
|
||||
test_getvalue({string}) Number get value of an internal variable
|
||||
test_gui_event({event}, {args}) bool generate a GUI event for testing
|
||||
test_ignore_error({expr}) none ignore a specific error
|
||||
test_mswin_event({event}, {args})
|
||||
bool generate MS-Windows event for testing
|
||||
Bool generate MS-Windows event for testing
|
||||
test_null_blob() Blob null value for testing
|
||||
test_null_channel() Channel null value for testing
|
||||
test_null_dict() Dict null value for testing
|
||||
@@ -768,7 +768,7 @@ test_setmouse({row}, {col}) none set the mouse position for testing
|
||||
test_settime({expr}) none set current time for testing
|
||||
test_srand_seed([{seed}]) none set seed for testing srand()
|
||||
test_unknown() any unknown value for testing
|
||||
test_void() any void value for testing
|
||||
test_void() none void value for testing
|
||||
timer_info([{id}]) List information about timers
|
||||
timer_pause({id}, {pause}) none pause or unpause a timer
|
||||
timer_start({time}, {callback} [, {options}])
|
||||
@@ -788,7 +788,7 @@ tuple2list({tuple}) List turn {tuple} of items into a list
|
||||
type({expr}) Number type of value {expr}
|
||||
typename({expr}) String representation of the type of {expr}
|
||||
undofile({name}) String undo file name for {name}
|
||||
undotree([{buf}]) List undo file tree for buffer {buf}
|
||||
undotree([{buf}]) Dict undo file tree for buffer {buf}
|
||||
uniq({list} [, {func} [, {dict}]])
|
||||
List remove adjacent duplicates from a list
|
||||
uri_decode({string}) String URI-decode a string
|
||||
@@ -803,7 +803,7 @@ virtcol2col({winid}, {lnum}, {col})
|
||||
Number byte index of a character on screen
|
||||
visualmode([{expr}]) String last visual mode used
|
||||
wildmenumode() Number whether 'wildmenu' mode is active
|
||||
wildtrigger() Number start wildcard expansion
|
||||
wildtrigger() none start wildcard expansion
|
||||
win_execute({id}, {command} [, {silent}])
|
||||
String execute {command} in window {id}
|
||||
win_findbuf({bufnr}) List find windows containing {bufnr}
|
||||
@@ -1273,7 +1273,7 @@ balloon_show({expr}) *balloon_show()*
|
||||
{only available when compiled with the |+balloon_eval| or
|
||||
|+balloon_eval_term| feature}
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
balloon_split({msg}) *balloon_split()*
|
||||
@@ -1500,7 +1500,7 @@ bufload({buf}) *bufload()*
|
||||
Can also be used as a |method|: >
|
||||
eval 'somename'->bufload()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
bufloaded({buf}) *bufloaded()*
|
||||
@@ -1895,7 +1895,7 @@ clearmatches([{win}]) *clearmatches()*
|
||||
Can also be used as a |method|: >
|
||||
GetWin()->clearmatches()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
cmdcomplete_info() *cmdcomplete_info()*
|
||||
@@ -2015,7 +2015,7 @@ complete({startcol}, {matches}) *complete()* *E785*
|
||||
second argument: >
|
||||
GetMatches()->complete(col('.'))
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
complete_add({expr}) *complete_add()*
|
||||
@@ -2659,7 +2659,7 @@ echoraw({string}) *echoraw()*
|
||||
call echoraw(&t_TI)
|
||||
< Use with care, you can mess up the terminal this way.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
empty({expr}) *empty()*
|
||||
@@ -2702,7 +2702,7 @@ err_teapot([{expr}]) *err_teapot()*
|
||||
indicating that coffee is temporarily not available.
|
||||
If {expr} is present it must be a String.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
escape({string}, {chars}) *escape()*
|
||||
@@ -3219,7 +3219,7 @@ feedkeys({string} [, {mode}]) *feedkeys()*
|
||||
Can also be used as a |method|: >
|
||||
GetInput()->feedkeys()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
filecopy({from}, {to}) *filecopy()*
|
||||
@@ -3656,7 +3656,7 @@ foreground() *foreground()*
|
||||
allow a window to bring itself to the foreground. Use
|
||||
|remote_foreground()| instead.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
{only in the Win32, Motif and GTK GUI versions and the
|
||||
Win32 console version}
|
||||
|
||||
@@ -3808,7 +3808,7 @@ garbagecollect([{atexit}]) *garbagecollect()*
|
||||
type a character. To force garbage collection immediately use
|
||||
|test_garbagecollect_now()|.
|
||||
|
||||
Return type: |String|
|
||||
Return type: void
|
||||
|
||||
|
||||
get({list}, {idx} [, {default}]) *get()* *get()-list*
|
||||
@@ -6269,7 +6269,7 @@ instanceof({object}, {class}) *instanceof()* *E614* *E616* *E693*
|
||||
< Can also be used as a |method|: >
|
||||
myobj->instanceof(mytype)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: |vim9-boolean|
|
||||
|
||||
|
||||
interrupt() *interrupt()*
|
||||
@@ -6877,7 +6877,7 @@ listener_flush([{buf}]) *listener_flush()*
|
||||
Can also be used as a |method|: >
|
||||
GetBuffer()->listener_flush()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
listener_remove({id}) *listener_remove()*
|
||||
@@ -7221,7 +7221,7 @@ mapset({dict})
|
||||
mapset(d)
|
||||
endfor
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
match({expr}, {pat} [, {start} [, {count}]]) *match()*
|
||||
@@ -8484,8 +8484,10 @@ prompt_setcallback({buf}, {expr}) *prompt_setcallback()*
|
||||
|
||||
< Can also be used as a |method|: >
|
||||
GetBuffer()->prompt_setcallback(callback)
|
||||
<
|
||||
Return type: void
|
||||
|
||||
< {only available when compiled with the |+channel| feature}
|
||||
{only available when compiled with the |+channel| feature}
|
||||
|
||||
prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()*
|
||||
Set a callback for buffer {buf} to {expr}. When {expr} is an
|
||||
@@ -8499,7 +8501,7 @@ prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()*
|
||||
Can also be used as a |method|: >
|
||||
GetBuffer()->prompt_setinterrupt(callback)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
{only available when compiled with the |+channel| feature}
|
||||
|
||||
@@ -8513,7 +8515,7 @@ prompt_setprompt({buf}, {text}) *prompt_setprompt()*
|
||||
Can also be used as a |method|: >
|
||||
GetBuffer()->prompt_setprompt('command: ')
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
{only available when compiled with the |+channel| feature}
|
||||
|
||||
@@ -8876,7 +8878,7 @@ redraw_listener_remove({id}) *redraw_listener_remove()*
|
||||
Can also be used as a |method|: >
|
||||
GetRedrawListenerId()->redraw_listener_remove()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
reduce({object}, {func} [, {initial}]) *reduce()* *E998*
|
||||
@@ -9048,7 +9050,7 @@ remote_foreground({server}) *remote_foreground()*
|
||||
Can also be used as a |method|: >
|
||||
ServerName()->remote_foreground()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
{only in the Win32, Motif and GTK GUI versions and the
|
||||
Win32 console version}
|
||||
@@ -9132,7 +9134,7 @@ remote_startserver({name}) *remote_startserver()* *E941* *E942*
|
||||
Can also be used as a |method|: >
|
||||
ServerName()->remote_startserver()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
{only available when compiled with the |+clientserver| feature}
|
||||
|
||||
@@ -9880,7 +9882,7 @@ setbufvar({buf}, {varname}, {val}) *setbufvar()*
|
||||
third argument: >
|
||||
GetValue()->setbufvar(buf, varname)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
setcellwidths({list}) *setcellwidths()*
|
||||
@@ -9917,7 +9919,7 @@ setcellwidths({list}) *setcellwidths()*
|
||||
match with what Vim knows about each emoji. If it doesn't
|
||||
look right you need to adjust the {list} argument.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
setcharpos({expr}, {list}) *setcharpos()*
|
||||
@@ -9960,7 +9962,7 @@ setcharsearch({dict}) *setcharsearch()*
|
||||
Can also be used as a |method|: >
|
||||
SavedSearch()->setcharsearch()
|
||||
<
|
||||
Return type: dict<any>
|
||||
Return type: void
|
||||
|
||||
|
||||
setcmdline({str} [, {pos}]) *setcmdline()*
|
||||
@@ -10027,7 +10029,7 @@ setenv({name}, {val}) *setenv()*
|
||||
second argument: >
|
||||
GetPath()->setenv('PATH')
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
setfperm({fname}, {mode}) *setfperm()* *chmod*
|
||||
@@ -10386,7 +10388,7 @@ settabvar({tabnr}, {varname}, {val}) *settabvar()*
|
||||
third argument: >
|
||||
GetValue()->settabvar(tab, name)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
settabwinvar({tabnr}, {winnr}, {varname}, {val}) *settabwinvar()*
|
||||
@@ -10411,7 +10413,7 @@ settabwinvar({tabnr}, {winnr}, {varname}, {val}) *settabwinvar()*
|
||||
fourth argument: >
|
||||
GetValue()->settabwinvar(tab, winnr, name)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
settagstack({nr}, {dict} [, {action}]) *settagstack()*
|
||||
@@ -10464,7 +10466,7 @@ setwinvar({winnr}, {varname}, {val}) *setwinvar()*
|
||||
third argument: >
|
||||
GetValue()->setwinvar(winnr, name)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
sha256({expr}) *sha256()*
|
||||
@@ -10704,7 +10706,7 @@ sound_clear() *sound_clear()*
|
||||
On some Linux systems you may need the libcanberra-pulse
|
||||
package, otherwise sound may not stop.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
{only available when compiled with the |+sound| feature}
|
||||
|
||||
@@ -10774,7 +10776,7 @@ sound_stop({id}) *sound_stop()*
|
||||
Can also be used as a |method|: >
|
||||
soundid->sound_stop()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
{only available when compiled with the |+sound| feature}
|
||||
|
||||
@@ -12059,7 +12061,7 @@ timer_pause({timer}, {paused}) *timer_pause()*
|
||||
Can also be used as a |method|: >
|
||||
GetTimer()->timer_pause(1)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
{only available when compiled with the |+timers| feature}
|
||||
|
||||
@@ -12119,7 +12121,7 @@ timer_stop({timer}) *timer_stop()*
|
||||
Can also be used as a |method|: >
|
||||
GetTimer()->timer_stop()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
{only available when compiled with the |+timers| feature}
|
||||
|
||||
@@ -12129,7 +12131,7 @@ timer_stopall() *timer_stopall()*
|
||||
invoked. Useful if a timer is misbehaving. If there are no
|
||||
timers there is no error.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
{only available when compiled with the |+timers| feature}
|
||||
|
||||
@@ -12619,7 +12621,7 @@ wildtrigger() *wildtrigger()*
|
||||
|
||||
Return value is always 0.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
win_execute({id}, {command} [, {silent}]) *win_execute()*
|
||||
@@ -12971,7 +12973,7 @@ winrestview({dict}) *winrestview()*
|
||||
Can also be used as a |method|: >
|
||||
GetView()->winrestview()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
winsaveview() *winsaveview()*
|
||||
@@ -13299,6 +13301,7 @@ spell Compiled with spell checking support |spell|.
|
||||
startuptime Compiled with |--startuptime| support.
|
||||
statusline Compiled with support for 'statusline', 'rulerformat'
|
||||
and special formats of 'titlestring' and 'iconstring'.
|
||||
statusline_click Click handlers in 'statusline' |stl-%[FuncName]|
|
||||
sun SunOS version of Vim.
|
||||
sun_workshop Support for Sun |workshop| has been removed.
|
||||
syntax Compiled with syntax highlighting support |syntax|.
|
||||
@@ -13351,8 +13354,6 @@ vtp Compiled for vcon support |+vtp| (check vcon to find
|
||||
out if it works in the current console).
|
||||
wayland Compiled with Wayland protocol support.
|
||||
wayland_clipboard Compiled with support for Wayland clipboard.
|
||||
wayland_focus_steal Compiled with support for Wayland clipboard focus
|
||||
stealing.
|
||||
wildignore Compiled with 'wildignore' option.
|
||||
wildmenu Compiled with 'wildmenu' option.
|
||||
win16 old version for MS-Windows 3.1 (always false)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*change.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*change.txt* For Vim version 9.2. Last change: 2026 Mar 31
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -1157,9 +1157,9 @@ inside of strings can change! Also see 'softtabstop' option. >
|
||||
current line).
|
||||
|
||||
*:ip* *:iput*
|
||||
:[line]ip[ut] [x] like |:put|, but adjust indent to the current line
|
||||
:[line]ip[ut] [x] Like |:put|, but adjust indent to the current line.
|
||||
|
||||
:[line]ip[ut]! [x] like |:put|!, but adjust indent to the current line
|
||||
:[line]ip[ut]! [x] Like |:put|!, but adjust indent to the current line.
|
||||
|
||||
["x]]p or *]p* *]<MiddleMouse>*
|
||||
["x]]<MiddleMouse> Like "p", but adjust the indent to the current line.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*channel.txt* For Vim version 9.2. Last change: 2026 Mar 13
|
||||
*channel.txt* For Vim version 9.2. Last change: 2026 Apr 15
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -132,7 +132,7 @@ Start Vim and create a listening channel: >
|
||||
endfunc
|
||||
|
||||
" Start listening on port 8765
|
||||
let server = ch_listen('localhost:8765', {"callback": "OnAccept"})
|
||||
let server = ch_listen('8765', {"callback": "OnAccept"})
|
||||
|
||||
From another Vim instance (or any program) you can connect to it: >
|
||||
let channel = ch_open('localhost:8765')
|
||||
@@ -549,7 +549,7 @@ ch_close({handle}) *ch_close()*
|
||||
Can also be used as a |method|: >
|
||||
GetChannel()->ch_close()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
ch_close_in({handle}) *ch_close_in()*
|
||||
Close the "in" part of {handle}. See |channel-close-in|.
|
||||
@@ -559,7 +559,7 @@ ch_close_in({handle}) *ch_close_in()*
|
||||
Can also be used as a |method|: >
|
||||
GetChannel()->ch_close_in()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
ch_evalexpr({handle}, {expr} [, {options}]) *ch_evalexpr()*
|
||||
@@ -637,8 +637,7 @@ ch_info({handle}) *ch_info()*
|
||||
"status" "open", "buffered" or "closed", like
|
||||
ch_status()
|
||||
When opened with ch_open():
|
||||
"hostname" the hostname of the address
|
||||
"port" the port of the address
|
||||
"port" the port on loopback
|
||||
"path" the path of the Unix-domain socket
|
||||
"sock_status" "open" or "closed"
|
||||
"sock_mode" "NL", "RAW", "JSON" or "JS"
|
||||
@@ -668,20 +667,23 @@ ch_info({handle}) *ch_info()*
|
||||
Return type: dict<any>
|
||||
|
||||
ch_listen({address} [, {options}]) *E1573* *E1574* *ch_listen()*
|
||||
Listen on {address} for incoming channel connections.
|
||||
This creates a server-side channel, unlike |ch_open()|
|
||||
which connects to an existing server.
|
||||
Listen on {address} - port on loopback or UNIX domain socket
|
||||
for incoming channel connections. This creates a server-side
|
||||
channel, unlike |ch_open()| which connects to an existing
|
||||
server.
|
||||
Returns a Channel. Use |ch_status()| to check for failure.
|
||||
|
||||
{address} is a String, see |channel-address| for the possible
|
||||
accepted forms. Note: IPv6 is not yet supported.
|
||||
accepted forms, however in case of TCP sockets it allows to
|
||||
set only a port and binds to loopback address for security
|
||||
reasons.
|
||||
Note: IPv6 is not yet supported.
|
||||
|
||||
If {options} is given it must be a |Dictionary|.
|
||||
See |channel-open-options|.
|
||||
The "callback" in {options} is invoked when a new
|
||||
connection is accepted. It receives two arguments: the
|
||||
new Channel and the client address as a String (e.g.
|
||||
"127.0.0.1:12345").
|
||||
The "callback" in {options} is invoked when a new connection
|
||||
is accepted. It receives two arguments: the new Channel and
|
||||
the client address as a String (e.g. "127.0.0.1:12345").
|
||||
|
||||
Use |ch_open()| to connect to an existing server instead.
|
||||
|
||||
@@ -708,7 +710,7 @@ ch_log({msg} [, {handle}]) *ch_log()*
|
||||
Can also be used as a |method|: >
|
||||
'did something'->ch_log()
|
||||
<
|
||||
Return type: dict<any>
|
||||
Return type: void
|
||||
|
||||
ch_logfile({fname} [, {mode}]) *ch_logfile()*
|
||||
Start logging channel activity to {fname}.
|
||||
@@ -736,7 +738,7 @@ ch_logfile({fname} [, {mode}]) *ch_logfile()*
|
||||
Can also be used as a |method|: >
|
||||
'logfile'->ch_logfile('w')
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
ch_open({address} [, {options}]) *ch_open()*
|
||||
Open a channel to {address}. See |channel|.
|
||||
@@ -825,7 +827,7 @@ ch_sendraw({handle}, {expr} [, {options}]) *ch_sendraw()*
|
||||
Can also be used as a |method|: >
|
||||
GetChannel()->ch_sendraw(rawexpr)
|
||||
<
|
||||
Return type: dict<any> or |String|
|
||||
Return type: void
|
||||
|
||||
ch_setoptions({handle}, {options}) *ch_setoptions()*
|
||||
Set options on {handle}:
|
||||
@@ -844,7 +846,7 @@ ch_setoptions({handle}, {options}) *ch_setoptions()*
|
||||
Can also be used as a |method|: >
|
||||
GetChannel()->ch_setoptions(options)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
ch_status({handle} [, {options}]) *ch_status()*
|
||||
Return the status of {handle}:
|
||||
@@ -1038,7 +1040,7 @@ job_setoptions({job}, {options}) *job_setoptions()*
|
||||
Can also be used as a |method|: >
|
||||
GetJob()->job_setoptions(options)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
job_start({command} [, {options}]) *job_start()*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*cmdline.txt* For Vim version 9.2. Last change: 2026 Mar 17
|
||||
*cmdline.txt* For Vim version 9.2. Last change: 2026 Apr 20
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -466,14 +466,15 @@ CTRL-L A match is done on the pattern in front of the cursor. If
|
||||
*c_CTRL-G* */_CTRL-G*
|
||||
CTRL-G When 'incsearch' is set, entering a search pattern for "/" or
|
||||
"?" and the current match is displayed then CTRL-G will move
|
||||
to the next match (does not take |search-offset| into account)
|
||||
to the next match. The |search-offset| is applied when <CR>
|
||||
is pressed, but does not affect the match highlighting.
|
||||
Use CTRL-T to move to the previous match. Hint: on a regular
|
||||
keyboard G is below T.
|
||||
*c_CTRL-T* */_CTRL-T*
|
||||
CTRL-T When 'incsearch' is set, entering a search pattern for "/" or
|
||||
"?" and the current match is displayed then CTRL-T will move
|
||||
to the previous match (does not take |search-offset| into
|
||||
account).
|
||||
to the previous match. The |search-offset| is applied when
|
||||
<CR> is pressed, but does not affect the match highlighting.
|
||||
Use CTRL-G to move to the next match. Hint: on a regular
|
||||
keyboard T is above G.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*filetype.txt* For Vim version 9.2. Last change: 2026 Mar 24
|
||||
*filetype.txt* For Vim version 9.2. Last change: 2026 Apr 13
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -652,6 +652,12 @@ One command, :DiffGitCached, is provided to show a diff of the current commit
|
||||
in the preview window. It is equivalent to calling "git diff --cached" plus
|
||||
any arguments given to the command.
|
||||
|
||||
The length of the first line of the commit message used for
|
||||
syntax highlighting can be configured via `g:gitcommit_summary_length`.
|
||||
The default is 50. Example: >
|
||||
|
||||
let g:gitcommit_summary_length = 70
|
||||
|
||||
GIT REBASE *ft-gitrebase-plugin*
|
||||
|
||||
The gitrebase filetype defines the following buffer-local commands, to help
|
||||
|
||||
@@ -1,399 +1,373 @@
|
||||
*ft_rust.txt* Filetype plugin for Rust
|
||||
*ft_rust.txt* Filetype plugin for Rust
|
||||
|
||||
==============================================================================
|
||||
CONTENTS *rust*
|
||||
CONTENTS *rust*
|
||||
|
||||
1. Introduction |rust-intro|
|
||||
2. Settings |rust-settings|
|
||||
3. Commands |rust-commands|
|
||||
4. Mappings |rust-mappings|
|
||||
1. Introduction |rust-intro|
|
||||
2. Settings |rust-settings|
|
||||
3. Commands |rust-commands|
|
||||
4. Mappings |rust-mappings|
|
||||
|
||||
==============================================================================
|
||||
INTRODUCTION *rust-intro*
|
||||
INTRODUCTION *rust-intro*
|
||||
|
||||
This plugin provides syntax and supporting functionality for the Rust
|
||||
filetype. It requires Vim 8 or higher for full functionality. Some commands
|
||||
will not work on earlier versions.
|
||||
filetype.
|
||||
|
||||
==============================================================================
|
||||
SETTINGS *rust-settings*
|
||||
SETTINGS *rust-settings*
|
||||
|
||||
This plugin has a few variables you can define in your vimrc that change the
|
||||
behavior of the plugin.
|
||||
|
||||
Some variables can be set buffer local (`:b` prefix), and the buffer local
|
||||
Some variables can be set buffer local (`b:` prefix), and the buffer local
|
||||
will take precedence over the global `g:` counterpart.
|
||||
|
||||
*g:rustc_path*
|
||||
*g:rustc_path*
|
||||
g:rustc_path~
|
||||
Set this option to the path to rustc for use in the |:RustRun| and
|
||||
|:RustExpand| commands. If unset, "rustc" will be located in $PATH: >
|
||||
let g:rustc_path = $HOME."/bin/rustc"
|
||||
|:RustExpand| commands. If unset, "rustc" will be located in $PATH: >
|
||||
let g:rustc_path = $HOME."/bin/rustc"
|
||||
<
|
||||
|
||||
*g:rustc_makeprg_no_percent*
|
||||
*g:rustc_makeprg_no_percent*
|
||||
g:rustc_makeprg_no_percent~
|
||||
Set this option to 1 to have 'makeprg' default to "rustc" instead of
|
||||
"rustc %": >
|
||||
let g:rustc_makeprg_no_percent = 1
|
||||
let g:rustc_makeprg_no_percent = 1
|
||||
<
|
||||
|
||||
*g:rust_conceal*
|
||||
*g:rust_conceal*
|
||||
g:rust_conceal~
|
||||
Set this option to turn on the basic |conceal| support: >
|
||||
let g:rust_conceal = 1
|
||||
let g:rust_conceal = 1
|
||||
<
|
||||
|
||||
*g:rust_conceal_mod_path*
|
||||
*g:rust_conceal_mod_path*
|
||||
g:rust_conceal_mod_path~
|
||||
Set this option to turn on |conceal| for the path connecting token
|
||||
"::": >
|
||||
let g:rust_conceal_mod_path = 1
|
||||
Set this option to turn on |conceal| for the path connecting token "::": >
|
||||
let g:rust_conceal_mod_path = 1
|
||||
<
|
||||
|
||||
*g:rust_conceal_pub*
|
||||
*g:rust_conceal_pub*
|
||||
g:rust_conceal_pub~
|
||||
Set this option to turn on |conceal| for the "pub" token: >
|
||||
let g:rust_conceal_pub = 1
|
||||
let g:rust_conceal_pub = 1
|
||||
<
|
||||
|
||||
*g:rust_recommended_style*
|
||||
*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 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
|
||||
Set this option to enable vim indentation and textwidth settings to
|
||||
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
|
||||
<
|
||||
|
||||
*g:rust_fold*
|
||||
*g:rust_fold*
|
||||
g:rust_fold~
|
||||
Set this option to turn on |folding|: >
|
||||
let g:rust_fold = 1
|
||||
let g:rust_fold = 1
|
||||
<
|
||||
Value Effect ~
|
||||
0 No folding
|
||||
1 Braced blocks are folded. All folds are open by
|
||||
default.
|
||||
2 Braced blocks are folded. 'foldlevel' is left at the
|
||||
global value (all folds are closed by default).
|
||||
Value Effect ~
|
||||
0 No folding
|
||||
1 Braced blocks are folded. All folds are open by default.
|
||||
2 Braced blocks are folded. 'foldlevel' is left at the global
|
||||
value (all folds are closed by default).
|
||||
|
||||
*g:rust_bang_comment_leader*
|
||||
*g:rust_bang_comment_leader*
|
||||
g:rust_bang_comment_leader~
|
||||
Set this option to 1 to preserve the leader on multi-line doc comments
|
||||
using the /*! syntax: >
|
||||
let g:rust_bang_comment_leader = 1
|
||||
let g:rust_bang_comment_leader = 1
|
||||
<
|
||||
|
||||
*g:rust_use_custom_ctags_defs*
|
||||
*g:rust_use_custom_ctags_defs*
|
||||
g:rust_use_custom_ctags_defs~
|
||||
Set this option to 1 if you have customized ctags definitions for Rust
|
||||
and do not wish for those included with rust.vim to be used: >
|
||||
let g:rust_use_custom_ctags_defs = 1
|
||||
let g:rust_use_custom_ctags_defs = 1
|
||||
<
|
||||
|
||||
NOTE: rust.vim's built-in definitions are only used for the Tagbar Vim
|
||||
plugin, if you have it installed, AND if Universal Ctags is not
|
||||
detected. This is because Universal Ctags already has built-in
|
||||
detected. This is because Universal Ctags already has built-in
|
||||
support for Rust when used with Tagbar.
|
||||
|
||||
Also, note that when using ctags other than Universal Ctags, it is not
|
||||
automatically used when generating |tags| files that Vim can use to
|
||||
navigate to definitions across different source files. Feel free to
|
||||
navigate to definitions across different source files. Feel free to
|
||||
copy `rust.vim/ctags/rust.ctags` into your own `~/.ctags` if you wish
|
||||
to generate |tags| files.
|
||||
|
||||
|
||||
*g:ftplugin_rust_source_path*
|
||||
*g:ftplugin_rust_source_path*
|
||||
g:ftplugin_rust_source_path~
|
||||
Set this option to a path that should be prepended to 'path' for Rust
|
||||
source files: >
|
||||
let g:ftplugin_rust_source_path = $HOME.'/dev/rust'
|
||||
let g:ftplugin_rust_source_path = $HOME.'/dev/rust'
|
||||
<
|
||||
|
||||
*g:rustfmt_command*
|
||||
*g:rustfmt_command*
|
||||
g:rustfmt_command~
|
||||
Set this option to the name of the 'rustfmt' executable in your $PATH. If
|
||||
not specified it defaults to 'rustfmt' : >
|
||||
let g:rustfmt_command = 'rustfmt'
|
||||
Set this option to the name of the "rustfmt" executable in your $PATH.
|
||||
If not specified it defaults to "rustfmt": >
|
||||
let g:rustfmt_command = 'rustfmt'
|
||||
<
|
||||
*g:rustfmt_autosave*
|
||||
*g:rustfmt_autosave*
|
||||
*b:rustfmt_autosave*
|
||||
g:rustfmt_autosave~
|
||||
Set this option to 1 to run |:RustFmt| automatically when saving a
|
||||
buffer. If not specified it defaults to 0 : >
|
||||
let g:rustfmt_autosave = 0
|
||||
buffer. If not specified it defaults to 0: >
|
||||
let g:rustfmt_autosave = 0
|
||||
<
|
||||
There is also a buffer-local b:rustfmt_autosave that can be set for
|
||||
the same purpose, and can override the global setting.
|
||||
|
||||
*g:rustfmt_autosave_if_config_present*
|
||||
*g:rustfmt_autosave_if_config_present*
|
||||
*b:rustfmt_autosave_if_config_present*
|
||||
g:rustfmt_autosave_if_config_present~
|
||||
Set this option to 1 to have *b:rustfmt_autosave* be set automatically
|
||||
if a `rustfmt.toml` file is present in any parent directly leading to
|
||||
the file being edited. If not set, default to 0: >
|
||||
let g:rustfmt_autosave_if_config_present = 0
|
||||
Set this option to 1 to have |b:rustfmt_autosave| be set automatically
|
||||
if a `rustfmt.toml` file is present in any parent directory leading to
|
||||
the file being edited. If not set, default to 0: >
|
||||
let g:rustfmt_autosave_if_config_present = 0
|
||||
<
|
||||
This is useful to have `rustfmt` only execute on save, on projects
|
||||
that have `rustfmt.toml` configuration.
|
||||
|
||||
There is also a buffer-local b:rustfmt_autosave_if_config_present
|
||||
that can be set for the same purpose, which can overrides the global
|
||||
that can be set for the same purpose, which can override the global
|
||||
setting.
|
||||
*g:rustfmt_fail_silently*
|
||||
*g:rustfmt_fail_silently*
|
||||
g:rustfmt_fail_silently~
|
||||
Set this option to 1 to prevent 'rustfmt' from populating the
|
||||
|location-list| with errors. If not specified it defaults to 0: >
|
||||
let g:rustfmt_fail_silently = 0
|
||||
Set this option to 1 to prevent "rustfmt" from populating the
|
||||
|location-list| with errors. If not specified it defaults to 0: >
|
||||
let g:rustfmt_fail_silently = 0
|
||||
<
|
||||
*g:rustfmt_options*
|
||||
*g:rustfmt_options*
|
||||
g:rustfmt_options~
|
||||
Set this option to a string of options to pass to 'rustfmt'. The
|
||||
write-mode is already set to 'overwrite'. If not specified it
|
||||
defaults to '' : >
|
||||
let g:rustfmt_options = ''
|
||||
Set this option to a string of options to pass to "rustfmt".
|
||||
The write-mode is already set to "overwrite". If not specified it
|
||||
defaults to '': >
|
||||
let g:rustfmt_options = ''
|
||||
<
|
||||
*g:rustfmt_emit_files*
|
||||
*g:rustfmt_emit_files*
|
||||
g:rustfmt_emit_files~
|
||||
If not specified rust.vim tries to detect the right parameter to
|
||||
pass to rustfmt based on its reported version. Otherwise, it
|
||||
determines whether to run rustfmt with '--emit=files' (when 1 is
|
||||
provided) instead of '--write-mode=overwrite'. >
|
||||
let g:rustfmt_emit_files = 0
|
||||
pass to rustfmt based on its reported version. Otherwise, it
|
||||
determines whether to run rustfmt with "--emit=files" (when 1 is
|
||||
provided) instead of "--write-mode=overwrite". >
|
||||
let g:rustfmt_emit_files = 0
|
||||
<
|
||||
*g:rustfmt_detect_version*
|
||||
*g:rustfmt_detect_version*
|
||||
g:rustfmt_detect_version~
|
||||
When set to 1, will try to parse the version output from "rustfmt".
|
||||
Disabled by default for performance reasons
|
||||
>
|
||||
let g:rustfmt_detect_version = 1
|
||||
Disabled by default for performance reasons. >
|
||||
let g:rustfmt_detect_version = 1
|
||||
<
|
||||
*g:rustfmt_find_toml*
|
||||
*g:rustfmt_find_toml*
|
||||
g:rustfmt_find_toml~
|
||||
When set to 1, will try to find `rustfmt.toml` file by searching from
|
||||
current path upwards. Disabled by default for performance reasons
|
||||
>
|
||||
let g:rustfmt_find_toml = 1
|
||||
current path upwards. Disabled by default for performance reasons. >
|
||||
let g:rustfmt_find_toml = 1
|
||||
<
|
||||
*g:rust_playpen_url*
|
||||
*g:rust_playpen_url*
|
||||
g:rust_playpen_url~
|
||||
Set this option to override the url for the playpen to use: >
|
||||
let g:rust_playpen_url = 'https://play.rust-lang.org/'
|
||||
let g:rust_playpen_url = 'https://play.rust-lang.org/'
|
||||
<
|
||||
|
||||
*g:rust_shortener_url*
|
||||
*g:rust_shortener_url*
|
||||
g:rust_shortener_url~
|
||||
Set this option to override the url for the url shortener: >
|
||||
let g:rust_shortener_url = 'https://is.gd/'
|
||||
let g:rust_shortener_url = 'https://is.gd/'
|
||||
<
|
||||
|
||||
*g:rust_clip_command*
|
||||
*g:rust_clip_command*
|
||||
g:rust_clip_command~
|
||||
Set this option to the command used in your OS to copy the Rust Play
|
||||
url to the clipboard: >
|
||||
let g:rust_clip_command = 'xclip -selection clipboard'
|
||||
let g:rust_clip_command = 'xclip -selection clipboard'
|
||||
<
|
||||
|
||||
*g:cargo_makeprg_params*
|
||||
*g:cargo_makeprg_params*
|
||||
g:cargo_makeprg_params~
|
||||
Set this option to the string of parameters to pass to cargo. If not
|
||||
specified it defaults to '$*' : >
|
||||
let g:cargo_makeprg_params = 'build'
|
||||
Set this option to the string of parameters to pass to cargo. If not
|
||||
specified it defaults to "$*": >
|
||||
let g:cargo_makeprg_params = 'build'
|
||||
<
|
||||
|
||||
*g:cargo_shell_command_runner*
|
||||
*g:cargo_shell_command_runner*
|
||||
g:cargo_shell_command_runner~
|
||||
Set this option to change how to run shell commands for cargo commands
|
||||
|:Cargo|, |:Cbuild|, |:Crun|, ...
|
||||
By default, |:terminal| is used to run shell command in terminal window
|
||||
asynchronously. But if you prefer |:!| for running the commands, it can
|
||||
be specified: >
|
||||
let g:cargo_shell_command_runner = '!'
|
||||
|:Cargo|, |:Cbuild|, |:Crun|, etc. - see |rust-commands|.
|
||||
By default, |:terminal| is used to run a shell command in a terminal
|
||||
window asynchronously. But if you prefer |:!| for running the
|
||||
commands, it can be specified: >
|
||||
let g:cargo_shell_command_runner = '!'
|
||||
<
|
||||
|
||||
|
||||
Integration with Syntastic *rust-syntastic*
|
||||
Integration with Syntastic *rust-syntastic*
|
||||
--------------------------
|
||||
|
||||
This plugin automatically integrates with the Syntastic checker. There are two
|
||||
checkers provided: 'rustc', and 'cargo'. The latter invokes 'Cargo' in order to
|
||||
build code, and the former delivers a single edited '.rs' file as a compilation
|
||||
target directly to the Rust compiler, `rustc`.
|
||||
This plugin automatically integrates with the Syntastic checker. There are
|
||||
two checkers provided: "rustc", and "cargo". The latter invokes "cargo" to
|
||||
build code, and the former delivers a single edited ".rs" file as a
|
||||
compilation target directly to the Rust compiler, `rustc`.
|
||||
|
||||
Because Cargo is almost exclusively being used for building Rust code these
|
||||
days, 'cargo' is the default checker. >
|
||||
|
||||
let g:syntastic_rust_checkers = ['cargo']
|
||||
days, "cargo" is the default checker.
|
||||
>
|
||||
let g:syntastic_rust_checkers = ['cargo']
|
||||
<
|
||||
If you would like to change it, you can set `g:syntastic_rust_checkers` to a
|
||||
different value.
|
||||
*g:rust_cargo_avoid_whole_workspace*
|
||||
*b:rust_cargo_avoid_whole_workspace*
|
||||
*g:rust_cargo_avoid_whole_workspace*
|
||||
*b:rust_cargo_avoid_whole_workspace*
|
||||
g:rust_cargo_avoid_whole_workspace~
|
||||
When editing a crate that is part of a Cargo workspace, and this
|
||||
option is set to 1 (the default), then 'cargo' will be executed
|
||||
option is set to 1 (the default), then "cargo" will be executed
|
||||
directly in that crate directory instead of in the workspace
|
||||
directory. Setting 0 prevents this behavior - however be aware that if
|
||||
you are working in large workspace, Cargo commands may take more time,
|
||||
plus the Syntastic error list may include all the crates in the
|
||||
directory. Setting 0 prevents this behavior - however be aware that
|
||||
if you are working in a large workspace, Cargo commands may take more
|
||||
time, plus the Syntastic error list may include all the crates in the
|
||||
workspace. >
|
||||
let g:rust_cargo_avoid_whole_workspace = 0
|
||||
let g:rust_cargo_avoid_whole_workspace = 0
|
||||
<
|
||||
*g:rust_cargo_check_all_targets*
|
||||
*b:rust_cargo_check_all_targets*
|
||||
*g:rust_cargo_check_all_targets*
|
||||
*b:rust_cargo_check_all_targets*
|
||||
g:rust_cargo_check_all_targets~
|
||||
When set to 1, the `--all-targets` option will be passed to cargo when
|
||||
Syntastic executes it, allowing the linting of all targets under the
|
||||
package.
|
||||
The default is 0.
|
||||
|
||||
*g:rust_cargo_check_all_features*
|
||||
*b:rust_cargo_check_all_features*
|
||||
*g:rust_cargo_check_all_features*
|
||||
*b:rust_cargo_check_all_features*
|
||||
g:rust_cargo_check_all_features~
|
||||
When set to 1, the `--all-features` option will be passed to cargo when
|
||||
Syntastic executes it, allowing the linting of all features of the
|
||||
package.
|
||||
The default is 0.
|
||||
|
||||
*g:rust_cargo_check_examples*
|
||||
*b:rust_cargo_check_examples*
|
||||
*g:rust_cargo_check_examples*
|
||||
*b:rust_cargo_check_examples*
|
||||
g:rust_cargo_check_examples~
|
||||
When set to 1, the `--examples` option will be passed to cargo when
|
||||
Syntastic executes it, to prevent the exclusion of examples from
|
||||
linting. The examples are normally under the `examples/` directory of
|
||||
linting. The examples are normally under the `examples/` directory of
|
||||
the crate.
|
||||
The default is 0.
|
||||
|
||||
*g:rust_cargo_check_tests*
|
||||
*b:rust_cargo_check_tests*
|
||||
*g:rust_cargo_check_tests*
|
||||
*b:rust_cargo_check_tests*
|
||||
g:rust_cargo_check_tests~
|
||||
When set to 1, the `--tests` option will be passed to cargo when
|
||||
Syntastic executes it, to prevent the exclusion of tests from linting.
|
||||
The tests are normally under the `tests/` directory of the crate.
|
||||
The default is 0.
|
||||
|
||||
*g:rust_cargo_check_benches*
|
||||
*b:rust_cargo_check_benches*
|
||||
*g:rust_cargo_check_benches*
|
||||
*b:rust_cargo_check_benches*
|
||||
g:rust_cargo_check_benches~
|
||||
When set to 1, the `--benches` option will be passed to cargo when
|
||||
Syntastic executes it. The benches are normally under the `benches/`
|
||||
directory of the crate.
|
||||
The default is 0.
|
||||
|
||||
Integration with auto-pairs *rust-auto-pairs*
|
||||
Integration with auto-pairs *rust-auto-pairs*
|
||||
---------------------------
|
||||
|
||||
This plugin automatically configures the auto-pairs plugin not to duplicate
|
||||
single quotes, which are used more often for lifetime annotations than for
|
||||
single character literals.
|
||||
|
||||
*g:rust_keep_autopairs_default*
|
||||
*g:rust_keep_autopairs_default*
|
||||
g:rust_keep_autopairs_default~
|
||||
|
||||
Don't override auto-pairs default for the Rust filetype. The default
|
||||
Don't override auto-pairs default for the Rust filetype. The default
|
||||
is 0.
|
||||
|
||||
==============================================================================
|
||||
COMMANDS *rust-commands*
|
||||
COMMANDS *rust-commands*
|
||||
|
||||
Invoking Cargo
|
||||
--------------
|
||||
|
||||
This plug defines very simple shortcuts for invoking Cargo from with Vim.
|
||||
This plugin defines very simple shortcuts for invoking Cargo from within Vim.
|
||||
|
||||
:Cargo <args> *:Cargo*
|
||||
Runs 'cargo' with the provided arguments.
|
||||
:Cargo <args> *:Cargo*
|
||||
Runs "cargo" with the provided arguments.
|
||||
|
||||
:Cbuild <args> *:Cbuild*
|
||||
Shortcut for 'cargo build`.
|
||||
:Cbuild <args> *:Cbuild*
|
||||
Shortcut for "cargo build".
|
||||
|
||||
:Cclean <args> *:Cclean*
|
||||
Shortcut for 'cargo clean`.
|
||||
:Cclean <args> *:Cclean*
|
||||
Shortcut for "cargo clean".
|
||||
|
||||
:Cdoc <args> *:Cdoc*
|
||||
Shortcut for 'cargo doc`.
|
||||
:Cdoc <args> *:Cdoc*
|
||||
Shortcut for "cargo doc".
|
||||
|
||||
:Cinit <args> *:Cinit*
|
||||
Shortcut for 'cargo init`.
|
||||
:Cinit <args> *:Cinit*
|
||||
Shortcut for "cargo init".
|
||||
|
||||
:Crun <args> *:Crun*
|
||||
Shortcut for 'cargo run`.
|
||||
:Crun <args> *:Crun*
|
||||
Shortcut for "cargo run".
|
||||
|
||||
:Ctest <args> *:Ctest*
|
||||
Shortcut for 'cargo test`.
|
||||
:Ctest <args> *:Ctest*
|
||||
Shortcut for "cargo test".
|
||||
|
||||
:Cupdate <args> *:Cupdate*
|
||||
Shortcut for 'cargo update`.
|
||||
:Cupdate <args> *:Cupdate*
|
||||
Shortcut for "cargo update".
|
||||
|
||||
:Cbench <args> *:Cbench*
|
||||
Shortcut for 'cargo bench`.
|
||||
:Cbench <args> *:Cbench*
|
||||
Shortcut for "cargo bench".
|
||||
|
||||
:Csearch <args> *:Csearch*
|
||||
Shortcut for 'cargo search`.
|
||||
:Csearch <args> *:Csearch*
|
||||
Shortcut for "cargo search".
|
||||
|
||||
:Cpublish <args> *:Cpublish*
|
||||
Shortcut for 'cargo publish`.
|
||||
:Cpublish <args> *:Cpublish*
|
||||
Shortcut for "cargo publish".
|
||||
|
||||
:Cinstall <args> *:Cinstall*
|
||||
Shortcut for 'cargo install`.
|
||||
:Cinstall <args> *:Cinstall*
|
||||
Shortcut for "cargo install".
|
||||
|
||||
:Cruntarget <args> *:Cruntarget*
|
||||
Shortcut for 'cargo run --bin' or 'cargo run --example',
|
||||
depending on the currently open buffer.
|
||||
:Cruntarget <args> *:Cruntarget*
|
||||
Shortcut for "cargo run --bin" or "cargo run --example",
|
||||
depending on the currently open buffer.
|
||||
|
||||
Formatting
|
||||
----------
|
||||
|
||||
:RustFmt *:RustFmt*
|
||||
Runs |g:rustfmt_command| on the current buffer. If
|
||||
:RustFmt *:RustFmt*
|
||||
Runs |g:rustfmt_command| on the current buffer. If
|
||||
|g:rustfmt_options| is set then those will be passed to the
|
||||
executable.
|
||||
|
||||
If |g:rustfmt_fail_silently| is 0 (the default) then it
|
||||
will populate the |location-list| with the errors from
|
||||
|g:rustfmt_command|. If |g:rustfmt_fail_silently| is set to 1
|
||||
|g:rustfmt_command|. If |g:rustfmt_fail_silently| is set to 1
|
||||
then it will not populate the |location-list|.
|
||||
|
||||
:RustFmtRange *:RustFmtRange*
|
||||
Runs |g:rustfmt_command| with selected range. See
|
||||
|:RustFmt| for any other information.
|
||||
|
||||
:RustFmtRange *:RustFmtRange*
|
||||
Runs |g:rustfmt_command| with selected range. See |:RustFmt|
|
||||
for any other information.
|
||||
|
||||
Playpen integration
|
||||
-------------------
|
||||
|
||||
:RustPlay *:RustPlay*
|
||||
:RustPlay *:RustPlay*
|
||||
This command will only work if you have web-api.vim installed
|
||||
(available at https://github.com/mattn/webapi-vim). It sends the
|
||||
current selection, or if nothing is selected, the entirety of the
|
||||
current buffer to the Rust playpen, and emits a message with the
|
||||
shortened URL to the playpen.
|
||||
(available at https://github.com/mattn/webapi-vim). It sends
|
||||
the current selection, or if nothing is selected, the entirety
|
||||
of the current buffer to the Rust playpen, and emits a message
|
||||
with the shortened URL to the playpen.
|
||||
|
||||
|g:rust_playpen_url| is the base URL to the playpen, by default
|
||||
"https://play.rust-lang.org/".
|
||||
|
||||
|g:rust_shortener_url| is the base url for the shorterner, by
|
||||
|g:rust_shortener_url| is the base url for the shortener, by
|
||||
default "https://is.gd/"
|
||||
|
||||
|g:rust_clip_command| is the command to run to copy the
|
||||
playpen url to the clipboard of your system.
|
||||
|
||||
|
||||
Evaluation of a single Rust file
|
||||
--------------------------------
|
||||
|
||||
NOTE: These commands are useful only when working with standalone Rust files,
|
||||
which is usually not the case for common Rust development. If you wish to
|
||||
building Rust crates from with Vim can should use Vim's make, Syntastic, or
|
||||
functionality from other plugins.
|
||||
which is usually not the case for common Rust development. If you wish to
|
||||
build Rust crates from within Vim, use Vim's make, Syntastic, or functionality
|
||||
from other plugins.
|
||||
|
||||
|
||||
:RustRun [args] *:RustRun*
|
||||
:RustRun [args] *:RustRun*
|
||||
:RustRun! [rustc-args] [--] [args]
|
||||
Compiles and runs the current file. If it has unsaved changes,
|
||||
it will be saved first using |:update|. If the current file is
|
||||
an unnamed buffer, it will be written to a temporary file
|
||||
first. The compiled binary is always placed in a temporary
|
||||
directory, but is run from the current directory.
|
||||
Compiles and runs the current file. If it has unsaved
|
||||
changes, it will be saved first using |:update|. If the
|
||||
current file is an unnamed buffer, it will be written to a
|
||||
temporary file first. The compiled binary is always placed in
|
||||
a temporary directory, but is run from the current directory.
|
||||
|
||||
The arguments given to |:RustRun| will be passed to the
|
||||
compiled binary.
|
||||
@@ -405,11 +379,11 @@ functionality from other plugins.
|
||||
If |g:rustc_path| is defined, it is used as the path to rustc.
|
||||
Otherwise it is assumed rustc can be found in $PATH.
|
||||
|
||||
:RustExpand [args] *:RustExpand*
|
||||
:RustExpand [args] *:RustExpand*
|
||||
:RustExpand! [TYPE] [args]
|
||||
Expands the current file using --pretty and displays the
|
||||
results in a new split. If the current file has unsaved
|
||||
changes, it will be saved first using |:update|. If the
|
||||
results in a new split. If the current file has unsaved
|
||||
changes, it will be saved first using |:update|. If the
|
||||
current file is an unnamed buffer, it will be written to a
|
||||
temporary file first.
|
||||
|
||||
@@ -418,16 +392,16 @@ functionality from other plugins.
|
||||
configurations.
|
||||
|
||||
If ! is specified, the first argument is the expansion type to
|
||||
pass to rustc --pretty. Otherwise it will default to
|
||||
pass to rustc --pretty. Otherwise it will default to
|
||||
"expanded".
|
||||
|
||||
If |g:rustc_path| is defined, it is used as the path to rustc.
|
||||
Otherwise it is assumed rustc can be found in $PATH.
|
||||
|
||||
:RustEmitIr [args] *:RustEmitIr*
|
||||
:RustEmitIr [args] *:RustEmitIr*
|
||||
Compiles the current file to LLVM IR and displays the results
|
||||
in a new split. If the current file has unsaved changes, it
|
||||
will be saved first using |:update|. If the current file is an
|
||||
in a new split. If the current file has unsaved changes, it
|
||||
will be saved first using |:update|. If the current file is an
|
||||
unnamed buffer, it will be written to a temporary file first.
|
||||
|
||||
The arguments given to |:RustEmitIr| will be passed to rustc.
|
||||
@@ -435,10 +409,10 @@ functionality from other plugins.
|
||||
If |g:rustc_path| is defined, it is used as the path to rustc.
|
||||
Otherwise it is assumed rustc can be found in $PATH.
|
||||
|
||||
:RustEmitAsm [args] *:RustEmitAsm*
|
||||
:RustEmitAsm [args] *:RustEmitAsm*
|
||||
Compiles the current file to assembly and displays the results
|
||||
in a new split. If the current file has unsaved changes, it
|
||||
will be saved first using |:update|. If the current file is an
|
||||
in a new split. If the current file has unsaved changes, it
|
||||
will be saved first using |:update|. If the current file is an
|
||||
unnamed buffer, it will be written to a temporary file first.
|
||||
|
||||
The arguments given to |:RustEmitAsm| will be passed to rustc.
|
||||
@@ -446,13 +420,12 @@ functionality from other plugins.
|
||||
If |g:rustc_path| is defined, it is used as the path to rustc.
|
||||
Otherwise it is assumed rustc can be found in $PATH.
|
||||
|
||||
|
||||
Running test(s)
|
||||
---------------
|
||||
|
||||
:[N]RustTest[!] [options] *:RustTest*
|
||||
:[N]RustTest[!] [options] *:RustTest*
|
||||
Runs a test under the cursor when the current buffer is in a
|
||||
cargo project with "cargo test" command. If the command did
|
||||
cargo project with "cargo test" command. If the command did
|
||||
not find any test function under the cursor, it stops with an
|
||||
error message.
|
||||
|
||||
@@ -465,35 +438,36 @@ Running test(s)
|
||||
When [options] is given, it is passed to "cargo" command
|
||||
arguments.
|
||||
|
||||
When the current buffer is outside cargo project, the command
|
||||
runs "rustc --test" command instead of "cargo test" as
|
||||
fallback. All tests are run regardless of adding ! since there
|
||||
is no way to run specific test function with rustc. [options]
|
||||
is passed to "rustc" command arguments in the case.
|
||||
When the current buffer is outside a cargo project, the
|
||||
command runs "rustc --test" command instead of "cargo test" as
|
||||
fallback. All tests are run regardless of adding ! since
|
||||
there is no way to run specific test function with rustc.
|
||||
[options] is passed to "rustc" command arguments in that case.
|
||||
|
||||
Takes optional modifiers (see |<mods>|): >
|
||||
:tab RustTest
|
||||
:belowright 16RustTest
|
||||
:leftabove vert 80RustTest
|
||||
Takes optional modifiers (see |<mods>|): >
|
||||
:tab RustTest
|
||||
:belowright 16RustTest
|
||||
:leftabove vert 80RustTest
|
||||
<
|
||||
rust.vim Debugging
|
||||
------------------
|
||||
|
||||
:RustInfo *:RustInfo*
|
||||
:RustInfo *:RustInfo*
|
||||
Emits debugging info of the Vim Rust plugin.
|
||||
|
||||
:RustInfoToClipboard *:RustInfoClipboard*
|
||||
:RustInfoToClipboard *:RustInfoClipboard*
|
||||
Saves debugging info of the Vim Rust plugin to the default
|
||||
register.
|
||||
|
||||
:RustInfoToFile [filename] *:RustInfoToFile*
|
||||
:RustInfoToFile [filename] *:RustInfoToFile*
|
||||
Saves debugging info of the Vim Rust plugin to the given file,
|
||||
overwriting it.
|
||||
|
||||
==============================================================================
|
||||
MAPPINGS *rust-mappings*
|
||||
MAPPINGS *rust-mappings*
|
||||
|
||||
This plugin defines mappings for |[[| and |]]| to support hanging indents.
|
||||
This plugin defines Normal mode, Visual mode, and Operator-pending mode
|
||||
mappings for |[[| and |]]| to support hanging indents.
|
||||
|
||||
==============================================================================
|
||||
vim:tw=78:sw=4:noet:ts=8:ft=help:norl:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*gui.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*gui.txt* For Vim version 9.2. Last change: 2026 Apr 07
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -1150,11 +1150,22 @@ For the Win32 GUI *E244* *E245*
|
||||
NONANTIALIASED, CLEARTYPE and DEFAULT. Normally you would use
|
||||
"qDEFAULT".
|
||||
Some quality values are not supported in legacy OSs.
|
||||
fXX - OpenType font feature. Specify a single feature as
|
||||
tag=value, where tag is a 4-character OpenType feature
|
||||
tag and value is the parameter (0 to disable, 1 or
|
||||
higher to enable/select variant). Multiple features
|
||||
can be specified by repeating the ":f" option.
|
||||
This only takes effect when 'renderoptions' is set to use
|
||||
DirectWrite (type:directx). Default features (calt, liga,
|
||||
etc.) are preserved unless explicitly overridden.
|
||||
Example: ":fss19=1:fcalt=0" enables Stylistic Set 19
|
||||
and disables Contextual Alternates.
|
||||
- A '_' can be used in the place of a space, so you don't need to use
|
||||
backslashes to escape the spaces.
|
||||
Examples: >
|
||||
:set guifont=courier_new:h12:w5:b:cRUSSIAN
|
||||
:set guifont=Andale_Mono:h7.5:w4.5
|
||||
:set guifont=Cascadia_Code:h14:fss19=1:fcalt=1:fliga=1
|
||||
|
||||
See also |font-sizes|.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*netbeans.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*netbeans.txt* For Vim version 9.2. Last change: 2026 Apr 09
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Gordon Prieur et al.
|
||||
@@ -849,7 +849,7 @@ REJECT Not used.
|
||||
These errors occur when a message violates the protocol:
|
||||
*E627* *E628* *E629* *E632* *E633* *E634* *E635* *E636*
|
||||
*E637* *E638* *E639* *E640* *E641* *E642* *E643* *E644* *E645* *E646*
|
||||
*E647* *E648* *E650* *E651* *E652*
|
||||
*E647* *E648* *E649* *E650* *E651* *E652*
|
||||
|
||||
|
||||
==============================================================================
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*options.txt* For Vim version 9.2. Last change: 2026 Mar 23
|
||||
*options.txt* For Vim version 9.2. Last change: 2026 Apr 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -324,12 +324,12 @@ that was last closed are used again. If this buffer has been edited in this
|
||||
window, the values from back then are used. Otherwise the values from the
|
||||
last closed window where the buffer was edited last are used.
|
||||
|
||||
It's possible to set a local window option specifically for a type of buffer.
|
||||
When you edit another buffer in the same window, you don't want to keep
|
||||
using these local window options. Therefore Vim keeps a global value of the
|
||||
local window options, which is used when editing another buffer. Each window
|
||||
has its own copy of these values. Thus these are local to the window, but
|
||||
global to all buffers in the window. With this you can do: >
|
||||
":setlocal" can be used to set a local window option specifically for a type
|
||||
of buffer. When you edit another buffer in the same window, you don't want to
|
||||
keep using these local window options. Meanwhile ":set" also sets a global
|
||||
value of a local window option, which is used when editing another buffer.
|
||||
Each window has its own copy of these global values, making them local to the
|
||||
window, but global to all buffers in the window. With this you can do: >
|
||||
:e one
|
||||
:set list
|
||||
:e two
|
||||
@@ -1030,10 +1030,10 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
'autowrite' 'aw' boolean (default off)
|
||||
global
|
||||
Write the contents of the file, if it has been modified, on each
|
||||
`:next`, `:rewind`, `:last`, `:first`, `:previous`, `:stop`,
|
||||
`:suspend`, `:tag`, `:!`, `:make`, CTRL-] and CTRL-^ command; and when
|
||||
a `:buffer`, CTRL-O, CTRL-I, '{A-Z0-9}, or `{A-Z0-9} command takes one
|
||||
to another file.
|
||||
`:next`, `:rewind`, `:last`, `:first`, `:previous`, `:tag`, `:stop`,
|
||||
`:suspend`, `:!`, `:make`, `:terminal`, CTRL-] or CTRL-^ command; and
|
||||
when a `:buffer`, CTRL-O, CTRL-I, '{A-Z0-9}, or `{A-Z0-9} command
|
||||
switches to another file.
|
||||
A buffer is not written if it becomes hidden, e.g. when 'bufhidden' is
|
||||
set to "hide" and `:next` is used.
|
||||
Note that for some commands the 'autowrite' option is not used, see
|
||||
@@ -1047,8 +1047,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
*'autowriteall'* *'awa'* *'noautowriteall'* *'noawa'*
|
||||
'autowriteall' 'awa' boolean (default off)
|
||||
global
|
||||
Like 'autowrite', but also used for commands ":edit", ":enew",
|
||||
":quit", ":qall", ":exit", ":xit", ":recover" and closing the Vim
|
||||
Like 'autowrite', but also used for commands `:edit`, `:enew`,
|
||||
`:quit`, `:qall`, `:exit`, `:xit`, `:recover` and closing the Vim
|
||||
window.
|
||||
Setting this option also implies that Vim behaves like 'autowrite' has
|
||||
been set.
|
||||
@@ -2226,6 +2226,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
Note: The match limit takes effect only during forward completion
|
||||
(CTRL-N) and is ignored during backward completion (CTRL-P).
|
||||
|
||||
This option cannot be set in a modeline when 'modelineexpr' is off.
|
||||
|
||||
*'completefunc'* *'cfu'*
|
||||
'completefunc' 'cfu' string (default: empty)
|
||||
local to buffer
|
||||
@@ -4686,6 +4688,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
You can include a line break. Simplest method is to use |:let|: >
|
||||
:let &guitabtooltip = "line one\nline two"
|
||||
<
|
||||
This option cannot be set in a modeline when 'modelineexpr' is off.
|
||||
|
||||
*'helpfile'* *'hf'*
|
||||
'helpfile' 'hf' string (default (MS-Windows) "$VIMRUNTIME\doc\help.txt"
|
||||
@@ -4754,7 +4757,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,
|
||||
a:LineNrAbove,b:LineNrBelow,
|
||||
N:CursorLineNr,r:Question,s:StatusLine,
|
||||
S:StatusLineNC,c:VertSplit,t:Title,
|
||||
S:StatusLineNC,c:VertSplit,
|
||||
|:VertSplitNC,t:Title,
|
||||
v:Visual,V:VisualNOS,w:WarningMsg,
|
||||
W:WildMenu,f:Folded,F:FoldColumn,
|
||||
A:DiffAdd,C:DiffChange,D:DiffDelete,
|
||||
@@ -4802,6 +4806,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
|hl-StatusLineNC| S status lines of not-current windows
|
||||
|hl-Title| t Titles for output from ":set all", ":autocmd" etc.
|
||||
|hl-VertSplit| c column used to separate vertically split windows
|
||||
|hl-VertSplitNC| | column separating non-current vertically split
|
||||
windows
|
||||
|hl-Visual| v Visual mode
|
||||
|hl-VisualNOS| V Visual mode when Vim is "Not Owning the
|
||||
Selection" Only X11 Gui's |gui-x11|,
|
||||
@@ -5209,7 +5215,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
command line has no uppercase characters, the added character is
|
||||
converted to lowercase.
|
||||
CTRL-R CTRL-W can be used to add the word at the end of the current
|
||||
match, excluding the characters that were already typed.
|
||||
match, excluding the characters that were already typed (starting from
|
||||
the beginning of the word).
|
||||
NOTE: This option is reset when 'compatible' is set.
|
||||
|
||||
*'indentexpr'* *'inde'*
|
||||
@@ -6192,6 +6199,48 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
NOTE: 'modeline' is set to the Vi default value when 'compatible' is
|
||||
set and to the Vim default value when 'compatible' is reset.
|
||||
|
||||
*'modelinestrict'* *'mlst'* *'nomodelinestrict'* *'nomlst'*
|
||||
'modelinestrict' 'mlst' boolean (default: on)
|
||||
global
|
||||
When on, only a safe subset of options can be set from a |modeline|.
|
||||
The following options are allowed:
|
||||
'autoindent'
|
||||
'cindent'
|
||||
'commentstring'
|
||||
'expandtab'
|
||||
'filetype'
|
||||
'foldcolumn'
|
||||
'foldenable'
|
||||
'foldmethod'
|
||||
'modifiable'
|
||||
'readonly'
|
||||
'rightleft'
|
||||
'shiftwidth'
|
||||
'smartindent'
|
||||
'softtabstop'
|
||||
'spell'
|
||||
'spelllang'
|
||||
'tabstop'
|
||||
'textwidth'
|
||||
'varsofttabstop'
|
||||
'vartabstop'
|
||||
|
||||
Any other option set from a modeline will be silently ignored.
|
||||
This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||
security reasons.
|
||||
|
||||
The behaviour of 'modeline', 'modelinestrict' and 'modelineexpr' is
|
||||
as follows:
|
||||
|
||||
'modeline'| 'modelinestrict'| 'modelineexpr' | Meaning
|
||||
----------+-----------------+-------------------+--------~
|
||||
on | off | on | All options can be set
|
||||
on | on | any | Only whitelisted
|
||||
| | | options can be set
|
||||
on | off | off | All options except for
|
||||
| | | expr options can be set
|
||||
off | any | any | No options can be set
|
||||
|
||||
*'modifiable'* *'ma'* *'nomodifiable'* *'noma'*
|
||||
*E21*
|
||||
'modifiable' 'ma' boolean (default on)
|
||||
@@ -6847,6 +6896,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
The format of the header produced in |:hardcopy| output.
|
||||
See |pheader-option|.
|
||||
|
||||
This option cannot be set in a modeline when 'modelineexpr' is off.
|
||||
|
||||
*'printmbcharset'* *'pmbcs'*
|
||||
'printmbcharset' 'pmbcs' string (default "")
|
||||
global
|
||||
@@ -6880,6 +6931,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
global
|
||||
Defines a border and optional decorations for the popup menu in
|
||||
completion. The value is a comma-separated list of keywords.
|
||||
See 'pumopt' for a consolidated alternative.
|
||||
|
||||
Border styles (at most one):
|
||||
"single" use thin box-drawing characters
|
||||
@@ -6915,6 +6967,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
Determines the maximum number of items to show in the popup menu for
|
||||
Insert mode completion. When zero as much space as available is used.
|
||||
|ins-completion-menu|.
|
||||
See 'pumopt' for a consolidated alternative.
|
||||
|
||||
*'pummaxwidth'* *'pmw'*
|
||||
'pummaxwidth' 'pmw' number (default 0)
|
||||
@@ -6926,12 +6979,67 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
|
||||
This option takes precedence over 'pumwidth'.
|
||||
|ins-completion-menu|.
|
||||
See 'pumopt' for a consolidated alternative.
|
||||
|
||||
*'pumopt'*
|
||||
'pumopt' string (default "")
|
||||
global
|
||||
Configures the popup menu used for Insert mode completion.
|
||||
The value is a comma-separated list of "key:value" pairs and flags.
|
||||
|
||||
Keys with values:
|
||||
border:{style} set a border style (at most one):
|
||||
"single" thin box-drawing characters
|
||||
"double" double-line box-drawing characters
|
||||
"round" rounded corners
|
||||
"ascii" ASCII characters (-, |, +)
|
||||
"custom:X;X;X;X;X;X;X;X"
|
||||
eight characters separated by
|
||||
semicolons, in the order: top, right,
|
||||
bottom, left, topleft, topright,
|
||||
botright, botleft
|
||||
height:{n} maximum number of items to show (default 0,
|
||||
meaning as much space as available)
|
||||
width:{n} minimum width (default 15)
|
||||
maxwidth:{n} maximum width (default 0, meaning no limit).
|
||||
This takes precedence over width.
|
||||
Truncated text is indicated by "trunc" value
|
||||
of 'fillchars' option.
|
||||
opacity:{n} opacity percentage 0-100 (default 100).
|
||||
When less than 100, background content shows
|
||||
through the popup menu.
|
||||
|
||||
Flags (no value):
|
||||
margin adds one-cell spacing inside the left and
|
||||
right border. Requires a border style.
|
||||
shadow draws a shadow at the right and bottom edges.
|
||||
|
||||
Border styles using box-drawing characters ("single", "double",
|
||||
"round") are only available when 'encoding' is "utf-8" and 'ambiwidth'
|
||||
is "single".
|
||||
|
||||
Highlight groups:
|
||||
|hl-PmenuBorder| used for the border characters
|
||||
|hl-PmenuShadow| used for the shadow
|
||||
|
||||
Note: When 'pumopt' is set, all values are reset to their defaults
|
||||
first, then the specified keys are applied. Unspecified keys get
|
||||
their default values.
|
||||
|
||||
Examples: >
|
||||
:set pumopt=border:single
|
||||
:set pumopt=border:double,margin,shadow
|
||||
:set pumopt=height:10,width:20,opacity:80
|
||||
:set pumopt=border:custom:─;│;─;│;┌;┐;┘;└,shadow
|
||||
<
|
||||
See also: |ins-completion-menu|.
|
||||
|
||||
*'pumwidth'* *'pw'*
|
||||
'pumwidth' 'pw' number (default 15)
|
||||
global
|
||||
Determines the minimum width to use for the popup menu for Insert mode
|
||||
completion. |ins-completion-menu|.
|
||||
See 'pumopt' for a consolidated alternative.
|
||||
|
||||
*'pythondll'*
|
||||
'pythondll' string (default depends on the build)
|
||||
@@ -7469,8 +7577,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
Minimal number of screen lines to keep above and below the cursor.
|
||||
This will make some context visible around where you are working. If
|
||||
you set it to a very large value (999) the cursor line will always be
|
||||
in the middle of the window (except at the start or end of the file or
|
||||
when long lines wrap).
|
||||
in the middle of the window (except at the start or end of the file,
|
||||
see 'scrolloffpad', or when long lines wrap).
|
||||
After using the local value, go back the global value with one of
|
||||
these two: >
|
||||
setlocal scrolloff<
|
||||
@@ -7478,7 +7586,24 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
< For scrolling horizontally see 'sidescrolloff'.
|
||||
NOTE: This option is set to 0 when 'compatible' is set.
|
||||
|
||||
*'scrollopt'* *'sbo'*
|
||||
*'scrolloffpad'* *'sop'*
|
||||
'scrolloffpad' 'sop' number (default 0)
|
||||
global or local to window |global-local|
|
||||
When 'scrolloff' and 'scrolloffpad' are greater than zero, allow
|
||||
the cursor to remain centered when at the end of the file.
|
||||
Normally, 'scrolloff' will not keep the cursor centered at the
|
||||
end of the file.
|
||||
|
||||
A value of 0 disables this feature. Any value above 0 enables it.
|
||||
For a window-local value, -1 means to use the global value.
|
||||
Values below -1 are invalid.
|
||||
|
||||
After using the local value, go back the global value with one of
|
||||
these two: >
|
||||
setlocal scrolloffpad<
|
||||
setlocal scrolloffpad=-1
|
||||
|
||||
< *'scrollopt'* *'sbo'*
|
||||
'scrollopt' 'sbo' string (default "ver,jump")
|
||||
global
|
||||
This is a comma-separated list of words that specifies how
|
||||
@@ -8557,10 +8682,62 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
applied to StatusLineNC for the statusline of non-current
|
||||
windows.
|
||||
The number N must be between 1 and 9. See |hl-User1..9|
|
||||
*stl-%@*
|
||||
*stl-%@*
|
||||
@ - Inserts a newline. This only takes effect when the "maxheight"
|
||||
value of 'statuslineopt' is greater than 1, or for |tabpanel|.
|
||||
|
||||
*stl-%[FuncName]*
|
||||
%[ defines clickable regions in the statusline. When the user clicks
|
||||
on a region with the mouse, the specified function is called. The
|
||||
same syntax can also be used in 'tabline' and 'tabpanel'.
|
||||
|
||||
%[FuncName] Start of a clickable region. "FuncName" is the name
|
||||
of a Vim function to call when the region is clicked.
|
||||
%[] End of the clickable region. If omitted, the region
|
||||
extends to the end of the statusline or to the start
|
||||
of the next clickable region.
|
||||
|
||||
A {minwid} value can be used to pass an identifier to the callback:
|
||||
%3[FuncName] Starts a clickable region with minwid 3.
|
||||
|
||||
The function receives a single |Dictionary| argument with these
|
||||
entries:
|
||||
"minwid" The minwid value from %N[Func] (0 if not specified).
|
||||
"nclicks" Number of clicks: 1, 2, or 3.
|
||||
"button" Mouse button: "l" (left), "m" (middle), "r" (right).
|
||||
"mods" Modifier keys: combination of "s" (shift), "c" (ctrl),
|
||||
"a" (alt). Empty string if no modifiers.
|
||||
"winid" |window-ID| of the window whose statusline was clicked,
|
||||
or 0 when the click was in 'tabline' or 'tabpanel'.
|
||||
"area" "statusline", "tabline", or "tabpanel". Indicates
|
||||
which option the clicked region belongs to.
|
||||
"tabnr" (tabpanel only) Tab page number of the clicked label.
|
||||
|
||||
If the function returns non-zero, the statusline is redrawn.
|
||||
Dragging the statusline to resize the window still works even when
|
||||
click handlers are defined. When used in 'tabline' or 'tabpanel',
|
||||
clicks in %[FuncName] regions are dispatched to the callback
|
||||
instead of the default tab-selection behavior.
|
||||
|
||||
Example: >
|
||||
func! ClickFile(info)
|
||||
if a:info.button ==# 'l' && a:info.nclicks == 2
|
||||
browse edit
|
||||
endif
|
||||
return 0
|
||||
endfunc
|
||||
set statusline=%[ClickFile]%f%[]\ %l:%c
|
||||
< This makes the filename in the statusline clickable. Double-clicking
|
||||
it opens the file browser.
|
||||
|
||||
Use `has('statusline_click')` to check if this feature is available.
|
||||
This is useful for backward compatibility: >
|
||||
if has('statusline_click')
|
||||
set statusline=%[ClickFile]%f%[]\ %l:%c
|
||||
else
|
||||
set statusline=%f\ %l:%c
|
||||
endif
|
||||
<
|
||||
When displaying a flag, Vim removes the leading comma, if any, when
|
||||
that flag comes right after plaintext. This will make a nice display
|
||||
when flags are used like in the examples below.
|
||||
@@ -8888,6 +9065,23 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
tab panel will not be displayed.
|
||||
(default 20)
|
||||
|
||||
scroll Enable mouse wheel scrolling over the tabpanel
|
||||
area when the tab list exceeds the visible
|
||||
screen height. The scroll step is controlled
|
||||
by 'mousescroll'. When disabled (the default),
|
||||
the tabpanel shows the page containing the
|
||||
current tab, with no way to view tabs outside
|
||||
that page.
|
||||
|
||||
scrollbar Reserve a one-column scrollbar in the tabpanel
|
||||
showing the current scroll position. The
|
||||
scrollbar uses the |hl-PmenuSbar| and
|
||||
|hl-PmenuThumb| highlight groups for the track
|
||||
and thumb respectively. Clicking on the
|
||||
scrollbar column jumps the thumb to that
|
||||
position; the thumb can also be dragged.
|
||||
Implies "scroll".
|
||||
|
||||
vert Use a vertical separator for tabpanel.
|
||||
The vertical separator character is taken from
|
||||
"tpl_vert" in 'fillchars'.
|
||||
@@ -10492,11 +10686,10 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
*'wlsteal'* *'wst'* *'nowlsteal'* *'nowst'*
|
||||
'wlsteal' 'wst' boolean (default off)
|
||||
global
|
||||
{only when the |+wayland_focus_steal| feature is
|
||||
included}
|
||||
DEPRECATED: This option is no longer used; changing it has no effect.
|
||||
|
||||
When enabled, then allow Vim to steal focus by creating a temporary
|
||||
surface, in order to access the clipboard. For more information see
|
||||
|wayland-focus-steal|.
|
||||
surface, in order to access the clipboard.
|
||||
|
||||
*'wltimeoutlen'* *'wtm'*
|
||||
'wltimeoutlen' 'wtm' number (default 500)
|
||||
@@ -10509,9 +10702,6 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
some cases. On the other hand, it may also mean you receive errors
|
||||
when the compositor takes more time to respond than usual.
|
||||
|
||||
Additionally, this option is also used as the maximum timeout when
|
||||
waiting for a surface to gain focus, see |wayland-focus-steal|.
|
||||
|
||||
*'wrap'* *'nowrap'*
|
||||
'wrap' boolean (default on)
|
||||
local to window
|
||||
|
||||
@@ -2854,10 +2854,6 @@ your browsing preferences. (see also: |netrw-settings|)
|
||||
such as listing, file removal, etc.
|
||||
default: ssh
|
||||
|
||||
*g:netrw_tmpfile_escape* =' &;'
|
||||
escape() is applied to all temporary files
|
||||
to escape these characters.
|
||||
|
||||
*g:netrw_timefmt* specify format string to vim's strftime().
|
||||
The default, "%c", is "the preferred date
|
||||
and time representation for the current
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*pi_tar.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*pi_tar.txt* For Vim version 9.2. Last change: 2026 Apr 16
|
||||
|
||||
+====================+
|
||||
| Tar File Interface |
|
||||
@@ -101,10 +101,17 @@ Copyright 2005-2017: *tar-copyright*
|
||||
4. History *tar-history*
|
||||
|
||||
unreleased:
|
||||
Apr 16, 2026 * add missing g:tar_secure into tar#Extract
|
||||
Apr 15, 2026 * add path traversal checks in tar#Extract()
|
||||
Apr 09, 2026 * fix zstd support and dotted filename support
|
||||
Apr 06, 2026 * fix lz4 support
|
||||
Feb 07, 2026 * make path traversal detection more robust
|
||||
Feb 06, 2026 * fix bug with nowrapscan
|
||||
Jul 16, 2025 * update minimum required Vim version
|
||||
Jul 13, 2025 * drop leading /
|
||||
May 19, 2025 * restore working directory after read/write
|
||||
Apr 16, 2025 * decouple from netrw by adding s:WinPath()
|
||||
instead of shelling out to file(1)
|
||||
instead of shelling out to file(1)
|
||||
Mar 02, 2025 * determine the compression using readblob()
|
||||
Mar 02, 2025 * escape the filename before using :read
|
||||
Mar 01, 2025 * fix syntax error in tar#Read()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*pi_vimball.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*pi_vimball.txt* For Vim version 9.2. Last change: 2026 Apr 16
|
||||
|
||||
----------------
|
||||
Vimball Archiver
|
||||
@@ -93,21 +93,6 @@ MAKING A VIMBALL *:MkVimball*
|
||||
make.
|
||||
|
||||
|
||||
MAKING DIRECTORIES VIA VIMBALLS *g:vimball_mkdir*
|
||||
|
||||
First, the |mkdir()| command is tried (not all systems support it).
|
||||
|
||||
If it doesn't exist, then if g:vimball_mkdir doesn't exist, it is set
|
||||
as follows: >
|
||||
|g:netrw_localmkdir|, if it exists
|
||||
"mkdir" , if it is executable
|
||||
"makedir" , if it is executable
|
||||
Otherwise , it is undefined.
|
||||
< One may explicitly specify the directory making command using
|
||||
g:vimball_mkdir. This command is used to make directories that
|
||||
are needed as indicated by the vimball.
|
||||
|
||||
|
||||
CONTROLLING THE VIMBALL EXTRACTION DIRECTORY *g:vimball_home*
|
||||
|
||||
You may override the use of the 'runtimepath' by specifying a
|
||||
@@ -181,6 +166,11 @@ WINDOWS *vimball-windows*
|
||||
==============================================================================
|
||||
4. Vimball History *vimball-history* {{{1
|
||||
|
||||
unreleased:
|
||||
Feb 28, 2025 * add support for bzip3 (#16755)
|
||||
Apr 05, 2026 * Detect path traversal attacks
|
||||
Apr 09, 2026 * Detect more path traversal attacks
|
||||
Apr 16, 2026 * Block Windows drive letter paths
|
||||
37 : Jul 18, 2014 * (by request of T. Miedema) added augroup around
|
||||
the autocmds in vimballPlugin.vim
|
||||
Jul 06, 2015 * there are two uses of tabc; changed to tabc!
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*pi_zip.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*pi_zip.txt* For Vim version 9.2. Last change: 2026 Apr 05
|
||||
|
||||
+====================+
|
||||
| Zip File Interface |
|
||||
@@ -33,6 +33,10 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright*
|
||||
also write to the file. Currently, one may not make a new file in
|
||||
zip archives via the plugin.
|
||||
|
||||
The zip plugin tries to detect some common path traversal attack
|
||||
patterns, but it may not catch all possible cases. Please be very
|
||||
careful when using this plugin with untrusted input.
|
||||
|
||||
COMMANDS~
|
||||
*zip-x*
|
||||
x : extract a listed file when the cursor is atop it
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*popup.txt* For Vim version 9.2. Last change: 2026 Mar 02
|
||||
*popup.txt* For Vim version 9.2. Last change: 2026 Apr 06
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -254,7 +254,7 @@ popup_clear([{force}])
|
||||
when it is the current window. If a terminal is running in a
|
||||
popup it is killed.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
popup_close({id} [, {result}]) *popup_close()*
|
||||
@@ -269,7 +269,7 @@ popup_close({id} [, {result}]) *popup_close()*
|
||||
Can also be used as a |method|: >
|
||||
GetPopup()->popup_close()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
popup_create({what}, {options}) *popup_create()*
|
||||
@@ -351,7 +351,7 @@ popup_filter_menu({id}, {key}) *popup_filter_menu()*
|
||||
To add shortcut keys, see the example here:
|
||||
|popup_menu-shortcut-example|
|
||||
|
||||
Return type: |Number|
|
||||
Return type: |vim9-boolean|
|
||||
|
||||
|
||||
popup_filter_yesno({id}, {key}) *popup_filter_yesno()*
|
||||
@@ -363,7 +363,7 @@ popup_filter_yesno({id}, {key}) *popup_filter_yesno()*
|
||||
keys are ignored.
|
||||
See the example here: |popup_dialog-example|
|
||||
|
||||
Return type: |Number|
|
||||
Return type: |vim9-boolean|
|
||||
|
||||
|
||||
popup_findecho() *popup_findecho()*
|
||||
@@ -471,7 +471,7 @@ popup_hide({id}) *popup_hide()*
|
||||
Can also be used as a |method|: >
|
||||
GetPopup()->popup_hide()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
popup_list() *popup_list()*
|
||||
@@ -542,7 +542,7 @@ popup_move({id}, {options}) *popup_move()*
|
||||
Can also be used as a |method|: >
|
||||
GetPopup()->popup_move(options)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
popup_notification({what}, {options}) *popup_notification()*
|
||||
@@ -624,7 +624,7 @@ popup_setoptions({id}, {options}) *popup_setoptions()*
|
||||
Can also be used as a |method|: >
|
||||
GetPopup()->popup_setoptions(options)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
popup_settext({id}, {text}) *popup_settext()*
|
||||
@@ -636,7 +636,7 @@ popup_settext({id}, {text}) *popup_settext()*
|
||||
Can also be used as a |method|: >
|
||||
GetPopup()->popup_settext('hello')
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
popup_show({id}) *popup_show()*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*quickref.txt* For Vim version 9.2. Last change: 2026 Mar 04
|
||||
*quickref.txt* For Vim version 9.2. Last change: 2026 Apr 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -823,6 +823,7 @@ Short explanation of each option: *option-list*
|
||||
'modeline' 'ml' recognize modelines at start or end of file
|
||||
'modelineexpr' 'mle' allow setting expression options from a modeline
|
||||
'modelines' 'mls' number of lines checked for modelines
|
||||
'modelinestrict' 'mlst' only allow safe options in modelines
|
||||
'modifiable' 'ma' changes to the text are not possible
|
||||
'modified' 'mod' buffer has been modified
|
||||
'more' pause listings when the whole screen is filled
|
||||
@@ -865,6 +866,7 @@ Short explanation of each option: *option-list*
|
||||
'printoptions' 'popt' controls the format of :hardcopy output
|
||||
'prompt' 'prompt' enable prompt in Ex mode
|
||||
'pumheight' 'ph' maximum height of the popup menu
|
||||
'pumopt' 'pumopt' additional options for the popup menu
|
||||
'pumwidth' 'pw' minimum width of the popup menu
|
||||
'pythondll' name of the Python 2 dynamic library
|
||||
'pythonhome' name of the Python 2 home directory
|
||||
@@ -893,6 +895,7 @@ Short explanation of each option: *option-list*
|
||||
'scrollfocus' 'scf' scroll wheel applies to window under pointer
|
||||
'scrolljump' 'sj' minimum number of lines to scroll
|
||||
'scrolloff' 'so' minimum nr. of lines above and below cursor
|
||||
'scrolloffpad' 'sop' vertically center cursor at end of file
|
||||
'scrollopt' 'sbo' how 'scrollbind' should behave
|
||||
'sections' 'sect' nroff macros that separate sections
|
||||
'secure' secure mode for reading .vimrc in current dir
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*syntax.txt* For Vim version 9.2. Last change: 2026 Mar 22
|
||||
*syntax.txt* For Vim version 9.2. Last change: 2026 Apr 14
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -5978,7 +5978,14 @@ EndOfBuffer Filler lines (~) after the last line in the buffer.
|
||||
*hl-ErrorMsg*
|
||||
ErrorMsg Error messages on the command line.
|
||||
*hl-VertSplit*
|
||||
VertSplit Column separating vertically split windows.
|
||||
VertSplit Column separating vertically split windows that are adjacent
|
||||
to the current window. On the current window's status line
|
||||
rows, the separator cell is drawn as a space with the
|
||||
|hl-StatusLine| highlight so it blends into the status line
|
||||
without a stray fillchar glyph.
|
||||
*hl-VertSplitNC*
|
||||
VertSplitNC Column separating vertically split windows of non-current
|
||||
windows. By default, highlighted like |hl-VertSplit|.
|
||||
*hl-Folded*
|
||||
Folded Line used for closed folds.
|
||||
*hl-FoldColumn*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*tabpage.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*tabpage.txt* For Vim version 9.2. Last change: 2026 Apr 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -482,6 +482,37 @@ The vertical separator character is taken from "tpl_vert" in 'fillchars'.
|
||||
You can customize the appearance of the tab page labels using the highlight
|
||||
groups: |hl-TabPanel| |hl-TabPanelSel| |hl-TabPanelFill|
|
||||
|
||||
SCROLLING IN THE TABPANEL: *tabpanel-scroll*
|
||||
|
||||
When the total height of the tab list exceeds the visible screen height, the
|
||||
tabpanel by default displays the "page" that contains the current tab and
|
||||
offers no way to view tabs outside that page.
|
||||
|
||||
To make the tabpanel scrollable, add "scroll" to 'tabpanelopt': >
|
||||
:set tabpanelopt+=scroll
|
||||
|
||||
With "scroll" enabled, mouse wheel events over the tabpanel area scroll the
|
||||
tab list up or down. The scroll step follows the 'mousescroll' setting.
|
||||
Wheel events inside the tabpanel area are consumed by the tabpanel and do not
|
||||
trigger |<ScrollWheelUp>| or |<ScrollWheelDown>| mappings.
|
||||
|
||||
To additionally show a vertical scrollbar indicating the current scroll
|
||||
position, use "scrollbar": >
|
||||
:set tabpanelopt+=scrollbar
|
||||
|
||||
The "scrollbar" value implies "scroll". A one-column scrollbar is reserved at
|
||||
the edge of the tabpanel; clicking on the scrollbar column moves the thumb to
|
||||
the click position, and the thumb can be dragged to scroll continuously.
|
||||
|
||||
When "vert" is combined with "scrollbar", the scrollbar is drawn next to the
|
||||
vertical separator, on the panel side.
|
||||
|
||||
The scrollbar uses the |hl-PmenuSbar| highlight group for the track and
|
||||
|hl-PmenuThumb| for the thumb.
|
||||
|
||||
The scroll offset is remembered across redraws but is reset when "scroll" or
|
||||
"scrollbar" is toggled off and back on.
|
||||
|
||||
==============================================================================
|
||||
6. Setting 'guitablabel' *setting-guitablabel*
|
||||
|
||||
|
||||
@@ -531,6 +531,7 @@ $quote eval.txt /*$quote*
|
||||
'ml' options.txt /*'ml'*
|
||||
'mle' options.txt /*'mle'*
|
||||
'mls' options.txt /*'mls'*
|
||||
'mlst' options.txt /*'mlst'*
|
||||
'mm' options.txt /*'mm'*
|
||||
'mmd' options.txt /*'mmd'*
|
||||
'mmp' options.txt /*'mmp'*
|
||||
@@ -539,6 +540,7 @@ $quote eval.txt /*$quote*
|
||||
'modeline' options.txt /*'modeline'*
|
||||
'modelineexpr' options.txt /*'modelineexpr'*
|
||||
'modelines' options.txt /*'modelines'*
|
||||
'modelinestrict' options.txt /*'modelinestrict'*
|
||||
'modifiable' options.txt /*'modifiable'*
|
||||
'modified' options.txt /*'modified'*
|
||||
'mopt' options.txt /*'mopt'*
|
||||
@@ -706,9 +708,11 @@ $quote eval.txt /*$quote*
|
||||
'nomh' options.txt /*'nomh'*
|
||||
'noml' options.txt /*'noml'*
|
||||
'nomle' options.txt /*'nomle'*
|
||||
'nomlst' options.txt /*'nomlst'*
|
||||
'nomod' options.txt /*'nomod'*
|
||||
'nomodeline' options.txt /*'nomodeline'*
|
||||
'nomodelineexpr' options.txt /*'nomodelineexpr'*
|
||||
'nomodelinestrict' options.txt /*'nomodelinestrict'*
|
||||
'nomodifiable' options.txt /*'nomodifiable'*
|
||||
'nomodified' options.txt /*'nomodified'*
|
||||
'nomore' options.txt /*'nomore'*
|
||||
@@ -891,6 +895,7 @@ $quote eval.txt /*$quote*
|
||||
'pumborder' options.txt /*'pumborder'*
|
||||
'pumheight' options.txt /*'pumheight'*
|
||||
'pummaxwidth' options.txt /*'pummaxwidth'*
|
||||
'pumopt' options.txt /*'pumopt'*
|
||||
'pumwidth' options.txt /*'pumwidth'*
|
||||
'pvh' options.txt /*'pvh'*
|
||||
'pvp' options.txt /*'pvp'*
|
||||
@@ -948,6 +953,7 @@ $quote eval.txt /*$quote*
|
||||
'scrollfocus' options.txt /*'scrollfocus'*
|
||||
'scrolljump' options.txt /*'scrolljump'*
|
||||
'scrolloff' options.txt /*'scrolloff'*
|
||||
'scrolloffpad' options.txt /*'scrolloffpad'*
|
||||
'scrollopt' options.txt /*'scrollopt'*
|
||||
'scs' options.txt /*'scs'*
|
||||
'sect' options.txt /*'sect'*
|
||||
@@ -1006,6 +1012,7 @@ $quote eval.txt /*$quote*
|
||||
'so' options.txt /*'so'*
|
||||
'softtabstop' options.txt /*'softtabstop'*
|
||||
'sol' options.txt /*'sol'*
|
||||
'sop' options.txt /*'sop'*
|
||||
'sourceany' vi_diff.txt /*'sourceany'*
|
||||
'sp' options.txt /*'sp'*
|
||||
'spc' options.txt /*'spc'*
|
||||
@@ -1555,7 +1562,6 @@ $quote eval.txt /*$quote*
|
||||
+vtp various.txt /*+vtp*
|
||||
+wayland various.txt /*+wayland*
|
||||
+wayland_clipboard various.txt /*+wayland_clipboard*
|
||||
+wayland_focus_steal various.txt /*+wayland_focus_steal*
|
||||
+wildignore various.txt /*+wildignore*
|
||||
+wildmenu various.txt /*+wildmenu*
|
||||
+windows various.txt /*+windows*
|
||||
@@ -5298,6 +5304,7 @@ E645 netbeans.txt /*E645*
|
||||
E646 netbeans.txt /*E646*
|
||||
E647 netbeans.txt /*E647*
|
||||
E648 netbeans.txt /*E648*
|
||||
E649 netbeans.txt /*E649*
|
||||
E65 pattern.txt /*E65*
|
||||
E650 netbeans.txt /*E650*
|
||||
E651 netbeans.txt /*E651*
|
||||
@@ -6342,6 +6349,7 @@ b:rust_cargo_check_benches ft_rust.txt /*b:rust_cargo_check_benches*
|
||||
b:rust_cargo_check_examples ft_rust.txt /*b:rust_cargo_check_examples*
|
||||
b:rust_cargo_check_tests ft_rust.txt /*b:rust_cargo_check_tests*
|
||||
b:rustfmt_autosave ft_rust.txt /*b:rustfmt_autosave*
|
||||
b:rustfmt_autosave_if_config_present ft_rust.txt /*b:rustfmt_autosave_if_config_present*
|
||||
b:tex_stylish syntax.txt /*b:tex_stylish*
|
||||
b:var eval.txt /*b:var*
|
||||
b:yaml_schema syntax.txt /*b:yaml_schema*
|
||||
@@ -7962,7 +7970,6 @@ g:netrw_ssh_browse_reject pi_netrw.txt /*g:netrw_ssh_browse_reject*
|
||||
g:netrw_ssh_cmd pi_netrw.txt /*g:netrw_ssh_cmd*
|
||||
g:netrw_sshport pi_netrw.txt /*g:netrw_sshport*
|
||||
g:netrw_timefmt pi_netrw.txt /*g:netrw_timefmt*
|
||||
g:netrw_tmpfile_escape pi_netrw.txt /*g:netrw_tmpfile_escape*
|
||||
g:netrw_uid pi_netrw.txt /*g:netrw_uid*
|
||||
g:netrw_use_noswf pi_netrw.txt /*g:netrw_use_noswf*
|
||||
g:netrw_use_nt_rcp pi_netrw.txt /*g:netrw_use_nt_rcp*
|
||||
@@ -8037,7 +8044,6 @@ g:vim_indent_cont indent.txt /*g:vim_indent_cont*
|
||||
g:vim_json_conceal syntax.txt /*g:vim_json_conceal*
|
||||
g:vim_json_warnings syntax.txt /*g:vim_json_warnings*
|
||||
g:vimball_home pi_vimball.txt /*g:vimball_home*
|
||||
g:vimball_mkdir pi_vimball.txt /*g:vimball_mkdir*
|
||||
g:vimsyn_comment_strings syntax.txt /*g:vimsyn_comment_strings*
|
||||
g:vimsyn_embed syntax.txt /*g:vimsyn_embed*
|
||||
g:vimsyn_folding syntax.txt /*g:vimsyn_folding*
|
||||
@@ -8485,6 +8491,7 @@ hl-User1 syntax.txt /*hl-User1*
|
||||
hl-User1..9 syntax.txt /*hl-User1..9*
|
||||
hl-User9 syntax.txt /*hl-User9*
|
||||
hl-VertSplit syntax.txt /*hl-VertSplit*
|
||||
hl-VertSplitNC syntax.txt /*hl-VertSplitNC*
|
||||
hl-Visual syntax.txt /*hl-Visual*
|
||||
hl-VisualNOS syntax.txt /*hl-VisualNOS*
|
||||
hl-WarningMsg syntax.txt /*hl-WarningMsg*
|
||||
@@ -10545,6 +10552,7 @@ status-line windows.txt /*status-line*
|
||||
statusmsg-variable eval.txt /*statusmsg-variable*
|
||||
stl-%! options.txt /*stl-%!*
|
||||
stl-%@ options.txt /*stl-%@*
|
||||
stl-%[FuncName] options.txt /*stl-%[FuncName]*
|
||||
stl-%{ options.txt /*stl-%{*
|
||||
str2blob() builtin.txt /*str2blob()*
|
||||
str2float() builtin.txt /*str2float()*
|
||||
@@ -10881,6 +10889,7 @@ tabpagebuflist() builtin.txt /*tabpagebuflist()*
|
||||
tabpagenr() builtin.txt /*tabpagenr()*
|
||||
tabpagewinnr() builtin.txt /*tabpagewinnr()*
|
||||
tabpanel tabpage.txt /*tabpanel*
|
||||
tabpanel-scroll tabpage.txt /*tabpanel-scroll*
|
||||
tag tagsrch.txt /*tag*
|
||||
tag-! tagsrch.txt /*tag-!*
|
||||
tag-binary-search tagsrch.txt /*tag-binary-search*
|
||||
@@ -11795,8 +11804,6 @@ waittime channel.txt /*waittime*
|
||||
warningmsg-variable eval.txt /*warningmsg-variable*
|
||||
wayland wayland.txt /*wayland*
|
||||
wayland-and-x11 wayland.txt /*wayland-and-x11*
|
||||
wayland-focus-steal wayland.txt /*wayland-focus-steal*
|
||||
wayland-gnome wayland.txt /*wayland-gnome*
|
||||
wayland-gui wayland.txt /*wayland-gui*
|
||||
wayland-persist wayland.txt /*wayland-persist*
|
||||
wayland-primary-selection wayland.txt /*wayland-primary-selection*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*terminal.txt* For Vim version 9.2. Last change: 2026 Mar 12
|
||||
*terminal.txt* For Vim version 9.2. Last change: 2026 Apr 06
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -596,7 +596,7 @@ term_dumpwrite({buf}, {filename} [, {options}]) *term_dumpwrite()*
|
||||
name: >
|
||||
GetFilename()->term_dumpwrite(bufnr)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
term_getaltscreen({buf}) *term_getaltscreen()*
|
||||
@@ -817,7 +817,7 @@ term_sendkeys({buf}, {keys}) *term_sendkeys()*
|
||||
Can also be used as a |method|: >
|
||||
GetBufnr()->term_sendkeys(keys)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
term_setansicolors({buf}, {colors}) *term_setansicolors()*
|
||||
@@ -852,7 +852,7 @@ term_setansicolors({buf}, {colors}) *term_setansicolors()*
|
||||
Can also be used as a |method|: >
|
||||
GetBufnr()->term_setansicolors(colors)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
{only available with GUI enabled and/or the |+termguicolors|
|
||||
feature}
|
||||
@@ -870,7 +870,7 @@ term_setapi({buf}, {expr}) *term_setapi()*
|
||||
When used as a method the base is used for {buf}: >
|
||||
GetBufnr()->term_setapi({expr})
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
term_setkill({buf}, {how}) *term_setkill()*
|
||||
@@ -888,7 +888,7 @@ term_setkill({buf}, {how}) *term_setkill()*
|
||||
Can also be used as a |method|: >
|
||||
GetBufnr()->term_setkill(how)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
term_setrestore({buf}, {command}) *term_setrestore()*
|
||||
@@ -903,7 +903,7 @@ term_setrestore({buf}, {command}) *term_setrestore()*
|
||||
Can also be used as a |method|: >
|
||||
GetBufnr()->term_setrestore(command)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
term_setsize({buf}, {rows}, {cols}) *term_setsize()* *E955*
|
||||
@@ -919,7 +919,7 @@ term_setsize({buf}, {rows}, {cols}) *term_setsize()* *E955*
|
||||
Can also be used as a |method|: >
|
||||
GetBufnr()->term_setsize(rows, cols)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
term_start({cmd} [, {options}]) *term_start()*
|
||||
@@ -944,9 +944,26 @@ term_start({cmd} [, {options}]) *term_start()*
|
||||
"in_io", "in_top", "in_bot", "in_name", "in_buf"
|
||||
"out_io", "out_name", "out_buf", "out_modifiable", "out_msg"
|
||||
"err_io", "err_name", "err_buf", "err_modifiable", "err_msg"
|
||||
However, at least one of stdin, stdout or stderr must be
|
||||
connected to the terminal. When I/O is connected to the
|
||||
terminal then the callback function for that part is not used.
|
||||
On Unix:
|
||||
stdin, stdout, and stderr are connected to a pty by default,
|
||||
since bidirectional communication with the terminal is
|
||||
required. Setting "out_cb" does not switch stdout from the
|
||||
pty to a pipe. Only setting "err_cb" switches stderr to a
|
||||
pipe.
|
||||
Note: Since a pty is line-buffered and a pipe is
|
||||
block-buffered, the order of output between stdout and stderr
|
||||
may not be preserved. Without "err_cb", stderr uses the same
|
||||
pty as stdout, so the output order is preserved but stdout and
|
||||
stderr cannot be distinguished.
|
||||
|
||||
On MS-Windows with |ConPTY|:
|
||||
stdin, stdout, and stderr are always connected through pipes
|
||||
to the pseudo console, regardless of callback settings.
|
||||
Since stdout and stderr share the same pipe, they cannot be
|
||||
separated by "err_cb".
|
||||
This is because the CreatePseudoConsole() API only accepts one
|
||||
input and one output handle, with no separate handle for
|
||||
stderr.
|
||||
|
||||
There are extra options:
|
||||
"term_name" name to use for the buffer name, instead
|
||||
@@ -1010,7 +1027,7 @@ term_wait({buf} [, {time}]) *term_wait()*
|
||||
Can also be used as a |method|: >
|
||||
GetBufnr()->term_wait()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
==============================================================================
|
||||
3. Terminal communication *terminal-communication*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*testing.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*testing.txt* For Vim version 9.2. Last change: 2026 Apr 06
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -46,14 +46,14 @@ test_alloc_fail({id}, {countdown}, {repeat}) *test_alloc_fail()*
|
||||
Can also be used as a |method|: >
|
||||
GetAllocId()->test_alloc_fail()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
test_autochdir() *test_autochdir()*
|
||||
Set a flag to enable the effect of 'autochdir' before Vim
|
||||
startup has finished.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
test_feedinput({string}) *test_feedinput()*
|
||||
@@ -64,7 +64,7 @@ test_feedinput({string}) *test_feedinput()*
|
||||
Can also be used as a |method|: >
|
||||
GetText()->test_feedinput()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
test_garbagecollect_now() *test_garbagecollect_now()*
|
||||
@@ -75,13 +75,13 @@ test_garbagecollect_now() *test_garbagecollect_now()*
|
||||
This will not work when called from a :def function, because
|
||||
variables on the stack will be freed.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
test_garbagecollect_soon() *test_garbagecollect_soon()*
|
||||
Set the flag to call the garbagecollector as if in the main
|
||||
loop. Only to be used in tests.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
test_getvalue({name}) *test_getvalue()*
|
||||
Get the value of an internal variable. These values for
|
||||
@@ -237,7 +237,7 @@ test_ignore_error({expr}) *test_ignore_error()*
|
||||
Can also be used as a |method|: >
|
||||
GetErrorText()->test_ignore_error()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
test_mswin_event({event}, {args}) *test_mswin_event()*
|
||||
Generate a low-level MS-Windows {event} with arguments {args}
|
||||
@@ -381,7 +381,7 @@ test_option_not_set({name}) *test_option_not_set()*
|
||||
Can also be used as a |method|: >
|
||||
GetOptionName()->test_option_not_set()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
test_override({name}, {val}) *test_override()*
|
||||
Overrides certain parts of Vim's internal processing to be
|
||||
@@ -438,7 +438,7 @@ test_override({name}, {val}) *test_override()*
|
||||
< Can also be used as a |method|: >
|
||||
GetOverrideVal()-> test_override('starting')
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
test_refcount({expr}) *test_refcount()*
|
||||
Return the reference count of {expr}. When {expr} is of a
|
||||
@@ -457,7 +457,7 @@ test_setmouse({row}, {col}) *test_setmouse()*
|
||||
call test_setmouse(4, 20)
|
||||
call feedkeys("\<LeftMouse>", "xt")
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
test_settime({expr}) *test_settime()*
|
||||
@@ -472,13 +472,13 @@ test_settime({expr}) *test_settime()*
|
||||
Can also be used as a |method|: >
|
||||
GetTime()->test_settime()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
test_srand_seed([{seed}]) *test_srand_seed()*
|
||||
When {seed} is given this sets the seed value used by
|
||||
`srand()`. When omitted the test seed is removed.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
test_unknown() *test_unknown()*
|
||||
Return a value with unknown type. Only useful for testing.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*textprop.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*textprop.txt* For Vim version 9.2. Last change: 2026 Apr 07
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -270,6 +270,8 @@ prop_add_list({props}, [{item}, ...]) *prop_add_list()*
|
||||
<
|
||||
Can also be used as a |method|: >
|
||||
GetProp()->prop_add_list([[1, 1, 1, 2], [1, 4, 1, 8]])
|
||||
<
|
||||
Return type: void
|
||||
|
||||
|
||||
prop_clear({lnum} [, {lnum-end} [, {props}]]) *prop_clear()*
|
||||
@@ -283,7 +285,7 @@ prop_clear({lnum} [, {lnum-end} [, {props}]]) *prop_clear()*
|
||||
Can also be used as a |method|: >
|
||||
GetLnum()->prop_clear()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
prop_find({props} [, {direction}]) *prop_find()*
|
||||
@@ -444,7 +446,7 @@ prop_type_add({name}, {props}) *prop_type_add()* *E969* *E970*
|
||||
Can also be used as a |method|: >
|
||||
GetPropName()->prop_type_add(props)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
prop_type_change({name}, {props}) *prop_type_change()*
|
||||
@@ -455,7 +457,7 @@ prop_type_change({name}, {props}) *prop_type_change()*
|
||||
Can also be used as a |method|: >
|
||||
GetPropName()->prop_type_change(props)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
prop_type_delete({name} [, {props}]) *prop_type_delete()*
|
||||
@@ -472,7 +474,7 @@ prop_type_delete({name} [, {props}]) *prop_type_delete()*
|
||||
Can also be used as a |method|: >
|
||||
GetPropName()->prop_type_delete()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
prop_type_get({name} [, {props}]) *prop_type_get()*
|
||||
@@ -509,7 +511,9 @@ will move accordingly.
|
||||
|
||||
When text is deleted and a text property no longer includes any text, it is
|
||||
deleted. However, a text property that was defined as zero-width will remain,
|
||||
unless the whole line is deleted.
|
||||
unless the whole line is deleted. When lines are joined by a multi-line
|
||||
substitute command, virtual text properties on the deleted lines are moved to
|
||||
the resulting joined line.
|
||||
*E275*
|
||||
When a buffer is unloaded, all the text properties are gone. There is no way
|
||||
to store the properties in a file. You can only re-create them. When a
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*various.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*various.txt* For Vim version 9.2. Last change: 2026 Apr 20
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -529,9 +529,6 @@ T *+vreplace* |gR| and |gr|
|
||||
*+vtp* on MS-Windows console: support for 'termguicolors'
|
||||
N *+wayland* Unix only: support for the Wayland protocol.
|
||||
N *+wayland_clipboard* Unix only: support for Wayland selections/clipboard.
|
||||
N *+wayland_focus_steal*
|
||||
Unix only: support for Wayland clipboard on
|
||||
compositors without a data control protocol
|
||||
T *+wildignore* 'wildignore' Always enabled since 9.0.0278
|
||||
T *+wildmenu* 'wildmenu' Always enabled since 9.0.0279
|
||||
T *+windows* more than one window; Always enabled since 8.0.1118.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*version9.txt* For Vim version 9.2. Last change: 2026 Mar 25
|
||||
*version9.txt* For Vim version 9.2. Last change: 2026 Apr 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -41954,7 +41954,7 @@ Vim Arguments: ~
|
||||
|
||||
Configure Switches: ~
|
||||
--with-wayland Enable the |wayland| feature.
|
||||
--enable-wayland-focus-steal Enable the |wayland-focus-steal| feature.
|
||||
--enable-wayland-focus-steal Enable the wayland-focus-steal feature.
|
||||
--enable-socketserver Enable the |socketserver-clientserver|
|
||||
feature.
|
||||
|
||||
@@ -52613,18 +52613,35 @@ Other ~
|
||||
pairs individually (e.g. 'listchars', 'fillchars', 'diffopt').
|
||||
- |system()| and |systemlist()| functions accept a list as first argument,
|
||||
bypassing the shell completely.
|
||||
- Allow mouse clickable regions in the 'statusline', 'tabline' and the
|
||||
'tabpanel' using the |stl-%[FuncName]| atom.
|
||||
- Enable reflow support in the |:terminal|.
|
||||
- Added "scroll" and "scrollbar" sub-options to 'tabpanelopt' so the
|
||||
tabpanel can scroll when the tab list exceeds the visible screen
|
||||
height.
|
||||
|
||||
Platform specific ~
|
||||
-----------------
|
||||
- support OpenType font features in 'guifont' for DirectWrite (Win32)
|
||||
|
||||
xxd ~
|
||||
---
|
||||
Add "-t" option to append a terminating NUL byte to C include output (-i).
|
||||
|
||||
*changed-9.3*
|
||||
Changed~
|
||||
Changed ~
|
||||
-------
|
||||
- Support for NeXTStep was dropped with patch v9.2.0122
|
||||
- |json_decode()| is stricter: keywords must be lowercase, lone surrogates are
|
||||
now invalid
|
||||
- |js_decode()| rejects lone surrogates
|
||||
- virtual text properties on lines deleted by a multi-line substitute
|
||||
are moved to the resulting joined line instead of being dropped.
|
||||
- Only a few whitelisted options are allowed to be set by a modeline to
|
||||
improve overall security, see for details: 'modelinestrict'
|
||||
- Removed the Wayland focus steal feature 'wlsteal', since it causes too many
|
||||
issues and can now be re-implemted using the |clipboard-providers| feature
|
||||
if needed, see |wayland-primary-selection| for an example.
|
||||
|
||||
*added-9.3*
|
||||
Added ~
|
||||
@@ -52641,6 +52658,9 @@ Autocommands: ~
|
||||
|
||||
Options: ~
|
||||
|
||||
'modelinestrict' Only allow safe options to be set from a modeline.
|
||||
'pumopt' Additional options for the popup menu.
|
||||
'scrolloffpad' Vertically center cursor at end of file.
|
||||
'statuslineopt' Extra window-local options for the 'statusline', to
|
||||
configure the height.
|
||||
't_BS' Begin synchronized update.
|
||||
@@ -52649,6 +52669,10 @@ Options: ~
|
||||
'termsync' Enable support for terminal DEC 2026 sync mode.
|
||||
'winhighlight' Window-local highlight group mappings.
|
||||
|
||||
Highlighting: ~
|
||||
|
||||
|hl-VertSplitNC| Column separator of non-current window.
|
||||
|
||||
==============================================================================
|
||||
PATCHES *patches-9.3* *bug-fixes-9.3*
|
||||
*patches-after-9.2*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*wayland.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*wayland.txt* For Vim version 9.2. Last change: 2026 Apr 20
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -54,15 +54,12 @@ try connecting again.
|
||||
2. Wayland Selections *wayland-selections*
|
||||
|
||||
Vim supports the wlr-data-control-unstable-v1 and ext-data-control-v1
|
||||
protocols, for accessing the current Wayland selection. These are the best
|
||||
case scenario protocols, see |wayland-focus-steal|. Selection in this case
|
||||
protocols, for accessing the current Wayland selection. Selection in this case
|
||||
essentially means the "clipboard." You can check if your Wayland compositor
|
||||
supports either of these protocols by running the wayland-info command, which
|
||||
should be bundled with libwayland on your system: >
|
||||
wayland-info | grep -E '(ext_data_control|zwlr_data_control)'
|
||||
<If grep finds a match, then you have either or both protocols 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)
|
||||
@@ -90,39 +87,65 @@ Vim determines which one to use when accessing the clipboard using the
|
||||
|
||||
*wayland-primary-selection*
|
||||
If you find X11 style primary selections useful, Wayland also implements this
|
||||
behaviour in its own protocols:
|
||||
feature using the protocols that Vim supports. This is unless you are using
|
||||
version 1 (not the same as the 'v1' in the protocol name), of the
|
||||
wlr-data-control protocol, then primary selection will not be supported. You
|
||||
can check this using >
|
||||
wayland-info | grep -E '(ext_data_control|zwlr_data_control)'
|
||||
If the "version:" entry for "zwlr_data_control_manager_v1" is "2" or greater,
|
||||
then primary selection is supported. If you also get
|
||||
"ext_data_control_manager_v1", then Vim will use that protocol instead, which
|
||||
has primary selection support builtin into it.
|
||||
|
||||
- The primary selection protocol is the most widely supported, but requires
|
||||
focus in order to be used, see |wayland-focus-steal|.
|
||||
If your Wayland compositor does not support the wlr-data-control-v1 or the
|
||||
ext-data-control-v1 protocol, Vim cannot access the clipboard directly through
|
||||
the Wayland protocol. External tools such as wl-clipboard can be used instead
|
||||
via a user-defined |clipboard-providers|.
|
||||
|
||||
- Data control protocol available on your system, such as the ext or wlr
|
||||
protocols, then primary selection is also supported. This is unless you are
|
||||
using version 1 (not the same as the 'v1' in the protocol name), of the
|
||||
wlr-data-control protocol. Then the primary selection protocol will be used
|
||||
as a fallback.
|
||||
Example: define a provider that shells out to `wl-copy` and `wl-paste`: >vim9
|
||||
|
||||
*wayland-focus-steal* *wayland-gnome*
|
||||
If you are using the GNOME desktop environment on Wayland, as of this writing,
|
||||
there is no method of accessing/modifying the clipboard for external clients
|
||||
such as Vim without being focused. Focused in this case means the client has
|
||||
received some sort of input event, such as a window being focused. This is
|
||||
what the wlr-data-control-unstable-v1 and ext-data-control-v1 protocols solve.
|
||||
If your Wayland compositor does not support the above protocols, then the
|
||||
above explanation applies.
|
||||
vim9script
|
||||
|
||||
To solve this problem, Vim implements a way of gaining focus in order to
|
||||
access the clipboard, by creating a temporary transparent top-level surface.
|
||||
This is by default disabled and can be enabled via the 'wlsteal' option.
|
||||
Moreover, a seat that has a keyboard is also required, see 'wlseat', and the
|
||||
xdg-shell protocol must be available. Additionally, Vim must be compiled with
|
||||
the |+wayland_focus_steal| feature.
|
||||
def Available(): bool
|
||||
return executable('wl-copy') && executable('wl-paste')
|
||||
enddef
|
||||
|
||||
Note that this method can have several side effects from the result of focus
|
||||
stealing. For example, if you have a taskbar that shows currently opened apps
|
||||
in your desktop environment, then when Vim attempts to steal focus, it may
|
||||
"flicker," as if a window was opened then immediately closed after.
|
||||
Additionally, if you are in fullscreen mode, this focus stealing won't work,
|
||||
because the created surface won't ever gain focus. If this happens, Vim will
|
||||
seem to freeze temporarily, see 'wltimeoutlen' for more information.
|
||||
def Copy(reg: string, type: string, str: list<string>)
|
||||
var args = "wl-copy"
|
||||
|
||||
if reg == "*"
|
||||
args ..= " -p"
|
||||
endif
|
||||
|
||||
system(args, str)
|
||||
enddef
|
||||
|
||||
def Paste(reg: string): tuple<string, list<string>>
|
||||
var args = "wl-paste --type text/plain;charset=utf-8"
|
||||
|
||||
if reg == "*"
|
||||
args ..= " -p"
|
||||
endif
|
||||
|
||||
return ("", systemlist(args))
|
||||
enddef
|
||||
|
||||
v:clipproviders["wl_clipboard"] = {
|
||||
available: Available,
|
||||
copy: {
|
||||
"+": Copy,
|
||||
"*": Copy
|
||||
},
|
||||
paste: {
|
||||
"+": Paste,
|
||||
"*": Paste
|
||||
}
|
||||
}
|
||||
|
||||
set clipmethod=wl_clipboard
|
||||
|
||||
|
||||
This relies on the wl-clipboard package being installed
|
||||
(https://github.com/bugaevc/wl-clipboard).
|
||||
|
||||
vim:tw=78:ts=8:noet:ft=help:norl
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.TH XXD 1 "May 2024" "Справочник по программе xxd"
|
||||
.TH XXD 1 "Март 2026" "Справочник по программе xxd"
|
||||
.\"
|
||||
.\" 21st May 1996
|
||||
.\" Man page author:
|
||||
@@ -203,6 +203,10 @@ ASCII,
|
||||
Если аргумент \-s не используется, то программа xxd начинает обработку
|
||||
от текущей позиции в файле.
|
||||
.TP
|
||||
.I \-t
|
||||
При использовании аргумента \-i для вывода в стиле подключаемых заголовочных
|
||||
файлов языка Си также включать завершающий нулевой символ
|
||||
.TP
|
||||
.I \-u
|
||||
Указывает, что в выводе отображать шестнадцатеричные цифры в верхнем регистре.
|
||||
По умолчанию используются символы в нижнем регистре символов.
|
||||
@@ -304,7 +308,7 @@ PostScript
|
||||
.br
|
||||
\fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
|
||||
.br
|
||||
2e544820585844203120224d6179203230323422
|
||||
2e544820585844203120224d6172203230323622
|
||||
.br
|
||||
20224d616e75616c207061676520666f72207878
|
||||
.br
|
||||
@@ -327,7 +331,7 @@ PostScript
|
||||
.br
|
||||
00000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
|
||||
.br
|
||||
0000000c: 6179 2032 3032 3422 2022 4d61 ay 2024" "Ma
|
||||
0000000c: 6172 2032 3032 3622 2022 4d61 ar 2026" "Ma
|
||||
.br
|
||||
00000018: 6e75 616c 2070 6167 6520 666f nual page fo
|
||||
.br
|
||||
@@ -433,6 +437,20 @@ PostScript
|
||||
.br
|
||||
\fI% echo \-n foo \> /dev/term/b\fR
|
||||
.PP
|
||||
Вывод в стиле подключаемых заголовочных файлв языка Си с завершающим нулём
|
||||
.br
|
||||
\fI% echo -n \&"0123456789\&" > digits\fR
|
||||
.br
|
||||
\fI% xxd -i -t digits\fR
|
||||
.br
|
||||
unsigned char digits[] = {
|
||||
.br
|
||||
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x00
|
||||
.br
|
||||
};
|
||||
.br
|
||||
unsigned int digits_len = 10;
|
||||
.PP
|
||||
.SH КОДЫ ЗАВЕРШЕНИЯ
|
||||
При завершении работы, программа xxd возвращает следующие значения:
|
||||
.TP
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.TH XXD 1 "May 2024" "Справочник по программе xxd"
|
||||
.TH XXD 1 "Март 2026" "Справочник по программе xxd"
|
||||
.\"
|
||||
.\" 21st May 1996
|
||||
.\" Man page author:
|
||||
@@ -203,6 +203,10 @@ ASCII, которые можно передавать по электронно
|
||||
Если аргумент \-s не используется, то программа xxd начинает обработку
|
||||
от текущей позиции в файле.
|
||||
.TP
|
||||
.I \-t
|
||||
При использовании аргумента \-i для вывода в стиле подключаемых заголовочных
|
||||
файлов языка Си также включать завершающий нулевой символ
|
||||
.TP
|
||||
.I \-u
|
||||
Указывает, что в выводе отображать шестнадцатеричные цифры в верхнем регистре.
|
||||
По умолчанию используются символы в нижнем регистре символов.
|
||||
@@ -304,7 +308,7 @@ PostScript с помощью команды xxd \-r \-p количество к
|
||||
.br
|
||||
\fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
|
||||
.br
|
||||
2e544820585844203120224d6179203230323422
|
||||
2e544820585844203120224d6172203230323622
|
||||
.br
|
||||
20224d616e75616c207061676520666f72207878
|
||||
.br
|
||||
@@ -327,7 +331,7 @@ PostScript с помощью команды xxd \-r \-p количество к
|
||||
.br
|
||||
00000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
|
||||
.br
|
||||
0000000c: 6179 2032 3032 3422 2022 4d61 ay 2024" "Ma
|
||||
0000000c: 6172 2032 3032 3622 2022 4d61 ar 2026" "Ma
|
||||
.br
|
||||
00000018: 6e75 616c 2070 6167 6520 666f nual page fo
|
||||
.br
|
||||
@@ -433,6 +437,20 @@ PostScript с помощью команды xxd \-r \-p количество к
|
||||
.br
|
||||
\fI% echo \-n foo \> /dev/term/b\fR
|
||||
.PP
|
||||
Вывод в стиле подключаемых заголовочных файлв языка Си с завершающим нулём
|
||||
.br
|
||||
\fI% echo -n \&"0123456789\&" > digits\fR
|
||||
.br
|
||||
\fI% xxd -i -t digits\fR
|
||||
.br
|
||||
unsigned char digits[] = {
|
||||
.br
|
||||
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x00
|
||||
.br
|
||||
};
|
||||
.br
|
||||
unsigned int digits_len = 10;
|
||||
.PP
|
||||
.SH КОДЫ ЗАВЕРШЕНИЯ
|
||||
При завершении работы, программа xxd возвращает следующие значения:
|
||||
.TP
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim support file to detect file types
|
||||
"
|
||||
" Maintainer: The Vim Project <https://github.com/vim/vim>
|
||||
" Last Change: 2026 Mar 24
|
||||
" Last Change: 2026 Apr 20
|
||||
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
|
||||
" If the filetype can be detected from extension or file name(the final path component),
|
||||
@@ -890,7 +890,7 @@ au BufNewFile,BufRead requirements/*.txt setf requirements
|
||||
au BufNewFile,BufRead requires/*.txt setf requirements
|
||||
|
||||
" Pkl
|
||||
au BufNewFile,BufRead *.pkl,*.pcf,pkl-lsp://* setf pkl
|
||||
au BufNewFile,BufRead PklProject,*.pkl,*.pcf,pkl-lsp://* setf pkl
|
||||
|
||||
" WIC kickstarter files
|
||||
au BufNewFile,BufRead *.wks,*.wks.in,*.wks.inc setf wks
|
||||
@@ -1312,7 +1312,7 @@ au BufNewFile,BufRead *Xmodmap setf xmodmap
|
||||
au BufNewFile,BufRead *.y call dist#ft#FTy()
|
||||
|
||||
" Yaml
|
||||
au BufNewFile,BufRead */.kube/config,*/.kube/kuberc setf yaml
|
||||
au BufNewFile,BufRead buf.lock,*/.kube/config,*/.kube/kuberc setf yaml
|
||||
|
||||
" yum conf (close enough to dosini)
|
||||
au BufNewFile,BufRead */etc/yum.conf setf dosini
|
||||
@@ -1617,6 +1617,10 @@ au BufNewFile,BufRead *.txt
|
||||
\| setf text
|
||||
\| endif
|
||||
|
||||
" Ghostty configuration
|
||||
au BufNewFile,BufRead */ghostty/config setf ghostty
|
||||
au BufNewFile,BufRead */ghostty/themes/* call s:StarSetf('ghostty')
|
||||
au BufNewFile,BufRead */com.mitchellh.ghostty/config setf ghostty
|
||||
|
||||
|
||||
" Generic log file
|
||||
|
||||
10
runtime/ftplugin/ghostty.vim
Normal file
10
runtime/ftplugin/ghostty.vim
Normal file
@@ -0,0 +1,10 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: ghostty
|
||||
|
||||
" Quit if a ftplugin file was already loaded
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Use the cfg plugin, it's similar enough.
|
||||
runtime! ftplugin/cfg.vim
|
||||
@@ -4,6 +4,8 @@
|
||||
" Previous Maintainer: Will Langstroth <will@langstroth.com>
|
||||
" URL: https://github.com/benknoble/vim-racket
|
||||
" Last Change: 2025 Aug 09
|
||||
" 2026 Mar 31 by Vim project: use shellescape for the K mapping
|
||||
" 2026 Apr 01 by Vim project: make K mapping more robust for shell injection
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
@@ -51,7 +53,7 @@ if !exists("no_plugin_maps") && !exists("no_racket_maps")
|
||||
try
|
||||
let l:old_a = @a
|
||||
normal! gv"ay
|
||||
call system("raco docs '". @a . "'")
|
||||
call system("raco docs -- ". string(shellescape(@a)))
|
||||
redraw!
|
||||
return @a
|
||||
finally
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" These commands create the option window.
|
||||
"
|
||||
" Maintainer: The Vim Project <https://github.com/vim/vim>
|
||||
" Last Change: 2026 Mar 11
|
||||
" Last Change: 2026 Apr 21
|
||||
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
|
||||
" If there already is an option window, jump to that one.
|
||||
@@ -351,6 +351,8 @@ call append("$", "\t" .. s:local_to_window)
|
||||
call <SID>BinOptionL("sms")
|
||||
call <SID>AddOption("scrolloff", gettext("number of screen lines to show around the cursor"))
|
||||
call append("$", " \tset so=" . &so)
|
||||
call <SID>AddOption("scrolloffpad", gettext("vertically center cursor even at end of file"))
|
||||
call append("$", " \tset sop=" . &sop)
|
||||
call <SID>AddOption("wrap", gettext("long lines wrap"))
|
||||
call append("$", "\t" .. s:local_to_window)
|
||||
call <SID>BinOptionL("wrap")
|
||||
@@ -833,10 +835,6 @@ if has('wayland')
|
||||
call <SID>AddOption("wlseat", gettext("Wayland seat to use"))
|
||||
call <SID>OptionG("wse", &wse)
|
||||
endif
|
||||
if has("wayland_focus_steal")
|
||||
call <SID>AddOption("wlsteal", gettext("Enable wayland focus stealing functionality in order to access the clipboard"))
|
||||
call <SID>BinOptionG("wst", &wst)
|
||||
endif
|
||||
call <SID>AddOption("keymodel", gettext("\"startsel\" and/or \"stopsel\"; what special keys can do"))
|
||||
call <SID>OptionG("km", &km)
|
||||
|
||||
@@ -913,6 +911,8 @@ if has("insert_expand")
|
||||
call <SID>OptionG("pmw", &pmw)
|
||||
call <SID>AddOption("pumborder", gettext("popup border style"))
|
||||
call <SID>OptionG("pb", &pb)
|
||||
call <SID>AddOption("pumopt", gettext("additional options for the popup menu"))
|
||||
call <SID>OptionG("pumopt", &pumopt)
|
||||
call <SID>AddOption("completefunc", gettext("user defined function for Insert mode completion"))
|
||||
call append("$", "\t" .. s:local_to_buffer)
|
||||
call <SID>OptionL("cfu")
|
||||
@@ -1106,6 +1106,8 @@ call append("$", "\t" .. s:local_to_buffer)
|
||||
call <SID>BinOptionL("ml")
|
||||
call <SID>AddOption("modelineexpr", gettext("allow setting expression options from a modeline"))
|
||||
call <SID>BinOptionG("mle", &mle)
|
||||
call <SID>AddOption("modelinestrict", gettext("only allow safe options to be set from a modeline"))
|
||||
call <SID>BinOptionG("modelinestrict", &modelinestrict)
|
||||
call <SID>AddOption("modelines", gettext("number of lines to check for modelines"))
|
||||
call append("$", " \tset mls=" . &mls)
|
||||
call <SID>AddOption("binary", gettext("binary file editing"))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
vim9script
|
||||
|
||||
# Highlight Yank plugin
|
||||
# Last Change: 2025 Mar 22
|
||||
# Last Change: 2026 Apr 11
|
||||
|
||||
def HighlightedYank()
|
||||
|
||||
@@ -28,7 +28,11 @@ def HighlightedYank()
|
||||
return [v[0][1], col_beg, col_end - col_beg]
|
||||
}))
|
||||
var winid = win_getid()
|
||||
timer_start(duration, (_) => m->matchdelete(winid))
|
||||
timer_start(duration, (_) => {
|
||||
if winbufnr(winid) != -1
|
||||
m->matchdelete(winid)
|
||||
endif
|
||||
})
|
||||
endif
|
||||
enddef
|
||||
|
||||
|
||||
35
runtime/pack/dist/opt/netrw/autoload/netrw.vim
vendored
35
runtime/pack/dist/opt/netrw/autoload/netrw.vim
vendored
@@ -22,6 +22,12 @@
|
||||
" 2026 Feb 21 by Vim Project better absolute path detection on MS-Windows #19477
|
||||
" 2026 Feb 27 by Vim Project Make the hostname validation more strict
|
||||
" 2026 Mar 01 by Vim Project include portnumber in hostname checking #19533
|
||||
" 2026 Apr 01 by Vim Project use fnameescape() with netrw#FileUrlEdit()
|
||||
" 2026 Apr 05 by Vim Project Fix netrw#RFC2396() #19913
|
||||
" 2026 Apr 15 by Vim Project Add missing escape()
|
||||
" 2026 Apr 19 by Vim Project expand ~ on Windows #20003
|
||||
" 2026 Apr 21 by Vim Project fix shell-injection via tempfile suffix (sftp://, file://)
|
||||
" 2026 Apr 21 by Vim Project drop unused g:netrw_tmpfile_escape
|
||||
" 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
|
||||
@@ -396,7 +402,6 @@ else
|
||||
call s:NetrwInit("g:netrw_glob_escape",'*[]?`{~$\')
|
||||
endif
|
||||
call s:NetrwInit("g:netrw_menu_escape",'.&? \')
|
||||
call s:NetrwInit("g:netrw_tmpfile_escape",' &;')
|
||||
call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"")
|
||||
if has("gui_running") && (&enc == 'utf-8' || &enc == 'utf-16' || &enc == 'ucs-4')
|
||||
let s:treedepthstring= "│ "
|
||||
@@ -527,8 +532,8 @@ function netrw#Explore(indx,dosplit,style,...)
|
||||
NetrwKeepj norm! 0
|
||||
|
||||
if a:0 > 0
|
||||
if a:1 =~ '^\~' && (has("unix") || g:netrw_cygwin)
|
||||
let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),''))
|
||||
if a:1 =~ '^\~' && (has("unix") || has("win32") || g:netrw_cygwin)
|
||||
let dirname= simplify(substitute(a:1,'^\~',escape(expand("$HOME"),'\&~'),''))
|
||||
elseif a:1 == '.'
|
||||
let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd())
|
||||
if dirname !~ '/$'
|
||||
@@ -1817,14 +1822,14 @@ function netrw#NetRead(mode,...)
|
||||
".........................................
|
||||
" NetRead: (sftp) NetRead Method #9 {{{3
|
||||
elseif b:netrw_method == 9
|
||||
call netrw#os#Execute(s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".netrw#os#Escape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
|
||||
call netrw#os#Execute(s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".netrw#os#Escape(g:netrw_machine.":".b:netrw_fname,1)." ".netrw#os#Escape(tmpfile,1))
|
||||
let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
|
||||
let b:netrw_lastfile = choice
|
||||
|
||||
".........................................
|
||||
" NetRead: (file) NetRead Method #10 {{{3
|
||||
elseif b:netrw_method == 10 && exists("g:netrw_file_cmd")
|
||||
call netrw#os#Execute(s:netrw_silentxfer."!".g:netrw_file_cmd." ".netrw#os#Escape(b:netrw_fname,1)." ".tmpfile)
|
||||
call netrw#os#Execute(s:netrw_silentxfer."!".g:netrw_file_cmd." ".netrw#os#Escape(b:netrw_fname,1)." ".netrw#os#Escape(tmpfile,1))
|
||||
let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
|
||||
let b:netrw_lastfile = choice
|
||||
|
||||
@@ -5302,6 +5307,8 @@ function s:NetrwMarkFileCompress(islocal)
|
||||
if a:islocal
|
||||
if g:netrw_keepdir
|
||||
let fname= netrw#os#Escape(netrw#fs#ComposePath(curdir,fname))
|
||||
else
|
||||
let fname= netrw#os#Escape(fname)
|
||||
endif
|
||||
call system(exe." ".fname)
|
||||
if v:shell_error
|
||||
@@ -5636,6 +5643,8 @@ function s:NetrwMarkFileExe(islocal,enbloc)
|
||||
if a:islocal
|
||||
if g:netrw_keepdir
|
||||
let fname= netrw#os#Escape(netrw#fs#WinPath(netrw#fs#ComposePath(curdir,fname)))
|
||||
else
|
||||
let fname= netrw#os#Escape(netrw#fs#WinPath(fname))
|
||||
endif
|
||||
else
|
||||
let fname= netrw#os#Escape(netrw#fs#WinPath(b:netrw_curdir.fname))
|
||||
@@ -8282,7 +8291,7 @@ function netrw#FileUrlEdit(fname)
|
||||
endif
|
||||
|
||||
exe "sil doau BufReadPre ".fname2396e
|
||||
exe 'NetrwKeepj keepalt edit '.plainfname
|
||||
exe 'NetrwKeepj keepalt edit '. fnameescape(plainfname)
|
||||
exe 'sil! NetrwKeepj keepalt bdelete '.fnameescape(a:fname)
|
||||
|
||||
exe "sil doau BufReadPost ".fname2396e
|
||||
@@ -8825,8 +8834,7 @@ endfunction
|
||||
|
||||
" netrw#RFC2396: converts %xx into characters {{{2
|
||||
function netrw#RFC2396(fname)
|
||||
let fname = escape(substitute(a:fname,'%\(\x\x\)','\=printf("%c","0x".submatch(1))','ge')," \t")
|
||||
return fname
|
||||
return substitute(a:fname, '%\(\x\x\)', '\=printf("%c","0x".submatch(1))', 'ge')
|
||||
endfunction
|
||||
|
||||
" netrw#UserMaps: supports user-specified maps {{{2
|
||||
@@ -8958,14 +8966,17 @@ function s:GetTempfile(fname)
|
||||
endif
|
||||
|
||||
" use fname's suffix for the temporary file
|
||||
" Restrict the suffix to word characters so shell metacharacters in a
|
||||
" remote filename (e.g. sftp://host/foo.txt;id) cannot ride along into
|
||||
" the tempfile name and out into a downstream shell command.
|
||||
if a:fname != ""
|
||||
if a:fname =~ '\.[^./]\+$'
|
||||
if a:fname =~ '\.\w\+$'
|
||||
if a:fname =~ '\.tar\.gz$' || a:fname =~ '\.tar\.bz2$' || a:fname =~ '\.tar\.xz$'
|
||||
let suffix = ".tar".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
|
||||
let suffix = ".tar".substitute(a:fname,'^.*\(\.\w\+\)$','\1','e')
|
||||
elseif a:fname =~ '.txz$'
|
||||
let suffix = ".txz".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
|
||||
let suffix = ".txz".substitute(a:fname,'^.*\(\.\w\+\)$','\1','e')
|
||||
else
|
||||
let suffix = substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
|
||||
let suffix = substitute(a:fname,'^.*\(\.\w\+\)$','\1','e')
|
||||
endif
|
||||
let tmpfile= substitute(tmpfile,'\.tmp$','','e')
|
||||
let tmpfile .= suffix
|
||||
|
||||
4
runtime/pack/dist/opt/netrw/doc/netrw.txt
vendored
4
runtime/pack/dist/opt/netrw/doc/netrw.txt
vendored
@@ -2854,10 +2854,6 @@ your browsing preferences. (see also: |netrw-settings|)
|
||||
such as listing, file removal, etc.
|
||||
default: ssh
|
||||
|
||||
*g:netrw_tmpfile_escape* =' &;'
|
||||
escape() is applied to all temporary files
|
||||
to escape these characters.
|
||||
|
||||
*g:netrw_timefmt* specify format string to vim's strftime().
|
||||
The default, "%c", is "the preferred date
|
||||
and time representation for the current
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
" Maintainer: Michael Wong
|
||||
" https://github.com/mmikeww/autohotkey.vim
|
||||
" Latest Revision: 2022-07-25
|
||||
" Last Change:
|
||||
" 2026 Apr 20 by Vim project: remove wrong oneline keyword #20018
|
||||
" Previous Maintainers: SungHyun Nam <goweol@gmail.com>
|
||||
" Nikolai Weibull <now@bitwi.se>
|
||||
|
||||
@@ -35,7 +37,6 @@ syn region autohotkeyString
|
||||
|
||||
syn match autohotkeyVariable
|
||||
\ display
|
||||
\ oneline
|
||||
\ contains=autohotkeyBuiltinVariable
|
||||
\ keepend
|
||||
\ '%\S\{-}%'
|
||||
@@ -123,7 +124,7 @@ syn keyword autohotkeyCommand
|
||||
|
||||
syn keyword autohotkeyFunction
|
||||
\ InStr RegExMatch RegExReplace StrLen SubStr Asc Chr Func
|
||||
\ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage
|
||||
\ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage
|
||||
\ Abs Ceil Exp Floor Log Ln Mod Round Sqrt Sin Cos Tan ASin ACos ATan
|
||||
\ FileExist GetKeyState NumGet NumPut StrGet StrPut RegisterCallback
|
||||
\ IsFunc Trim LTrim RTrim IsObject Object Array FileOpen
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
" Copyright (C) 2008 Ricardo Salveti <rsalveti@rsalveti.net>
|
||||
" Last Change: 2022 Jul 25
|
||||
" 2025 Oct 13 by Vim project: update multiline function syntax #18565
|
||||
" 2026 Apr 07 by Vim project: update syntax script #19931
|
||||
" 2026 Apr 15 by Vim project: allow forward-slashes in bitbake varflags #19983
|
||||
"
|
||||
" This file is licensed under the MIT license, see COPYING.MIT in
|
||||
" this source distribution for the terms.
|
||||
@@ -58,18 +60,18 @@ syn match bbVarValue ".*$" contained contains=bbString,bbVarDeref,bbV
|
||||
syn region bbVarPyValue start=+${@+ skip=+\\$+ end=+}+ contained contains=@python
|
||||
|
||||
" Vars metadata flags
|
||||
syn match bbVarFlagDef "^\([a-zA-Z0-9\-_\.]\+\)\(\[[a-zA-Z0-9\-_\.+]\+\]\)\@=" contains=bbIdentifier nextgroup=bbVarFlagFlag
|
||||
syn match bbVarFlagDef "^\([a-zA-Z0-9\-_\.+/]\+\)\(\[[a-zA-Z0-9\-_\.+/]\+\]\)\@=" contains=bbIdentifier nextgroup=bbVarFlagFlag
|
||||
syn region bbVarFlagFlag matchgroup=bbArrayBrackets start="\[" end="\]\s*\(:=\|=\|.=\|=.|+=\|=+\|?=\)\@=" contained contains=bbIdentifier nextgroup=bbVarEq
|
||||
|
||||
" Includes and requires
|
||||
syn keyword bbInclude inherit include require contained
|
||||
syn keyword bbInclude inherit inherit_defer include include_all require contained
|
||||
syn match bbIncludeRest ".*$" contained contains=bbString,bbVarDeref
|
||||
syn match bbIncludeLine "^\(inherit\|include\|require\)\s\+" contains=bbInclude nextgroup=bbIncludeRest
|
||||
syn match bbIncludeLine "^\(inherit\|inherit_defer\|include\|include_all\|require\)\s\+" contains=bbInclude nextgroup=bbIncludeRest
|
||||
|
||||
" Add taks and similar
|
||||
syn keyword bbStatement addtask deltask addhandler after before EXPORT_FUNCTIONS contained
|
||||
syn keyword bbStatement addtask deltask addhandler after before EXPORT_FUNCTIONS addpylib contained
|
||||
syn match bbStatementRest ".*$" skipwhite contained contains=bbStatement
|
||||
syn match bbStatementLine "^\(addtask\|deltask\|addhandler\|after\|before\|EXPORT_FUNCTIONS\)\s\+" contains=bbStatement nextgroup=bbStatementRest
|
||||
syn match bbStatementLine "^\(addtask\|deltask\|addhandler\|after\|before\|EXPORT_FUNCTIONS\|addpylib\)\s\+" contains=bbStatement nextgroup=bbStatementRest
|
||||
|
||||
" OE Important Functions
|
||||
syn keyword bbOEFunctions do_fetch do_unpack do_patch do_configure do_compile do_stage do_install do_package contained
|
||||
|
||||
@@ -5,8 +5,10 @@
|
||||
" Previous Maintainer: Vincent Berthoux <twinside@gmail.com>
|
||||
" File Types: .cabal
|
||||
" Last Change: 22 Oct 2022
|
||||
" 2026 Apr 20 by Vim project: remove wrong oneline keyword #20018
|
||||
"
|
||||
" v1.6: Added support for foreign-libraries
|
||||
" Added highlighting for various fields
|
||||
" Added highlighting for various fields
|
||||
" v1.5: Incorporated changes from
|
||||
" https://github.com/sdiehl/haskell-vim-proto/blob/master/vim/syntax/cabal.vim
|
||||
" Use `syn keyword` instead of `syn match`.
|
||||
@@ -25,7 +27,7 @@
|
||||
" Cabal known compiler are highlighted too.
|
||||
"
|
||||
" V1.2: Added cpp-options which was missing. Feature implemented
|
||||
" by GHC, found with a GHC warning, but undocumented.
|
||||
" by GHC, found with a GHC warning, but undocumented.
|
||||
" Whatever...
|
||||
"
|
||||
" v1.1: Fixed operator problems and added ftdetect file
|
||||
@@ -186,7 +188,7 @@ syn match cabalVersionRegionA
|
||||
\ contains=cabalVersionOperator,cabalVersion
|
||||
\ keepend
|
||||
\ /\%(==\|\^\?>=\|<=\|<\|>\)\s*\d\+\%(\.\d\+\)*\%(\.\*\)\?\>/
|
||||
" version inside `version: ...`
|
||||
" version inside `version: ...`
|
||||
syn match cabalVersionRegionB
|
||||
\ contains=cabalStatementRegion,cabalVersionOperator,cabalVersion
|
||||
\ /^\s*\%(cabal-\)\?version\s*:.*$/
|
||||
@@ -198,7 +200,6 @@ syn match cabalName contained /:\@<=.*/
|
||||
syn match cabalNameRegion
|
||||
\ contains=cabalStatementRegion,cabalName
|
||||
\ nextgroup=cabalStatementRegion
|
||||
\ oneline
|
||||
\ /^\c\s*name\s*:.*$/
|
||||
|
||||
" author region
|
||||
@@ -206,7 +207,6 @@ syn match cabalAuthor contained /:\@<=.*/
|
||||
syn match cabalAuthorRegion
|
||||
\ contains=cabalStatementRegion,cabalStatement,cabalAuthor
|
||||
\ nextgroup=cabalStatementRegion
|
||||
\ oneline
|
||||
\ /^\c\s*author\s*:.*$/
|
||||
|
||||
" maintainer region
|
||||
@@ -214,7 +214,6 @@ syn match cabalMaintainer contained /:\@<=.*/
|
||||
syn match cabalMaintainerRegion
|
||||
\ contains=cabalStatementRegion,cabalStatement,cabalMaintainer
|
||||
\ nextgroup=cabalStatementRegion
|
||||
\ oneline
|
||||
\ /^\c\s*maintainer\s*:.*$/
|
||||
|
||||
" license region
|
||||
@@ -222,7 +221,6 @@ syn match cabalLicense contained /:\@<=.*/
|
||||
syn match cabalLicenseRegion
|
||||
\ contains=cabalStatementRegion,cabalStatement,cabalLicense
|
||||
\ nextgroup=cabalStatementRegion
|
||||
\ oneline
|
||||
\ /^\c\s*license\s*:.*$/
|
||||
|
||||
" license-file region
|
||||
@@ -230,7 +228,6 @@ syn match cabalLicenseFile contained /:\@<=.*/
|
||||
syn match cabalLicenseFileRegion
|
||||
\ contains=cabalStatementRegion,cabalStatement,cabalLicenseFile
|
||||
\ nextgroup=cabalStatementRegion
|
||||
\ oneline
|
||||
\ /^\c\s*license-file\s*:.*$/
|
||||
|
||||
" tested-with region with compilers and versions
|
||||
@@ -238,7 +235,6 @@ syn keyword cabalCompiler contained ghc nhc yhc hugs hbc helium jhc lhc
|
||||
syn match cabalTestedWithRegion
|
||||
\ contains=cabalStatementRegion,cabalStatement,cabalCompiler,cabalVersionRegionA
|
||||
\ nextgroup=cabalStatementRegion
|
||||
\ oneline
|
||||
\ /^\c\s*tested-with\s*:.*$/
|
||||
|
||||
" build type keywords
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
" Maintainer: Dave Hodder <dmh@dmh.org.uk>
|
||||
" Last Change: 2021 Nov 29
|
||||
" 2026 Feb 12 by Vim Project add partial support #19386
|
||||
" 2026 Apr 17 by Vim Project Update to Django 5.2 version #19994
|
||||
|
||||
" quit when a syntax file was already loaded
|
||||
if exists("b:current_syntax")
|
||||
@@ -22,24 +23,23 @@ syn keyword djangoStatement contained autoescape csrf_token empty
|
||||
syn keyword djangoStatement contained and as block endblock by cycle debug else elif
|
||||
syn keyword djangoStatement contained extends filter endfilter firstof for
|
||||
syn keyword djangoStatement contained endfor if endif ifchanged endifchanged
|
||||
syn keyword djangoStatement contained ifequal endifequal ifnotequal
|
||||
syn keyword djangoStatement contained endifnotequal in include load not now or
|
||||
syn keyword djangoStatement contained parsed regroup reversed spaceless
|
||||
syn keyword djangoStatement contained endspaceless ssi templatetag openblock
|
||||
syn keyword djangoStatement contained in include load not now
|
||||
syn keyword djangoStatement contained regroup reversed spaceless
|
||||
syn keyword djangoStatement contained endspaceless templatetag openblock
|
||||
syn keyword djangoStatement contained closeblock openvariable closevariable
|
||||
syn keyword djangoStatement contained openbrace closebrace opencomment
|
||||
syn keyword djangoStatement contained openbrace closebrace opencomment or
|
||||
syn keyword djangoStatement contained closecomment widthratio url with endwith
|
||||
syn keyword djangoStatement contained get_current_language trans noop blocktrans
|
||||
syn keyword djangoStatement contained endblocktrans get_available_languages
|
||||
syn keyword djangoStatement contained get_current_language_bidi plural
|
||||
syn keyword djangoStatement contained get_current_language noop get_available_languages
|
||||
syn keyword djangoStatement contained get_current_language_bidi get_language_info plural
|
||||
syn keyword djangoStatement contained translate blocktranslate endblocktranslate
|
||||
syn keyword djangoStatement contained partialdef endpartialdef partial
|
||||
syn keyword djangoStatement contained querystring lorem verbatim
|
||||
|
||||
" Django templete built-in filters
|
||||
syn keyword djangoFilter contained add addslashes capfirst center cut date
|
||||
syn keyword djangoFilter contained default default_if_none dictsort
|
||||
syn keyword djangoFilter contained dictsortreversed divisibleby escape escapejs
|
||||
syn keyword djangoFilter contained filesizeformat first fix_ampersands
|
||||
syn keyword djangoFilter contained filesizeformat first
|
||||
syn keyword djangoFilter contained floatformat get_digit join last length length_is
|
||||
syn keyword djangoFilter contained linebreaks linebreaksbr linenumbers ljust
|
||||
syn keyword djangoFilter contained lower make_list phone2numeric pluralize
|
||||
@@ -48,6 +48,7 @@ syn keyword djangoFilter contained safe safeseq stringformat striptags
|
||||
syn keyword djangoFilter contained time timesince timeuntil title truncatechars
|
||||
syn keyword djangoFilter contained truncatewords truncatewords_html unordered_list upper urlencode
|
||||
syn keyword djangoFilter contained urlize urlizetrunc wordcount wordwrap yesno
|
||||
syn keyword djangoFilter contained force_escape iriencode json_script truncatechars_html
|
||||
|
||||
" Keywords to highlight within comments
|
||||
syn keyword djangoTodo contained TODO FIXME XXX
|
||||
|
||||
@@ -1860,10 +1860,11 @@ syn keyword vimSynType contained include skipwhite nextgroup=vimSynIncludeClust
|
||||
syn match vimSynIncludeCluster contained "@[_a-zA-Z0-9]\+\>"
|
||||
|
||||
" Syntax: keyword {{{2
|
||||
syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynContainedin
|
||||
syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynContainedin,vimSynKeyError
|
||||
syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
|
||||
syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
|
||||
syn match vimSynKeyOpt contained "\%#=1\<\%(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
|
||||
syn match vimSynKeyError contained "\<oneline\>"
|
||||
|
||||
" Syntax: match {{{2
|
||||
syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
|
||||
@@ -2431,6 +2432,7 @@ if !exists("skip_vim_syntax_inits")
|
||||
hi def link vimSyncError vimError
|
||||
hi def link vimSynConcealError vimError
|
||||
hi def link vimSynError vimError
|
||||
hi def link vimSynKeyError vimError
|
||||
hi def link vimSynFoldlevelError vimError
|
||||
hi def link vimSynIskeywordError vimError
|
||||
hi def link vimSynSpellError vimError
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
" Filenames: *.graphql *.graphqls *.gql
|
||||
" URL: https://github.com/jparise/vim-graphql
|
||||
" License: MIT <https://opensource.org/license/mit>
|
||||
" Last Change: 2024 Dec 21
|
||||
" Last Change: 2026 Apr 21
|
||||
|
||||
if !exists('main_syntax')
|
||||
if exists('b:current_syntax')
|
||||
@@ -26,8 +26,13 @@ syn match graphqlOperator "\M..." display
|
||||
syn keyword graphqlBoolean true false
|
||||
syn keyword graphqlNull null
|
||||
syn match graphqlNumber "-\=\<\%(0\|[1-9]\d*\)\%(\.\d\+\)\=\%([eE][-+]\=\d\+\)\=\>" display
|
||||
syn region graphqlString start=+"+ skip=+\\\\\|\\"+ end=+"\|$+
|
||||
syn region graphqlString start=+"""+ skip=+\\"""+ end=+"""+
|
||||
syn region graphqlString start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ contains=graphqlEscape
|
||||
syn region graphqlString start=+"""+ skip=+\\"""+ end=+"""+ contains=graphqlEscape
|
||||
|
||||
syn match graphqlEscape +\\["\\/bfnrt]+ contained display
|
||||
syn match graphqlEscape +\\u\x\{4}+ contained display
|
||||
syn match graphqlEscape +\\u{\x\+}+ contained display
|
||||
syn match graphqlEscape +\\""\"+ contained display
|
||||
|
||||
syn keyword graphqlKeyword repeatable nextgroup=graphqlKeyword skipwhite
|
||||
syn keyword graphqlKeyword on nextgroup=graphqlType,graphqlDirectiveLocation skipwhite
|
||||
@@ -45,11 +50,11 @@ syn match graphqlVariable "\<\$\h\w*\>" display
|
||||
syn match graphqlName "\<\h\w*\>" display
|
||||
syn match graphqlType "\<_*\u\w*\>" display
|
||||
|
||||
" https://spec.graphql.org/October2021/#ExecutableDirectiveLocation
|
||||
" https://spec.graphql.org/September2025/#ExecutableDirectiveLocation
|
||||
syn keyword graphqlDirectiveLocation QUERY MUTATION SUBSCRIPTION FIELD
|
||||
syn keyword graphqlDirectiveLocation FRAGMENT_DEFINITION FRAGMENT_SPREAD
|
||||
syn keyword graphqlDirectiveLocation INLINE_FRAGMENT VARIABLE_DEFINITION
|
||||
" https://spec.graphql.org/October2021/#TypeSystemDirectiveLocation
|
||||
" https://spec.graphql.org/September2025/#TypeSystemDirectiveLocation
|
||||
syn keyword graphqlDirectiveLocation SCHEMA SCALAR OBJECT FIELD_DEFINITION
|
||||
syn keyword graphqlDirectiveLocation ARGUMENT_DEFINITION INTERFACE UNION
|
||||
syn keyword graphqlDirectiveLocation ENUM ENUM_VALUE INPUT_OBJECT
|
||||
@@ -73,6 +78,7 @@ hi def link graphqlBoolean Boolean
|
||||
hi def link graphqlNull Keyword
|
||||
hi def link graphqlNumber Number
|
||||
hi def link graphqlString String
|
||||
hi def link graphqlEscape Special
|
||||
|
||||
hi def link graphqlDirective PreProc
|
||||
hi def link graphqlDirectiveLocation Special
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
" Vim syntax file
|
||||
" Language: Vim help file
|
||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||
" Last Change: 2025 Nov 13
|
||||
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2025 Nov 13
|
||||
" 2026 Apr 09 by Vim project: improve pattern for translated syntaxt.txt #19942
|
||||
|
||||
" Quit when a (custom) syntax file was already loaded
|
||||
if exists("b:current_syntax")
|
||||
@@ -306,7 +307,7 @@ hi def link helpDiffAdded Added
|
||||
hi def link helpDiffChanged Changed
|
||||
hi def link helpDiffRemoved Removed
|
||||
|
||||
if has('textprop') && expand('%:p') =~ '[/\\]doc[/\\]syntax.txt'
|
||||
if has('textprop') && expand('%:p') =~? '[/\\]doc[/\\]syntax.\(txt\|\a\ax\)$'
|
||||
" highlight groups with their respective color
|
||||
import 'dist/vimhelp.vim'
|
||||
call vimhelp.HighlightGroups()
|
||||
|
||||
@@ -3,16 +3,19 @@
|
||||
" Maintainer: Gregory Anders <greg@gpanders.com>
|
||||
" Last Change: 2024 May 8
|
||||
" 2025 Apr 17 by Vim Project (don't require space to start comments, #17130)
|
||||
" 2026 Apr 09 by Vim Project (anchor status regex to beginning of line, #19879)
|
||||
" 2026 Apr 09 by Vim Project (detect renames of files, #19879)
|
||||
|
||||
if exists('b:current_syntax')
|
||||
finish
|
||||
endif
|
||||
|
||||
syn match jjAdded "A .*" contained
|
||||
syn match jjRemoved "D .*" contained
|
||||
syn match jjChanged "M .*" contained
|
||||
syn match jjAdded "^JJ:\s\+\zsA\s.*" contained
|
||||
syn match jjRemoved "^JJ:\s\+\zsD\s.*" contained
|
||||
syn match jjChanged "^JJ:\s\+\zsM\s.*" contained
|
||||
syn match jjRenamed "^JJ:\s\+\zsR\s.*" contained
|
||||
|
||||
syn region jjComment start="^JJ:" end="$" contains=jjAdded,jjRemoved,jjChanged
|
||||
syn region jjComment start="^JJ:" end="$" contains=jjAdded,jjRemoved,jjChanged,jjRenamed
|
||||
|
||||
syn include @jjCommitDiff syntax/diff.vim
|
||||
syn region jjCommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|@@\@!\|[^[:alnum:]\ +-]\S\@!\)\@=/ fold contains=@jjCommitDiff
|
||||
@@ -21,5 +24,6 @@ hi def link jjComment Comment
|
||||
hi def link jjAdded Added
|
||||
hi def link jjRemoved Removed
|
||||
hi def link jjChanged Changed
|
||||
hi def link jjRenamed Changed
|
||||
|
||||
let b:current_syntax = 'jjdescription'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
" Vim syntax file
|
||||
" Language: Generic log file
|
||||
" Maintainer: Mao-Yining <https://github.com/mao-yining>
|
||||
" Maintainer: Mao-Yining <mao.yining@outlook.com>
|
||||
" Former Maintainer: MTDL9 <https://github.com/MTDL9>
|
||||
" Latest Revision: 2025-10-31
|
||||
|
||||
@@ -10,10 +10,9 @@ endif
|
||||
|
||||
syntax case ignore
|
||||
|
||||
" Operators
|
||||
" Symbols / special characters
|
||||
"---------------------------------------------------------------------------
|
||||
syn match logOperator display '[;,\?\:\.\<=\>\~\/\@\!$\%&\+\-\|\^(){}\*#]'
|
||||
syn match logBrackets display '[][]'
|
||||
syn match logSymbol display '[!@#$%^&*;:?]'
|
||||
|
||||
" For Visual Separator and Apache CLF
|
||||
"---------------------------------------------------------------------------
|
||||
@@ -22,10 +21,10 @@ syn match logSeparator display '- - '
|
||||
|
||||
" Strings
|
||||
" ------------------------------
|
||||
syn region LogString start=/"/ end=/"/ end=/$/ skip=/\\./ contains=logJavaError
|
||||
syn region LogString start=/`/ end=/`/ end=/$/ skip=/\\./ contains=logJavaError
|
||||
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\)\@<!'\(s \|t \)\@!/ end=/'/ end=/$/ skip=/\\./ contains=logJavaError
|
||||
syn region logString start=/\(s\)\@<!'\(s \|t \)\@!/ end=/'/ end=/$/ skip=/\\./ contains=logJavaError
|
||||
|
||||
" Numbers
|
||||
"---------------------------------------------------------------------------
|
||||
@@ -40,7 +39,7 @@ syn match logNumberHex display '\<0[xX]\x\+\>'
|
||||
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
|
||||
" 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\+\>'
|
||||
@@ -68,9 +67,9 @@ 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 display '\d\{2}:\d\{2}:\d\{2}\(\.\d\{2,9}\)\?\(\s\?[-+]\(\d\{1,2\}:\d\{2\}\|\d\{2,4}\)\|Z\)\?\>' nextgroup=logTimeZone,logSysColumns skipwhite
|
||||
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,logSysColumn skipwhite
|
||||
" Time zone e.g. Z, +08:00, PST
|
||||
syn match logTimeZone display 'Z\|[+-]\d\{2}:\d\{2}\|\a\{3}\>' contained skipwhite nextgroup=logSysColumns
|
||||
syn match logTimeZone display 'Z\|[+-]\d\{2}:\d\{2}\|\a\{3}\>' contained skipwhite nextgroup=logSysColumn
|
||||
" 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\>'
|
||||
|
||||
@@ -95,13 +94,13 @@ 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,@logLvs,LogSysProcess contained
|
||||
syn match logSysProcess '\(\w\|\.\|-\)\+\(\[\d\+\]\)\?:' contains=logOperator,logNumber,logBrackets contained
|
||||
syn match logSysColumn '\w\(\w\|\.\|-\)\+ \(\w\|\.\|-\)\+\(\[\d\+\]\)\?:' contained contains=@logLvs,logSysProcess
|
||||
syn match logSysProcess '\(\w\|\.\|-\)\+\(\[\d\+\]\)\?:' contained contains=logNumber
|
||||
|
||||
" XML Tags
|
||||
"---------------------------------------------------------------------------
|
||||
@@ -109,47 +108,47 @@ syn match logSysProcess '\(\w\|\.\|-\)\+\(\[\d\+\]\)\?:' contains=logOperator,
|
||||
syn match logXmlHeader /<?\(\w\|-\)\+\(\s\+\w\+\(="[^"]*"\|='[^']*'\)\?\)*?>/ contains=logString,logXmlAttribute,logXmlNamespace
|
||||
syn match logXmlDoctype /<!DOCTYPE[^>]*>/ 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 match logXmlAttribute contained "\w\+="
|
||||
syn match logXmlAttribute contained "\(\n\|\s\)\(\(\w\|-\)\+:\)\?\(\w\|-\)\+\(=\)\?" contains=logXmlNamespace
|
||||
syn match logXmlNamespace contained "\(\w\|-\)\+:"
|
||||
syn region logXmlComment start=/<!--/ end=/-->/
|
||||
syn match logXmlCData /<!\[CDATA\[.*\]\]>/
|
||||
syn match logXmlEntity /&#\?\w\+;/
|
||||
|
||||
" Levels
|
||||
"---------------------------------------------------------------------------
|
||||
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
|
||||
syn keyword logLvFatal FATAL
|
||||
syn keyword logLvEmergency EMERG[ENCY]
|
||||
syn keyword logLvAlert ALERT
|
||||
syn keyword logLvCritical CRIT[ICAL]
|
||||
syn keyword logLvError E ERR[ORS]
|
||||
syn keyword logLvFail F FAIL[ED] FAILURE
|
||||
syn keyword logLvFault FAULT
|
||||
syn keyword logLvNack NACK NAK
|
||||
syn keyword logLvWarning W WARN[ING]
|
||||
syn keyword logLvBad BAD
|
||||
syn keyword logLvNotice NOTICE
|
||||
syn keyword logLvInfo I INFO
|
||||
syn keyword logLvDebug D DEBUG
|
||||
syn keyword logLvTrace TRACE Trace
|
||||
syn keyword logLvVerbose V VERBOSE
|
||||
syn keyword logLvPass PASS[ED]
|
||||
syn keyword logLvSuccess SUCCEED[ED] 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 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
|
||||
syn cluster logLvs contains=logLvFatal,logLvEmergency,logLvAlert,logLvCritical,logLvError,logLvFail,logLvFault,logLvNack,logLvWarning,logLvBad,logLvNotice,logLvInfo,logLvDebug,logLvTrace,logLvVerbose,logLvPass,logLvSuccess
|
||||
|
||||
" Highlight links
|
||||
"---------------------------------------------------------------------------
|
||||
@@ -179,7 +178,7 @@ hi def link logFilePath Structure
|
||||
|
||||
hi def link logJavaError ErrorMsg
|
||||
|
||||
hi def link logSysColumns Statement
|
||||
hi def link logSysColumn Statement
|
||||
hi def link logSysProcess Function
|
||||
|
||||
hi def link logXmlHeader Function
|
||||
@@ -191,32 +190,31 @@ 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 logSymbol Delimiter
|
||||
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
|
||||
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
|
||||
hi logGreen ctermfg=LightGreen guifg=LightGreen
|
||||
hi logBlue ctermfg=LightBlue guifg=LightBlue
|
||||
|
||||
|
||||
let b:current_syntax = 'log'
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
" 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)
|
||||
" 2026 Apr 17 by Vim project: wrong highlight $ inside quotes (#19986)
|
||||
|
||||
" quit when a syntax file was already loaded
|
||||
if exists("b:current_syntax")
|
||||
@@ -41,7 +42,7 @@ endif
|
||||
syn match makeIdent "\$\$\w*"
|
||||
syn match makeIdent "\$\$\$\$\w*" containedin=makeDefine
|
||||
syn match makeIdent "\$[^({]"
|
||||
syn match makeIdent "\$\$[^({]" containedin=makeDefine
|
||||
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
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
" Language: Monk (See-Beyond Technologies)
|
||||
" Maintainer: Mike Litherland <litherm@ccf.org>
|
||||
" Last Change: 2012 Feb 03 by Thilo Six
|
||||
" 2026 Apr 20 by Vim project: remove wrong oneline keyword #20018
|
||||
|
||||
" This syntax file is good enough for my needs, but others
|
||||
" may desire more features. Suggestions and bug reports
|
||||
@@ -33,8 +34,8 @@ syn case ignore
|
||||
|
||||
" Fascist highlighting: everything that doesn't fit the rules is an error...
|
||||
|
||||
syn match monkError oneline ![^ \t()";]*!
|
||||
syn match monkError oneline ")"
|
||||
syn match monkError ![^ \t()";]*!
|
||||
syn match monkError ")"
|
||||
|
||||
" Quoted and backquoted stuff
|
||||
|
||||
@@ -131,51 +132,51 @@ syn keyword monkFunc valid-integer? verify-type
|
||||
" using variables is a day's work for a trained secretary...
|
||||
" This is a useful lax approximation:
|
||||
|
||||
syn match monkNumber oneline "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*"
|
||||
syn match monkError oneline ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t()";][^ \t()";]*!
|
||||
syn match monkNumber "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*"
|
||||
syn match monkError ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t()";][^ \t()";]*!
|
||||
|
||||
syn match monkOther oneline ![+-][ \t()";]!me=e-1
|
||||
syn match monkOther oneline ![+-]$!
|
||||
syn match monkOther ![+-][ \t()";]!me=e-1
|
||||
syn match monkOther ![+-]$!
|
||||
" ... so that a single + or -, inside a quoted context, would not be
|
||||
" interpreted as a number (outside such contexts, it's a monkFunc)
|
||||
|
||||
syn match monkDelimiter oneline !\.[ \t()";]!me=e-1
|
||||
syn match monkDelimiter oneline !\.$!
|
||||
syn match monkDelimiter !\.[ \t()";]!me=e-1
|
||||
syn match monkDelimiter !\.$!
|
||||
" ... and a single dot is not a number but a delimiter
|
||||
|
||||
" Simple literals:
|
||||
|
||||
syn match monkBoolean oneline "#[tf]"
|
||||
syn match monkError oneline !#[tf][^ \t()";]\+!
|
||||
syn match monkBoolean "#[tf]"
|
||||
syn match monkError !#[tf][^ \t()";]\+!
|
||||
|
||||
syn match monkChar oneline "#\\"
|
||||
syn match monkChar oneline "#\\."
|
||||
syn match monkError oneline !#\\.[^ \t()";]\+!
|
||||
syn match monkChar oneline "#\\space"
|
||||
syn match monkError oneline !#\\space[^ \t()";]\+!
|
||||
syn match monkChar oneline "#\\newline"
|
||||
syn match monkError oneline !#\\newline[^ \t()";]\+!
|
||||
syn match monkChar "#\\"
|
||||
syn match monkChar "#\\."
|
||||
syn match monkError !#\\.[^ \t()";]\+!
|
||||
syn match monkChar "#\\space"
|
||||
syn match monkError !#\\space[^ \t()";]\+!
|
||||
syn match monkChar "#\\newline"
|
||||
syn match monkError !#\\newline[^ \t()";]\+!
|
||||
|
||||
" This keeps all other stuff unhighlighted, except *stuff* and <stuff>:
|
||||
|
||||
syn match monkOther oneline ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*,
|
||||
syn match monkError oneline ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
|
||||
syn match monkOther ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*,
|
||||
syn match monkError ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
|
||||
|
||||
syn match monkOther oneline "\.\.\."
|
||||
syn match monkError oneline !\.\.\.[^ \t()";]\+!
|
||||
syn match monkOther "\.\.\."
|
||||
syn match monkError !\.\.\.[^ \t()";]\+!
|
||||
" ... a special identifier
|
||||
|
||||
syn match monkConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t()";],me=e-1
|
||||
syn match monkConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$,
|
||||
syn match monkError oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
|
||||
syn match monkConstant ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t()";],me=e-1
|
||||
syn match monkConstant ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$,
|
||||
syn match monkError ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
|
||||
|
||||
syn match monkConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t()";],me=e-1
|
||||
syn match monkConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
|
||||
syn match monkError oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
|
||||
syn match monkConstant ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t()";],me=e-1
|
||||
syn match monkConstant ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
|
||||
syn match monkError ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
|
||||
|
||||
" Monk input and output structures
|
||||
syn match monkSyntax oneline "\(\~input\|\[I\]->\)[^ \t]*"
|
||||
syn match monkFunc oneline "\(\~output\|\[O\]->\)[^ \t]*"
|
||||
syn match monkSyntax "\(\~input\|\[I\]->\)[^ \t]*"
|
||||
syn match monkFunc "\(\~output\|\[O\]->\)[^ \t]*"
|
||||
|
||||
" Non-quoted lists, and strings:
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
" Previous Maintainer: Luca Saccarola <github.e41mv@aleeas.com>
|
||||
" Maintainer: This runtime file is looking for a new maintainer.
|
||||
" Last Change: 2025 Aug 05
|
||||
" 2026 Apr 09: Link to generic Bold/Italic groups
|
||||
"
|
||||
" Reference Specification: Org mode manual
|
||||
" GNU Info: `$ info Org`
|
||||
@@ -18,17 +19,17 @@ syn case ignore
|
||||
|
||||
" Bold
|
||||
syn region orgBold matchgroup=orgBoldDelimiter start="\(^\|[- '"({\]]\)\@<=\*\ze[^ ]" end="^\@!\*\([^\k\*]\|$\)\@=" keepend
|
||||
hi def link orgBold markdownBold
|
||||
hi def link orgBold Bold
|
||||
hi def link orgBoldDelimiter orgBold
|
||||
|
||||
" Italic
|
||||
syn region orgItalic matchgroup=orgItalicDelimiter start="\(^\|[- '"({\]]\)\@<=\/\ze[^ ]" end="^\@!\/\([^\k\/]\|$\)\@=" keepend
|
||||
hi def link orgItalic markdownItalic
|
||||
hi def link orgItalic Italic
|
||||
hi def link orgItalicDelimiter orgItalic
|
||||
|
||||
" Strikethrogh
|
||||
syn region orgStrikethrough matchgroup=orgStrikethroughDelimiter start="\(^\|[ '"({\]]\)\@<=+\ze[^ ]" end="^\@!+\([^\k+]\|$\)\@=" keepend
|
||||
hi def link orgStrikethrough markdownStrike
|
||||
hi def orgStrikethrough term=strikethrough cterm=strikethrough gui=strikethrough
|
||||
hi def link orgStrikethroughDelimiter orgStrikethrough
|
||||
|
||||
" Underline
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
" 2026 Feb 11 improve support for KornShell function names and variables
|
||||
" 2026 Feb 15 improve comment handling #19414
|
||||
" 2026 Mar 23 improve matching of function definitions #19638
|
||||
" 2026 Apr 02 improve matching of function definitions #19849
|
||||
" 2026 Apr 19 improve detection of special variables #20016
|
||||
" }}}
|
||||
" Version: 208
|
||||
" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
|
||||
@@ -665,12 +667,12 @@ ShFoldFunctions syn region shFunctionSubSh matchgroup=shFunctionSubShRegion star
|
||||
|
||||
if exists("b:is_bash")
|
||||
syn keyword shFunctionKey coproc
|
||||
syn match shFunctionCmdOne "^\s*\zs\%(\<\k\+\|[^()<>|&$;\t ]\+\)\+\s*()\ze\_s*\%(\%(for\|case\|select\|if\|while\|until\)\>\|\[\[\s\|((\)" skipwhite skipnl nextgroup=@shFunctionCmds
|
||||
syn match shFunctionCmdTwo "\%(\<\k\+\>\|[^()<>|&$;\t ]\+\)\+\ze\s*\%(()\ze\)\=\_s*\%(\<\%(for\|case\|select\|if\|while\|until\)\>\|\[\[\s\|((\)" contained skipwhite skipnl nextgroup=@shFunctionCmds
|
||||
syn match shFunctionOne "^\s*\zs\%(\<\k\+\|[^()<>|&$;\t ]\+\)\+\s*()\ze\_s*{" skipwhite skipnl nextgroup=shFunctionExpr
|
||||
syn match shFunctionTwo "\%(\<\k\+\|[^()<>|&$;\t ]\+\)\+\ze\s*\%(()\ze\)\=\_s*{" contained skipwhite skipnl nextgroup=shFunctionExpr
|
||||
syn match shFunctionThree "^\s*\zs\%(\<\k\+\|[^()<>|&$;\t ]\+\)\+\s*()\ze\_s*((\@!" skipwhite skipnl nextgroup=shFunctionSubSh
|
||||
syn match shFunctionFour "\%(\<\k\+\|[^()<>|&$;\t ]\+\)\+\ze\s*\%(\%(()\ze\)\=\)\@>\_s*((\@!" contained skipwhite skipnl nextgroup=shFunctionSubSh
|
||||
syn match shFunctionCmdOne "\%#=1^\s*\zs\%(\%(\<\k\+\|[^()<>|&$;\t ]\+\)\+\)\@>\s*()\ze\_s*\%(\%(for\|case\|select\|if\|while\|until\)\>\|\[\[\s\|((\)" skipwhite skipnl nextgroup=@shFunctionCmds
|
||||
syn match shFunctionCmdTwo "\%#=1\%(\%(\<\k\+\>\|[^()<>|&$;\t ]\+\)\+\)\@>\ze\s*\%(()\ze\)\=\_s*\%(\<\%(for\|case\|select\|if\|while\|until\)\>\|\[\[\s\|((\)" contained skipwhite skipnl nextgroup=@shFunctionCmds
|
||||
syn match shFunctionOne "\%#=1^\s*\zs\%(\%(\<\k\+\|[^()<>|&$;\t ]\+\)\+\)\@>\s*()\ze\_s*{" skipwhite skipnl nextgroup=shFunctionExpr
|
||||
syn match shFunctionTwo "\%#=1\%(\%(\<\k\+\|[^()<>|&$;\t ]\+\)\+\)\@>\ze\s*\%(()\ze\)\=\_s*{" contained skipwhite skipnl nextgroup=shFunctionExpr
|
||||
syn match shFunctionThree "\%#=1^\s*\zs\%(\%(\<\k\+\|[^()<>|&$;\t ]\+\)\+\)\@>\s*()\ze\_s*((\@!" skipwhite skipnl nextgroup=shFunctionSubSh
|
||||
syn match shFunctionFour "\%#=1\%(\%(\<\k\+\|[^()<>|&$;\t ]\+\)\+\)\@>\ze\s*\%(\%(()\ze\)\=\)\@>\_s*((\@!" contained skipwhite skipnl nextgroup=shFunctionSubSh
|
||||
elseif exists("b:is_ksh88")
|
||||
" AT&T ksh88
|
||||
syn match shFunctionCmdOne "^\s*\zs\h\w*\s*()\ze\_s*\%(\%(for\|case\|select\|if\|while\|until\)\>\|\[\[\s\|((\)" skipwhite skipnl nextgroup=@shFunctionCmds
|
||||
@@ -681,13 +683,13 @@ elseif exists("b:is_mksh")
|
||||
" MirBSD ksh is the wild west of absurd and abstruse function names...
|
||||
syn match shFunctionCmdOne "^\s*\zs[-A-Za-z_@!+.%,0-9:]*[-A-Za-z_.%,0-9:]\s*()\ze\_s*\%(\%(for\|case\|select\|if\|while\|until\)\>\|\[\[\s\|((\)" skipwhite skipnl nextgroup=@shFunctionCmds
|
||||
syn match shFunctionOne "^\s*\zs[-A-Za-z_@!+.%,0-9:]*[-A-Za-z_.%,0-9:]\s*()\ze\_s*{" skipwhite skipnl nextgroup=shFunctionExpr
|
||||
syn match shFunctionTwo "\%([@!+.%,:-]\+\|\<\w\+\)*[-A-Za-z_.%,0-9:]\ze\s*\%(()\ze\)\=\_s*{" contained skipwhite skipnl nextgroup=shFunctionExpr
|
||||
syn match shFunctionTwo "\%#=1\%(\%(\<\w\+\|[@!+.%,:-]\+\)*[-A-Za-z_.%,0-9:]\)\@>\ze\s*\%(()\ze\)\=\_s*{" contained skipwhite skipnl nextgroup=shFunctionExpr
|
||||
syn match shFunctionThree "^\s*\zs[-A-Za-z_@!+.%,0-9:]*[-A-Za-z_.%,0-9:]\s*()\ze\_s*((\@!" skipwhite skipnl nextgroup=shFunctionSubSh
|
||||
elseif exists("b:is_kornshell")
|
||||
" ksh93
|
||||
syn match shFunctionCmdOne "^\s*\zs[A-Za-z_.][A-Za-z_.0-9]*\s*()\ze\_s*\%(\%(for\|case\|select\|if\|while\|until\)\>\|\[\[\s\|((\)" skipwhite skipnl nextgroup=@shFunctionCmds
|
||||
syn match shFunctionOne "^\s*\zs[A-Za-z_.][A-Za-z_.0-9]*\s*()\ze\_s*{" skipwhite skipnl nextgroup=shFunctionExpr
|
||||
syn match shFunctionTwo "\%(\.\|\<\h\+\)[A-Za-z_.0-9]*\ze\_s*{" contained skipwhite skipnl nextgroup=shFunctionExpr
|
||||
syn match shFunctionTwo "\%(\<\h\+\|\.\)[A-Za-z_.0-9]*\ze\_s*{" contained skipwhite skipnl nextgroup=shFunctionExpr
|
||||
syn match shFunctionThree "^\s*\zs[A-Za-z_.][A-Za-z_.0-9]*\s*()\ze\_s*((\@!" skipwhite skipnl nextgroup=shFunctionSubSh
|
||||
syn match shNamespaceOne "\<\h\w*\>\ze\_s*{" contained skipwhite skipnl nextgroup=shFunctionExpr
|
||||
else
|
||||
@@ -750,13 +752,15 @@ endif
|
||||
if exists("b:is_bash")
|
||||
syn region shDeref matchgroup=PreProc start="\${!" end="\*\=}" contains=@shDerefList,shDerefOffset
|
||||
syn match shDerefVar contained "{\@<=!\h\w*" nextgroup=@shDerefVarList
|
||||
syn match shDerefSpecial contained "\({!\)\@<=[[:alnum:]*#@_]\+" nextgroup=@shDerefVarList,shDerefOp
|
||||
endif
|
||||
if (exists("b:is_kornshell") && !exists("b:is_ksh88"))
|
||||
syn match shDerefVar contained "{\@<=!\h\w*[[:alnum:]_.]*" nextgroup=@shDerefVarList
|
||||
syn match shDerefSpecial contained "\({!\)\@<=[[:alnum:]*#@_]\+" nextgroup=@shDerefVarList,shDerefOp
|
||||
endif
|
||||
|
||||
syn match shDerefSpecial contained "{\@<=[-*@?0]" nextgroup=shDerefOp,shDerefOffset,shDerefOpError
|
||||
syn match shDerefSpecial contained "\({[#!]\)\@<=[[:alnum:]*@_]\+" nextgroup=@shDerefVarList,shDerefOp
|
||||
syn match shDerefSpecial contained "\({[#]\)\@<=[[:alnum:]*@_]\+" nextgroup=@shDerefVarList,shDerefOp
|
||||
syn match shDerefVar contained "{\@<=\h\w*" nextgroup=@shDerefVarList
|
||||
syn match shDerefVar contained '\d' nextgroup=@shDerefVarList
|
||||
if exists("b:is_kornshell") || exists("b:is_posix")
|
||||
|
||||
@@ -306,13 +306,13 @@ syntax keyword typescriptRepeat do while for nextgroup=typescript
|
||||
syntax keyword typescriptRepeat for nextgroup=typescriptLoopParen,typescriptAsyncFor skipwhite skipempty
|
||||
syntax keyword typescriptBranch break continue containedin=typescriptBlock
|
||||
syntax keyword typescriptCase case nextgroup=@typescriptPrimitive skipwhite containedin=typescriptBlock
|
||||
syntax keyword typescriptDefault default containedin=typescriptBlock nextgroup=@typescriptValue,typescriptClassKeyword,typescriptInterfaceKeyword skipwhite oneline
|
||||
syntax keyword typescriptDefault default containedin=typescriptBlock nextgroup=@typescriptValue,typescriptClassKeyword,typescriptInterfaceKeyword skipwhite
|
||||
syntax keyword typescriptStatementKeyword with
|
||||
syntax keyword typescriptStatementKeyword yield skipwhite nextgroup=@typescriptValue containedin=typescriptBlock
|
||||
|
||||
syntax keyword typescriptTry try
|
||||
syntax keyword typescriptExceptions throw finally
|
||||
syntax keyword typescriptExceptions catch nextgroup=typescriptCall skipwhite skipempty oneline
|
||||
syntax keyword typescriptExceptions catch nextgroup=typescriptCall skipwhite skipempty
|
||||
syntax keyword typescriptDebugger debugger
|
||||
|
||||
syntax keyword typescriptAsyncFor await nextgroup=typescriptLoopParen skipwhite skipempty contained
|
||||
@@ -1766,9 +1766,9 @@ endif
|
||||
" patch
|
||||
" patch for generated code
|
||||
syntax keyword typescriptGlobal Promise
|
||||
\ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments oneline
|
||||
\ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments
|
||||
syntax keyword typescriptGlobal Map WeakMap
|
||||
\ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments oneline
|
||||
\ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments
|
||||
|
||||
syntax keyword typescriptConstructor contained constructor
|
||||
\ nextgroup=@typescriptCallSignature
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
" Contributor: Leonard Ehrenfried <leonard.ehrenfried@web.de>
|
||||
" Karsten Hopp <karsten@redhat.com>
|
||||
" Dean, Adam Kenneth <adam.ken.dean@hpe.com>
|
||||
" Last Change: 2026 Mar 11
|
||||
" Last Change: 2026 Mar 31
|
||||
" SSH Version: 10.1p1
|
||||
"
|
||||
|
||||
@@ -121,6 +121,8 @@ syn keyword sshconfigKexAlgo ecdh-sha2-nistp384
|
||||
syn keyword sshconfigKexAlgo ecdh-sha2-nistp521
|
||||
syn match sshconfigKexAlgo "\<curve25519-sha256\%(@libssh\.org\)\?\>"
|
||||
syn match sshconfigKexAlgo "\<sntrup761x25519-sha512@openssh\.com\>"
|
||||
syn keyword sshconfigKexAlgo sntrup761x25519-sha512
|
||||
syn keyword sshconfigKexAlgo mlkem768x25519-sha256
|
||||
|
||||
syn keyword sshconfigTunnel point-to-point ethernet
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
" Language: sway config file
|
||||
" Original Author: Josef Litos (litoj/i3config.vim)
|
||||
" Maintainer: James Eapen <james.eapen@vai.org>
|
||||
" Version: 1.2.7
|
||||
" Last Change: 2025-12-02
|
||||
" Version: 1.2.8
|
||||
" Last Change: 2026-04-01
|
||||
|
||||
" References:
|
||||
" http://i3wm.org/docs/userguide.html#configuring
|
||||
@@ -28,7 +28,7 @@ syn cluster i3ConfigPopupFullscreenOpts remove=i3ConfigPopupFullscreenOptsExtra
|
||||
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
|
||||
|
||||
syn keyword i3ConfigConditionProp app_id pid shell contained
|
||||
syn keyword i3ConfigConditionProp app_id pid shell sandbox_app_id sandbox_engine sandbox_instance_id tag contained
|
||||
|
||||
syn keyword i3ConfigWorkspaceDir prev_on_output next_on_output contained
|
||||
|
||||
@@ -134,7 +134,7 @@ syn match swayConfigSeatIdent /[^ ,;]\+/ contained contains=@i3ConfigStrVar next
|
||||
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 toggle power dpms max_render_time adaptive_sync render_bit_depth color_profile allow_tearing contained skipwhite nextgroup=swayConfigOutputOptVals,@i3ConfigValue,swayConfigOutputMode
|
||||
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 hdr 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 skipwhite nextgroup=swayConfigOutputOpts
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
" Language: Tera
|
||||
" Maintainer: Muntasir Mahmud <muntasir.joypurhat@gmail.com>
|
||||
" Last Change: 2026 Jan 29
|
||||
" 2026 Mar 31 by Vim project: prevent code execution in filename
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
@@ -22,7 +23,7 @@ endif
|
||||
|
||||
" Load the underlying language syntax if detected
|
||||
if s:underlying_filetype != ""
|
||||
execute "runtime! syntax/" . s:underlying_filetype . ".vim"
|
||||
execute "runtime! syntax/" . fnameescape(s:underlying_filetype) . ".vim"
|
||||
unlet! b:current_syntax
|
||||
else
|
||||
" Default to HTML if no specific language detected
|
||||
|
||||
8
runtime/syntax/testdir/dumps/make_01_00.dump
generated
8
runtime/syntax/testdir/dumps/make_01_00.dump
generated
@@ -14,7 +14,7 @@
|
||||
@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|
|
||||
@75
|
||||
|f+0#00e0e07&|o@1|:| +0#0000000&@70
|
||||
| +0#e000002&@7|e|c|h|o| |"|b|a|r|$+0#00e0e07&@1|"+0#e000002&| |b|a|z| +0#0000000&@50
|
||||
@57|1|,|1| @10|A|l@1|
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|a+0#e000002#ffffff0|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| |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&@2| +0#0000000&@38
|
||||
@75
|
||||
>#+0#0000e05&| |v|i|m|:| |s|y|n|t|a|x|=|p|y|t|h|o|n|2| +0#0000000&@53
|
||||
>#+0#0000e05&| |v|i|m|:| |f|t|=|p|y|t|h|o|n|2| +0#0000000&@57
|
||||
|~+0#4040ff13&| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|
||||
2
runtime/syntax/testdir/dumps/sh_03_01.dump
generated
2
runtime/syntax/testdir/dumps/sh_03_01.dump
generated
@@ -17,4 +17,4 @@
|
||||
|:+0#0000e05&| +0#0000000&|'+0#af5f00255&|$+0#e000002&|{|V|a|r|i|a|b|l|e|B|:|-|$|{|V|a|r|i|a|b|l|e|C|:|-|e|n|g|}@1|'+0#af5f00255&| +0#0000000&@39
|
||||
@75
|
||||
|#+0#0000e05&| |A|n|o|t|h|e|r| |t|e|s|t| +0#0000000&@60
|
||||
@57|1|8|,|0|-|1| @7|8|1|%|
|
||||
@57|1|8|,|0|-|1| @7|6|5|%|
|
||||
|
||||
12
runtime/syntax/testdir/dumps/sh_03_02.dump
generated
12
runtime/syntax/testdir/dumps/sh_03_02.dump
generated
@@ -1,7 +1,11 @@
|
||||
|#+0#0000e05#ffffff0| |A|n|o|t|h|e|r| |t|e|s|t| +0#0000000&@60
|
||||
|V+0#00e0e07&|a|r|i|a|b|l|e|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|D|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|E|:+0#af5f00255&|=|e+0#0000000&|n|g|}+0#e000e06&@3| +0#0000000&@6
|
||||
@7|:+0#0000e05&| +0#0000000&@7|$+0#e000e06&|{|V|a|r|i|a|b|l|e|B|:+0#af5f00255&|=|$+0#e000e06&|{|V|a|r|i|a|b|l|e|C|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|D|:+0#af5f00255&|-|$+0#e000e06&|{|V|a|r|i|a|b|l|e|E|:+0#af5f00255&|=|e+0#0000000&|n|g|}+0#e000e06&@3
|
||||
> +0#0000000&@74
|
||||
| +0#0000000&@74
|
||||
|#+0#0000e05&| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@55
|
||||
>e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{|!|#|}|"+0#af5f00255&| +0#e000002&@11|#+0#0000e05&| |l|a|s|t| |p|o|s|i|t|i|o|n|a|l| |a|r|g|u|m|e|n|t| +0#0000000&@24
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{|!|@|}|"+0#af5f00255&| +0#e000002&@11|#+0#0000e05&| |d|e|r|e|f| +0#0000000&@43
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{|#|P|A|T|H|}|"+0#af5f00255&| +0#e000002&@8|#+0#0000e05&| |l|e|n|g|t|h| +0#0000000&@42
|
||||
|~+0#4040ff13&| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
@@ -13,8 +17,4 @@
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
| +0#0000000&@56|3@1|,|0|-|1| @7|B|o|t|
|
||||
| +0#0000000&@56|3|5|,|1| @9|B|o|t|
|
||||
|
||||
2
runtime/syntax/testdir/dumps/sh_bash_00.dump
generated
2
runtime/syntax/testdir/dumps/sh_bash_00.dump
generated
@@ -14,7 +14,7 @@
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000002&@3|;+0#e000e06&|}| +0#0000000&@48
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&|;+0#e000e06&| @2|}| +0#0000000&@49
|
||||
|t+0#af5f00255&|y|p|e|s|e|t| +0#e000e06&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|n+0#e000002&|i|n|e|'+0#af5f00255&| +0#e000002&|;+0#e000e06&| | +0#0000000&@52
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|n+0#e000002&|i|n|e|'+0#af5f00255&| +0#e000002&|;+0#e000e06&| +0#0000000&@53
|
||||
| +0#e000e06&|}| +0#0000000&@72
|
||||
@75
|
||||
|i|s|_|b|a|s|h|:| |1|,| @45|1|,|1| @10|T|o|p|
|
||||
|
||||
6
runtime/syntax/testdir/dumps/sh_bash_01.dump
generated
6
runtime/syntax/testdir/dumps/sh_bash_01.dump
generated
@@ -1,7 +1,7 @@
|
||||
|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000002&@3|;+0#e000e06&|}| +0#0000000&@48
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&|;+0#e000e06&| @2|}| +0#0000000&@49
|
||||
|t+0#af5f00255&|y|p|e|s|e|t| +0#e000e06&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|n+0#e000002&|i|n|e|'+0#af5f00255&| +0#e000002&|;+0#e000e06&| | +0#0000000&@52
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|n+0#e000002&|i|n|e|'+0#af5f00255&| +0#e000002&|;+0#e000e06&| +0#0000000&@53
|
||||
| +0#e000e06&|}| +0#0000000&@72
|
||||
> @74
|
||||
|v+0#e000e06&|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@60
|
||||
@@ -12,9 +12,9 @@
|
||||
|p+0#af5f00255&|r|i|n|t|f| +0#e000e06&|'+0#af5f00255&|%+0#e000002&|s|\|n|'+0#af5f00255&| +0#e000e06&|"+0#af5f00255&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @4|;|}|"+0#af5f00255&| +0#0000000&@31
|
||||
|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{||+0#af5f00255&|v+0#e000e06&|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000&@44
|
||||
|}+0#e000e06&| +0#0000000&@73
|
||||
|t+0#af5f00255&|y|p|e|s|e|t| +0#e000e06&|n+0#00e0e07&|o|t|a|f|l|o|a|t|=+0#0000000&|$+0#e000e06&|{||+0#af5f00255&|v+0#e000e06&|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|;+0#af5f00255&| +0#e000e06&| +0#0000000&@24
|
||||
|t+0#af5f00255&|y|p|e|s|e|t| +0#e000e06&|n+0#00e0e07&|o|t|a|f|l|o|a|t|=+0#0000000&|$+0#e000e06&|{||+0#af5f00255&|v+0#e000e06&|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|;+0#af5f00255&| +0#0000000&@25
|
||||
| +0#e000e06&|}| +0#0000000&@72
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|u|n|l|u|c|k|y| +0#e000002&|$+0#e000e06&|n|o|t|a|n|u|m|b|e|r| +0#0000000&@49
|
||||
|$+0#e000e06&|{||+0#af5f00255&|e|c|h|o| +0#e000002&|f|o|u|r|t|e@1|n|;+0#af5f00255&|}+0#e000e06&| +0#0000000&@56
|
||||
|$+0#e000e06&|{||+0#af5f00255&|e|c|h|o| +0#e000002&|f|i|f|t|e@1|n| +0#0000000&@59
|
||||
@57|1|9|,|0|-|1| @7|9|2|%|
|
||||
@57|1|9|,|0|-|1| @7|7|2|%|
|
||||
|
||||
12
runtime/syntax/testdir/dumps/sh_bash_02.dump
generated
12
runtime/syntax/testdir/dumps/sh_bash_02.dump
generated
@@ -1,5 +1,9 @@
|
||||
|$+0#e000e06#ffffff0|{||+0#af5f00255&|e|c|h|o| +0#e000002&|f|i|f|t|e@1|n| +0#0000000&@59
|
||||
>}+0#e000e06&| +0#0000000&@73
|
||||
|}+0#e000e06&| +0#0000000&@73
|
||||
@75
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{|!|#|}|"+0#af5f00255&| +0#e000002&@11|#+0#0000e05&| |l|a|s|t| |p|o|s|i|t|i|o|n|a|l| |a|r|g|u|m|e|n|t| +0#0000000&@24
|
||||
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{|!|@|}|"+0#af5f00255&| +0#e000002&@11|#+0#0000e05&| |d|e|r|e|f| +0#0000000&@43
|
||||
>e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{|#|P|A|T|H|}|"+0#af5f00255&| +0#e000002&@8|#+0#0000e05&| |l|e|n|g|t|h| +0#0000000&@42
|
||||
|~+0#4040ff13&| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
@@ -13,8 +17,4 @@
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
| +0#0000000&@56|3@1|,|1| @9|B|o|t|
|
||||
| +0#0000000&@56|3|7|,|1| @9|B|o|t|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d| +0#0000000&@57
|
||||
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d|i|n| |o|p|t|i|o|n| +0#0000000&@47
|
||||
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|t+0#0000001#ffff4012|e|s|t|C|o|n|t|a|i|n|e|r| +0#0000000#ffffff0@41
|
||||
@57|1|0|5|,|0|-|1| @6|2|7|%|
|
||||
@57|1|0|5|,|0|-|1| @6|2|6|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
@6|"+0#0000e05&|\| |k|e|y|w|o|r|d| |3| +0#0000000&@56
|
||||
@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|3| @58
|
||||
@75
|
||||
@57|1|2@1|,|7| @8|3|2|%|
|
||||
@57|1|2@1|,|7| @8|3|1|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
@6|"+0#0000e05&|\| |c@1|h|a|r| |o|p|t|i|o|n| +0#0000000&@53
|
||||
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&@1|h|a|r|=|&+0#e000002&| +0#0000000&@59
|
||||
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|e|d| |o|p|t|i|o|n| +0#0000000&@49
|
||||
@57|1|4|0|,|7| @8|3|7|%|
|
||||
@57|1|4|0|,|7| @8|3|6|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
@6|"+0#0000e05&|\| +0#0000000&|f+0#0000e05&|o|l|d| +0#0000000&|o+0#0000e05&|p|t|i|o|n| +0#0000000&@54
|
||||
@6|\+0#e000e06&| +0#0000000&|f+0#e000e06&|o|l|d| +0#0000000&@62
|
||||
@6|"+0#0000e05&|\| |d|i|s|p|l|a|y| |o|p|t|i|o|n| +0#0000000&@51
|
||||
@57|1|5|8|,|7| @8|4|2|%|
|
||||
@57|1|5|8|,|7| @8|4|1|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
@6|\+0#e000e06&| +0#0000000&|e+0#00e0003&|n|d|=|"+0#e000002&|e|n|d|-|p|a|t@1|e|r|n|"| +0#0000000&@49
|
||||
@6|"+0#0000e05&|\| |c|o|n|c|e|a|l| |o|p|t|i|o|n| +0#0000000&@51
|
||||
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|c|e|a|l| +0#0000000&@59
|
||||
@57|1|7|6|,|7| @8|4|7|%|
|
||||
@57|1|7|6|,|7| @8|4|5|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
@6|\+0#e000e06&| +0#0000000&|s+0#e000e06&|k|i|p|n|l| +0#0000000&@60
|
||||
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
|
||||
@6|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|t+0#0000001#ffff4012|e|s|t|C|o|n|t|a|i|n|e|d|1|,|t|e|s|t|C|o|n|t|a|i|n|e|d|2| +0#0000000#ffffff0@28
|
||||
@57|1|9|4|,|7| @8|5|2|%|
|
||||
@57|1|9|4|,|7| @8|5|0|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
|s+0#af5f00255&|y|n| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t|e|s|t|C|l|u|s|t|e|r| @51
|
||||
@6|"+0#0000e05&|\| |O|P|T|I|O|N|S| +0#0000000&@58
|
||||
@6|"+0#0000e05&|\| |c|o|n|t|a|i|n|s| |o|p|t|i|o|n| +0#0000000&@50
|
||||
@57|2|1|2|,|7| @8|5|7|%|
|
||||
@57|2|1|2|,|7| @8|5@1|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|3| |k|e|y|w|o|r|d| @45
|
||||
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|4| |k|e|y|w|o|r|d| @45
|
||||
|s+0#af5f00255&|y|n| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|t|e|s|t|N|e|x|t|5| |k|e|y|w|o|r|d| @45
|
||||
@57|2|3|0|,|7| @8|6|2|%|
|
||||
@57|2|3|0|,|7| @8|6|0|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|4| @58
|
||||
@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|5| @58
|
||||
@6|\+0#e000e06&| +0#0000000&|k|e|y|w|o|r|d|6| @58
|
||||
@57|2|4|8|,|0|-|1| @6|6|7|%|
|
||||
@57|2|4|8|,|0|-|1| @6|6|5|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|6|,+0#0000000#ffffff0| @56
|
||||
@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
|
||||
@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|7| +0#0000000#ffffff0|,| @55
|
||||
@57|2|6@1|,|7| @8|7|2|%|
|
||||
@57|2|6@1|,|7| @8|7|0|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
@6|\+0#e000e06&| +0#0000000&|,| |t+0#0000001#ffff4012|e|x|t|N|e|x|t|1|7| +0#0000000#ffffff0|,| |t+0#0000001#ffff4012|e|x|t|N|e|x|t|1|8| +0#0000000#ffffff0|,| @39
|
||||
@6|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@58
|
||||
@6|\+0#e000e06&| +0#0000000&|t+0#0000001#ffff4012|e|x|t|N|e|x|t|1|9|,+0#0000000#ffffff0| |@+0#0000001#ffff4012|t|e|s|t|C|l|u|s|t|e|r| +0#0000000#ffffff0@42
|
||||
@57|2|8|4|,|7| @8|7@1|%|
|
||||
@57|2|8|4|,|7| @8|7|5|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
|f+0#af5f00255&|u|n|c|t|i|o|n|!| +0#0000000&|s+0#e000e06&|:|C+0#0000000&|o|n|t|a|i|n|e|d|G|r|o|u|p|(+0#e000e06&|)| +0#0000000&@46
|
||||
@2|"+0#0000e05&| |.@2| +0#0000000&@67
|
||||
@2|f+0#af5f00255&|o|r| +0#0000000&|c+0#00e0e07&|l|u|s|t|e|r| +0#0000000&|i+0#af5f00255&|n| +0#0000000&|[+0#e000e06&|'+0#e000002&|m|a|r|k|d|o|w|n|H|i|g|h|l|i|g|h|t|_|z|s|h|'|,+0#0000000&| |'+0#e000002&|z|s|h|'|]+0#e000e06&| +0#0000000&@25
|
||||
@57|3|0|2|,|7| @8|8|2|%|
|
||||
@57|3|0|2|,|7| @8|8|0|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
|"+0#0000e05&| |I|s@1|u|e| |#|1|8|4|9|1| |(|T|w|o| |"+0#e000002&|)|"|s+0#0000e05&| |a|r|e| |i|n|c|o|r@1|e|c|t|l|y| |c|o|l|o|r|e|d| |'|v|i|m|O|p|e|r|E|r@1|o|r|'| |i|n| |s|y|n|t|a|x|/|m
|
||||
|a|i|l|.|v|i|m|)| +0#0000000&@66
|
||||
@75
|
||||
@57|3|2|0|,|0|-|1| @6|8|7|%|
|
||||
@57|3|2|0|,|0|-|1| @6|8|4|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
@75
|
||||
|"+0#0000e05&| |C|o|d|e| |>| |K|e|y|w|o|r|d|s| |{@2|2| +0#0000000&@52
|
||||
|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|c+0#00e0003&|l|u|s|t|e|r| +0#0000000&|t|y|p|s|t|C|o|d|e|K|e|y|w|o|r|d|s| @42
|
||||
@57|3@1|6|,|1| @8|9|2|%|
|
||||
@57|3@1|6|,|1| @8|8|9|%|
|
||||
|
||||
@@ -17,4 +17,4 @@
|
||||
@4|\+0#e000e06&| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=| +0#0000000&@59
|
||||
@12|"+0#0000e05&|\| +0#0000000&|c+0#0000e05&|o|m@1|e|n|t| +0#0000000&@52
|
||||
@12|\+0#e000e06&| +0#0000000&@1|t+0#0000001#ffff4012|y|p|s|t|C|o|d|e|C|o|n|d|i|t|i|o|n|a|l| +0#0000000#ffffff0@39
|
||||
@57|3|5|4|,|0|-|1| @6|9|7|%|
|
||||
@57|3|5|4|,|0|-|1| @6|9|4|%|
|
||||
|
||||
14
runtime/syntax/testdir/dumps/vim_ex_syntax_21.dump
generated
14
runtime/syntax/testdir/dumps/vim_ex_syntax_21.dump
generated
@@ -11,10 +11,10 @@
|
||||
|s+0#af5f00255&|y|n| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&@1|s|l|r|n|r|c|C|m|d|L|i|n|e| @6|m+0#e000e06&|a|t|c|h|g|r|o|u|p|=|s+0#0000000&|l|r|n|r|c|C|m|d| |s+0#00e0003&|t|a|r|t|=|"+0#e000002&|\|<|\+0#e000e06&|(|a+0#e000002&|u|t|o|b|a|u|d|\+0#e000e06&|||.+0#e000002&
|
||||
@2|\+0#e000e06&|||v+0#e000002&|i|s|i|b|l|e|_|h|e|a|d|e|r|s|\+0#e000e06&|)|\+0#e000002&|>|"| +0#0000000&|e+0#00e0003&|n|d|=|"+0#e000002&|$|"| +0#0000000&|o+0#e000e06&|n|e|l|i|n|e| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|s|=|s+0#0000001#ffff4012|l|r|n|r|c|\|(|S|t|r|i|n|g|\|||C|o|m@1|e|n|t|\|)
|
||||
| +0#0000000#ffffff0@74
|
||||
|~+0#4040ff13&| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
| +0#0000000&@56|3|7|2|,|0|-|1| @6|B|o|t|
|
||||
|"+0#0000e05&| |:|s|y|n|t|a|x| |k|e|y|w|o|r|d| |—| |o|n|e|l|i|n|e| |a|c@1|e|p|t|e|d| |b|u|t| |m|e|a|n|i|n|g|l|e|s@1| +0#0000000&@22
|
||||
|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|T|e|s|t|K|w| |f|o@1| |b|a|r| |o+0#ffffff16#ff404010|n|e|l|i|n|e| +0#0000000#ffffff0@37
|
||||
|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|k+0#00e0003&|e|y|w|o|r|d| +0#0000000&|T|e|s|t|K|w|2| |o+0#ffffff16#ff404010|n|e|l|i|n|e| +0#0000000#ffffff0|b|a|z| |q|u@1|x| @35
|
||||
@75
|
||||
|"+0#0000e05&| |:|s|y|n|t|a|x| |m|a|t|c|h| |—| |o|n|e|l|i|n|e| |a|c@1|e|p|t|e|d| |b|u|t| |m|e|a|n|i|n|g|l|e|s@1| +0#0000000&@24
|
||||
|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|T|e|s|t|M|a|t|c|h| |/+0#e000002&|\|<|f|o@1|\|>|/| +0#0000000&|o+0#ffffff16#ff404010|n|e|l|i|n|e| +0#0000000#ffffff0@34
|
||||
@57|3|7|2|,|0|-|1| @6|9|8|%|
|
||||
|
||||
20
runtime/syntax/testdir/dumps/vim_ex_syntax_22.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/vim_ex_syntax_22.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
|s+0#af5f00255#ffffff0|y|n|t|a|x| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|T|e|s|t|M|a|t|c|h| |/+0#e000002&|\|<|f|o@1|\|>|/| +0#0000000&|o+0#ffffff16#ff404010|n|e|l|i|n|e| +0#0000000#ffffff0@34
|
||||
|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|m+0#00e0003&|a|t|c|h| +0#0000000&|T|e|s|t|M|a|t|c|h|2| |o+0#ffffff16#ff404010|n|e|l|i|n|e| +0#0000000#ffffff0|/+0#e000002&|\|<|b|a|r|\|>|/| +0#0000000&@33
|
||||
@75
|
||||
|"+0#0000e05&| |:|s|y|n|t|a|x| |r|e|g|i|o|n| |—| |o|n|e|l|i|n|e| |i|s| |m|e|a|n|i|n|g|f|u|l| |h|e|r|e| +0#0000000&@29
|
||||
|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&|T|e|s|t|R|e|g|i|o|n| |s+0#00e0003&|t|a|r|t|=|/+0#e000002&|{|/| +0#0000000&|e+0#00e0003&|n|d|=|/+0#e000002&|}|/| +0#0000000&|o+0#e000e06&|n|e|l|i|n|e| +0#0000000&@24
|
||||
>s+0#af5f00255&|y|n|t|a|x| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&|T|e|s|t|R|e|g|i|o|n|2| |o+0#e000e06&|n|e|l|i|n|e| +0#0000000&|s+0#00e0003&|t|a|r|t|=|/+0#e000002&|"|/| +0#0000000&|e+0#00e0003&|n|d|=|/+0#e000002&|"|/| +0#0000000&@23
|
||||
|s+0#af5f00255&|y|n|t|a|x| +0#0000000&|r+0#00e0003&|e|g|i|o|n| +0#0000000&|T|e|s|t|R|e|g|i|o|n|3| |s+0#00e0003&|t|a|r|t|=|/+0#e000002&|\|/|\|*|/| +0#0000000&|e+0#00e0003&|n|d|=|/+0#e000002&|\|*|\|/@1| +0#0000000&|o+0#e000e06&|n|e|l|i|n|e| +0#0000000&|c+0#e000e06&|o|n|t|a|i|n|e|d|i|n|=|A|L@1| +0#0000000&@1
|
||||
|~+0#4040ff13&| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
|~| @73
|
||||
| +0#0000000&@56|3|8@1|,|1| @8|B|o|t|
|
||||
@@ -14,3 +14,6 @@ endef
|
||||
|
||||
default:
|
||||
$(call say,"Hello (world)!")
|
||||
|
||||
foo:
|
||||
echo "bar$$" baz
|
||||
|
||||
@@ -79,4 +79,4 @@ test = UR"""Raw Unicode string with quotes ' and "
|
||||
and literal \t and \040 and \xFF
|
||||
and escapes \u00A1 and \U00010605"""
|
||||
|
||||
# vim: syntax=python2
|
||||
# vim: ft=python2
|
||||
|
||||
@@ -31,3 +31,7 @@ Variable="${VariableB:-${VariableC:-eng}}" # :- is ksh and bash
|
||||
Variable=${VariableB:-${VariableC:-${VariableD:-${VariableE:=eng}}}}
|
||||
: ${VariableB:=${VariableC:-${VariableD:-${VariableE:=eng}}}}
|
||||
|
||||
# special variables
|
||||
echo "${!#}" # last positional argument
|
||||
echo "${!@}" # deref
|
||||
echo "${#PATH}" # length
|
||||
|
||||
@@ -14,7 +14,7 @@ echo ${ echo 'six'
|
||||
echo ${ echo 'seven' ;}
|
||||
echo ${ echo 'eight'; }
|
||||
typeset nine=${ pwd; }
|
||||
echo ${ echo 'nine' ;
|
||||
echo ${ echo 'nine' ;
|
||||
}
|
||||
|
||||
valsubfunc() {
|
||||
@@ -25,9 +25,13 @@ echo "${|valsubfunc eleven; }"
|
||||
printf '%s\n' "${|valsubfunc twelve ;}"
|
||||
unlucky=${|valsubfunc thirteen
|
||||
}
|
||||
typeset notafloat=${|valsubfunc notanumber ;
|
||||
typeset notafloat=${|valsubfunc notanumber ;
|
||||
}
|
||||
echo $unlucky $notanumber
|
||||
${|echo fourteen;}
|
||||
${|echo fifteen
|
||||
}
|
||||
|
||||
echo "${!#}" # last positional argument
|
||||
echo "${!@}" # deref
|
||||
echo "${#PATH}" # length
|
||||
|
||||
@@ -375,3 +375,15 @@ syntax cluster typstCodeKeywords
|
||||
syn match slrnrcColorInit contained "^\s*color\s\+\S\+" skipwhite nextgroup=slrnrcColorVal\(Str\)\= contains=slrnrcColor\(Obj\|ObjStr\)\=
|
||||
syn region slrnrcCmdLine matchgroup=slrnrcCmd start="\<\(autobaud\|...\|visible_headers\)\>" end="$" oneline contains=slrnrc\(String\|Comment\)
|
||||
|
||||
" :syntax keyword — oneline accepted but meaningless
|
||||
syntax keyword TestKw foo bar oneline
|
||||
syntax keyword TestKw2 oneline baz quux
|
||||
|
||||
" :syntax match — oneline accepted but meaningless
|
||||
syntax match TestMatch /\<foo\>/ oneline
|
||||
syntax match TestMatch2 oneline /\<bar\>/
|
||||
|
||||
" :syntax region — oneline is meaningful here
|
||||
syntax region TestRegion start=/{/ end=/}/ oneline
|
||||
syntax region TestRegion2 oneline start=/"/ end=/"/
|
||||
syntax region TestRegion3 start=/\/\*/ end=/\*\// oneline containedin=ALL
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
" Language: Vim script
|
||||
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
|
||||
" Doug Kearns <dougkearns@gmail.com>
|
||||
" Last Change: 2026 Mar 13
|
||||
" Last Change: 2026 Apr 20
|
||||
" Former Maintainer: Charles E. Campbell
|
||||
|
||||
" DO NOT CHANGE DIRECTLY.
|
||||
@@ -68,25 +68,25 @@ syn keyword vimOption contained al aleph ari allowrevins ambw ambiwidth arab ara
|
||||
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 stlo statuslineopt 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 trz termresize skipwhite nextgroup=vimSetEqual,vimSetMod
|
||||
syn keyword vimOption contained tsy termsync 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 skipwhite nextgroup=vimSetEqual,vimSetMod
|
||||
syn keyword vimOption contained wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight whl winhighlight 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 mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines mlst modelinestrict 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 skipwhite nextgroup=vimSetEqual,vimSetMod
|
||||
syn keyword vimOption contained pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pumopt 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 sop scrolloffpad 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 stlo statuslineopt 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 skipwhite nextgroup=vimSetEqual,vimSetMod
|
||||
syn keyword vimOption contained tgc termguicolors trz termresize tsy termsync 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 skipwhite nextgroup=vimSetEqual,vimSetMod
|
||||
syn keyword vimOption contained wop wildoptions wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight whl winhighlight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat 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=''
|
||||
syn keyword vimOption contained noari noallowrevins noarab noarabic noarshape noarabicshape noacd noautochdir noac noautocomplete noai noautoindent noar noautoread noasd noautoshelldir noaw noautowrite noawa noautowriteall nobk nobackup nobeval noballooneval nobevalterm noballoonevalterm nobin nobinary nobomb nobri nobreakindent nobl nobuflisted nocdh nocdhome nocin nocindent nocp nocompatible nocf noconfirm noci nocopyindent nocsre nocscoperelative nocst nocscopetag nocsverb nocscopeverbose nocrb nocursorbind nocuc nocursorcolumn nocul nocursorline nodeco nodelcombine nodiff nodg nodigraph noed noedcompatible noemo noemoji noeof noendoffile noeol noendofline noea noequalalways noeb noerrorbells noek noesckeys noet noexpandtab noex noexrc nofic nofileignorecase
|
||||
syn keyword vimOption contained nofixeol nofixendofline nofen nofoldenable nofs nofsync nogd nogdefault noguipty nohid nohidden nohk nohkmap nohkp nohkmapp nohls nohlsearch noicon noic noignorecase noimc noimcmdline noimd noimdisable nois noincsearch noinf noinfercase noim noinsertmode nojs nojoinspaces nolnr nolangnoremap nolrm nolangremap nolz nolazyredraw nolbr nolinebreak nolisp nolist nolpl noloadplugins nomagic noml nomodeline nomle nomodelineexpr noma nomodifiable nomod nomodified nomore nomousef nomousefocus nomh nomousehide nomousemev nomousemoveevent nonu nonumber noodev noopendevice nopaste nopi nopreserveindent nopvw nopreviewwindow noprompt noro noreadonly nornu norelativenumber noremap nors norestorescreen nori norevins norl norightleft noru noruler
|
||||
syn keyword vimOption contained noscb noscrollbind noscf noscrollfocus nosecure nossl noshellslash nostmp noshelltemp nosr noshiftround nosn noshortname nosc noshowcmd nosft noshowfulltag nosm noshowmatch nosmd noshowmode noscs nosmartcase nosi nosmartindent nosta nosmarttab nosms nosmoothscroll nospell nosb nosplitbelow nospr nosplitright nosol nostartofline noswf noswapfile notbs notagbsearch notr notagrelative notgst notagstack notbidi notermbidi notgc notermguicolors notsy notermsync noterse nota notextauto notx notextmode notop notildeop noto notimeout notitle nottimeout notbi nottybuiltin notf nottyfast noudf noundofile novb novisualbell nowarn nowiv noweirdinvert nowic nowildignorecase nowmnu nowildmenu nowfb nowinfixbuf nowfh nowinfixheight nowfw nowinfixwidth
|
||||
syn keyword vimOption contained nowst nowlsteal nowrap nows nowrapscan nowrite nowa nowriteany nowb nowritebackup noxtermcodes
|
||||
syn keyword vimOption contained nofixeol nofixendofline nofen nofoldenable nofs nofsync nogd nogdefault noguipty nohid nohidden nohk nohkmap nohkp nohkmapp nohls nohlsearch noicon noic noignorecase noimc noimcmdline noimd noimdisable nois noincsearch noinf noinfercase noim noinsertmode nojs nojoinspaces nolnr nolangnoremap nolrm nolangremap nolz nolazyredraw nolbr nolinebreak nolisp nolist nolpl noloadplugins nomagic noml nomodeline nomle nomodelineexpr nomlst nomodelinestrict noma nomodifiable nomod nomodified nomore nomousef nomousefocus nomh nomousehide nomousemev nomousemoveevent nonu nonumber noodev noopendevice nopaste nopi nopreserveindent nopvw nopreviewwindow noprompt noro noreadonly nornu norelativenumber noremap nors norestorescreen nori norevins norl norightleft
|
||||
syn keyword vimOption contained noru noruler noscb noscrollbind noscf noscrollfocus nosecure nossl noshellslash nostmp noshelltemp nosr noshiftround nosn noshortname nosc noshowcmd nosft noshowfulltag nosm noshowmatch nosmd noshowmode noscs nosmartcase nosi nosmartindent nosta nosmarttab nosms nosmoothscroll nospell nosb nosplitbelow nospr nosplitright nosol nostartofline noswf noswapfile notbs notagbsearch notr notagrelative notgst notagstack notbidi notermbidi notgc notermguicolors notsy notermsync noterse nota notextauto notx notextmode notop notildeop noto notimeout notitle nottimeout notbi nottybuiltin notf nottyfast noudf noundofile novb novisualbell nowarn nowiv noweirdinvert nowic nowildignorecase nowmnu nowildmenu nowfb nowinfixbuf nowfh nowinfixheight
|
||||
syn keyword vimOption contained nowfw nowinfixwidth nowrap nows nowrapscan nowrite nowa nowriteany nowb nowritebackup noxtermcodes
|
||||
|
||||
" vimOptions: These are the invertible variants {{{2
|
||||
" GEN_SYN_VIM: vimOption invertible, START_STR='syn keyword vimOption contained', END_STR=''
|
||||
syn keyword vimOption contained invari invallowrevins invarab invarabic invarshape invarabicshape invacd invautochdir invac invautocomplete invai invautoindent invar invautoread invasd invautoshelldir invaw invautowrite invawa invautowriteall invbk invbackup invbeval invballooneval invbevalterm invballoonevalterm invbin invbinary invbomb invbri invbreakindent invbl invbuflisted invcdh invcdhome invcin invcindent invcp invcompatible invcf invconfirm invci invcopyindent invcsre invcscoperelative invcst invcscopetag invcsverb invcscopeverbose invcrb invcursorbind invcuc invcursorcolumn invcul invcursorline invdeco invdelcombine invdiff invdg invdigraph inved invedcompatible invemo invemoji inveof invendoffile inveol invendofline invea invequalalways inveb inverrorbells
|
||||
syn keyword vimOption contained invek invesckeys invet invexpandtab invex invexrc invfic invfileignorecase invfixeol invfixendofline invfen invfoldenable invfs invfsync invgd invgdefault invguipty invhid invhidden invhk invhkmap invhkp invhkmapp invhls invhlsearch invicon invic invignorecase invimc invimcmdline invimd invimdisable invis invincsearch invinf invinfercase invim invinsertmode invjs invjoinspaces invlnr invlangnoremap invlrm invlangremap invlz invlazyredraw invlbr invlinebreak invlisp invlist invlpl invloadplugins invmagic invml invmodeline invmle invmodelineexpr invma invmodifiable invmod invmodified invmore invmousef invmousefocus invmh invmousehide invmousemev invmousemoveevent invnu invnumber invodev invopendevice invpaste invpi invpreserveindent
|
||||
syn keyword vimOption contained invpvw invpreviewwindow invprompt invro invreadonly invrnu invrelativenumber invremap invrs invrestorescreen invri invrevins invrl invrightleft invru invruler invscb invscrollbind invscf invscrollfocus invsecure invssl invshellslash invstmp invshelltemp invsr invshiftround invsn invshortname invsc invshowcmd invsft invshowfulltag invsm invshowmatch invsmd invshowmode invscs invsmartcase invsi invsmartindent invsta invsmarttab invsms invsmoothscroll invspell invsb invsplitbelow invspr invsplitright invsol invstartofline invswf invswapfile invtbs invtagbsearch invtr invtagrelative invtgst invtagstack invtbidi invtermbidi invtgc invtermguicolors invtsy invtermsync invterse invta invtextauto invtx invtextmode invtop invtildeop invto invtimeout
|
||||
syn keyword vimOption contained invtitle invttimeout invtbi invttybuiltin invtf invttyfast invudf invundofile invvb invvisualbell invwarn invwiv invweirdinvert invwic invwildignorecase invwmnu invwildmenu invwfb invwinfixbuf invwfh invwinfixheight invwfw invwinfixwidth invwst invwlsteal invwrap invws invwrapscan invwrite invwa invwriteany invwb invwritebackup invxtermcodes
|
||||
syn keyword vimOption contained invek invesckeys invet invexpandtab invex invexrc invfic invfileignorecase invfixeol invfixendofline invfen invfoldenable invfs invfsync invgd invgdefault invguipty invhid invhidden invhk invhkmap invhkp invhkmapp invhls invhlsearch invicon invic invignorecase invimc invimcmdline invimd invimdisable invis invincsearch invinf invinfercase invim invinsertmode invjs invjoinspaces invlnr invlangnoremap invlrm invlangremap invlz invlazyredraw invlbr invlinebreak invlisp invlist invlpl invloadplugins invmagic invml invmodeline invmle invmodelineexpr invmlst invmodelinestrict invma invmodifiable invmod invmodified invmore invmousef invmousefocus invmh invmousehide invmousemev invmousemoveevent invnu invnumber invodev invopendevice invpaste
|
||||
syn keyword vimOption contained invpi invpreserveindent invpvw invpreviewwindow invprompt invro invreadonly invrnu invrelativenumber invremap invrs invrestorescreen invri invrevins invrl invrightleft invru invruler invscb invscrollbind invscf invscrollfocus invsecure invssl invshellslash invstmp invshelltemp invsr invshiftround invsn invshortname invsc invshowcmd invsft invshowfulltag invsm invshowmatch invsmd invshowmode invscs invsmartcase invsi invsmartindent invsta invsmarttab invsms invsmoothscroll invspell invsb invsplitbelow invspr invsplitright invsol invstartofline invswf invswapfile invtbs invtagbsearch invtr invtagrelative invtgst invtagstack invtbidi invtermbidi invtgc invtermguicolors invtsy invtermsync invterse invta invtextauto invtx invtextmode
|
||||
syn keyword vimOption contained invtop invtildeop invto invtimeout invtitle invttimeout invtbi invttybuiltin invtf invttyfast invudf invundofile invvb invvisualbell invwarn invwiv invweirdinvert invwic invwildignorecase invwmnu invwildmenu invwfb invwinfixbuf invwfh invwinfixheight invwfw invwinfixwidth invwrap invws invwrapscan invwrite invwa invwriteany invwb invwritebackup invxtermcodes
|
||||
" termcap codes (which can also be set) {{{2
|
||||
" GEN_SYN_VIM: vimOption term output code, START_STR='syn keyword vimOption contained', END_STR='skipwhite nextgroup=vimSetEqual,vimSetMod'
|
||||
syn keyword vimOption 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 t_BS t_ES skipwhite nextgroup=vimSetEqual,vimSetMod
|
||||
@@ -107,11 +107,11 @@ syn keyword vimOptionVarName contained al aleph ari allowrevins ambw ambiwidth a
|
||||
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 stlo statuslineopt 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
|
||||
syn keyword vimOptionVarName contained tgc termguicolors trz termresize tsy termsync 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
|
||||
syn keyword vimOptionVarName contained wop wildoptions wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight whl winhighlight 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 mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines mlst modelinestrict 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
|
||||
syn keyword vimOptionVarName contained pmbcs printmbcharset pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pumopt 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 sop scrolloffpad 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
|
||||
syn keyword vimOptionVarName contained 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 stlo statuslineopt 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 trz termresize tsy termsync 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
|
||||
syn keyword vimOptionVarName contained wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight whl winhighlight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat 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 t_BS t_ES
|
||||
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
|
||||
@@ -126,9 +126,9 @@ syn match vimOptionVarName contained "t_k;"
|
||||
|
||||
" unsupported settings: some were supported by vi but don't do anything in vim {{{2
|
||||
" GEN_SYN_VIM: Missing vimOption, START_STR='syn keyword vimErrSetting contained', END_STR=''
|
||||
syn keyword vimErrSetting contained akm altkeymap anti antialias ap autoprint bf beautify biosk bioskey consk conskey fk fkmap fl flash gr graphic ht hardtabs macatsui mesg novice open opt optimize oft osfiletype redraw slow slowopen sourceany w1200 w300 w9600
|
||||
syn keyword vimErrSetting contained noakm noaltkeymap noanti noantialias noap noautoprint nobf nobeautify nobiosk nobioskey noconsk noconskey nofk nofkmap nofl noflash nogr nographic nomacatsui nomesg nonovice noopen noopt nooptimize noredraw noslow noslowopen nosourceany
|
||||
syn keyword vimErrSetting contained invakm invaltkeymap invanti invantialias invap invautoprint invbf invbeautify invbiosk invbioskey invconsk invconskey invfk invfkmap invfl invflash invgr invgraphic invmacatsui invmesg invnovice invopen invopt invoptimize invredraw invslow invslowopen invsourceany
|
||||
syn keyword vimErrSetting contained akm altkeymap anti antialias ap autoprint bf beautify biosk bioskey consk conskey fk fkmap fl flash gr graphic ht hardtabs macatsui mesg novice open opt optimize oft osfiletype redraw slow slowopen sourceany w1200 w300 w9600 wst wlsteal
|
||||
syn keyword vimErrSetting contained noakm noaltkeymap noanti noantialias noap noautoprint nobf nobeautify nobiosk nobioskey noconsk noconskey nofk nofkmap nofl noflash nogr nographic nomacatsui nomesg nonovice noopen noopt nooptimize noredraw noslow noslowopen nosourceany nowst nowlsteal
|
||||
syn keyword vimErrSetting contained invakm invaltkeymap invanti invantialias invap invautoprint invbf invbeautify invbiosk invbioskey invconsk invconskey invfk invfkmap invfl invflash invgr invgraphic invmacatsui invmesg invnovice invopen invopt invoptimize invredraw invslow invslowopen invsourceany invwst invwlsteal
|
||||
|
||||
" AutoCmd Events {{{2
|
||||
syn case ignore
|
||||
@@ -146,8 +146,8 @@ syn keyword vimGroup contained Added Bold BoldItalic Boolean Changed Character C
|
||||
|
||||
" Default highlighting groups {{{2
|
||||
" GEN_SYN_VIM: vimHLGroup, START_STR='syn keyword vimHLGroup contained', END_STR=''
|
||||
syn keyword vimHLGroup contained ErrorMsg IncSearch ModeMsg NonText StatusLine StatusLineNC EndOfBuffer VertSplit VisualNOS DiffText DiffTextAdd PmenuSbar TabLineSel TabLineFill TabPanel TabPanelSel TabPanelFill Cursor lCursor TitleBar TitleBarNC QuickFixLine CursorLineSign CursorLineFold CurSearch PmenuKind PmenuKindSel PmenuMatch PmenuMatchSel PmenuExtra PmenuExtraSel PmenuBorder PopupSelected MessageWindow PopupNotification PreInsert Normal Directory LineNr CursorLineNr MoreMsg Question Search SpellBad SpellCap SpellRare SpellLocal PmenuThumb PmenuShadow Pmenu PmenuSel SpecialKey Title WarningMsg WildMenu Folded FoldColumn SignColumn Visual DiffAdd DiffChange DiffDelete TabLine CursorColumn CursorLine ColorColumn MatchParen StatusLineTerm StatusLineTermNC ToolbarLine
|
||||
syn keyword vimHLGroup contained ToolbarButton TitleBar TitleBarNC Menu Tooltip Scrollbar CursorIM ComplMatchIns LineNrAbove LineNrBelow MsgArea Terminal User1 User2 User3 User4 User5 User6 User7 User8 User9
|
||||
syn keyword vimHLGroup contained ErrorMsg IncSearch ModeMsg NonText StatusLine StatusLineNC EndOfBuffer VertSplit VertSplitNC VisualNOS DiffText DiffTextAdd PmenuSbar TabLineSel TabLineFill TabPanel TabPanelSel TabPanelFill Cursor lCursor TitleBar TitleBarNC QuickFixLine CursorLineSign CursorLineFold CurSearch PmenuKind PmenuKindSel PmenuMatch PmenuMatchSel PmenuExtra PmenuExtraSel PmenuBorder PopupSelected MessageWindow PopupNotification PreInsert Normal Directory LineNr CursorLineNr MoreMsg Question Search SpellBad SpellCap SpellRare SpellLocal PmenuThumb PmenuShadow Pmenu PmenuSel SpecialKey Title WarningMsg WildMenu Folded FoldColumn SignColumn Visual DiffAdd DiffChange DiffDelete TabLine CursorColumn CursorLine ColorColumn MatchParen StatusLineTerm StatusLineTermNC
|
||||
syn keyword vimHLGroup contained ToolbarLine ToolbarButton TitleBar TitleBarNC Menu Tooltip Scrollbar CursorIM ComplMatchIns LineNrAbove LineNrBelow MsgArea Terminal User1 User2 User3 User4 User5 User6 User7 User8 User9
|
||||
syn match vimHLGroup contained "\<Conceal\>"
|
||||
syn case match
|
||||
|
||||
@@ -1923,10 +1923,11 @@ syn keyword vimSynType contained include skipwhite nextgroup=vimSynIncludeClust
|
||||
syn match vimSynIncludeCluster contained "@[_a-zA-Z0-9]\+\>"
|
||||
|
||||
" Syntax: keyword {{{2
|
||||
syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynContainedin
|
||||
syn cluster vimSynKeyGroup contains=@vimContinue,vimSynCchar,vimSynNextgroup,vimSynKeyOpt,vimSynContainedin,vimSynKeyError
|
||||
syn keyword vimSynType contained keyword skipwhite nextgroup=vimSynKeyRegion
|
||||
syn region vimSynKeyRegion contained keepend matchgroup=vimGroupName start="\h\w*\>" skip=+\\\\\|\\|\|\n\s*\%(\\\|"\\ \)+ matchgroup=vimCmdSep end="|\|$" contains=@vimSynKeyGroup
|
||||
syn match vimSynKeyOpt contained "\%#=1\<\%(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
|
||||
syn match vimSynKeyError contained "\<oneline\>"
|
||||
|
||||
" Syntax: match {{{2
|
||||
syn cluster vimSynMtchGroup contains=@vimContinue,vimSynCchar,vimSynContains,vimSynContainedin,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vimMtchComment
|
||||
@@ -2494,6 +2495,7 @@ if !exists("skip_vim_syntax_inits")
|
||||
hi def link vimSyncError vimError
|
||||
hi def link vimSynConcealError vimError
|
||||
hi def link vimSynError vimError
|
||||
hi def link vimSynKeyError vimError
|
||||
hi def link vimSynFoldlevelError vimError
|
||||
hi def link vimSynIskeywordError vimError
|
||||
hi def link vimSynSpellError vimError
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
" Documentation: https://pwmt.org/projects/zathura/documentation/
|
||||
" Upstream: https://github.com/Freed-Wu/zathurarc.vim
|
||||
" Latest Revision: 2024-09-16
|
||||
" 2026 Apr 04 by Vim project: add page-v-padding and page-h-padding
|
||||
|
||||
if exists('b:current_syntax')
|
||||
finish
|
||||
@@ -22,7 +23,33 @@ syntax region zathurarcString start=`'` skip=`\\'` end=`'`
|
||||
syntax keyword zathurarcMode normal fullscreen presentation index
|
||||
syntax keyword zathurarcBoolean true false
|
||||
syntax keyword zathurarcCommand include map set unmap
|
||||
syntax keyword zathurarcOption abort-clear-search adjust-open advance-pages-per-row completion-bg completion-fg completion-group-bg completion-group-fg completion-highlight-bg completion-highlight-fg continuous-hist-save database dbus-raise-window dbus-service default-bg default-fg double-click-follow exec-command filemonitor first-page-column font guioptions highlight-active-color highlight-color highlight-fg highlight-transparency incremental-search index-active-bg index-active-fg index-bg index-fg inputbar-bg inputbar-fg link-hadjust link-zoom n-completion-items notification-bg notification-error-bg notification-error-fg notification-fg notification-warning-bg notification-warning-fg page-cache-size page-padding page-right-to-left page-thumbnail-size pages-per-row recolor recolor-darkcolor recolor-keephue recolor-lightcolor recolor-reverse-video render-loading render-loading-bg render-loading-fg sandbox scroll-full-overlap scroll-hstep scroll-page-aware scroll-step scroll-wrap search-hadjust selection-clipboard selection-notification show-directories show-hidden show-recent statusbar-basename statusbar-bg statusbar-fg statusbar-h-padding statusbar-home-tilde statusbar-page-percent statusbar-v-padding synctex synctex-editor-command vertical-center window-height window-icon window-icon-document window-title-basename window-title-home-tilde window-title-page window-width zoom-center zoom-max zoom-min zoom-step
|
||||
syntax keyword zathurarcOption abort-clear-search adjust-open advance-pages-per-row
|
||||
syntax keyword zathurarcOption completion-bg completion-fg completion-group-bg
|
||||
syntax keyword zathurarcOption completion-group-fg completion-highlight-bg
|
||||
syntax keyword zathurarcOption completion-highlight-fg continuous-hist-save database
|
||||
syntax keyword zathurarcOption dbus-raise-window dbus-service default-bg default-fg
|
||||
syntax keyword zathurarcOption double-click-follow exec-command filemonitor
|
||||
syntax keyword zathurarcOption first-page-column font guioptions highlight-active-color
|
||||
syntax keyword zathurarcOption highlight-color highlight-fg highlight-transparency
|
||||
syntax keyword zathurarcOption incremental-search index-active-bg index-active-fg index-bg
|
||||
syntax keyword zathurarcOption index-fg inputbar-bg inputbar-fg link-hadjust link-zoom
|
||||
syntax keyword zathurarcOption n-completion-items notification-bg notification-error-bg
|
||||
syntax keyword zathurarcOption notification-error-fg notification-fg
|
||||
syntax keyword zathurarcOption notification-warning-bg notification-warning-fg
|
||||
syntax keyword zathurarcOption page-cache-size page-h-padding page-v-padding
|
||||
syntax keyword zathurarcOption page-right-to-left page-thumbnail-size pages-per-row recolor
|
||||
syntax keyword zathurarcOption recolor-darkcolor recolor-keephue recolor-lightcolor
|
||||
syntax keyword zathurarcOption recolor-reverse-video render-loading render-loading-bg
|
||||
syntax keyword zathurarcOption render-loading-fg sandbox scroll-full-overlap scroll-hstep
|
||||
syntax keyword zathurarcOption scroll-page-aware scroll-step scroll-wrap search-hadjust
|
||||
syntax keyword zathurarcOption selection-clipboard selection-notification show-directories
|
||||
syntax keyword zathurarcOption show-hidden show-recent statusbar-basename statusbar-bg
|
||||
syntax keyword zathurarcOption statusbar-fg statusbar-h-padding statusbar-home-tilde
|
||||
syntax keyword zathurarcOption statusbar-page-percent statusbar-v-padding synctex
|
||||
syntax keyword zathurarcOption synctex-editor-command vertical-center window-height
|
||||
syntax keyword zathurarcOption window-icon window-icon-document window-title-basename
|
||||
syntax keyword zathurarcOption window-title-home-tilde window-title-page window-width
|
||||
syntax keyword zathurarcOption zoom-center zoom-max zoom-min zoom-step
|
||||
|
||||
highlight default link zathurarcComment Comment
|
||||
highlight default link zathurarcNumber Number
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user