Compare commits
251 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2219c89013 | ||
|
|
e25933014c | ||
|
|
e4413c5df7 | ||
|
|
59e59a62b4 | ||
|
|
7b218ae98c | ||
|
|
cf5d7102b9 | ||
|
|
d25f8d1b2c | ||
|
|
ec8b8bd82a | ||
|
|
587447ec64 | ||
|
|
ba85f88fe9 | ||
|
|
7f3243e3a8 | ||
|
|
7da90de1cb | ||
|
|
f793e98068 | ||
|
|
620557bd48 | ||
|
|
e7e35b9e38 | ||
|
|
77499e009a | ||
|
|
3ac7b97439 | ||
|
|
bd8716178e | ||
|
|
20e98ff1cc | ||
|
|
af494af5ff | ||
|
|
c2bda0add9 | ||
|
|
6453a7c440 | ||
|
|
458fed4f65 | ||
|
|
c5de8231f4 | ||
|
|
bd0f3e6da5 | ||
|
|
41c3379bdf | ||
|
|
e7745b7cbf | ||
|
|
6146f3382f | ||
|
|
30b4240730 | ||
|
|
6cb4173294 | ||
|
|
e47daed442 | ||
|
|
2d43240659 | ||
|
|
7e76514896 | ||
|
|
ae196b2d58 | ||
|
|
3958188f6a | ||
|
|
f1a9449206 | ||
|
|
7070a85d94 | ||
|
|
0bc64b19a2 | ||
|
|
dd9b31fb62 | ||
|
|
a622dda915 | ||
|
|
96be27309c | ||
|
|
036e40e6d8 | ||
|
|
22aedc4a90 | ||
|
|
076366bd4e | ||
|
|
c23bfd7922 | ||
|
|
3cc7d50716 | ||
|
|
1ce03d674a | ||
|
|
2baef82cd1 | ||
|
|
bf6892aaab | ||
|
|
0ca1121d1f | ||
|
|
8d9c383aaf | ||
|
|
8f9cde4592 | ||
|
|
807f2cd789 | ||
|
|
1de887681d | ||
|
|
e7eef554f3 | ||
|
|
0c2ac3480a | ||
|
|
32a30cb5a0 | ||
|
|
1940bcb243 | ||
|
|
5f7c52408f | ||
|
|
10b57290d3 | ||
|
|
0f9218851d | ||
|
|
521eac1877 | ||
|
|
44f707da6a | ||
|
|
f194676c93 | ||
|
|
cee8fd73eb | ||
|
|
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 |
2
.github/MAINTAINERS
vendored
2
.github/MAINTAINERS
vendored
@@ -133,6 +133,7 @@ runtime/doc/xxd-ru.1 @RestorerZ
|
||||
runtime/doc/xxd-ru.UTF-8.1 @RestorerZ
|
||||
runtime/ftplugin/abaqus.vim @costerwi
|
||||
runtime/ftplugin/abnf.vim @A4-Tacks
|
||||
runtime/ftplugin/algol68.vim @dkearns
|
||||
runtime/ftplugin/antlr4.vim @jiangyinzuo
|
||||
runtime/ftplugin/apache.vim @dubgeiser
|
||||
runtime/ftplugin/arduino.vim @k-takata
|
||||
@@ -472,6 +473,7 @@ runtime/syntax/shared/hgcommitDiff.vim @vegerot
|
||||
runtime/syntax/abaqus.vim @costerwi
|
||||
runtime/syntax/abnf.vim @A4-Tacks
|
||||
runtime/syntax/aidl.vim @dpelle
|
||||
runtime/syntax/algol68.vim @dkearns
|
||||
runtime/syntax/amiga.vim @sodero
|
||||
runtime/syntax/ant.vim @dkearns
|
||||
runtime/syntax/antlr4.vim @jiangyinzuo
|
||||
|
||||
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.1
|
||||
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.5
|
||||
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.2
|
||||
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.2
|
||||
|
||||
# ℹ️ 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.2
|
||||
|
||||
325
AGENTS.md
Normal file
325
AGENTS.md
Normal file
@@ -0,0 +1,325 @@
|
||||
# AGENTS.md
|
||||
|
||||
Guidance for AI coding agents working in the Vim repository.
|
||||
|
||||
## Project
|
||||
|
||||
Vim is a text editor written in C. The canonical repository is
|
||||
https://github.com/vim/vim. The code is old and has grown organically over
|
||||
the past 30+ years. Some files are vendored from upstream projects
|
||||
(`src/xdiff`, `src/libvterm`); parts of the runtime are occasionally shared
|
||||
with forks like Neovim.
|
||||
|
||||
Vim strives to be portable across several different operating systems and
|
||||
aims to be a stable, robust editor gradually developing new features while
|
||||
remaining backwards compatible as much as possible.
|
||||
|
||||
At the same time, Vim can be compiled with different feature sets, from the
|
||||
POSIX compatible minimal vi to a full-fledged GUI editor which includes
|
||||
additional scripting interfaces.
|
||||
|
||||
See `runtime/doc/develop.txt` for the high level design goals.
|
||||
|
||||
## Build and test
|
||||
|
||||
# Full build on Unix/Linux (from src/):
|
||||
make
|
||||
|
||||
# Run the full test suite:
|
||||
make test
|
||||
|
||||
# Generate proto files
|
||||
make proto
|
||||
|
||||
# Run a single test file:
|
||||
cd src/testdir && make test_name.res
|
||||
|
||||
Output is in testdir/messages and testdir/test.log
|
||||
|
||||
Builds on Windows depend on the Environment, see `src/INSTALLpc.txt`
|
||||
for Cygwin/MSYS and MSVC ways to build Vim
|
||||
|
||||
Before submitting any patch, at minimum:
|
||||
1. The build succeeds without new warnings.
|
||||
2. Relevant tests pass.
|
||||
3. The code matches the style of the file being edited.
|
||||
|
||||
## Layout
|
||||
|
||||
- `src/` - the C source. Subsystem names are usually obvious from filenames
|
||||
(`buffer.c`, `window.c`, `search.c`, `vim9compile.c`, etc.).
|
||||
- `src/proto/` - function prototypes, one `.pro` file per source file.
|
||||
Regenerated; do not hand-edit unless you know what you're doing.
|
||||
- `src/po` - Translations
|
||||
- `src/xxd` - for the xxd subproject
|
||||
- `src/xdiff` - for the xdiff library (imported from git)
|
||||
- `src/libvterm` - for the libvterm library
|
||||
- `src/testdir/` - tests. Vim-script files named `test_*.vim`.
|
||||
Screendump expected output lives in `src/testdir/dumps/`.
|
||||
- `runtime/doc/` - user-facing documentation in Vim help format, when updating,
|
||||
also update the Last Change header
|
||||
- `runtime/syntax/generator` - Syntax script for Vim Script, automatically generated
|
||||
from Vims source
|
||||
- `runtime/` - runtime files shipped with Vim, when updating, also update the
|
||||
Last Change header and a short description if this file has no maintainer
|
||||
If the file has a maintainer, changes should go via them (so make a merge
|
||||
request against the upstream repo instead)
|
||||
- `src/version.c` - contains the `included_patches[]` list. Every
|
||||
patch touching anything below `src/` (with the exception of `src/po`) needs a
|
||||
new entry at the top, will be updated only when merging into
|
||||
the master tree.
|
||||
|
||||
## Commit format
|
||||
|
||||
Vim uses a strict commit message format. The subject line is a
|
||||
one-sentence **problem statement**, not a description of the fix:
|
||||
|
||||
patch 9.2.NNNN: short description of the problem
|
||||
|
||||
Problem: Restatement of the problem as a full sentence, possibly
|
||||
with a reporter attribution in parentheses.
|
||||
Solution: Short description of the fix, ending with the author's
|
||||
name in parentheses.
|
||||
|
||||
optional longer description of the problem and solution goes here in prose.
|
||||
Do not use bullet points.
|
||||
|
||||
fixes: #NNNN
|
||||
related: #NNNN
|
||||
closes: #NNNN
|
||||
|
||||
Co-authored-by: Name
|
||||
Signed-off-by: Author Name <email>
|
||||
|
||||
Rules:
|
||||
|
||||
- **Subject line states the problem**, not the solution. "fix typo" is
|
||||
wrong; "typo in foo() causes OOB read" is right.
|
||||
- **Problem line is a full sentence with a trailing period.** It mirrors
|
||||
the subject.
|
||||
- **Solution line ends with `(Author Name)`** — parentheses, period
|
||||
after them.
|
||||
- **Longer prose**, if any, goes after the Problem/Solution header
|
||||
- **`fixes:` references the issue** the patch fixes.
|
||||
**`closes:` references the PR** that introduces the fix.
|
||||
**`related:` references related issues**, including issues that caused this
|
||||
one.
|
||||
All can appear. Colon, aligned, no trailing period.
|
||||
- **`Signed-off-by:` is required** — DCO.
|
||||
- **`Co-Authored-By:` is allowed** and is the accepted way to
|
||||
acknowledge AI assistance transparently. Human
|
||||
coauthors should usually also have their own Signed-off-by.
|
||||
|
||||
## C code conventions
|
||||
|
||||
- **Indentation is 4 spaces per level.** Existing files use tabs with
|
||||
`ts=8 sts=4 sw=4 noet` (set by the modeline in the file),
|
||||
so tabs of width 8 appear where two levels of indent collapse. `sign.c`,
|
||||
`sound.c`, and any new file must use spaces only and follow the style from
|
||||
the .editorconfig file.
|
||||
- **Opening braces go on their own line (Allman style)** — for function
|
||||
definitions and for control-flow constructs (`if`/`else`/`for`/`while`/
|
||||
`do`) alike.
|
||||
- **Function definitions**: return type on its own indented line, with
|
||||
the function name beginning on the next line.
|
||||
- Initialize locals where a reader cannot trivially see the first
|
||||
assignment (common for pointers and return-value accumulators).
|
||||
Don't add `= 0` initializers for values that are always assigned
|
||||
before use — they can hide real uninitialized-read bugs from
|
||||
the compiler.
|
||||
- `for (int i = 0; ...)` loop declarations are fine in files that
|
||||
use them; older files may declare the counter at the top of the
|
||||
block.
|
||||
- **Function-scope declarations at the top of a block** is the historical
|
||||
style, but mid-block declarations are acceptable in files that have
|
||||
adopted them. Match the surrounding code.
|
||||
- **Custom types end in `_T`** (e.g., `buf_T`, `linenr_T`, `pos_T`).
|
||||
Never use `_t` — it collides with POSIX typedefs.
|
||||
- **C language is C95 plus specific C99 features**: `//` comments,
|
||||
mixed declarations and statements, `__func__`, `bool`/`_Bool`,
|
||||
variadic macros, compound literals, `static inline`, trailing enum
|
||||
commas. Do not reach for later C standards — Vim still must build
|
||||
with Compaq C on OpenVMS. See `*assumptions-C-compiler*` in
|
||||
`develop.txt` for the full list.
|
||||
- **`bool` / `true` / `false` are acceptable.** Vim is transitioning
|
||||
from `int` with `TRUE`/`FALSE` to C99 `bool`. Do not "fix" `bool`
|
||||
back to `int`. Within a single patch, be consistent — don't mix
|
||||
`true` and `TRUE` in new code.
|
||||
- **Do not mass-convert** `TRUE`/`FALSE` to `true`/`false` across files
|
||||
unless that is the patch's explicit purpose. Opportunistic
|
||||
conversions create noise in diffs.
|
||||
- **`STRLEN_LITERAL("...")`** should be used when the length of a
|
||||
string literal is needed. Avoid `STRLEN()` on literals.
|
||||
- **`vim_snprintf_safelen()`** returns the written length; prefer it
|
||||
over `vim_snprintf()` when the length is then needed.
|
||||
- **Prefer `dict_add_string_len()`** when the string length is already
|
||||
known, over `dict_add_string()` which calls `STRLEN()`.
|
||||
- **String/buffer parameters go `(char_u *buf, size_t buflen)`** —
|
||||
length alongside pointer, in bytes. Use `size_t` for byte counts,
|
||||
`int` only where required by legacy APIs.
|
||||
- **Guards before divisions.** Check for divisor zero explicitly, even
|
||||
when a composite earlier guard would prevent it. Relying on
|
||||
transitive guards is fragile.
|
||||
- When introducing new allocations, verify the cleanup paths handle all exit
|
||||
conditions (early return, error branches, etc).
|
||||
|
||||
**Use Vim wrappers instead of libc where one exists:**
|
||||
|
||||
| libc | Vim | Why |
|
||||
|---------------|------------------------|-----------------------------|
|
||||
| `free()` | `vim_free()` | Tolerates NULL |
|
||||
| `malloc()` | `alloc()` / `lalloc()` | Checks for OOM |
|
||||
| `strcpy()` | `STRCPY()` | Cast for `char_u *` |
|
||||
| `strchr()` | `vim_strchr()` | Handles special characters |
|
||||
| `strrchr()` | `vim_strrchr()` | Handles special characters |
|
||||
| `memcpy()` | `mch_memmove()` | Handles overlapping copies |
|
||||
| `bcopy()` | `mch_memmove()` | Handles overlapping copies |
|
||||
| `memset()` | `vim_memset()` | Uniform across systems |
|
||||
| `isspace()` | `vim_isspace()` | Handles bytes > 127 |
|
||||
| `iswhite()` | `vim_iswhite()` | TRUE only for tab and space |
|
||||
|
||||
Further rules, not spelled out here, live in `runtime/doc/develop.txt`:
|
||||
|
||||
- `*style-names*` — reserved name patterns (`is*`, `to*`, `str*`, `mem*`,
|
||||
`wcs*`, `.*_t`, `__.*`), forbidden identifiers (`delete`, `this`, `new`,
|
||||
`time`, `index`), and the 31-character function-name limit.
|
||||
- `*style-spaces*`, `*style-examples*` — spacing and one-statement-per-line.
|
||||
- `*style-various*` — `FEAT_` feature prefix, uppercase `#define`,
|
||||
`#ifdef HAVE_X` rather than `#if HAVE_X`, no `'\"'`.
|
||||
- `*assumptions-makefiles*` — POSIX.1-2001 `make` only in the main
|
||||
Makefiles (no `%` rules, `:=`, `.ONESHELL`, GNU conditionals).
|
||||
- Vim uses `char_u` instead of `char` type
|
||||
- Vim uses the macros `STRLEN`, `STRCPY`, `STRCMP`, `STRCAT` that work
|
||||
with the `char_u` type.
|
||||
- `*style-clang-format*` — `sign.c` and `sound.c` are formatted with
|
||||
`clang-format`; re-run it after editing those files.
|
||||
|
||||
## Vim9 script conventions (in tests and runtime files)
|
||||
|
||||
- Write modern Vim style (new files can use Vim9 script, but compatibility
|
||||
with Neovim and other forks is a concern, so in doubt please ask!)
|
||||
- **Drop `l:` prefix from local variables** in Vim-script tests.
|
||||
- **Don't add `CheckFeature` inside individual tests** if it's already
|
||||
at the top of the file.
|
||||
- If a test file doesn't gate features at the top, add CheckFeature to
|
||||
individual tests that depend on specific build features.
|
||||
|
||||
## Test conventions
|
||||
|
||||
- Tests are in `src/testdir/test_*.vim`.
|
||||
- Reproducible tests beat "it doesn't crash" tests. If a patch fixes
|
||||
a rendering bug, add a screendump test. If it fixes incorrect output,
|
||||
assert the output.
|
||||
- Add comprehensive tests for newly added features and include them
|
||||
in existing tests if possible
|
||||
- **Screendump tests** use `CheckScreendump`, `RunVimInTerminal`,
|
||||
`VerifyScreenDump`, and live dumps in `src/testdir/dumps/`.
|
||||
- `v9.CheckScriptSuccess(lines)` / `v9.CheckScriptFailure(lines, error, lnum)`
|
||||
are the standard way to test Vim9 script behavior at script-load time.
|
||||
- When fixing a bug reported as an issue, include a test that
|
||||
reproduces the original report, not just a minimal synthetic case.
|
||||
- Tests for Syntax runtime are in `runtime/syntax/testdir`
|
||||
- Tests for Indent runtime are in `runtime/indent/testdir`
|
||||
|
||||
## Common gotchas
|
||||
|
||||
- **Distinguish what code enforces from what docs claim.** If a patch
|
||||
changes documented behavior, say so in the Problem/Solution.
|
||||
- **Generated files** (`src/auto/configure`, generated Wayland protocol
|
||||
C, etc.) should only be regenerated when their source changes.
|
||||
Mixing unrelated regeneration into a functional patch creates noise.
|
||||
|
||||
## Documentation
|
||||
|
||||
- User-facing option or feature changes require a `runtime/doc/*.txt`
|
||||
update in the same patch.
|
||||
- When editing an existing help file, bump the `Last change:` header
|
||||
at the top.
|
||||
|
||||
### Help file style
|
||||
|
||||
See `runtime/doc/helphelp.txt` (`*help-writing*`) for the authoritative
|
||||
reference. Key conventions:
|
||||
|
||||
- **File header**: first line is `*filename.txt*` then a tab then a
|
||||
short description. That description appears under `LOCAL ADDITIONS`
|
||||
in `help.txt`. The version and `Last change:` date go on the second
|
||||
line, right aligned.
|
||||
- **Modeline**: every help file ends with a Vim modeline — typically
|
||||
`vim:tw=78:ts=8:noet:ft=help:norl:`.
|
||||
- **Layout**: `'textwidth'` 78, `'tabstop'` 8, indent and align with
|
||||
tab characters. Two spaces between sentences. Run `:retab`
|
||||
(not `:retab!`, and review the diff) after editing.
|
||||
- **Tags** are defined as `*tag-name*`, usually right-aligned on the
|
||||
line where the thing they name is introduced. Tag names must be
|
||||
unique across all of `runtime/doc/`; for plugin help, prefix with
|
||||
the plugin name.
|
||||
- **Cross-references inside help text**:
|
||||
- `|tag-name|` — hot-link to an existing tag.
|
||||
- `` `:cmd` `` — Ex command, highlighted as a code block.
|
||||
- `'option'` — option name, in single quotes.
|
||||
- `<Key>` or `CTRL-X` — special keys.
|
||||
- `{placeholder}` — user-supplied argument.
|
||||
- **Sections** are separated by a line of `=` starting in column 1.
|
||||
Column or subsection headings end with `~` to trigger heading
|
||||
highlighting.
|
||||
- **Code blocks** start with `>` at the end of the introducing line
|
||||
and end with `<` as the first non-blank on a later line (any line
|
||||
starting in column 1 also implicitly closes the block). Use `>vim`
|
||||
(or another language name) to request syntax highlighting inside
|
||||
the block.
|
||||
- **Notation** — `Note`, `Todo`, `Error` and a few similar words are
|
||||
auto-highlighted; do not try to fake the highlighting by other means.
|
||||
- **Language**: gender-neutral language is preferred for new or updated
|
||||
text; existing wording does not need to be rewritten for this alone.
|
||||
|
||||
## Release policy
|
||||
|
||||
Vim alternates between development cycles and stability periods — see
|
||||
`runtime/doc/develop.txt` `*design-policy*`.
|
||||
|
||||
- **During a stability period** only clear bug fixes, security fixes,
|
||||
documentation updates, translations, and runtime file updates are
|
||||
accepted. No new features, no backwards-incompatible changes.
|
||||
- **Once released in a minor version**, C-core features must stay
|
||||
backwards-compatible. Runtime files have a bit more flexibility so
|
||||
their maintainers can correct old behavior.
|
||||
- **Deprecated features** stay reachable via config (do not hard-error),
|
||||
are documented as deprecated, can be disabled at compile time, and
|
||||
may be removed in a later cycle.
|
||||
|
||||
## Security
|
||||
|
||||
Before reporting a suspected security issue or submitting a patch
|
||||
that touches security-sensitive code, read `SECURITY.md`. Follow
|
||||
the disclosure process described there.
|
||||
|
||||
## Before submitting
|
||||
|
||||
1. Commit message follows the format above.
|
||||
2. All modified code compiles without new warnings.
|
||||
3. Tests pass, and new functionality has regression tests.
|
||||
4. Documentation is updated for user-visible changes.
|
||||
5. Signed-off-by is present.
|
||||
6. Diff contains only changes relevant to the stated problem —
|
||||
no stray whitespace fixes, no unrelated refactors, no unrelated
|
||||
regeneration of `auto/configure`.
|
||||
7. For multi-patch series: each commit compiles and passes its own
|
||||
tests. A known-broken intermediate state that a later patch fixes
|
||||
is not acceptable — squash instead.
|
||||
|
||||
## When in doubt
|
||||
|
||||
- Make the smallest possible change to achieve the goal. Do not rewrite
|
||||
entire files or functions when a targeted edit suffices.
|
||||
- Read surrounding code and match its style rather than imposing an
|
||||
"improvement."
|
||||
- Err toward smaller, more focused patches. A patch that does three
|
||||
things is three patches.
|
||||
- If a patch fixes a symptom of a deeper bug, say so in the Problem
|
||||
and acknowledge the scope limitation in the Solution.
|
||||
- Before claiming a bug exists, reproduce it. Before claiming code does X, read
|
||||
the code. Do not rely on training-data memory of file contents.
|
||||
- Before running shell commands that modify files outside the working tree,
|
||||
install packages, push branches, or invoke network operations, confirm with
|
||||
the user.
|
||||
6
Filelist
6
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 \
|
||||
@@ -151,6 +153,7 @@ SRC_ALL = \
|
||||
src/spellfile.c \
|
||||
src/spellsuggest.c \
|
||||
src/strings.c \
|
||||
src/strptime.c \
|
||||
src/structs.h \
|
||||
src/syntax.c \
|
||||
src/tabpanel.c \
|
||||
@@ -440,6 +443,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 +682,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 \
|
||||
@@ -1194,6 +1199,7 @@ IGNORE = \
|
||||
.github/FUNDING.yml \
|
||||
.github/labeler.yml \
|
||||
.github/workflows/label.yml \
|
||||
AGENTS.md \
|
||||
SECURITY.md \
|
||||
ci/unlisted.make \
|
||||
ci/hlgroups.make \
|
||||
|
||||
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()
|
||||
@@ -13,7 +13,7 @@ extensions = ["c", "h", "md", "html", "txt"]
|
||||
accept = ["100..=103", "200..=299", "429"]
|
||||
|
||||
# Retry each request a few times on transient network errors
|
||||
retries = 2
|
||||
max_retries = 2
|
||||
retry_wait_time = 2
|
||||
|
||||
# Timeout per request in seconds
|
||||
|
||||
@@ -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/
|
||||
|
||||
|
||||
@@ -137,13 +137,13 @@ README_vms.txt VMS
|
||||
|
||||
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
|
||||
|
||||
Для системе macOS вы може использовать MacVim: https://macvim.org
|
||||
Для системе macOS вы можете использовать MacVim: https://macvim.org
|
||||
|
||||
Последние новости о редакторе 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
|
||||
|
||||
|
||||
21
runtime/autoload/dist/ft.vim
vendored
21
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 23
|
||||
# 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
|
||||
@@ -1720,6 +1726,8 @@ const ft_from_ext = {
|
||||
"tdf": "ahdl",
|
||||
# AIDL
|
||||
"aidl": "aidl",
|
||||
# Algol 68
|
||||
"a68": "algol68",
|
||||
# AMPL
|
||||
"run": "ampl",
|
||||
# ANTLR / PCCTS
|
||||
@@ -1792,6 +1800,7 @@ const ft_from_ext = {
|
||||
# BDF font
|
||||
"bdf": "bdf",
|
||||
# Beancount
|
||||
"bean": "beancount",
|
||||
"beancount": "beancount",
|
||||
# BibTeX bibliography database file
|
||||
"bib": "bib",
|
||||
@@ -2669,6 +2678,8 @@ const ft_from_ext = {
|
||||
"rst": "rst",
|
||||
# RTF
|
||||
"rtf": "rtf",
|
||||
# ObjectScript Routine
|
||||
"rtn": "objectscript_routine",
|
||||
# Ruby
|
||||
"rb": "ruby",
|
||||
"rbw": "ruby",
|
||||
@@ -3105,7 +3116,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,20 +100,17 @@ 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
|
||||
|
||||
|
||||
" create/switch to mkvimball tab
|
||||
if !exists("vbtabnr")
|
||||
tabnew
|
||||
@@ -142,23 +119,21 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
|
||||
else
|
||||
exe "tabn ".vbtabnr
|
||||
endif
|
||||
|
||||
|
||||
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,25 +159,16 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
|
||||
" restore options
|
||||
call vimball#RestoreSettings()
|
||||
|
||||
" call Dret("MkVimball")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" vimball#Vimball: extract and distribute contents from a vimball {{{2
|
||||
" (invoked the the UseVimball command embedded in
|
||||
" (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
|
||||
@@ -254,62 +213,67 @@ fun! vimball#Vimball(really,...)
|
||||
" give title to listing of (extracted) files from Vimball Archive
|
||||
if a:really
|
||||
echohl Title | echomsg "Vimball Archive" | echohl None
|
||||
else
|
||||
else
|
||||
echohl Title | echomsg "Vimball Archive Listing" | echohl None
|
||||
echohl Statement | echomsg "files would be placed under: ".home | echohl None
|
||||
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
|
||||
" Also, disallow strange paths, that could lead to code execution from
|
||||
" .VimballRecord
|
||||
" Disallow: pipe, quotes and closing paren
|
||||
elseif fname =~ '[|'')"]'
|
||||
echomsg printf("(Vimball) Forbidding strange filename: '%s', aborting...", fname)
|
||||
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 +283,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 +298,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('".escape(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 +343,6 @@ fun! vimball#Vimball(really,...)
|
||||
exe "sil! tabc! ".vbtabnr
|
||||
call vimball#RestoreSettings()
|
||||
call s:ChgDir(curdir)
|
||||
|
||||
" call Dret("vimball#Vimball")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
@@ -399,23 +352,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 +376,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
|
||||
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 +439,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 +449,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 +459,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 +469,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 +479,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 +489,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 +497,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 +526,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,58 +545,44 @@ 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
|
||||
|
||||
if exists("s:recordfile") || exists("s:recorddir")
|
||||
let curdir= getcwd()
|
||||
call s:ChgDir(a:home)
|
||||
keepalt keepjumps 1split
|
||||
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 +591,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 +623,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 +655,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 +675,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 +688,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 28
|
||||
|
||||
|
||||
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,12 +700,13 @@ 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}])
|
||||
Number number of current window in tab page
|
||||
tabpanel_getinfo() Dict get current state of the tabpanel
|
||||
tabpanel_scroll({n} [, {opts}]) Bool scroll the tabpanel
|
||||
tagfiles() List tags files used
|
||||
taglist({expr} [, {filename}]) List list of tags matching {expr}
|
||||
tan({expr}) Float tangent of {expr}
|
||||
@@ -739,7 +741,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 +749,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 +770,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 +790,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 +805,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 +1275,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 +1502,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 +1897,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 +2017,7 @@ complete({startcol}, {matches}) *complete()* *E785*
|
||||
second argument: >
|
||||
GetMatches()->complete(col('.'))
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
complete_add({expr}) *complete_add()*
|
||||
@@ -2659,7 +2661,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 +2704,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 +3221,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 +3658,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 +3810,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 +6271,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()*
|
||||
@@ -6863,6 +6865,8 @@ listener_add({callback} [, {buf} [, {unbuffered}]]) *listener_add()*
|
||||
second argument: >
|
||||
GetBuffer()->listener_add(callback)
|
||||
<
|
||||
This function is not available in the |sandbox|.
|
||||
|
||||
Return type: |Number|
|
||||
|
||||
|
||||
@@ -6877,7 +6881,9 @@ listener_flush([{buf}]) *listener_flush()*
|
||||
Can also be used as a |method|: >
|
||||
GetBuffer()->listener_flush()
|
||||
<
|
||||
Return type: |Number|
|
||||
This function is not available in the |sandbox|.
|
||||
|
||||
Return type: void
|
||||
|
||||
|
||||
listener_remove({id}) *listener_remove()*
|
||||
@@ -6888,6 +6894,8 @@ listener_remove({id}) *listener_remove()*
|
||||
Can also be used as a |method|: >
|
||||
GetListenerId()->listener_remove()
|
||||
<
|
||||
This function is not available in the |sandbox|.
|
||||
|
||||
Return type: |Number|
|
||||
|
||||
|
||||
@@ -7221,7 +7229,7 @@ mapset({dict})
|
||||
mapset(d)
|
||||
endfor
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
match({expr}, {pat} [, {start} [, {count}]]) *match()*
|
||||
@@ -8484,8 +8492,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 +8509,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 +8523,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}
|
||||
|
||||
@@ -8865,6 +8875,8 @@ redraw_listener_add({opts}) *redraw_listener_add()*
|
||||
Can also be used as a |method|: >
|
||||
GetOpts()->redraw_listener_add()
|
||||
<
|
||||
This function is not available in the |sandbox|.
|
||||
|
||||
Return type: |Number|
|
||||
|
||||
|
||||
@@ -8876,7 +8888,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 +9060,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 +9144,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 +9892,7 @@ setbufvar({buf}, {varname}, {val}) *setbufvar()*
|
||||
third argument: >
|
||||
GetValue()->setbufvar(buf, varname)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
setcellwidths({list}) *setcellwidths()*
|
||||
@@ -9917,7 +9929,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 +9972,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 +10039,7 @@ setenv({name}, {val}) *setenv()*
|
||||
second argument: >
|
||||
GetPath()->setenv('PATH')
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
setfperm({fname}, {mode}) *setfperm()* *chmod*
|
||||
@@ -10386,7 +10398,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 +10423,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 +10476,7 @@ setwinvar({winnr}, {varname}, {val}) *setwinvar()*
|
||||
third argument: >
|
||||
GetValue()->setwinvar(winnr, name)
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
sha256({expr}) *sha256()*
|
||||
@@ -10704,7 +10716,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 +10786,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}
|
||||
|
||||
@@ -11315,7 +11327,12 @@ strptime({format}, {timestring}) *strptime()*
|
||||
can try different {format} values until you get a non-zero
|
||||
result.
|
||||
|
||||
Note: On MS-Windows, where the C runtime does not provide
|
||||
strptime(), Vim uses a built-in fallback that always uses
|
||||
English locale names regardless of the active locale.
|
||||
|
||||
See also |strftime()|.
|
||||
|
||||
Examples: >
|
||||
:echo strptime("%Y %b %d %X", "1997 Apr 27 11:49:23")
|
||||
< 862156163 >
|
||||
@@ -11869,6 +11886,38 @@ tabpagewinnr({tabarg} [, {arg}]) *tabpagewinnr()*
|
||||
Return type: |Number|
|
||||
|
||||
|
||||
tabpanel_getinfo() *tabpanel_getinfo()*
|
||||
Return a |Dictionary| describing the current state of the
|
||||
tabpanel (see |tabpanel|). The dictionary has these keys:
|
||||
align "left" or "right"
|
||||
columns width in screen columns
|
||||
scrollbar |TRUE| if a scrollbar is shown
|
||||
offset current scroll offset in rows
|
||||
total total number of rows rendered
|
||||
max_offset largest valid value for "offset"
|
||||
|
||||
The "total" and "max_offset" values are only accurate after
|
||||
the tabpanel has been drawn at least once.
|
||||
|
||||
Return type: dict<any>
|
||||
|
||||
|
||||
tabpanel_scroll({n} [, {opts}]) *tabpanel_scroll()*
|
||||
Scroll the tabpanel by {n} rows. Positive values scroll down
|
||||
(later tabs become visible), negative values scroll up. The
|
||||
new offset is clamped to the valid range.
|
||||
|
||||
When {opts} is a |Dictionary| and its "absolute" entry is
|
||||
|TRUE|, {n} is used as the new absolute scroll offset
|
||||
instead of a delta.
|
||||
|
||||
Returns |TRUE| if the scroll offset changed, |FALSE|
|
||||
otherwise (for example when the tabpanel is not shown, or
|
||||
the offset is already at the requested value).
|
||||
|
||||
Return type: |vim9-boolean|
|
||||
|
||||
|
||||
tagfiles() *tagfiles()*
|
||||
Returns a |List| with the file names used to search for tags
|
||||
for the current buffer. This is the 'tags' option expanded.
|
||||
@@ -11988,6 +12037,7 @@ terminalprops() *terminalprops()*
|
||||
underline_rgb whether |t_8u| works **
|
||||
mouse mouse type supported
|
||||
kitty whether Kitty terminal was detected
|
||||
decrqm whether sending DECRQM sequences work
|
||||
|
||||
** value 'u' for unknown, 'y' for yes, 'n' for no
|
||||
|
||||
@@ -12007,6 +12057,9 @@ terminalprops() *terminalprops()*
|
||||
|
||||
For "mouse" the value 'u' is unknown
|
||||
|
||||
If "decrqm" is 'y', then Vim will query support for the
|
||||
'termsync' and 'termresize' ("inband") options.
|
||||
|
||||
Also see:
|
||||
- 'ambiwidth' - detected by using |t_u7|.
|
||||
- |v:termstyleresp| and |v:termblinkresp| for the response to
|
||||
@@ -12059,7 +12112,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 +12172,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 +12182,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 +12672,7 @@ wildtrigger() *wildtrigger()*
|
||||
|
||||
Return value is always 0.
|
||||
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
win_execute({id}, {command} [, {silent}]) *win_execute()*
|
||||
@@ -12971,7 +13024,7 @@ winrestview({dict}) *winrestview()*
|
||||
Can also be used as a |method|: >
|
||||
GetView()->winrestview()
|
||||
<
|
||||
Return type: |Number|
|
||||
Return type: void
|
||||
|
||||
|
||||
winsaveview() *winsaveview()*
|
||||
@@ -13299,6 +13352,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 +13405,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 29
|
||||
|
||||
|
||||
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')
|
||||
@@ -170,6 +170,7 @@ unreachable on the network.
|
||||
"js" - Use JS (JavaScript) encoding, more efficient than JSON.
|
||||
"nl" - Use messages that end in a NL character
|
||||
"raw" - Use raw messages
|
||||
"blob" - Use raw messages and pass callback data as a |Blob|
|
||||
"lsp" - Use language server protocol encoding
|
||||
"dap" - Use debug adapter protocol encoding
|
||||
*channel-callback* *E921*
|
||||
@@ -189,6 +190,8 @@ unreachable on the network.
|
||||
excluding the NL.
|
||||
When "mode" is "raw" the "msg" argument is the whole message
|
||||
as a string.
|
||||
When "mode" is "blob" the "msg" argument is the whole message
|
||||
as a |Blob|.
|
||||
|
||||
For all callbacks: Use |function()| to bind it to arguments
|
||||
and/or a Dictionary. Or use the form "dict.function" to bind
|
||||
@@ -549,7 +552,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 +562,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 +640,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 +670,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 +713,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 +741,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 +830,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 +849,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 +1043,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 May 01
|
||||
|
||||
|
||||
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
|
||||
@@ -2391,6 +2393,9 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
close show close button: "on" (default) or "off"
|
||||
height maximum height of the popup
|
||||
highlight popup highlight group (default: PmenuSel)
|
||||
opacity opacity percentage 0-100 (default 100, fully
|
||||
opaque). When less than 100, content beneath
|
||||
the popup shows through.
|
||||
resize show resize handle: "on" (default) or "off"
|
||||
shadow "off" (default) or "on" using |hl-PmenuShadow|
|
||||
width maximum width of the popup
|
||||
@@ -2398,6 +2403,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
Example: >
|
||||
:set completepopup=height:10,border:single,highlight:InfoPopup
|
||||
:set completepopup=width:60,border:custom:─;│;─;│;┌;┐;┘;└
|
||||
:set completepopup=border:round,opacity:80
|
||||
<
|
||||
When "align" is set to "item", the popup is positioned near the
|
||||
selected item and moves as the selection changes.
|
||||
@@ -4686,6 +4692,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 +4761,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 +4810,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 +5219,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 +6203,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 +6900,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 +6935,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 +6971,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 +6983,68 @@ 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. Requires the GUI,
|
||||
'termguicolors', or a 256-color terminal.
|
||||
|
||||
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 +7582,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 +7591,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
|
||||
@@ -7919,6 +8049,9 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
search count statistics. The maximum limit can be set with
|
||||
the 'maxsearchcount' option, see also |searchcount()|
|
||||
function.
|
||||
u don't give undo and redo messages like *shm-u*
|
||||
"1 line less; before #1 1 second ago", "Already at oldest
|
||||
change" or "Already at newest change"
|
||||
|
||||
This gives you the opportunity to avoid that a change between buffers
|
||||
requires you to hit <Enter>, but still gives as useful a message as
|
||||
@@ -8557,10 +8690,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.
|
||||
@@ -8875,24 +9060,22 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
Optional settings for the |tabpanel|, It can consist of the following
|
||||
items. Items must be separated by a comma.
|
||||
|
||||
align:{text} Specifies the position of the tabpanel.
|
||||
Currently supported positions are:
|
||||
|
||||
left left-side
|
||||
align:{text} Specifies the position of the tabpanel.
|
||||
Currently supported positions are:
|
||||
left left-side (default)
|
||||
right right-side
|
||||
|
||||
(default "left")
|
||||
|
||||
columns:{n} Number of columns of the tabpanel.
|
||||
If this value is 0 or less than 'columns', the
|
||||
tab panel will not be displayed.
|
||||
(default 20)
|
||||
|
||||
vert Use a vertical separator for tabpanel.
|
||||
The vertical separator character is taken from
|
||||
"tpl_vert" in 'fillchars'.
|
||||
(default off)
|
||||
|
||||
columns:{n} Number of columns of the tabpanel. (default 20)
|
||||
If this value is 0 or less than 'columns', the
|
||||
tabpanel will not be displayed.
|
||||
scrollbar A one-column scrollbar is always displayed at the
|
||||
right edge of the tabpanel, regardless of the
|
||||
"align:" setting. (default off)
|
||||
See |tabpanel-scroll|.
|
||||
vert The vertical separator is drawn at the boundary
|
||||
between the tabpanel and the buffer area.
|
||||
(default off)
|
||||
The character to be drawn uses "tpl_vert" from
|
||||
'fillchars'.
|
||||
Examples: >
|
||||
:set tabpanelopt=columns:16,align:right
|
||||
:set tabpanelopt=
|
||||
@@ -9866,6 +10049,14 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
letter. Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
|
||||
and "_K_L_M" are not. Nested List and Dict items may not be
|
||||
read back correctly, you end up with an empty item.
|
||||
|
||||
Restoring |List|, |Dictionary| and |Tuple| variables is done by
|
||||
parsing their textual form with the Vim expression evaluator.
|
||||
Reading a viminfo file with "!" enabled is therefore only safe
|
||||
when the file is trusted. In particular, do not enable "!"
|
||||
before reading a viminfo file you obtained from another user,
|
||||
downloaded, or that is writable by another account. See
|
||||
also |viminfo-security|.
|
||||
*viminfo-quote*
|
||||
" Maximum number of lines saved for each register. Old name of
|
||||
the '<' item, with the disadvantage that you need to put a
|
||||
@@ -10223,8 +10414,12 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
applies to buffer name completion.
|
||||
"noselect" If 'wildmenu' is enabled, show the menu but do not
|
||||
preselect the first item.
|
||||
If only one match exists, it is completed fully, unless "noselect" is
|
||||
specified.
|
||||
"noinsert" If 'wildmenu' is enabled, show the menu and preselect
|
||||
the first match, but do not insert it in the
|
||||
command line. If both "noinsert" and "noselect" are
|
||||
present, "noselect" takes precedence.
|
||||
If only one match exists, it is completed fully, unless "noselect" or
|
||||
"noinsert" is specified.
|
||||
|
||||
Some useful combinations of colon-separated values:
|
||||
"longest:full" Start with the longest common string and show
|
||||
@@ -10492,11 +10687,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 +10703,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 May 01
|
||||
|
||||
|
||||
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()*
|
||||
@@ -1067,8 +1067,9 @@ The opacity value ranges from 0 to 100:
|
||||
1-99 Partially transparent - the popup background is blended with
|
||||
the underlying text, making both partially visible.
|
||||
|
||||
The transparency effect requires using the GUI or having 'termguicolors'
|
||||
enabled in the terminal. Without it, the opacity setting has no effect.
|
||||
The transparency effect requires using the GUI, having 'termguicolors'
|
||||
enabled, or running in a 256-color terminal. On terminals with fewer
|
||||
than 256 colors the opacity setting has no effect.
|
||||
|
||||
When a popup is transparent:
|
||||
- The popup's background color is blended with the background text
|
||||
|
||||
@@ -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 @@
|
||||
*starting.txt* For Vim version 9.2. Last change: 2026 Mar 17
|
||||
*starting.txt* For Vim version 9.2. Last change: 2026 Apr 29
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -1573,6 +1573,24 @@ Session. You could have several Session files, one for each project you are
|
||||
working on. Viminfo and Session files together can be used to effectively
|
||||
enter Vim and directly start working in your desired setup. |session-file|
|
||||
|
||||
*viminfo-security*
|
||||
A viminfo file written by Vim is plain text and contains Vim expressions for
|
||||
|List|, |Dictionary| and |Tuple| values. When "!" is in 'viminfo' at the time
|
||||
Vim processes the file as a viminfo file, those expressions are evaluated.
|
||||
|
||||
The default value of 'viminfo' does not include "!", so by default no
|
||||
expression evaluation happens.
|
||||
|
||||
Opening a viminfo file in a buffer (e.g. with |:edit|) is harmless; Vim only
|
||||
displays the file contents. The risk is letting Vim process an untrusted file
|
||||
through the viminfo machinery, which happens when:
|
||||
- |:rviminfo| is used on the file, or
|
||||
- 'viminfofile' is set to point at it, or
|
||||
- the file is placed at the path Vim already reads as viminfo
|
||||
|viminfo-file-name|
|
||||
|
||||
In any of those cases, do not have "!" in 'viminfo' if you do not trust it.
|
||||
|
||||
*viminfo-read*
|
||||
When Vim is started and the 'viminfo' option is non-empty, the contents of
|
||||
the viminfo file are read and the info can be used in the appropriate places.
|
||||
|
||||
@@ -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 30
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -849,6 +849,20 @@ ADA
|
||||
See |ft-ada-syntax|
|
||||
|
||||
|
||||
ALGOL 68 *algol68* *ft-algol68-syntax*
|
||||
|
||||
This syntax file currently targets the Algol 68 Genie project using the
|
||||
default UPPER stropping regime. It should also be usuable in other
|
||||
environments using the UPPER stropping regime, though somewhat less complete.
|
||||
|
||||
Highlighting can be further configured with the following variables.
|
||||
|
||||
Variable Highlight ~
|
||||
*algol68_no_preludes* no prelude identifiers, procedures or
|
||||
bold word operators
|
||||
*algol68_symbolic_operators* all prelude symbolic operators
|
||||
|
||||
|
||||
ANT *ant.vim* *ft-ant-syntax*
|
||||
|
||||
The ant syntax file provides syntax highlighting for javascript and python
|
||||
@@ -5978,7 +5992,29 @@ 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. The cell character and highlight at
|
||||
each screen row depend on what is at that row on both sides
|
||||
of the separator:
|
||||
- On a status line row of the current window: the cell is
|
||||
drawn as a space with the |hl-StatusLine| highlight, so it
|
||||
visually merges into the current window's status line.
|
||||
- On any other row (including a row that is a status line
|
||||
row of the adjacent non-current window but not of the
|
||||
current window): the cell is drawn with the "vert" item of
|
||||
'fillchars' and the VertSplit highlight.
|
||||
*hl-VertSplitNC*
|
||||
VertSplitNC Column separating vertically split windows where neither
|
||||
adjacent window is the current window. The cell character
|
||||
and highlight at each screen row depend on what is at that
|
||||
row on both sides of the separator:
|
||||
- On a status line row of either adjacent (non-current)
|
||||
window: the cell is drawn as a space with the
|
||||
|hl-StatusLineNC| highlight of that window, so it visually
|
||||
merges into that window's status line.
|
||||
- On any other row: the cell is drawn with the "vert" item
|
||||
of 'fillchars' and the VertSplitNC highlight.
|
||||
By default, highlighted like |hl-VertSplit|.
|
||||
*hl-Folded*
|
||||
Folded Line used for closed folds.
|
||||
*hl-FoldColumn*
|
||||
@@ -6095,8 +6131,12 @@ SpellRare Word that is recognized by the spellchecker as one that is
|
||||
This will be combined with the highlighting used otherwise.
|
||||
*hl-StatusLine*
|
||||
StatusLine Status line of current window.
|
||||
Also used for the vertical separator cell adjacent to the
|
||||
current window's status line. see |hl-VertSplit|.
|
||||
*hl-StatusLineNC*
|
||||
StatusLineNC status lines of not-current windows
|
||||
StatusLineNC status lines of not-current windows.
|
||||
Also used for the vertical separator cell adjacent to a
|
||||
non-current window's status line. see |hl-VertSplitNC|.
|
||||
Note: If this is equal to "StatusLine", Vim will use "^^^" in
|
||||
the status line of the current window.
|
||||
*hl-StatusLineTerm*
|
||||
@@ -6134,7 +6174,8 @@ TitleBarNC Title bar for inactive Gui's window.
|
||||
Visual Visual mode selection.
|
||||
*hl-VisualNOS*
|
||||
VisualNOS Visual mode selection when vim is "Not Owning the Selection".
|
||||
Only X11 Gui's |gui-x11| and |xterm-clipboard| supports this.
|
||||
Only X11 Gui's |gui-x11|, |xterm-clipboard| and |wayland-selections|
|
||||
supports this.
|
||||
*hl-WarningMsg*
|
||||
WarningMsg Warning messages.
|
||||
*hl-WildMenu*
|
||||
|
||||
@@ -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 28
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -482,6 +482,42 @@ 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 page list exceeds the visible screen height,
|
||||
mouse wheel events over the tabpanel area scroll the tab page 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.
|
||||
|
||||
The current tab page is always brought into view: when the selected tab page
|
||||
changes (by |gt|, |gT|, |:tabnext| etc.), the panel scrolls so the current
|
||||
entry is visible.
|
||||
|
||||
To show a vertical scrollbar indicating the current scroll position, add
|
||||
"scrollbar" to 'tabpanelopt': >
|
||||
:set tabpanelopt+=scrollbar
|
||||
|
||||
A one-column scrollbar is always displayed at the right edge of the tabpanel,
|
||||
regardless of the "align:" setting in 'tabpanelopt'. Clicking on the
|
||||
scrollbar column moves the thumb to the click position, and the thumb can be
|
||||
dragged to scroll continuously.
|
||||
|
||||
The scrollbar uses the |hl-PmenuSbar| highlight group for the track and
|
||||
|hl-PmenuThumb| for the thumb.
|
||||
|
||||
The scroll offset is remembered across redraws.
|
||||
|
||||
MOUSE CLICKS IN THE TABPANEL *tabpanel-mouse*
|
||||
|
||||
A left click on a row in the tabpanel selects the tab page that the row
|
||||
belongs to. Unlike the tabline, a double click in the tabpanel does not open
|
||||
a new, empty tab page; it is treated the same as a single click.
|
||||
|
||||
For finer-grained control, the 'tabpanel' value may contain |stl-%[FuncName]|
|
||||
click regions. Clicks on those regions are dispatched to the callback
|
||||
function instead of falling through to tab selection.
|
||||
|
||||
==============================================================================
|
||||
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*
|
||||
@@ -4772,6 +4778,7 @@ E1572 options.txt /*E1572*
|
||||
E1573 channel.txt /*E1573*
|
||||
E1574 channel.txt /*E1574*
|
||||
E1575 builtin.txt /*E1575*
|
||||
E1576 tagsrch.txt /*E1576*
|
||||
E158 sign.txt /*E158*
|
||||
E159 sign.txt /*E159*
|
||||
E16 cmdline.txt /*E16*
|
||||
@@ -5298,6 +5305,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*
|
||||
@@ -6226,6 +6234,9 @@ added-win32-GUI version5.txt /*added-win32-GUI*
|
||||
aff-dic-format spell.txt /*aff-dic-format*
|
||||
after-directory options.txt /*after-directory*
|
||||
aleph options.txt /*aleph*
|
||||
algol68 syntax.txt /*algol68*
|
||||
algol68_no_preludes syntax.txt /*algol68_no_preludes*
|
||||
algol68_symbolic_operators syntax.txt /*algol68_symbolic_operators*
|
||||
alt intro.txt /*alt*
|
||||
alt-input debugger.txt /*alt-input*
|
||||
alternate-file editing.txt /*alternate-file*
|
||||
@@ -6342,6 +6353,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*
|
||||
@@ -7511,6 +7523,7 @@ ft-ada-options ft_ada.txt /*ft-ada-options*
|
||||
ft-ada-plugin ft_ada.txt /*ft-ada-plugin*
|
||||
ft-ada-syntax ft_ada.txt /*ft-ada-syntax*
|
||||
ft-ada-variables ft_ada.txt /*ft-ada-variables*
|
||||
ft-algol68-syntax syntax.txt /*ft-algol68-syntax*
|
||||
ft-ant-syntax syntax.txt /*ft-ant-syntax*
|
||||
ft-apache-syntax syntax.txt /*ft-apache-syntax*
|
||||
ft-arduino-plugin filetype.txt /*ft-arduino-plugin*
|
||||
@@ -7962,7 +7975,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 +8049,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 +8496,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*
|
||||
@@ -10319,6 +10331,7 @@ shm-q options.txt /*shm-q*
|
||||
shm-r options.txt /*shm-r*
|
||||
shm-s options.txt /*shm-s*
|
||||
shm-t options.txt /*shm-t*
|
||||
shm-u options.txt /*shm-u*
|
||||
shm-w options.txt /*shm-w*
|
||||
shm-x options.txt /*shm-x*
|
||||
short-name-changed version4.txt /*short-name-changed*
|
||||
@@ -10545,6 +10558,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 +10895,10 @@ tabpagebuflist() builtin.txt /*tabpagebuflist()*
|
||||
tabpagenr() builtin.txt /*tabpagenr()*
|
||||
tabpagewinnr() builtin.txt /*tabpagewinnr()*
|
||||
tabpanel tabpage.txt /*tabpanel*
|
||||
tabpanel-mouse tabpage.txt /*tabpanel-mouse*
|
||||
tabpanel-scroll tabpage.txt /*tabpanel-scroll*
|
||||
tabpanel_getinfo() builtin.txt /*tabpanel_getinfo()*
|
||||
tabpanel_scroll() builtin.txt /*tabpanel_scroll()*
|
||||
tag tagsrch.txt /*tag*
|
||||
tag-! tagsrch.txt /*tag-!*
|
||||
tag-binary-search tagsrch.txt /*tag-binary-search*
|
||||
@@ -11744,6 +11762,7 @@ viminfo-r options.txt /*viminfo-r*
|
||||
viminfo-read starting.txt /*viminfo-read*
|
||||
viminfo-read-write starting.txt /*viminfo-read-write*
|
||||
viminfo-s options.txt /*viminfo-s*
|
||||
viminfo-security starting.txt /*viminfo-security*
|
||||
viminfo-timestamp starting.txt /*viminfo-timestamp*
|
||||
viminfo-write starting.txt /*viminfo-write*
|
||||
vimrc starting.txt /*vimrc*
|
||||
@@ -11795,8 +11814,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*
|
||||
|
||||
@@ -579,6 +579,9 @@ ctags).
|
||||
have an absolute or relative path. It may contain environment
|
||||
variables and wildcards (although the use of wildcards is
|
||||
doubtful). It cannot contain a <Tab>.
|
||||
*E1576*
|
||||
Using a remote file via network protocol (e.g. using
|
||||
http://remote/file.txt) is not allowed.
|
||||
{tagaddress} The Ex command that positions the cursor on the tag. It can
|
||||
be any Ex command, although restrictions apply (see
|
||||
|tag-security|). Posix only allows line numbers and search
|
||||
|
||||
@@ -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,10 +944,41 @@ 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.
|
||||
|
||||
Note: term_start() always uses RAW mode for its callbacks.
|
||||
"out_cb" and "err_cb" receive the raw chunk of data as read
|
||||
from the OS. A single callback invocation may contain
|
||||
multiple lines separated by NL, and (for stdout via a pty)
|
||||
each line may have a trailing CR from the line discipline
|
||||
(ONLCR). If per-line handling is desired, the callback must
|
||||
split "msg" on NL and strip the trailing CR itself.
|
||||
Example: >
|
||||
func Handle(ch, msg)
|
||||
for line in split(a:msg, "\n")
|
||||
echom substitute(line, '\r$', '', '')
|
||||
endfor
|
||||
endfunc
|
||||
<
|
||||
There are extra options:
|
||||
"term_name" name to use for the buffer name, instead
|
||||
of the command name.
|
||||
@@ -1010,7 +1041,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 @@
|
||||
*todo.txt* For Vim version 9.2. Last change: 2026 Feb 14
|
||||
*todo.txt* For Vim version 9.2. Last change: 2026 Apr 29
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -421,8 +421,6 @@ more information.
|
||||
|
||||
Add an option to restrict 'incsearch' to not scroll the view. (Tavis Ormandy)
|
||||
|
||||
Remove SPACE_IN_FILENAME ? It is only used for completion.
|
||||
|
||||
When 'term' starts with "foot" then default t_TI and t_TE to the values used
|
||||
for the builtin xterm termcap.
|
||||
|
||||
@@ -2115,7 +2113,6 @@ es_ES.utf-8" gives an error and doesn't switch messages. (Dominique Pelle,
|
||||
|
||||
When $HOME contains special characters, such as a comma, escape them when used
|
||||
in an option. (Michael Hordijk, 2009 May 5)
|
||||
Turn "esc" argument of expand_env_esc() into string of chars to be escaped.
|
||||
|
||||
Should make 'ignorecase' global-local, so that it makes sense setting it from
|
||||
a modeline.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*usr_41.txt* For Vim version 9.2. Last change: 2026 Feb 16
|
||||
*usr_41.txt* For Vim version 9.2. Last change: 2026 Apr 28
|
||||
|
||||
|
||||
VIM USER MANUAL by Bram Moolenaar
|
||||
@@ -1081,6 +1081,8 @@ Buffers, windows and the argument list:
|
||||
tabpagebuflist() return List of buffers in a tab page
|
||||
tabpagenr() get the number of a tab page
|
||||
tabpagewinnr() like winnr() for a specified tab page
|
||||
tabpanel_getinfo() get current state of the tabpanel
|
||||
tabpanel_scroll() scroll the tabpanel
|
||||
winnr() get the window number for the current window
|
||||
bufwinid() get the window ID of a specific buffer
|
||||
bufwinnr() get the window number of a specific buffer
|
||||
|
||||
@@ -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 27
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -60,10 +60,9 @@ ga Print the ascii value of the character under the
|
||||
but printable according to the 'isprint' option, the
|
||||
non-printable version is also given.
|
||||
|
||||
When the character is larger than 127, the <M-x> form
|
||||
is also printed. For example:
|
||||
<~A> <M-^A> 129, Hex 81, Octal 201 ~
|
||||
<p> <|~> <M-~> 254, Hex fe, Octal 376 ~
|
||||
When the character is larger than 127:
|
||||
<<81>> 129, Hex 0081, Octal 201 ~
|
||||
<p> 254, Hex 00fe, Octal 376 ~
|
||||
(where <p> is a special character)
|
||||
|
||||
The <Nul> character in a file is stored internally as
|
||||
@@ -185,6 +184,9 @@ g8 Print the hex values of the bytes used in the
|
||||
If the mark is "=", a line of dashes is printed
|
||||
around the current line.
|
||||
|
||||
If the 'number' option is set, absolute line numbers
|
||||
will be included in the output.
|
||||
|
||||
*:z!*
|
||||
:[range]z![+-^.=][count]
|
||||
Like ":z", but when [count] is not specified, it
|
||||
@@ -529,9 +531,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 May 01
|
||||
|
||||
|
||||
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.
|
||||
|
||||
@@ -52587,6 +52587,7 @@ Popups ~
|
||||
- Support for transparency, see |popup-opacity|.
|
||||
- 'previewpopup' supports the same values as 'completepopup' (except for
|
||||
"align").
|
||||
- Support "opacity" setting for 'completepopup' option.
|
||||
|
||||
Diff mode ~
|
||||
---------
|
||||
@@ -52613,18 +52614,42 @@ 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|.
|
||||
- Enabled scrolling for the tabpanel when the tab page list exceeds the screen
|
||||
height. Also added the "scrollbar" sub-option to 'tabpanelopt'.
|
||||
- Added the "noinsert" value to the 'wildmode' option for symmetry with the
|
||||
'completeopt' option
|
||||
- Channel can handle |Blob| messages |channel-open-options|.
|
||||
- Added the "u" flag to 'shortmess' to silence undo/redo messages: |shm-u|
|
||||
|
||||
Platform specific ~
|
||||
-----------------
|
||||
- support OpenType font features in 'guifont' for DirectWrite (Win32)
|
||||
- Include strptime() fallback for MS-Windows
|
||||
|
||||
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.
|
||||
- On Unix, filename completion for single-file Ex commands now treats embedded
|
||||
whitespace as part of the filename, like on other platforms.
|
||||
|
||||
|
||||
*added-9.3*
|
||||
Added ~
|
||||
@@ -52634,6 +52659,8 @@ Various syntax, indent and other plugins were added.
|
||||
Functions: ~
|
||||
|
||||
|ch_listen()| listen on {address}
|
||||
|tabpanel_getinfo()| get current state of the |tabpanel|
|
||||
|tabpanel_scroll()| scroll the |tabpanel|
|
||||
|
||||
Autocommands: ~
|
||||
|
||||
@@ -52641,6 +52668,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 +52679,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 @@
|
||||
*windows.txt* For Vim version 9.2. Last change: 2026 Mar 01
|
||||
*windows.txt* For Vim version 9.2. Last change: 2026 May 01
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -960,6 +960,9 @@ settings. The option is a comma-separated list of values:
|
||||
the value is "on", it must be set after border.
|
||||
height maximum height of the popup
|
||||
highlight highlight group of the popup (default is Pmenu)
|
||||
opacity opacity percentage 0-100 (default 100, fully opaque).
|
||||
When less than 100, content beneath the popup shows
|
||||
through.
|
||||
resize show resize handle: "on" (default) or "off"
|
||||
shadow "off" (default) or "on" using |hl-PmenuShadow|
|
||||
width maximum width of the popup
|
||||
@@ -968,6 +971,7 @@ Example: >
|
||||
:set previewpopup=height:10,width:60
|
||||
:set previewpopup=border:single,borderhilight:PmenuBorder
|
||||
:set previewpopup=border:custom:─;│;─;│;┌;┐;┘;└
|
||||
:set previewpopup=border:round,opacity:80
|
||||
|
||||
A few peculiarities:
|
||||
- If the file is in a buffer already, it will be re-used. This will allow for
|
||||
|
||||
@@ -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
|
||||
|
||||
47
runtime/ftplugin/algol68.vim
Normal file
47
runtime/ftplugin/algol68.vim
Normal file
@@ -0,0 +1,47 @@
|
||||
" Vim filetype plugin
|
||||
" Language: Algol 68
|
||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||
" Last Change: 2026 Apr 23
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
let b:did_ftplugin = 1
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
" TODO: 'comments'
|
||||
|
||||
setlocal commentstring=#\ %s\ #
|
||||
|
||||
let &l:include='\c\%(^\|;\)\s*\%(PR\|PRAGMAT\)\s\+\%(read\|include\)'
|
||||
|
||||
let b:undo_ftplugin = "setl cms< inc<"
|
||||
|
||||
if exists("loaded_matchit") && !exists("b:match_words")
|
||||
let b:match_ignorecase = 0
|
||||
let b:match_words = '\<BEGIN\>:\<END\>,' ..
|
||||
\ '\<IF\>:\<THEN\>:\<ELIF\>:\<ELSE\>:\<FI\>,' ..
|
||||
\ '\<CASE\>:\<IN\>:\<OUSE\>:\<OUT\>:\<ESAC\>,' ..
|
||||
"\ TODO: loops have overlapping start and intermediate keywords like
|
||||
"\ `TO` which are difficult to match with patterns alone.
|
||||
\ '\<DO\>:\<OD\>'
|
||||
let b:match_skip = 's:Comment\|String\|PreProc'
|
||||
let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_skip b:match_words"
|
||||
endif
|
||||
|
||||
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
|
||||
let b:browsefilter = "Algol 68 Source Files (*.a68)\t*.a68\n"
|
||||
if has("win32")
|
||||
let b:browsefilter ..= "All Files (*.*)\t*\n"
|
||||
else
|
||||
let b:browsefilter ..= "All Files (*)\t*\n"
|
||||
endif
|
||||
let b:undo_ftplugin ..= " | unlet! b:browsefilter"
|
||||
endif
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" vim: nowrap sw=2 sts=2 ts=8
|
||||
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,7 @@
|
||||
" Last Change: 2025 Apr 08
|
||||
" 2025 Apr 08 by Vim project (set 'omnifunc' and 'iskeyword', #17073)
|
||||
" 2025 Aug 08 by Vim project (unset comment options, #17889)
|
||||
" 2026 Apr 26 by Vim project (make HelpComplete global, #20024)
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
@@ -17,14 +18,14 @@ let b:undo_ftplugin = "setl isk< fo< tw< cole< cocu< keywordprg< omnifunc< comme
|
||||
|
||||
setl comments= cms=
|
||||
|
||||
setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help omnifunc=s:HelpComplete
|
||||
setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help omnifunc=HelpComplete
|
||||
let &l:iskeyword='!-~,^*,^|,^",192-255'
|
||||
if has("conceal")
|
||||
setlocal cole=2 cocu=nc
|
||||
endif
|
||||
|
||||
if !exists('*s:HelpComplete')
|
||||
func s:HelpComplete(findstart, base)
|
||||
if !exists('*HelpComplete')
|
||||
func HelpComplete(findstart, base)
|
||||
if a:findstart
|
||||
let colnr = col('.') - 1 " Get the column number before the cursor
|
||||
let line = getline('.')
|
||||
|
||||
@@ -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
|
||||
|
||||
470
runtime/syntax/algol68.vim
Normal file
470
runtime/syntax/algol68.vim
Normal file
@@ -0,0 +1,470 @@
|
||||
" Vim syntax file
|
||||
" Language: Algol 68
|
||||
" Version: 0.4
|
||||
" Maintainer: Janis Papanagnou
|
||||
" Previous Maintainer: NevilleD.ALGOL_68@sgr-a.net
|
||||
" Last Change: 2026 May 02
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
syn sync minlines=250 maxlines=500
|
||||
|
||||
" Algol68 Final Report, unrevised
|
||||
syn keyword algol68PreProc PRIORITY
|
||||
syn keyword algol68Operator BTB CTB CONJ QUOTE CT CTAB EITHER SIGN
|
||||
|
||||
|
||||
" Algol68 Revised Report
|
||||
syn keyword algol68Boolean TRUE FALSE
|
||||
syn keyword algol68Conditional IF THEN ELSE ELIF FI
|
||||
syn keyword algol68Conditional CASE IN OUT OUSE ESAC
|
||||
syn keyword algol68Constant NIL SKIP EMPTY
|
||||
syn keyword algol68Statement MODE OP PRIO PROC
|
||||
syn keyword algol68Label GOTO
|
||||
syn match algol68Label "\<GO TO\>"
|
||||
syn keyword algol68Operator ABS REPR ROUND ENTIER ARG BIN LENG SHORTEN ODD
|
||||
syn keyword algol68Operator SHL SHR ROL ROR UP DOWN LEVEL LWB UPB I RE IM
|
||||
syn keyword algol68Operator OVER MOD ELEM SET CLEAR
|
||||
syn keyword algol68Operator LT LE GE GT
|
||||
syn keyword algol68Operator EQ NE
|
||||
syn keyword algol68Operator AND OR XOR NOT
|
||||
" Genie short-circuit pseudo operators
|
||||
syn keyword algol68Operator THEF ANDF ANDTH ELSF ORF OREL
|
||||
syn keyword algol68Operator ANDTHEN ORELSE
|
||||
syn keyword algol68Operator MINUSAB PLUSAB TIMESAB DIVAB OVERAB MODAB PLUSTO
|
||||
syn keyword algol68Operator IS ISNT OF AT
|
||||
syn keyword algol68Operator SORT ELEMS
|
||||
syn keyword algol68Repeat FOR FROM BY UPTO DOWNTO TO WHILE DO UNTIL OD
|
||||
syn keyword algol68Statement PAR BEGIN END EXIT
|
||||
syn keyword algol68Struct STRUCT
|
||||
syn keyword algol68PreProc VECTOR
|
||||
syn keyword algol68Type FLEX HEAP LOC LONG REF SHORT
|
||||
syn keyword algol68Type VOID BOOL INT REAL COMPL CHAR STRING COMPLEX
|
||||
syn keyword algol68Type BITS BYTES FILE CHANNEL PIPE SEMA SOUND
|
||||
syn keyword algol68Type FORMAT STRUCT UNION
|
||||
" Genie extensions in addition to ROUND and ENTIER
|
||||
syn keyword algol68Operator FLOOR CEIL NINT TRUNC FRAC FIX
|
||||
|
||||
" 20011222az: Added new items.
|
||||
syn keyword algol68Todo contained TODO FIXME XXX DEBUG NOTE
|
||||
|
||||
|
||||
" String
|
||||
syn region algol68String matchgroup=algol68String start=+"+ end=+"+ contains=algol68StringEscape
|
||||
syn match algol68StringEscape contained '""'
|
||||
syn match algol68StringEscape contained "\\$"
|
||||
|
||||
|
||||
syn match algol68Identifier "\<[a-z][a-z0-9_]*\>"
|
||||
|
||||
|
||||
if exists("algol68_symbolic_operators")
|
||||
syn match algol68SymbolOperator "\\"
|
||||
syn match algol68SymbolOperator ":=\|="
|
||||
syn match algol68SymbolOperator "[~^]"
|
||||
syn match algol68SymbolOperator "[~^]="
|
||||
syn match algol68SymbolOperator "[<>]"
|
||||
syn match algol68SymbolOperator "[<>]="
|
||||
syn match algol68SymbolOperator "\%([-+*%/]\|%\*\)"
|
||||
syn match algol68SymbolOperator "\%([-+*%/]\|%\*\):="
|
||||
syn match algol68SymbolOperator "+=:"
|
||||
syn match algol68SymbolOperator "*\*\|&"
|
||||
syn match algol68SymbolOperator ":/\==:"
|
||||
endif
|
||||
|
||||
syn match algol68Number "\<\d\+\%(\s\+\d\+\)*\>"
|
||||
|
||||
syn match algol68Float "\c\.\d\+\%(\s\+\d\+\)*\%(\s*[e\\⏨]\s*[-+]\?\s*\d\+\%(\s\+\d\+\)*\)\?\>"
|
||||
syn match algol68Float "\c\<\d\+\%(\s\+\d\+\)*\%(\s*[e\\⏨]\s*[-+]\?\s*\d\+\%(\s\+\d\+\)*\)\>"
|
||||
syn match algol68Float "\c\<\d\+\%(\s\+\d\+\)*\s*\.\s*\d\+\%(\s\+\d\+\)*\%(\s*[e\\⏨]\s*[-+]\?\s*\d\+\%(\s\+\d\+\)*\)\?\>"
|
||||
|
||||
syn match algol68HexNumber "\c\<2r\s*[01]\+\%(\s\+[01]\+\)*\>"
|
||||
syn match algol68HexNumber "\c\<4r\s*[0-3]\+\%(\s\+[0-3]\+\)*\>"
|
||||
syn match algol68HexNumber "\c\<8r\s*[0-7]\+\%(\s\+[0-7]\+\)*\>"
|
||||
syn match algol68HexNumber "\c\<16r\s*[0-9a-f]\+\%(\s\+[0-9a-f]\+\)*\>"
|
||||
|
||||
|
||||
syn region algol68Special start="\$" end="\$" contains=algol68String
|
||||
syn region algol68Comment start="¢" end="¢" contains=algol68Todo,algol68SpaceError
|
||||
syn region algol68Comment start="£" end="£" contains=algol68Todo,algol68SpaceError
|
||||
syn region algol68Comment start="#" end="#" contains=algol68Todo,algol68SpaceError
|
||||
syn region algol68Comment start="\<CO\>" end="\<CO\>" contains=algol68Todo,algol68SpaceError
|
||||
syn region algol68Comment start="\<COMMENT\>" end="\<COMMENT\>" contains=algol68Todo,algol68SpaceError
|
||||
syn region algol68PreProc start="\<PR\>" end="\<PR\>" contains=algol68Todo,algol68SpaceError
|
||||
syn region algol68PreProc start="\<PRAGMAT\>" end="\<PRAGMAT\>" contains=algol68Todo,algol68SpaceError
|
||||
" algol68r
|
||||
syn region algol68Comment start="{" end="}" contains=algol68Todo,algol68SpaceError
|
||||
syn region algol68Comment start="{{{" end="}}}" contains=algol68Todo,algol68SpaceError
|
||||
|
||||
" ALGOL 68r
|
||||
syn keyword algol68PreProc DECS CONTEXT configinfo A68CONFIG KEEP FINISH USE SYSPROCS IOSTATE FORALL
|
||||
" ALGOL 68c
|
||||
syn keyword algol68PreProc USING ENVIRON FOREACH ASSERT
|
||||
|
||||
if !exists("algol68_no_preludes")
|
||||
|
||||
|
||||
" THE STANDARD ENVIRONMENT
|
||||
|
||||
" Enquiries
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(blank\|formfeed\|newline\|null\|tab\|eof\)\s*char\%(acter\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(max\s*abs\|exp\|error\)\s*char\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(long\s*\)\?long\s*\)\?max\s*\%(bits\|int\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(long\s*\)\?long\s*\)\?\%(max\|min\|small\)\s*real\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\?\%(bits\|bytes\|exp\|int\|real\)\s*width\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(bits\|bytes\|compl\|int\|real\)\s*\%(lengths\|shorths\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(blank\|flip\|flop\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Transput Files and Channels
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<stand\s*\%(in\|out\|back\|error\)\%(\s*channel\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<stand\s*draw\s*channel\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Transput Event Routines
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<on\s*\%(\%(line\|page\|\%(logical\s*\|physical\s*\)\?file\|format\)\s*\)end\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<on\s*\%(\%(format\|value\|open\|transput\)\s*\)error\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Connections to Files
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(open\|establish\|append\|create\|associate\|close\|lock\|erase\|scratch\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Positioning on Files
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<new\s*line\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<new\s*page\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<back\s*space\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(reset\|rewind\|rewrite\|set\|seek\|space\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" I/O on Files (Standard)
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(get\|put\|print\|read\|write\)\%(f\|\s*bin\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" I/O on Files (Algol68C)
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(print\|read\)\s*\%(\%(long\s*\)\?long\s*\)\?\%(int\|real\|complex\|bits\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(print\|read\)\s*\%(bool\|char\|string\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<read\s*line\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Enquiries on Files
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(get\|put\|bin\|set\|reset\|rewind\|reidf\|draw\)\s*possible\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<end\s*of\s*\%(file\|line\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(make\s*\)\?term\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(compressible\|eof\|eoln\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Keyboard Control
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cooked\|raw\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Math Constants
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(long\s*\)\?long\s*\)\?\%(min\s*real\|\%(minus\s*\)\?infinity\|\%(min\s*\)\?inf\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?pi\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<mp\s*radix\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<nan\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Math Basic Functions
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\%([a-z0-9]\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?\%(sqrt\|cbrt\|curt\|exp\|ln\|log\)\>\%(\s*[a-z0-9]\)\@!\%(\s\{1,7}[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<ln\s*abs\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Math Trigonometric Functions
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?\%(arc\s*\|a\)\?\%(sin\|cos\|tan\|cot\|sec\|csc\|cas\)\%(h\|\%(\s*dg\)\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?\%(arc\s*\|a\)\?tan2\%(\s*dg\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
" long-long-sinpi/cospi/tanpi/cotpi
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?\%(sin\|cos\|tan\|cot\)\s*pi\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<ln\s*\%(sinh\|cosh\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
" a special case in Genie?
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<atan\s*int\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Random Number Generator
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(long\s*\)\?long\s*\)\?\%(next\s*\)\?random\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<first\s*random\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<rnd\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Garbage Collection and Memory
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<collect\s*seconds\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<garbage\%(\s*\%(collections\|freed\|refused\|seconds\)\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<gc\s*heap\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<on\s*gc\s*event\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<preemptive\s*\%(gc\|sweep\%(\s*heap\)\?\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<sweep\s*heap\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<sweeps\%(\s*refused\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(system\s*\)\?\%(heap\|stack\)\s*pointer\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(actual\|system\)\s*stack\s*size\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(blocks\|collections\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" I/O on Strings
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(puts\|gets\|string\)f\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
" Character Type Tests
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<is\s*\%(alnum\|alpha\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
" Operations on Characters
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<to\s*\%(upper\|lower\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
" Search in Strings
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(char\|last\s*char\|string\)\s*in\s*string\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Time and Date
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cpu\|wall\|utc\|local\)\s*time\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(wall\s*\)\?clock\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(wall\s*\)\?seconds\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<sleep\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Type Operations
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(long\s*\)\?\%(bits\|bytes\)\s*pack\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(long\s*long\s*\)\?bits\s*pack\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\%([a-z0-9]\s\+\)\@8<!\<\%(bits\|whole\|fixed\|float\|real\)\>\%(\s*[a-z0-9]\)\@!\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Runtime
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(program\s*\)\?idf\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(backtrace\|break\|debug\|monitor\|abend\|evaluate\|system\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(i32\|i64\|r64\|r128\)mach\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
|
||||
" UNIX EXTENSIONS
|
||||
|
||||
" Environment Functions
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(a68g\s*\)\?\%(argc\|argv\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<get\s*env\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<reset\s*errno\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<str\s*error\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(get\|set\)\s*pwd\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(rows\|columns\|abend\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<errno\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Processes
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<execve\%(\s*child\%(\s*pipe\)\?\|\s*output\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<exec\%(\s*sub\%(\s*pipeline\|\s*output\)\?\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<fork\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<wait\s*pid\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<create\s*pipe\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<peek\s*char\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<sig\s*segv\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" File types and attributes
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<file\s*is\s*\%(block\s*device\|char\s*device\|directory\|regular\|fifo\|link\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<file\s*mode\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<get\s*directory\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<real\s*path\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Fetching web page contents and sending requests
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<https\?\s*\%(content\|timeout\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<tcp\s*request\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Regular expressions in string manipulation
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<grep\s*in\s*\%(sub\)\?string\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<sub\s*in\s*string\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Curses support
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<curses\s*\%(start\|end\|clear\|refresh\|get\s*char\|put\s*char\|move\|lines\|columns\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<curses\s*\%(green\|cyan\|red\|yellow\|magenta\|blue\|white\)\%(\s*inverse\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<curses\s*del\s*char\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
|
||||
" POSTGRESQL CLIENT ROUTINES
|
||||
|
||||
" Connecting to a server
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<pq\s*\%(connect\s*db\|finish\|reset\|parameter\s*status\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Sending queries and retrieving results
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<pq\s*\%(exec\|ntuples\|nfields\|fname\|fnumber\|fformat\|get\s*is\s*null\|get\s*value\|cmd\s*status\|cmd\s*tuples\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Connection status information
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<pq\s*\%(\%(result\s*\)\?error\s*message\|db\|user\|pass\|host\|port\|tty\|options\|\%(protocol\|server\)\s*version\|socket\|backend\s*pid\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
|
||||
" SOUND
|
||||
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(new\|get\|set\)\s*sound\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn keyword algol68Operator RESOLUTION CHANNELS RATE SAMPLES
|
||||
|
||||
|
||||
" DRAWING USING THE GNU PLOTTING UTILITIES
|
||||
|
||||
" Setting up a graphics device
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<draw\s*\%(device\|erase\|show\|move\|aspect\|fill\s*style\|line\s*style\|line\s*width\|clear\|flush\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<make\s*device\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Specifying colours
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<draw\s*\%(\%(background\s*\)\?colou\?r\%(\s*name\)\?\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<draw\s*get\s*colou\?r\s*name\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Drawing objects
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<draw\s*\%(point\|line\|rect\|circle\|ball\|star\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Drawing text
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<draw\s*\%(text\%(\s*angle\)\?\|font\s*\%(name\|size\)\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
|
||||
" EXTRA NUMERICAL PROCEDURES
|
||||
|
||||
" COMPLEX Functions
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?c\%(omplex\s*\)\?\%(sqrt\|exp\|ln\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(long\s*\)\?long\s*\)\?complex\s*\%(arc\s*\)\?\%(sin\|cos\|tan\)h\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
" cas casin casinh dcas dcasin dcasinh qcas qcasin qcasinh longcas longlongcas
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[dq]\?\)ca\?\%(sin\|cos\|tan\)h\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
" a special case in Genie?
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<long\s*complex\s*atanh\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" REAL Airy Functions
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<airy\s*[ab]i\%(\s*deriv\)\?\%(\s*scaled\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<airy\s*[ab]i\%(\s*derivative\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<airy\s*zero\s*[ab]i\%(\s*deriv\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" REAL Bessel Functions
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(jn\|yn\|in\|exp\s*in\|kn\|exp\s*kn\|jl\|yl\|exp\s*il\|exp\s*kl\|jnu\|ynu\|inu\|exp\s*inu\|knu\|exp\s*knu\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" only a few could be sensibly merged; we keep them apart
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(il[012]\?\s*scaled\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(in[01]\%(\s*scaled\)\?\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(in\s*u\?\s*scaled\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(j\%(\l[012]\|n[01]\)\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(kl[012]\?\s*scaled\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(kn[01]\%(\s*scaled\)\?\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(kn\s*[u_]\?\s*scaled\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*ln\s*knu\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*\%(y\%(\l[012]\|n[01]\)\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<bessel\s*zero\s*j\%([01]\|nu\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" REAL Elliptic Integrals
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<elliptic\s*integral\s*\%(k\|e\|rf\<rd\|rj\|rc\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" REAL Error and Gamma Functions
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(ln\s*\)\?\%(fact\|choose\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<prime\s*factors\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(long\s*\)\?long\s*\)\|[qd]\)\?\%(inv\%(erse\)\?\s*\)\?erfc\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<mpfr\s*\%(\%(\%(long\s*\)\?long\s*\)\|q\)\?\%(inv\s*\)\?erfc\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(\%(mpfr\s*\)\?long\s*\)\?long\s*\)\|\%(d\|\%(mpfr\s*\)\?q\)\)\?\%(beta\|gamma\)\%(\s*inc\s*g\?f\?\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<beta\s*inc\s*gsl\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(\%(\%(\%(mpfr\s*\)\?long\s*\)\?long\s*\)\|\%(d\|\%(mpfr\s*\)\?q\)\)\?ln\s*\%(beta\|gamma\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<mpfr\s*mp\>\%(\s*[a-z0-9]\)\@!"
|
||||
" is the following a special case in Genie?
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<mpfr\s*\%(long\s*\|d\)gamma\s*inc\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "gamma\s*\%(\%(inc\s*\%(gsl\|[pq]\)\)\|inv\|star\)\>\%(\s*\%([a-z_]\|\l\d\+\)\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<lj[ef]\s*126\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<ln1p\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
|
||||
|
||||
" Scaling Factors
|
||||
|
||||
" strangely missing some common factors (hecto, deca, deci, centi),
|
||||
" also myria, and the more extreme factors (quetta, ronna, ronto, quecto)
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<num\s*\%(yotta\|zetta\|exa\|peta\|tera\|giga\|mega\|kilo\|milli\|micro\|nano\|pico\|femto\|atto\|zepto\|yocto\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
|
||||
" Physical Constants
|
||||
|
||||
" Fundamental Constants
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(boltzmann\|faraday\|gauss\|hectare\|\%(kilometers\|miles\)\s*per\s*hour\|micron\|molar\s*gas\|planck\s*constant\%(\s*bar\)\?\|speed\s*of\s*light\|standard\s*gas\s*volume\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<mksa\s*vacuum\s*\%(permeability\|permittivity\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<num\s*avogadro\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Astronomy and Astrophysics
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(astronomical\s*unit\|grav\s*accel\|gravitational\s*constant\|light\s*year\|parsec\|solar\s*mass\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Atomic and Nuclear Physics
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(angstrom\|barn\|bohr\s*magneton\|bohr\s*radius\|electron\s*\%(charge\|magnetic\s*moment\|volt\)\|mass\s*\%(electron\|muon\|neutron\|proton\)\|nuclear\s*magneton\|proton\s*magnetic\s*moment\|rydberg\|unified\s*atomic\s*mass\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<num\s*fine\s*structure\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Time
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(day\|hour\|minute\|week\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Imperial units
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(foot\|inch\|mil\|mile\|yard\|\%(tex\)\?point\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Nautical units
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(fathom\|knot\|nautical\s*mile\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Volume
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(acre\|\%(canadian\|uk\|us\)\s*gallon\|liter\|pint\|quart\|cup\|fluid\s*ounce\|\%(table\|tea\)\s*spoon\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Mass and weight
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(carat\|\%(gram\|\%(kilo\s*\)\?pound\)\s*force\|\%(metric\s*\|uk\s*\)\?ton\|\%(ounce\|pound\)\s*mass\|poundal\|troy\s*ounce\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Thermal energy and power
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(btu\|calorie\|horsepower\|therm\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Pressure
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(bar\|inch\s*of\s*\%(mercury\|water\)\|meter\s*of\s*mercury\|psi\|std\s*atmosphere\|torr\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Viscosity
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(poise\|stokes\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Light and illumination
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(foot\s*candle\|foot\s*lambert\|lambert\|lumen\|lux\|phot\|stilb\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Radioactivity
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(curie\|rad\|roentgen\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
" Force and energy
|
||||
syn match algol68Predefined "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(cgs\|mksa\)\s*\%(dyne\|erg\|joule\|newton\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
|
||||
" Functions from GSL
|
||||
|
||||
syn keyword algol68Operator CV RV T INV PINV MEAN DET TRACE NORM DYAD BEFORE ABOVE
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<angle\s*restrict\s*\%(pos\|symm\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<conical\s*p\s*\%([01]\|cylreg\|m\?half\|sph\s*reg\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<cholesky\s*\%(decomp\|solve\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<debye\s*[1-6]\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<ellint\s*\%([defp]\|[ekp]\s*comp\|r[cdfj]\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(expint\s*\%(3\|e[12in]\)\|expm1\|exprel[2n]\?\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<fermi\s*dirac\s*\%([012]\|3\?half\|inc0\|int\|m1\|mhalf\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<fft\s*\%(complex\s*\)\?\%(forward\|backward\|inverse\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(gegenpoly\|laguerre\)\s*[123n]\s*real\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<lambert\s*\%(w0\|wm1\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<legendre\s*\%(h3d\%([01]\)\?\|p[123l]\|q[01l]\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<pseudo\s*inv\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<psi\s*\%(1\%(\s*int\|\s*piy\)\?\|int\|n\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<synchrotron\s*[12]\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<taylor\s*coeff\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<transport\s*[2-5]\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<zeta\%(\s*m1\)\?\%(\s*int\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(chi\|ci\|clausen\|dawson\|digamma\|dilog\|\%(ln\s*\)\?doublefact\|eta\|eta\s*int\|hermite\s*func\|hypot\|hzeta\|laplace\|shi\|si\|sinc\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<ln1\s*\%(plusx\%(mx\)\?\)\?\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(compl\s*\)\?\%(matrix\|vector\)\s*echo\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<print\s*\%(matrix\|vector\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(complex\s*\)\?lu\s*\%(decomp\|det\|inv\|solve\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<left\s*columns\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(ols\|tls\|pcacv\|pcasvd\|pcr\|pls[12]\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<\%(ln\s*poch\|poch\s*\%(rel\)\?\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<qr\s*\%(decomp\|\%(ls\s*\)\?solve\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<svd\s*\%(decomp\|solve\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
|
||||
" Functions from R Mathlib
|
||||
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpqr]n\?\s*binom\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*\%(di\|tri\|tetra\|penta\|psi\)\s*gamma\>\%(\s*[a-z0-9]\)\@!"
|
||||
" note: Genie documents 'r rn chisq' but it's missing in the code?
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpqr]n\?\s*chisq\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpqr]\%(\s*n\)\?\s*f\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpq]\%(\s*n\)\?\s*t\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpqr]\s*\%(l\s*\)\?norm\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[dpqr]\s*\%(beta\|cauchy\|exp\|geom\|hyper\|logis\|pois\|sign\s*rank\|t\|unif\|weibull\|wilcox\)\>\%(\s*[a-z0-9]\)\@!"
|
||||
syn match algol68Function "\%(\%([a-z_]\|\l\d\+\)\s\+\)\@8<!\<r\s*[pq]\s*tu\s*key\>\%(\s*[a-z0-9]\)\@!"
|
||||
|
||||
|
||||
endif
|
||||
|
||||
" Define the default highlighting.
|
||||
hi def link algol68Boolean Boolean
|
||||
hi def link algol68Comment Comment
|
||||
hi def link algol68Conditional Conditional
|
||||
hi def link algol68Constant Constant
|
||||
hi def link algol68Float Float
|
||||
hi def link algol68Function Function
|
||||
hi def link algol68Label Label
|
||||
hi def link algol68MatrixDelimiter Identifier
|
||||
hi def link algol68HexNumber Number
|
||||
hi def link algol68Number Number
|
||||
hi def link algol68Operator Operator
|
||||
hi def link algol68Predefined Identifier
|
||||
hi def link algol68PreProc PreProc
|
||||
hi def link algol68Repeat Repeat
|
||||
hi def link algol68SpaceError Error
|
||||
hi def link algol68Statement Statement
|
||||
hi def link algol68String String
|
||||
hi def link algol68StringEscape Special
|
||||
hi def link algol68Struct algol68Statement
|
||||
hi def link algol68SymbolOperator algol68Operator
|
||||
hi def link algol68Todo Todo
|
||||
hi def link algol68Type Type
|
||||
hi def link algol68ShowTab Error
|
||||
|
||||
let b:current_syntax = "algol68"
|
||||
|
||||
" vim: ts=8 sw=2
|
||||
@@ -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,12 @@
|
||||
" Previous Maintainer: Vincent Berthoux <twinside@gmail.com>
|
||||
" File Types: .cabal
|
||||
" Last Change: 22 Oct 2022
|
||||
"
|
||||
" 2026 Apr 29 by Léana: add missing haskell language editions
|
||||
" 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 +29,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,19 +190,20 @@ 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*:.*$/
|
||||
|
||||
syn keyword cabalLanguage Haskell98 Haskell2010
|
||||
" See the following link for all Haskell language editions supported by Cabal.
|
||||
" https://cabal.readthedocs.io/en/stable/cabal-package-description-file.html#pkg-field-default-language
|
||||
syn keyword cabalLanguage Haskell98 Haskell2010 GHC2021 GHC2024
|
||||
|
||||
" title region
|
||||
syn match cabalName contained /:\@<=.*/
|
||||
syn match cabalNameRegion
|
||||
\ contains=cabalStatementRegion,cabalName
|
||||
\ nextgroup=cabalStatementRegion
|
||||
\ oneline
|
||||
\ /^\c\s*name\s*:.*$/
|
||||
|
||||
" author region
|
||||
@@ -206,7 +211,6 @@ syn match cabalAuthor contained /:\@<=.*/
|
||||
syn match cabalAuthorRegion
|
||||
\ contains=cabalStatementRegion,cabalStatement,cabalAuthor
|
||||
\ nextgroup=cabalStatementRegion
|
||||
\ oneline
|
||||
\ /^\c\s*author\s*:.*$/
|
||||
|
||||
" maintainer region
|
||||
@@ -214,7 +218,6 @@ syn match cabalMaintainer contained /:\@<=.*/
|
||||
syn match cabalMaintainerRegion
|
||||
\ contains=cabalStatementRegion,cabalStatement,cabalMaintainer
|
||||
\ nextgroup=cabalStatementRegion
|
||||
\ oneline
|
||||
\ /^\c\s*maintainer\s*:.*$/
|
||||
|
||||
" license region
|
||||
@@ -222,7 +225,6 @@ syn match cabalLicense contained /:\@<=.*/
|
||||
syn match cabalLicenseRegion
|
||||
\ contains=cabalStatementRegion,cabalStatement,cabalLicense
|
||||
\ nextgroup=cabalStatementRegion
|
||||
\ oneline
|
||||
\ /^\c\s*license\s*:.*$/
|
||||
|
||||
" license-file region
|
||||
@@ -230,7 +232,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 +239,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
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
" dockerfile.vim - Syntax highlighting for Dockerfiles
|
||||
" Maintainer: Honza Pokorny <https://honza.ca>
|
||||
" Last Change: 2024 Dec 20
|
||||
" 2026 Mar 26 by Vim Project: dockerfileShell comments (#19829)
|
||||
" License: BSD
|
||||
|
||||
" https://docs.docker.com/engine/reference/builder/
|
||||
@@ -31,7 +32,7 @@ syntax match dockerfileInstruction contained /\v<(SHELL|VOLUME)>/
|
||||
|
||||
syntax region dockerfileString contained start=/\v"/ skip=/\v\\./ end=/\v"/
|
||||
syntax region dockerfileJSON contained keepend start=/\v\[/ skip=/\v\\\_./ end=/\v$/ contains=@JSON
|
||||
syntax region dockerfileShell contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=@Shell
|
||||
syntax region dockerfileShell contained keepend start=/\v/ skip=/\v\\\_.|^\s*#.*/ end=/\v$/ contains=@Shell
|
||||
syntax region dockerfileValue contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=dockerfileString
|
||||
|
||||
syntax region dockerfileComment start=/\v^\s*#/ end=/\v$/ contains=@Spell
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -1,18 +1,12 @@
|
||||
" Vim syntax file
|
||||
" Language: JavaScript
|
||||
" Maintainer: Claudio Fleiner <claudio@fleiner.com>
|
||||
" Updaters: Scott Shattuck (ss) <ss@technicalpursuit.com>
|
||||
" URL: http://www.fleiner.com/vim/syntax/javascript.vim
|
||||
" Changes: (ss) added keywords, reserved words, and other identifiers
|
||||
" (ss) repaired several quoting and grouping glitches
|
||||
" (ss) fixed regex parsing issue with multiple qualifiers [gi]
|
||||
" (ss) additional factoring of keywords, globals, and members
|
||||
" Last Change: 2022 Jun 09
|
||||
" 2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
|
||||
" 2018 Apr 14: adjusted javaScriptRegexpString (LongJohnCoder)
|
||||
" 2024 Aug 14: fix a few stylistic issues (#15480)
|
||||
" 2025 Aug 07: as is a reserved keyword (#17912)
|
||||
" 2025 Sep 24: using is a reserved keyword (Devin Weaver)
|
||||
" Language: JavaScript
|
||||
" Maintainer: This runtime file is looking for a maintainer.
|
||||
" Previous Maintainer: Claudio Fleiner <claudio@fleiner.com>
|
||||
" Contributors: Scott Shattuck <ss@technicalpursuit.com>
|
||||
" Kevin Locke
|
||||
" LongJohnCoder
|
||||
" Devin Weaver
|
||||
" Last Change: 2026 Apr 26
|
||||
|
||||
" tuning parameters:
|
||||
" unlet javaScript_fold
|
||||
@@ -52,7 +46,14 @@ syn match javaScriptNumber "\<\d\+\(_\d\+\)*[eE][+-]\?\d\+\>"
|
||||
syn match javaScriptNumber "\<[1-9]\d*\(_\d\+\)*\(\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\)\?\>"
|
||||
syn match javaScriptNumber "\<\(\d\+\(_\d\+\)*\)\?\.\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\>"
|
||||
syn match javaScriptNumber "\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\([eE][+-]\?\d\+\)\?\)\?\>"
|
||||
syn region javaScriptRegexpString start=+[,(=+]\s*/[^/*]+ms=e-1,me=e-1 skip=+\\\\\|\\/+ end=+/[gimuys]\{0,2\}\s*$+ end=+/[gimuys]\{0,2\}\s*[+;.,)\]}]+me=e-1 end=+/[gimuys]\{0,2\}\s\+\/+me=e-1 contains=@htmlPreproc,javaScriptComment oneline
|
||||
syn region javaScriptRegexpString
|
||||
\ start=+\%([,(=+]\s*\)\@8<=/[^/*]+
|
||||
\ skip=+\\\\\|\\/+
|
||||
\ end=+/[dgimsuvy]\{0,7\}\ze\s*$+
|
||||
\ end=+/[dgimsuvy]\{0,7\}\ze\s*[+;.,)\]}]+
|
||||
\ end=+/[dgimsuvy]\{0,7\}\ze\s\+\/+
|
||||
\ contains=@htmlPreproc,javaScriptComment
|
||||
\ oneline
|
||||
|
||||
syn keyword javaScriptConditional if else switch
|
||||
syn keyword javaScriptRepeat while for do in of
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
" Maintainer: Chase Knowlden <haroldknowlden@gmail.com>
|
||||
" Changes: `git log` is your friend
|
||||
" Last Change: 2023 Aug 16
|
||||
" 2026 Apr 16 by Vim project: handle ?. optional chaining #19988
|
||||
"
|
||||
" This file is bassed on the original work done by Warwick Allison
|
||||
" <warwick.allison@nokia.com> whose did about 99% of the work here.
|
||||
@@ -44,6 +45,7 @@ syn match qmlObjectLiteralType "[A-Za-z][_A-Za-z0-9]*\s*\({\)\@="
|
||||
syn region qmlTernaryColon start="?" end=":" contains=@qmlExpr,qmlBraces,qmlParens,qmlLineComment
|
||||
syn match qmlBindingProperty "\<[A-Za-z][_A-Za-z.0-9]*\s*:"
|
||||
syn match qmlNullishCoalescing "??"
|
||||
syn match qmlOptionalChaining "?\."
|
||||
|
||||
syn keyword qmlConditional if else switch
|
||||
syn keyword qmlRepeat while for do in
|
||||
|
||||
@@ -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
|
||||
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_00.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_00.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
>#+0#0000e05#ffffff0| +0#0000000&@73
|
||||
| +0#0000e05&@3|V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|a|l|g|o|l|6|8|_|s|y|m|b|o|l|i|c|_|o|p|e|r|a|t|o|r|s| |=| |1| +0#0000000&@19
|
||||
|#+0#0000e05&| +0#0000000&@73
|
||||
|#+0#0000e05&| +0#0000000&@73
|
||||
| +0#0000e05&@3|A|l|g|o|l| |6|8| |p|r|e|l|u|d|e| |i|d|e|n|t|i|f|i|e|r| |f|r|o|m| |t|h|e| |G|e|n|i|e| |s|o|u|r|c|e| |c|o|d|e| |f|i|l|e|s|.| +0#0000000&@9
|
||||
| +0#0000e05&@3| +0#0000000&@70
|
||||
| +0#0000e05&@3|P|r|o|v|i|d|e|d| |a|s| |a| |b|a|s|e| |t|o| |v|e|r|i|f|y| |t|h|e| |c|o|r@1|e|c|t| |s|y|n|t|a|x| |h|i|g|h|l|i|g|h|t|i|n|g| +0#0000000&@10
|
||||
| +0#0000e05&@3|o|f| |t|h|e| |a|l|g|o|l|6|8|.|v|i|m| |s|y|n|t|a|x| |f|i|l|e| |f|o|r| |t|h|e| |V|i|m| |e|d|i|t|o|r|.| +0#0000000&@20
|
||||
| +0#0000e05&@3| +0#0000000&@70
|
||||
| +0#0000e05&@3|T|h|e|r|e|'|s| |f|o|u|r| |s|e|c|t|i|o|n|s|,| |e|a|c|h| |r|e|p|r|e|s|e|n|t|i|n|g| |a|n| |o|r|i|g|i|n|a|l| |f|i|l|e|,| +0#0000000&@12
|
||||
| +0#0000e05&@3|t|h|a|t| |a|r|e| |e|n|c|l|o|s|e|d| |i|n| |t|h|e| |U|n|i|x|-|'|m|o|r|e|'| |f|o|r|m| |t|o| |s|t|a|n|d| |o|u|t|.| +0#0000000&@15
|
||||
| +0#0000e05&@3| +0#0000000&@70
|
||||
| +0#0000e05&@3|S|o|m|e| |i|n|f|o|r|m|a|l| |c|o|m@1|e|n|t|s| |f|r|o|m| |t|h|e| |s|o|u|r|c|e| |c|o|d|e| |l|e|f|t| |i|n|t|a|c|t| |a|s| +0#0000000&@12
|
||||
| +0#0000e05&@3|a| |c|o|m@1|e|n|t| |i|n| |A|l|g|o|l| |6|8| |s|y|n|t|a|x|.| +0#0000000&@41
|
||||
| +0#0000e05&@3| +0#0000000&@70
|
||||
| +0#0000e05&@3|D|e|p|e|n|d|i|n|g| |o|n| |t|h|e| |l|a|n|g|u|a|g|e| |c|o|n|t|e|x|t| |t|h|e|r|e|'|s| |d|u|p|l|i|c|a|t|e|s| |i|n| |t|h|e| +0#0000000&@11
|
||||
| +0#0000e05&@3|l|i|s|t|,| |t|h|a|t| |a|r|e| |k|e|p|t| |f|o|r| |c|l|a|r|i|t|y| |g|i|v|e|n| |t|h|e| |a|s@1|o|c|i|a|t|e|d| |i|n|f|o|r|m|a|l| +0#0000000&@9
|
||||
| +0#0000e05&@3|c|o|m@1|e|n|t| |a|s@1|o|c|i|a|t|e|d| |w|i|t|h| |t|h|e|m|.| +0#0000000&@41
|
||||
| +0#0000e05&@3| +0#0000000&@70
|
||||
@57|1|,|1| @10|T|o|p|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_01.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_01.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0#0000e05#ffffff0@3|a| |c|o|m@1|e|n|t| |i|n| |A|l|g|o|l| |6|8| |s|y|n|t|a|x|.| +0#0000000&@41
|
||||
| +0#0000e05&@3| +0#0000000&@70
|
||||
| +0#0000e05&@3|D|e|p|e|n|d|i|n|g| |o|n| |t|h|e| |l|a|n|g|u|a|g|e| |c|o|n|t|e|x|t| |t|h|e|r|e|'|s| |d|u|p|l|i|c|a|t|e|s| |i|n| |t|h|e| +0#0000000&@11
|
||||
| +0#0000e05&@3|l|i|s|t|,| |t|h|a|t| |a|r|e| |k|e|p|t| |f|o|r| |c|l|a|r|i|t|y| |g|i|v|e|n| |t|h|e| |a|s@1|o|c|i|a|t|e|d| |i|n|f|o|r|m|a|l| +0#0000000&@9
|
||||
| +0#0000e05&@3|c|o|m@1|e|n|t| |a|s@1|o|c|i|a|t|e|d| |w|i|t|h| |t|h|e|m|.| +0#0000000&@41
|
||||
| +0#0000e05&@2> | +0#0000000&@70
|
||||
| +0#0000e05&@3|S|o|m|e| |e|n|t|r|i|e|s| |d|e|l|i|b|e|r|a|t|e|l|y| |c|o|n|t|a|i|n| |t|w|o| |i|d|e|n|t|i|f|i|e|r| |v|a|r|i|a|n|t|s| |t|h|a|t| +0#0000000&@8
|
||||
| +0#0000e05&@3|m|a|y| |b|e| |u|s|e|d| |a|s| |a|l|t|e|r|n|a|t|i|v|e| |f|o|r|m| |i|n| |a|n| |A|l|g|o|l| |6|8| |G|e|n|i|e| |p|r|o|g|r|a|m|.| +0#0000000&@9
|
||||
| +0#0000e05&@3| +0#0000000&@70
|
||||
| +0#0000e05&@3|T|h|e| |i|d|e|n|t|i|f|i|e|r|s| |a|r|e| |p|r|e|s|e|n|t|e|d| |i|n| |t|w|o| |v|a|r|i|a|n|t|s| |s|e|p|a|r|a|t|e|d| |b|y| |a| +0#0000000&@10
|
||||
| +0#0000e05&@3|t|a|b|u|l|a|t|o|r|;| |f|i|r|s|t| |w|i|t|h| |s|p|a|c|e|s|,| |t|h|e|n| |i|n| |c|a|n|o|n|i|c|a|l| |f|o|r|m| |w|i|t|h|o|u|t| +0#0000000&@10
|
||||
| +0#0000e05&@3|s|p|a|c|e|s|.| |V|a|r|i|a|n|t|s| |w|i|t|h| |s|p|a|c|e|s| |a|r|e| |s|u|p@1|o|r|t|e|d| |b|y| |t|h|e| |V|i|m| |s|y|n|t|a|x| +0#0000000&@10
|
||||
| +0#0000e05&@3|f|i|l|e| |a|s| |t|h|e| |A|l|g|o|l| |6|8| |l|a|n|g|u|a|g|e| |d|o|e|s|.| +0#0000000&@35
|
||||
| +0#0000e05&@3|B|u|t| |n|o|t|e| |t|h|a|t| |w|h|i|l|e| |A|l|g|o|l| |6|8| |a|l@1|o|w|s| |a|r|b|i|t|r|a|r|y| |s|p|a|c|i|n|g| |w|i|t|h|i|n| +0#0000000&@10
|
||||
| +0#0000e05&@3|i|d|e|n|t|i|f|i|e|r|s| |-| |e|v|e|n| |a|s| |e|x|t|r|e|m|e| |a|s| |w|r|i|t|i|n|g| |o|n|e| |c|h|a|r|a|c|t|e|r| |p|e|r| +0#0000000&@12
|
||||
| +0#0000e05&@3|l|i|n|e|!| |-| |t|h|e| |V|i|m| |s|y|n|t|a|x| |f|i|l|e| |f|o|r| |A|l|g|o|l| |6|8| |h|a|d| |d|e|l|i|b|e|r|a|t|e|l|y| +0#0000000&@13
|
||||
| +0#0000e05&@3|b|e@1|n| |d|e|f|i|n|e|d| |i|n| |a| |w|a|y| |r|e|s|t|r|i|c|t|i|n|g| |t|h|e| |h|i|g|h|l|i|g|h|t|e|d| |o|p|t|i|o|n|s|;| +0#0000000&@12
|
||||
| +0#0000e05&@3|s|p|a|c|i|n|g| |c|a|n| |u|s|u|a|l@1|y| |b|e| |i|n|s|e|r|t|e|d| |w|h|e|r|e| |"|n|a|t|u|r|a|l| |w|o|r|d|s|"| |w|o|u|l|d| +0#0000000&@11
|
||||
| +0#0000e05&@3|a|l@1|o|w| |a| |s|e|p|a|r|a|t|i|o|n| |(|s|a|y| |f|o|r| |'|i|n|t|w|i|d|t|h|'| |y|o|u| |m|a|y| |w|r|i|t|e|,| |e|.|g|.|,| +0#0000000&@11
|
||||
@57|1|9|,|4| @10|0|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_02.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_02.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0#0000e05#ffffff0@3|a|l@1|o|w| |a| |s|e|p|a|r|a|t|i|o|n| |(|s|a|y| |f|o|r| |'|i|n|t|w|i|d|t|h|'| |y|o|u| |m|a|y| |w|r|i|t|e|,| |e|.|g|.|,| +0#0000000&@11
|
||||
| +0#0000e05&@3|'|i|n|t| |w|i|d|t|h|'| |b|u|t| |n|o|t| |'|i|n|t| |w|i|d| |t|h|'|;| |t|h|e| |l|a|t@1|e|r| |w|o|u|l|d| |n|o|t| |g|e|t| +0#0000000&@12
|
||||
| +0#0000e05&@3|h|i|g|h|l|i|g|h|t|e|d|)|.| +0#0000000&@57
|
||||
| +0#0000e05&@3| +0#0000000&@70
|
||||
| +0#0000e05&@3|M|o|d|e|l|i|n|e|s| |a|r|e| |s|e|t| |t|o| |s|i|m|p|l|y| |i|n|s|p|e|c|t| |t|h|e| |c|o|r@1|e|c|t| |h|i|g|h|l|i|g|h|t|i|n|g| +0#0000000&@10
|
||||
| +0#0000e05&@3>i|n| |t|h|i|s| |f|i|l|e|.| +0#0000000&@57
|
||||
| +0#0000e05&@3| +0#0000000&@70
|
||||
| +0#0000e05&@3|J|a|n|i|s| |P|a|p|a|n|a|g|n|o|u|,| |2|0|2|6|-|0|4|-|2|3| +0#0000000&@42
|
||||
|#+0#0000e05&| +0#0000000&@73
|
||||
@75
|
||||
|#+0#0000e05&|:@12| +0#0000000&@60
|
||||
|p+0#0000e05&|r|e|l|u|d|e|.|c| +0#0000000&@65
|
||||
|:+0#0000e05&@12|#| +0#0000000&@60
|
||||
@75
|
||||
|#+0#0000e05&| |P|r|i|m|i|t|i|v|e| |A|6|8| |m|o|i|d|s|.| |#| +0#0000000&@50
|
||||
@2|V+0#00e0003&|O|I|D| +0#0000000&@41|V+0#00e0003&|O|I|D| +0#0000000&@22
|
||||
|#+0#0000e05&| |S|t|a|n|d|a|r|d| |p|r|e|c|i|s|i|o|n|.| |#| +0#0000000&@51
|
||||
@2|I+0#00e0003&|N|T| +0#0000000&@42|I+0#00e0003&|N|T| +0#0000000&@23
|
||||
@2|R+0#00e0003&|E|A|L| +0#0000000&@41|R+0#00e0003&|E|A|L| +0#0000000&@22
|
||||
@57|3|7|,|5| @10|1|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_03.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_03.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|R+0#00e0003&|E|A|L| +0#0000000&@41|R+0#00e0003&|E|A|L| +0#0000000&@22
|
||||
@2|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@38|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@19
|
||||
@2|C+0#00e0003&|O|M|P|L| +0#0000000&@40|C+0#00e0003&|O|M|P|L| +0#0000000&@21
|
||||
@2|B+0#00e0003&|I|T|S| +0#0000000&@41|B+0#00e0003&|I|T|S| +0#0000000&@22
|
||||
@2|B+0#00e0003&|Y|T|E|S| +0#0000000&@40|B+0#00e0003&|Y|T|E|S| +0#0000000&@21
|
||||
>#+0#0000e05&| |M|u|l|t|i|p|l|e| |p|r|e|c|i|s|i|o|n|.| |#| +0#0000000&@51
|
||||
@2|I+0#00e0003&|N|T| +0#0000000&@42|I+0#00e0003&|N|T| +0#0000000&@23
|
||||
@2|R+0#00e0003&|E|A|L| +0#0000000&@41|R+0#00e0003&|E|A|L| +0#0000000&@22
|
||||
@2|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@38|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@19
|
||||
@2|C+0#00e0003&|O|M|P|L| +0#0000000&@40|C+0#00e0003&|O|M|P|L| +0#0000000&@21
|
||||
@2|B+0#00e0003&|I|T|S| +0#0000000&@41|B+0#00e0003&|I|T|S| +0#0000000&@22
|
||||
@2|B+0#00e0003&|Y|T|E|S| +0#0000000&@40|B+0#00e0003&|Y|T|E|S| +0#0000000&@21
|
||||
@2|R+0#00e0003&|E|A|L| +0#0000000&@41|R+0#00e0003&|E|A|L| +0#0000000&@22
|
||||
@2|I+0#00e0003&|N|T| +0#0000000&@42|I+0#00e0003&|N|T| +0#0000000&@23
|
||||
@2|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@38|C+0#00e0003&|O|M|P|L|E|X| +0#0000000&@19
|
||||
@2|C+0#00e0003&|O|M|P|L| +0#0000000&@40|C+0#00e0003&|O|M|P|L| +0#0000000&@21
|
||||
@2|B+0#00e0003&|I|T|S| +0#0000000&@41|B+0#00e0003&|I|T|S| +0#0000000&@22
|
||||
|#+0#0000e05&| |O|t|h|e|r|.| |#| +0#0000000&@64
|
||||
@2|B+0#00e0003&|O@1|L| +0#0000000&@41|B+0#00e0003&|O@1|L| +0#0000000&@22
|
||||
@57|5@1|,|1| @10|2|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_04.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_04.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|B+0#00e0003&|O@1|L| +0#0000000&@41|B+0#00e0003&|O@1|L| +0#0000000&@22
|
||||
@2|C+0#00e0003&|H|A|R| +0#0000000&@41|C+0#00e0003&|H|A|R| +0#0000000&@22
|
||||
@2|S+0#00e0003&|T|R|I|N|G| +0#0000000&@39|S+0#00e0003&|T|R|I|N|G| +0#0000000&@20
|
||||
@2|F+0#00e0003&|I|L|E| +0#0000000&@41|F+0#00e0003&|I|L|E| +0#0000000&@22
|
||||
@2|C+0#00e0003&|H|A|N@1|E|L| +0#0000000&@38|C+0#00e0003&|H|A|N@1|E|L| +0#0000000&@19
|
||||
@2>P+0#00e0003&|I|P|E| +0#0000000&@41|P+0#00e0003&|I|P|E| +0#0000000&@22
|
||||
@2|F+0#00e0003&|O|R|M|A|T| +0#0000000&@39|F+0#00e0003&|O|R|M|A|T| +0#0000000&@20
|
||||
@2|S+0#00e0003&|E|M|A| +0#0000000&@41|S+0#00e0003&|E|M|A| +0#0000000&@22
|
||||
@2|S+0#00e0003&|O|U|N|D| +0#0000000&@40|S+0#00e0003&|O|U|N|D| +0#0000000&@21
|
||||
|#+0#0000e05&| |I|d|e|n|t|i|f|i|e|r|s|.| |#| +0#0000000&@58
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |p|i|;+0#0000000&| @1|q+0#00e0e07&|p|i|;+0#0000000&| @26|l+0#00e0e07&|o|n|g|l|o|n|g|p|i|;+0#0000000&| @1|q+0#00e0e07&|p|i| +0#0000000&@10
|
||||
|#+0#0000e05&| |#| +0#0000000&@71
|
||||
@2|b+0#00e0e07&|i|t|s| |l|e|n|g|t|h|s|;+0#0000000&| @32|b+0#00e0e07&|i|t|s|l|e|n|g|t|h|s| +0#0000000&@15
|
||||
@2|b+0#00e0e07&|i|t|s| |s|h|o|r|t|h|s|;+0#0000000&| @32|b+0#00e0e07&|i|t|s@1|h|o|r|t|h|s| +0#0000000&@15
|
||||
@2|b+0#00e0e07&|i|t|s| |w|i|d|t|h|;+0#0000000&| @34|b+0#00e0e07&|i|t|s|w|i|d|t|h| +0#0000000&@17
|
||||
@2|b+0#00e0e07&|y|t|e|s| |l|e|n|g|t|h|s|;+0#0000000&| @31|b+0#00e0e07&|y|t|e|s|l|e|n|g|t|h|s| +0#0000000&@14
|
||||
@2|b+0#00e0e07&|y|t|e|s| |s|h|o|r|t|h|s|;+0#0000000&| @31|b+0#00e0e07&|y|t|e|s@1|h|o|r|t|h|s| +0#0000000&@14
|
||||
@2|b+0#00e0e07&|y|t|e|s| |w|i|d|t|h|;+0#0000000&| @33|b+0#00e0e07&|y|t|e|s|w|i|d|t|h| +0#0000000&@16
|
||||
@2|c+0#00e0e07&|o|m|p|l| |l|e|n|g|t|h|s|;+0#0000000&| @31|c+0#00e0e07&|o|m|p|l@1|e|n|g|t|h|s| +0#0000000&@14
|
||||
@57|7|3|,|3| @10|3|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_05.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_05.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|c+0#00e0e07&|o|m|p|l| |l|e|n|g|t|h|s|;+0#0000000&| @31|c+0#00e0e07&|o|m|p|l@1|e|n|g|t|h|s| +0#0000000&@14
|
||||
@2|c+0#00e0e07&|o|m|p|l| |s|h|o|r|t|h|s|;+0#0000000&| @31|c+0#00e0e07&|o|m|p|l|s|h|o|r|t|h|s| +0#0000000&@14
|
||||
@2|e+0#00e0e07&|x|p| |w|i|d|t|h|;+0#0000000&| @35|e+0#00e0e07&|x|p|w|i|d|t|h| +0#0000000&@18
|
||||
@2|i+0#00e0e07&|n|f|i|n|i|t|y|;+0#0000000&| @36|i+0#00e0e07&|n|f|i|n|i|t|y| +0#0000000&@18
|
||||
@2|i+0#00e0e07&|n|f|;+0#0000000&| @41|i+0#00e0e07&|n|f| +0#0000000&@23
|
||||
@2>i+0#00e0e07&|n|t| |l|e|n|g|t|h|s|;+0#0000000&| @33|i+0#00e0e07&|n|t|l|e|n|g|t|h|s| +0#0000000&@16
|
||||
@2|i+0#00e0e07&|n|t| |s|h|o|r|t|h|s|;+0#0000000&| @33|i+0#00e0e07&|n|t|s|h|o|r|t|h|s| +0#0000000&@16
|
||||
@2|i+0#00e0e07&|n|t| |w|i|d|t|h|;+0#0000000&| @35|i+0#00e0e07&|n|t|w|i|d|t|h| +0#0000000&@18
|
||||
@2|l+0#00e0e07&|o|n|g| |b|i|t|s| |w|i|d|t|h|;+0#0000000&| @29|l+0#00e0e07&|o|n|g|b|i|t|s|w|i|d|t|h| +0#0000000&@13
|
||||
@2|l+0#00e0e07&|o|n|g| |b|y|t|e|s| |w|i|d|t|h|;+0#0000000&| @28|l+0#00e0e07&|o|n|g|b|y|t|e|s|w|i|d|t|h| +0#0000000&@12
|
||||
@2|l+0#00e0e07&|o|n|g| |e|x|p| |w|i|d|t|h|;+0#0000000&| @30|l+0#00e0e07&|o|n|g|e|x|p|w|i|d|t|h| +0#0000000&@14
|
||||
@2|l+0#00e0e07&|o|n|g| |i|n|t| |w|i|d|t|h|;+0#0000000&| @30|l+0#00e0e07&|o|n|g|i|n|t|w|i|d|t|h| +0#0000000&@14
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |e|x|p|w|i|d|t|h|;+0#0000000&| @26|l+0#00e0e07&|o|n|g|l|o|n|g|e|x|p|w|i|d|t|h| +0#0000000&@10
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |i|n|f|i|n|i|t|y|;+0#0000000&| @26|l+0#00e0e07&|o|n|g|l|o|n|g|i|n|f|i|n|i|t|y| +0#0000000&@10
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |i|n|f|;+0#0000000&| @31|l+0#00e0e07&|o|n|g|l|o|n|g|i|n|f| +0#0000000&@15
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |i|n|t|w|i|d|t|h|;+0#0000000&| @26|l+0#00e0e07&|o|n|g|l|o|n|g|i|n|t|w|i|d|t|h| +0#0000000&@10
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|a|x|i|n|t|;+0#0000000&| @28|l+0#00e0e07&|o|n|g|l|o|n|g|m|a|x|i|n|t| +0#0000000&@12
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|a|x|r|e|a|l|;+0#0000000&| @27|l+0#00e0e07&|o|n|g|l|o|n|g|m|a|x|r|e|a|l| +0#0000000&@11
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|i|n|i|n|f|;+0#0000000&| @28|l+0#00e0e07&|o|n|g|l|o|n|g|m|i|n|i|n|f| +0#0000000&@12
|
||||
@57|9|1|,|3| @10|4|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_06.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_06.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|i|n|i|n|f|;+0#0000000&| @28|l+0#00e0e07&|o|n|g|l|o|n|g|m|i|n|i|n|f| +0#0000000&@12
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|i|n|r|e|a|l|;+0#0000000&| @27|l+0#00e0e07&|o|n|g|l|o|n|g|m|i|n|r|e|a|l| +0#0000000&@11
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |m|i|n|u|s| |i|n|f|i|n|i|t|y|;+0#0000000&| @20|l+0#00e0e07&|o|n|g|l|o|n|g|m|i|n|u|s|i|n|f|i|n|i|t|y| +0#0000000&@5
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |r|e|a|l| |w|i|d|t|h|;+0#0000000&| @24|l+0#00e0e07&|o|n|g|l|o|n|g|r|e|a|l|w|i|d|t|h| +0#0000000&@9
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |s|m|a|l@1| |r|e|a|l|;+0#0000000&| @24|l+0#00e0e07&|o|n|g|l|o|n|g|s|m|a|l@1|r|e|a|l| +0#0000000&@9
|
||||
@2>l+0#00e0e07&|o|n|g| |r|e|a|l| |w|i|d|t|h|;+0#0000000&| @29|l+0#00e0e07&|o|n|g|r|e|a|l|w|i|d|t|h| +0#0000000&@13
|
||||
@2|m+0#00e0e07&|a|x| |a|b|s| |c|h|a|r|;+0#0000000&| @32|m+0#00e0e07&|a|x|a|b|s|c|h|a|r| +0#0000000&@16
|
||||
@2|m+0#00e0e07&|a|x| |b|i|t|s|;+0#0000000&| @36|m+0#00e0e07&|a|x|b|i|t|s| +0#0000000&@19
|
||||
@2|m+0#00e0e07&|a|x| |i|n|t|;+0#0000000&| @37|m+0#00e0e07&|a|x|i|n|t| +0#0000000&@20
|
||||
@2|m+0#00e0e07&|a|x| |r|e|a|l|;+0#0000000&| @36|m+0#00e0e07&|a|x|r|e|a|l| +0#0000000&@19
|
||||
@2|m+0#00e0e07&|i|n| |i|n|f|;+0#0000000&| @37|m+0#00e0e07&|i|n|i|n|f| +0#0000000&@20
|
||||
@2|m+0#00e0e07&|i|n| |r|e|a|l|;+0#0000000&| @36|m+0#00e0e07&|i|n|r|e|a|l| +0#0000000&@19
|
||||
@2|m+0#00e0e07&|i|n|u|s| |i|n|f|i|n|i|t|y|;+0#0000000&| @30|m+0#00e0e07&|i|n|u|s|i|n|f|i|n|i|t|y| +0#0000000&@13
|
||||
@2|m+0#00e0e07&|p|r|a|d|i|x|;+0#0000000&| @37|m+0#00e0e07&|p|r|a|d|i|x| +0#0000000&@19
|
||||
@2|n+0#00e0e07&|a|n|;+0#0000000&| @41|n+0#00e0e07&|a|n| +0#0000000&@23
|
||||
@2|p+0#00e0e07&|i|;+0#0000000&| @42|p+0#00e0e07&|i| +0#0000000&@24
|
||||
@2|r+0#00e0e07&|e|a|l| |l|e|n|g|t|h|s|;+0#0000000&| @32|r+0#00e0e07&|e|a|l@1|e|n|g|t|h|s| +0#0000000&@15
|
||||
@2|r+0#00e0e07&|e|a|l| |s|h|o|r|t|h|s|;+0#0000000&| @32|r+0#00e0e07&|e|a|l|s|h|o|r|t|h|s| +0#0000000&@15
|
||||
@2|r+0#00e0e07&|e|a|l| |w|i|d|t|h|;+0#0000000&| @34|r+0#00e0e07&|e|a|l|w|i|d|t|h| +0#0000000&@17
|
||||
@57|1|0|9|,|3| @9|4|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_07.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_07.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|r+0#00e0e07&|e|a|l| |w|i|d|t|h|;+0#0000000&| @34|r+0#00e0e07&|e|a|l|w|i|d|t|h| +0#0000000&@17
|
||||
@2|s+0#00e0e07&|m|a|l@1| |r|e|a|l|;+0#0000000&| @34|s+0#00e0e07&|m|a|l@1|r|e|a|l| +0#0000000&@17
|
||||
@2|c+0#00e0e07&|l|o|c|k|;+0#0000000&| @39|c+0#00e0e07&|l|o|c|k| +0#0000000&@21
|
||||
@2|c+0#00e0e07&|p|u| |t|i|m|e|;+0#0000000&| @36|c+0#00e0e07&|p|u|t|i|m|e| +0#0000000&@19
|
||||
@2|s+0#00e0e07&|e|c|o|n|d|s|;+0#0000000&| @37|s+0#00e0e07&|e|c|o|n|d|s| +0#0000000&@19
|
||||
@2>w+0#00e0e07&|a|l@1| |c|l|o|c|k|;+0#0000000&| @34|w+0#00e0e07&|a|l@1|c|l|o|c|k| +0#0000000&@17
|
||||
@2|w+0#00e0e07&|a|l@1| |s|e|c|o|n|d|s|;+0#0000000&| @32|w+0#00e0e07&|a|l@1|s|e|c|o|n|d|s| +0#0000000&@15
|
||||
@2|w+0#00e0e07&|a|l@1| |t|i|m|e|;+0#0000000&| @35|w+0#00e0e07&|a|l@1|t|i|m|e| +0#0000000&@18
|
||||
@2|b+0#00e0e07&|l|o|c|k|s|;+0#0000000&| @38|b+0#00e0e07&|l|o|c|k|s| +0#0000000&@20
|
||||
@2|c+0#00e0e07&|o|l@1|e|c|t|i|o|n|s|;+0#0000000&| @33|c+0#00e0e07&|o|l@1|e|c|t|i|o|n|s| +0#0000000&@15
|
||||
@2|c+0#00e0e07&|o|l@1|e|c|t| |s|e|c|o|n|d|s|;+0#0000000&| @29|c+0#00e0e07&|o|l@1|e|c|t|s|e|c|o|n|d|s| +0#0000000&@12
|
||||
@2|g+0#00e0e07&|a|r|b|a|g|e|;+0#0000000&| @37|g+0#00e0e07&|a|r|b|a|g|e| +0#0000000&@19
|
||||
@2|g+0#00e0e07&|a|r|b|a|g|e| |c|o|l@1|e|c|t|i|o|n|s|;+0#0000000&| @25|g+0#00e0e07&|a|r|b|a|g|e|c|o|l@1|e|c|t|i|o|n|s| +0#0000000&@8
|
||||
@2|g+0#00e0e07&|a|r|b|a|g|e| |f|r|e@1|d|;+0#0000000&| @31|g+0#00e0e07&|a|r|b|a|g|e|f|r|e@1|d| +0#0000000&@14
|
||||
@2|g+0#00e0e07&|a|r|b|a|g|e| |r|e|f|u|s|e|d|;+0#0000000&| @29|g+0#00e0e07&|a|r|b|a|g|e|r|e|f|u|s|e|d| +0#0000000&@12
|
||||
@2|g+0#00e0e07&|a|r|b|a|g|e| |s|e|c|o|n|d|s|;+0#0000000&| @29|g+0#00e0e07&|a|r|b|a|g|e|s|e|c|o|n|d|s| +0#0000000&@12
|
||||
@2|o+0#00e0e07&|n| |g|c| |e|v|e|n|t|;+0#0000000&| @33|o+0#00e0e07&|n|g|c|e|v|e|n|t| +0#0000000&@17
|
||||
@2|s+0#00e0e07&|w|e@1|p|s|;+0#0000000&| @38|s+0#00e0e07&|w|e@1|p|s| +0#0000000&@20
|
||||
@2|s+0#00e0e07&|w|e@1|p|s| |r|e|f|u|s|e|d|;+0#0000000&| @30|s+0#00e0e07&|w|e@1|p|s|r|e|f|u|s|e|d| +0#0000000&@13
|
||||
@57|1|2|7|,|3| @9|5|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_08.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_08.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|s+0#00e0e07&|w|e@1|p|s| |r|e|f|u|s|e|d|;+0#0000000&| @30|s+0#00e0e07&|w|e@1|p|s|r|e|f|u|s|e|d| +0#0000000&@13
|
||||
@2|s+0#00e0e07&|t|a|c|k| |p|o|i|n|t|e|r|;+0#0000000&| @31|s+0#00e0e07&|t|a|c|k|p|o|i|n|t|e|r| +0#0000000&@14
|
||||
@2|s+0#00e0e07&|y|s|t|e|m| |s|t|a|c|k| |p|o|i|n|t|e|r|;+0#0000000&| @24|s+0#00e0e07&|y|s|t|e|m|s|t|a|c|k|p|o|i|n|t|e|r| +0#0000000&@8
|
||||
@2|s+0#00e0e07&|y|s|t|e|m| |s|t|a|c|k| |s|i|z|e|;+0#0000000&| @27|s+0#00e0e07&|y|s|t|e|m|s|t|a|c|k|s|i|z|e| +0#0000000&@11
|
||||
@2|a+0#00e0e07&|c|t|u|a|l| |s|t|a|c|k| |s|i|z|e|;+0#0000000&| @27|a+0#00e0e07&|c|t|u|a|l|s|t|a|c|k|s|i|z|e| +0#0000000&@11
|
||||
@2>h+0#00e0e07&|e|a|p| |p|o|i|n|t|e|r|;+0#0000000&| @32|h+0#00e0e07&|e|a|p@1|o|i|n|t|e|r| +0#0000000&@15
|
||||
@2|s+0#00e0e07&|y|s|t|e|m| |h|e|a|p| |p|o|i|n|t|e|r|;+0#0000000&| @25|s+0#00e0e07&|y|s|t|e|m|h|e|a|p@1|o|i|n|t|e|r| +0#0000000&@9
|
||||
@2|g+0#00e0e07&|c| |h|e|a|p|;+0#0000000&| @37|g+0#00e0e07&|c|h|e|a|p| +0#0000000&@20
|
||||
@2|s+0#00e0e07&|w|e@1|p| |h|e|a|p|;+0#0000000&| @34|s+0#00e0e07&|w|e@1|p|h|e|a|p| +0#0000000&@17
|
||||
@2|p+0#00e0e07&|r|e@1|m|p|t|i|v|e| |g|c|;+0#0000000&| @31|p+0#00e0e07&|r|e@1|m|p|t|i|v|e|g|c| +0#0000000&@14
|
||||
@2|p+0#00e0e07&|r|e@1|m|p|t|i|v|e| |s|w|e@1|p|;+0#0000000&| @28|p+0#00e0e07&|r|e@1|m|p|t|i|v|e|s|w|e@1|p| +0#0000000&@11
|
||||
@2|p+0#00e0e07&|r|e@1|m|p|t|i|v|e| |s|w|e@1|p|h|e|a|p|;+0#0000000&| @24|p+0#00e0e07&|r|e@1|m|p|t|i|v|e|s|w|e@1|p|h|e|a|p| +0#0000000&@7
|
||||
@2|b+0#00e0e07&|a|c|k|t|r|a|c|e|;+0#0000000&| @35|b+0#00e0e07&|a|c|k|t|r|a|c|e| +0#0000000&@17
|
||||
@2|b+0#00e0e07&|r|e|a|k|;+0#0000000&| @39|b+0#00e0e07&|r|e|a|k| +0#0000000&@21
|
||||
@2|d+0#00e0e07&|e|b|u|g|;+0#0000000&| @39|d+0#00e0e07&|e|b|u|g| +0#0000000&@21
|
||||
@2|m+0#00e0e07&|o|n|i|t|o|r|;+0#0000000&| @37|m+0#00e0e07&|o|n|i|t|o|r| +0#0000000&@19
|
||||
@2|a+0#00e0e07&|b|e|n|d|;+0#0000000&| @39|a+0#00e0e07&|b|e|n|d| +0#0000000&@21
|
||||
@2|e+0#00e0e07&|v|a|l|u|a|t|e|;+0#0000000&| @36|e+0#00e0e07&|v|a|l|u|a|t|e| +0#0000000&@18
|
||||
@2|s+0#00e0e07&|y|s|t|e|m|;+0#0000000&| @38|s+0#00e0e07&|y|s|t|e|m| +0#0000000&@20
|
||||
@57|1|4|5|,|3| @9|6|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_09.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_09.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|s+0#00e0e07&|y|s|t|e|m|;+0#0000000&| @38|s+0#00e0e07&|y|s|t|e|m| +0#0000000&@20
|
||||
@2|s+0#00e0e07&|l|e@1|p|;+0#0000000&| @39|s+0#00e0e07&|l|e@1|p| +0#0000000&@21
|
||||
|#+0#0000e05&| |M|a|c|h|i|n|e| |e|n|v|i|r|o|n| |p|a|r|a|m|e|t|e|r|s|.| |#| +0#0000000&@43
|
||||
@2|i+0#00e0e07&|3|2|m|a|c|h|;+0#0000000&| @37|i+0#00e0e07&|3|2|m|a|c|h| +0#0000000&@19
|
||||
@2|r+0#00e0e07&|6|4|m|a|c|h|;+0#0000000&| @37|r+0#00e0e07&|6|4|m|a|c|h| +0#0000000&@19
|
||||
@2>i+0#00e0e07&|6|4|m|a|c|h|;+0#0000000&| @37|i+0#00e0e07&|6|4|m|a|c|h| +0#0000000&@19
|
||||
@2|r+0#00e0e07&|1|2|8|m|a|c|h|;+0#0000000&| @36|r+0#00e0e07&|1|2|8|m|a|c|h| +0#0000000&@18
|
||||
|#+0#0000e05&| |B|I|T|S| |p|r|o|c|e|d|u|r|e|s|.| |#| +0#0000000&@54
|
||||
@2|b+0#00e0e07&|i|t|s| |p|a|c|k|;+0#0000000&| @35|b+0#00e0e07&|i|t|s|p|a|c|k| +0#0000000&@18
|
||||
|#+0#0000e05&| |R|N|G| |p|r|o|c|e|d|u|r|e|s|.| |#| +0#0000000&@55
|
||||
@2|f+0#00e0e07&|i|r|s|t| |r|a|n|d|o|m|;+0#0000000&| @32|f+0#00e0e07&|i|r|s|t|r|a|n|d|o|m| +0#0000000&@15
|
||||
@2|n+0#00e0e07&|e|x|t| |r|a|n|d|o|m|;+0#0000000&| @33|n+0#00e0e07&|e|x|t|r|a|n|d|o|m| +0#0000000&@16
|
||||
@2|r+0#00e0e07&|a|n|d|o|m|;+0#0000000&| @38|r+0#00e0e07&|a|n|d|o|m| +0#0000000&@20
|
||||
@2|r+0#00e0e07&|n|d|;+0#0000000&| @41|r+0#00e0e07&|n|d| +0#0000000&@23
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |n|e|x|t|r|a|n|d|o|m|;+0#0000000&| @24|l+0#00e0e07&|o|n|g|l|o|n|g|n|e|x|t|r|a|n|d|o|m| +0#0000000&@8
|
||||
@2|l+0#00e0e07&|o|n|g| |l|o|n|g| |r|a|n|d|o|m|;+0#0000000&| @28|l+0#00e0e07&|o|n|g|l|o|n|g|r|a|n|d|o|m| +0#0000000&@12
|
||||
|#+0#0000e05&| |P|r|i|o|r|i|t|i|e|s|.| |#| +0#0000000&@59
|
||||
|#+0#0000e05&| |I|N|T| |o|p|s|.| |#| +0#0000000&@62
|
||||
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
|
||||
@57|1|6|3|,|3| @9|7|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_10.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_10.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
|
||||
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
|
||||
@2|A+0#af5f00255&|B|S| +0#0000000&@42|A+0#af5f00255&|B|S| +0#0000000&@23
|
||||
@2|S+0#af5f00255&|I|G|N| +0#0000000&@41|S+0#af5f00255&|I|G|N| +0#0000000&@22
|
||||
@2|O+0#af5f00255&|D@1| +0#0000000&@42|O+0#af5f00255&|D@1| +0#0000000&@23
|
||||
@2>=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
|
||||
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
|
||||
@2|~+0#af5f00255&|=| +0#0000000&@43|~+0#af5f00255&|=| +0#0000000&@24
|
||||
@2|^+0#af5f00255&|=| +0#0000000&@43|^+0#af5f00255&|=| +0#0000000&@24
|
||||
@2|<+0#af5f00255&| +0#0000000&@44|<+0#af5f00255&| +0#0000000&@25
|
||||
@2|<+0#af5f00255&|=| +0#0000000&@43|<+0#af5f00255&|=| +0#0000000&@24
|
||||
@2|>+0#af5f00255&| +0#0000000&@44|>+0#af5f00255&| +0#0000000&@25
|
||||
@2|>+0#af5f00255&|=| +0#0000000&@43|>+0#af5f00255&|=| +0#0000000&@24
|
||||
@2|E+0#af5f00255&|Q| +0#0000000&@43|E+0#af5f00255&|Q| +0#0000000&@24
|
||||
@2|N+0#af5f00255&|E| +0#0000000&@43|N+0#af5f00255&|E| +0#0000000&@24
|
||||
@2|L+0#af5f00255&|T| +0#0000000&@43|L+0#af5f00255&|T| +0#0000000&@24
|
||||
@2|L+0#af5f00255&|E| +0#0000000&@43|L+0#af5f00255&|E| +0#0000000&@24
|
||||
@2|G+0#af5f00255&|T| +0#0000000&@43|G+0#af5f00255&|T| +0#0000000&@24
|
||||
@2|G+0#af5f00255&|E| +0#0000000&@43|G+0#af5f00255&|E| +0#0000000&@24
|
||||
@57|1|8|1|,|3| @9|8|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_100.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_100.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|s+0#00e0e07&|y|n|c|h|r|o|t|r|o|n| |2|;+0#0000000&| @31|s+0#00e0e07&|y|n|c|h|r|o|t|r|o|n|2| +0#0000000&@14
|
||||
@2|t+0#00e0e07&|a|y|l|o|r| |c|o|e|f@1|;+0#0000000&| @32|t+0#00e0e07&|a|y|l|o|r|c|o|e|f@1| +0#0000000&@15
|
||||
@2|t+0#00e0e07&|r|a|n|s|p|o|r|t| |2|;+0#0000000&| @33|t+0#00e0e07&|r|a|n|s|p|o|r|t|2| +0#0000000&@16
|
||||
@2|t+0#00e0e07&|r|a|n|s|p|o|r|t| |3|;+0#0000000&| @33|t+0#00e0e07&|r|a|n|s|p|o|r|t|3| +0#0000000&@16
|
||||
@2|t+0#00e0e07&|r|a|n|s|p|o|r|t| |4|;+0#0000000&| @33|t+0#00e0e07&|r|a|n|s|p|o|r|t|4| +0#0000000&@16
|
||||
@2>t+0#00e0e07&|r|a|n|s|p|o|r|t| |5|;+0#0000000&| @33|t+0#00e0e07&|r|a|n|s|p|o|r|t|5| +0#0000000&@16
|
||||
@2|z+0#00e0e07&|e|t|a| |i|n|t|;+0#0000000&| @36|z+0#00e0e07&|e|t|a|i|n|t| +0#0000000&@19
|
||||
@2|z+0#00e0e07&|e|t|a| |m|1| |i|n|t|;+0#0000000&| @33|z+0#00e0e07&|e|t|a|m|1|i|n|t| +0#0000000&@17
|
||||
@2|z+0#00e0e07&|e|t|a| |m|1|;+0#0000000&| @37|z+0#00e0e07&|e|t|a|m|1| +0#0000000&@20
|
||||
@2|z+0#00e0e07&|e|t|a|;+0#0000000&| @40|z+0#00e0e07&|e|t|a| +0#0000000&@22
|
||||
|#+0#0000e05&| |V|e|c|t|o|r| |a|n|d| |m|a|t|r|i|x| |p|r|e|t@1|y| |p|r|i|n|t|.| |#| +0#0000000&@39
|
||||
@2|p+0#00e0e07&|r|i|n|t| |v|e|c|t|o|r|;+0#0000000&| @32|p+0#00e0e07&|r|i|n|t|v|e|c|t|o|r| +0#0000000&@15
|
||||
@2|p+0#00e0e07&|r|i|n|t| |m|a|t|r|i|x|;+0#0000000&| @32|p+0#00e0e07&|r|i|n|t|m|a|t|r|i|x| +0#0000000&@15
|
||||
|#+0#0000e05&| |V|e|c|t|o|r| |a|n|d| |m|a|t|r|i|x| |m|o|n|a|d|i|c|.| |#| +0#0000000&@44
|
||||
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
|
||||
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
|
||||
@2|C+0#af5f00255&|V| +0#0000000&@43|C+0#af5f00255&|V| +0#0000000&@24
|
||||
@2|R+0#af5f00255&|V| +0#0000000&@43|R+0#af5f00255&|V| +0#0000000&@24
|
||||
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
|
||||
@57|1|7|6@1|,|3| @7|8|3|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_101.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_101.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
|
||||
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
|
||||
@2|T+0#af5f00255&| +0#0000000&@44|T+0#af5f00255&| +0#0000000&@25
|
||||
@2|I+0#af5f00255&|N|V| +0#0000000&@42|I+0#af5f00255&|N|V| +0#0000000&@23
|
||||
@2|P+0#af5f00255&|I|N|V| +0#0000000&@41|P+0#af5f00255&|I|N|V| +0#0000000&@22
|
||||
@2>M+0#af5f00255&|E|A|N| +0#0000000&@41|M+0#af5f00255&|E|A|N| +0#0000000&@22
|
||||
@2|D+0#af5f00255&|E|T| +0#0000000&@42|D+0#af5f00255&|E|T| +0#0000000&@23
|
||||
@2|T+0#af5f00255&|R|A|C|E| +0#0000000&@40|T+0#af5f00255&|R|A|C|E| +0#0000000&@21
|
||||
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
|
||||
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
|
||||
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
|
||||
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
|
||||
@2|T+0#af5f00255&| +0#0000000&@44|T+0#af5f00255&| +0#0000000&@25
|
||||
@2|I+0#af5f00255&|N|V| +0#0000000&@42|I+0#af5f00255&|N|V| +0#0000000&@23
|
||||
@2|D+0#af5f00255&|E|T| +0#0000000&@42|D+0#af5f00255&|E|T| +0#0000000&@23
|
||||
@2|T+0#af5f00255&|R|A|C|E| +0#0000000&@40|T+0#af5f00255&|R|A|C|E| +0#0000000&@21
|
||||
|#+0#0000e05&| |V|e|c|t|o|r| |a|n|d| |m|a|t|r|i|x| |d|y|a|d|i|c|.| |#| +0#0000000&@45
|
||||
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
|
||||
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
|
||||
@57|1|7|8|4|,|3| @7|8|4|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_102.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_102.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
|
||||
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
|
||||
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
|
||||
@2|++0#af5f00255&|:|=| +0#0000000&@42|++0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@39|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@20
|
||||
@2>-+0#af5f00255&|:|=| +0#0000000&@42|-+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
|
||||
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
|
||||
@2|/+0#af5f00255&|-| +0#0000000&@43|/+0#af5f00255&|-| +0#0000000&@24
|
||||
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
|
||||
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
|
||||
@2|B+0#af5f00255&|E|F|O|R|E| +0#0000000&@39|B+0#af5f00255&|E|F|O|R|E| +0#0000000&@20
|
||||
@2|A+0#af5f00255&|B|O|V|E| +0#0000000&@40|A+0#af5f00255&|B|O|V|E| +0#0000000&@21
|
||||
@2|++0#af5f00255&|:|=| +0#0000000&@42|++0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@39|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@20
|
||||
@2|-+0#af5f00255&|:|=| +0#0000000&@42|-+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
|
||||
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
|
||||
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
|
||||
@57|1|8|0|2|,|3| @7|8|5|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_103.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_103.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
|
||||
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
|
||||
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
|
||||
@2|++0#af5f00255&|:|=| +0#0000000&@42|++0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@39|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@20
|
||||
@2>-+0#af5f00255&|:|=| +0#0000000&@42|-+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
|
||||
@2|=+0#af5f00255&| +0#0000000&@44|=+0#af5f00255&| +0#0000000&@25
|
||||
@2|/+0#af5f00255&|=| +0#0000000&@43|/+0#af5f00255&|=| +0#0000000&@24
|
||||
@2|++0#af5f00255&| +0#0000000&@44|++0#af5f00255&| +0#0000000&@25
|
||||
@2|-+0#af5f00255&| +0#0000000&@44|-+0#af5f00255&| +0#0000000&@25
|
||||
@2|++0#af5f00255&|:|=| +0#0000000&@42|++0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@39|P+0#af5f00255&|L|U|S|A|B| +0#0000000&@20
|
||||
@2|-+0#af5f00255&|:|=| +0#0000000&@42|-+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@38|M+0#af5f00255&|I|N|U|S|A|B| +0#0000000&@19
|
||||
|#+0#0000e05&| |V|e|c|t|o|r| |a|n|d| |m|a|t|r|i|x| |s|c|a|l|i|n|g|.| |#| +0#0000000&@44
|
||||
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
|
||||
@2|/+0#af5f00255&| +0#0000000&@44|/+0#af5f00255&| +0#0000000&@25
|
||||
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
|
||||
@57|1|8|2|0|,|3| @7|8|6|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_104.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_104.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
|
||||
@2|/+0#af5f00255&| +0#0000000&@44|/+0#af5f00255&| +0#0000000&@25
|
||||
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
|
||||
@2|/+0#af5f00255&| +0#0000000&@44|/+0#af5f00255&| +0#0000000&@25
|
||||
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
|
||||
@2>/+0#af5f00255&| +0#0000000&@44|/+0#af5f00255&| +0#0000000&@25
|
||||
@2|*+0#af5f00255&|:|=| +0#0000000&@42|*+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|/+0#af5f00255&|:|=| +0#0000000&@42|/+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|*+0#af5f00255&|:|=| +0#0000000&@42|*+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|/+0#af5f00255&|:|=| +0#0000000&@42|/+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|*+0#af5f00255&|:|=| +0#0000000&@42|*+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|/+0#af5f00255&|:|=| +0#0000000&@42|/+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|*+0#af5f00255&|:|=| +0#0000000&@42|*+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|/+0#af5f00255&|:|=| +0#0000000&@42|/+0#af5f00255&|:|=| +0#0000000&@23
|
||||
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
|
||||
|#+0#0000e05&| |M|a|t|r|i|x| |t|i|m|e|s| |v|e|c|t|o|r| |o|r| |m|a|t|r|i|x|.| |#| +0#0000000&@40
|
||||
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
|
||||
|#+0#0000e05&| |V|e|c|t|o|r| |a|n|d| |m|a|t|r|i|x| |m|i|s|c|e|l@1|a|n|e|o|u|s|.| |#| +0#0000000&@38
|
||||
@2|v+0#00e0e07&|e|c|t|o|r| |e|c|h|o|;+0#0000000&| @33|v+0#00e0e07&|e|c|t|o|r|e|c|h|o| +0#0000000&@16
|
||||
@57|1|8|3|8|,|3| @7|8|7|%|
|
||||
20
runtime/syntax/testdir/dumps/algol68_all_preludes_105.dump
generated
Normal file
20
runtime/syntax/testdir/dumps/algol68_all_preludes_105.dump
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
| +0&#ffffff0@1|v+0#00e0e07&|e|c|t|o|r| |e|c|h|o|;+0#0000000&| @33|v+0#00e0e07&|e|c|t|o|r|e|c|h|o| +0#0000000&@16
|
||||
@2|m+0#00e0e07&|a|t|r|i|x| |e|c|h|o|;+0#0000000&| @33|m+0#00e0e07&|a|t|r|i|x|e|c|h|o| +0#0000000&@16
|
||||
@2|c+0#00e0e07&|o|m|p|l| |v|e|c|t|o|r| |e|c|h|o|;+0#0000000&| @27|c+0#00e0e07&|o|m|p|l|v|e|c|t|o|r|e|c|h|o| +0#0000000&@11
|
||||
@2|c+0#00e0e07&|o|m|p|l| |m|a|t|r|i|x| |e|c|h|o|;+0#0000000&| @27|c+0#00e0e07&|o|m|p|l|m|a|t|r|i|x|e|c|h|o| +0#0000000&@11
|
||||
@2|*+0#af5f00255&| +0#0000000&@44|*+0#af5f00255&| +0#0000000&@25
|
||||
@2>N+0#af5f00255&|O|R|M| +0#0000000&@41|N+0#af5f00255&|O|R|M| +0#0000000&@22
|
||||
@2|D+0#af5f00255&|Y|A|D| +0#0000000&@41|D+0#af5f00255&|Y|A|D| +0#0000000&@22
|
||||
|#+0#0000e05&| |P|r|i|n|c|i|p|l|e| |C|o|m|p|o|n|e|n|t| |A|n|a|l|y|s|i|s|.| |#| +0#0000000&@41
|
||||
@2|p+0#00e0e07&|c|a|c|v|;+0#0000000&| @39|p+0#00e0e07&|c|a|c|v| +0#0000000&@21
|
||||
@2|p+0#00e0e07&|c|a|s|v|d|;+0#0000000&| @38|p+0#00e0e07&|c|a|s|v|d| +0#0000000&@20
|
||||
|#+0#0000e05&| |T|o|t|a|l| |L|e|a|s|t| |S|q|u|a|r|e| |r|e|g|r|e|s@1|i|o|n|.| |#| +0#0000000&@40
|
||||
@2|o+0#00e0e07&|l|s|;+0#0000000&| @41|o+0#00e0e07&|l|s| +0#0000000&@23
|
||||
@2|t+0#00e0e07&|l|s|;+0#0000000&| @41|t+0#00e0e07&|l|s| +0#0000000&@23
|
||||
|#+0#0000e05&| |P|a|r|t|i|a|l| |L|e|a|s|t| |S|q|u|a|r|e|s| |r|e|g|r|e|s@1|i|o|n|.| |#| +0#0000000&@37
|
||||
@2|p+0#00e0e07&|c|r|;+0#0000000&| @41|p+0#00e0e07&|c|r| +0#0000000&@23
|
||||
@2|p+0#00e0e07&|l|s|1|;+0#0000000&| @40|p+0#00e0e07&|l|s|1| +0#0000000&@22
|
||||
@2|p+0#00e0e07&|l|s|2|;+0#0000000&| @40|p+0#00e0e07&|l|s|2| +0#0000000&@22
|
||||
|#+0#0000e05&| |R|o|u|t|i|n|e| |l|e|f|t| |c|o|l|u|m|n|s|,| |a| |G|S|L| |a|l|t|e|r|n|a|t|i|v|e| |t|o| |t|r|i|m@1|i|n|g| |c|o|l|u|m|n|s|.| |#| +0#0000000&@10
|
||||
@2|l+0#00e0e07&|e|f|t| |c|o|l|u|m|n|s|;+0#0000000&| @32|l+0#00e0e07&|e|f|t|c|o|l|u|m|n|s| +0#0000000&@15
|
||||
@57|1|8|5|6|,|3| @7|8@1|%|
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user