mirror of
https://github.com/vim/vim
synced 2025-07-16 17:22:00 +00:00
Compare commits
285 Commits
Author | SHA1 | Date | |
---|---|---|---|
ed3c7e6339 | |||
f9a343f8bd | |||
b61ef01cce | |||
45df2a01a7 | |||
9898107f54 | |||
b5ed266037 | |||
066b12e36c | |||
68e30449a2 | |||
bd7f7c123d | |||
461f21242a | |||
ae616494d7 | |||
0aac67a431 | |||
b13ab99908 | |||
622b3568fa | |||
6ca6ca4889 | |||
6d585f4c5c | |||
01865ade85 | |||
ace6132aa8 | |||
4fc224ca1c | |||
2547aa930b | |||
d3bb6a82a5 | |||
cb4f69c2fd | |||
a5d0423fa1 | |||
d66cdcd43a | |||
7d40b8a532 | |||
37394ff752 | |||
2d6b20d6a9 | |||
2afc3b4f77 | |||
24aa48b7a2 | |||
925e9fd633 | |||
c841afff6a | |||
13e12b8a3c | |||
40f4f7a48c | |||
43e969d3f9 | |||
b8070e3173 | |||
bfba8651a5 | |||
637cd7d1c9 | |||
6c4bfe4b31 | |||
2d06bfde29 | |||
8930caaa1a | |||
8d5f6af5e5 | |||
dd1a9af00f | |||
7a87b4e3fe | |||
4cc45a3673 | |||
5a67c37a55 | |||
63be3d4ba0 | |||
c69950ac17 | |||
4cdb13ce81 | |||
0f60e80f9b | |||
2f1980f7b7 | |||
054f14bbe5 | |||
e7e4838f25 | |||
2690b5aed8 | |||
bc6fcbe4ce | |||
7d5e744162 | |||
420952175a | |||
c71f36a889 | |||
f868ba8903 | |||
c7db57788b | |||
7591116acf | |||
f56c95fdad | |||
08815a1d03 | |||
b31be3f909 | |||
7892b953e0 | |||
d43906d2e5 | |||
470adb827f | |||
b146e01a7e | |||
54c3fcd852 | |||
682d0a1546 | |||
2f8ce0ae8a | |||
747f11ad6e | |||
956501594e | |||
bf9d8c3765 | |||
b209750b5e | |||
f398238a37 | |||
6802cce407 | |||
75783bd84e | |||
65b9545f44 | |||
6434fc574d | |||
10e1d01aaf | |||
de2396fc87 | |||
d032f34a51 | |||
447bfba24b | |||
e859312e74 | |||
2764d06ab7 | |||
066e7da3cd | |||
f0b9f43c31 | |||
b68ced5f07 | |||
945c857844 | |||
68d130c618 | |||
6e36b1c18e | |||
203ec7760d | |||
f5be8cdb77 | |||
98af99f2d7 | |||
ee1b93169d | |||
a90afb9a59 | |||
e30f64b4b5 | |||
657a826c07 | |||
02f9e6a60f | |||
452143c6bf | |||
5966ea105e | |||
3d48e25dcb | |||
1e1f612bd4 | |||
b6e4e4c6f7 | |||
e3f915d12c | |||
ceb56ddbaf | |||
297bec0731 | |||
5551b131da | |||
8455c5ed31 | |||
1f22cc5cdb | |||
21c16f868d | |||
49fe0d6b28 | |||
7ce85be63b | |||
1bce831e13 | |||
8c34ea54ad | |||
5d2eb0fff0 | |||
3ac9c4701a | |||
08f7a41b0a | |||
f1a2368d81 | |||
bfd65589d9 | |||
7177da9dd4 | |||
a4b442614c | |||
c212dd0a34 | |||
83e7450053 | |||
4d57ba0202 | |||
a4dc6f92bb | |||
35910f2d54 | |||
b898a029b0 | |||
985116ae0b | |||
eb6880b6eb | |||
8af81d656a | |||
6d3a7213f5 | |||
c85156bb89 | |||
13c046316b | |||
ecdd14a427 | |||
2b6ef856fb | |||
9b7bf9e98f | |||
914e7eaa67 | |||
21e5bdd271 | |||
1e624c912d | |||
f65927fc8d | |||
b074e8b8d4 | |||
18aa13d13b | |||
543e6f3467 | |||
7ff78465f7 | |||
a7eedf317a | |||
11a5b19a8c | |||
4004315292 | |||
08fc48492a | |||
58bb61cf5e | |||
ef85a9b2d9 | |||
97d2f34c87 | |||
92053ce59e | |||
389df259c4 | |||
ae97b94176 | |||
e4358906fd | |||
96916ac67a | |||
6e13530ca0 | |||
efaaaa683b | |||
8e2730a315 | |||
6110e79a58 | |||
6b7a0a8c20 | |||
b335b29e1c | |||
0a47e0970a | |||
002262f4de | |||
7a4b8980ea | |||
c620c055ce | |||
bed36b939a | |||
fe465a01cf | |||
0ab55d6201 | |||
bb790dcc46 | |||
007f9d6ed5 | |||
cbb6bdcd89 | |||
27321dbeed | |||
ab58946384 | |||
0ad3e894d7 | |||
67627355ac | |||
ad7c249327 | |||
252e88a785 | |||
0d94ad6958 | |||
b3c019cbc3 | |||
8f510afcd6 | |||
a66ba01a5f | |||
47e7d70b58 | |||
846178a72c | |||
50788ef349 | |||
435d89789e | |||
fce82b3aa7 | |||
9978d473e3 | |||
05a5551a86 | |||
788123c00c | |||
e9f262bdff | |||
3f40ce78f5 | |||
fb9d5c51c8 | |||
eeb27bfe28 | |||
962d721319 | |||
1c991144c5 | |||
effb0cd75d | |||
442af2f89e | |||
743d062020 | |||
92fdd1e75d | |||
5289783e0b | |||
810af5ea46 | |||
a9a8e5f0dc | |||
d2ef6b320b | |||
c19fd917be | |||
1112c0febb | |||
a0d072ef82 | |||
5f195938d4 | |||
9a78e6df17 | |||
e6b5324e3a | |||
086eb18ba1 | |||
d58d4f90ae | |||
ef8c617b9c | |||
8e6cbb7232 | |||
e49b8e8d75 | |||
11b6600c88 | |||
e707c882b2 | |||
9004949221 | |||
be7a50c22f | |||
47e880d6c1 | |||
37c8371195 | |||
006ad48b8a | |||
e46a440505 | |||
de8f0f47f6 | |||
f151ad1c70 | |||
6b949615ed | |||
a53618dd1d | |||
de19b745ee | |||
cf070112ca | |||
d034220c54 | |||
9b5384b97e | |||
927b7dd0fe | |||
6378b21d6d | |||
566cc8c72b | |||
cf30643ae6 | |||
6d90c61c5a | |||
7d2ac92ebc | |||
fda20c4cc5 | |||
91639195ef | |||
a1f9f8666e | |||
b7a78f7a67 | |||
d5053d015a | |||
06cf97e714 | |||
75e15670b8 | |||
faf8626b79 | |||
7e8967fdcd | |||
9215f01218 | |||
7a4981b936 | |||
a0a0c4147f | |||
e40fbc2ca9 | |||
ab19d495fd | |||
e6e031739c | |||
8ea9390b78 | |||
0b1cd52ff6 | |||
bd84617d1a | |||
7147820cb9 | |||
e6536aa766 | |||
be7ee48876 | |||
793648fb56 | |||
5d3c9f8c2a | |||
5f36d5fbb8 | |||
cf8441704d | |||
fc838d6cb0 | |||
1e4c7d0ed2 | |||
211dd3fd82 | |||
73b4465ba7 | |||
801ab06934 | |||
832adf9bb8 | |||
7acde51832 | |||
ca275a05d8 | |||
65a8ed37f7 | |||
b171fb1790 | |||
9d40c63c7d | |||
5409f5d8c9 | |||
b7e2483655 | |||
67fbdfefd2 | |||
ef6d86c173 | |||
4014e2ceb0 | |||
df069eec3b | |||
7eaafe65ee | |||
bdd2c290d3 | |||
25fd267287 | |||
b2b218d89b | |||
acd4c5e914 |
208
.github/workflows/ci-windows.yaml
vendored
Normal file
208
.github/workflows/ci-windows.yaml
vendored
Normal file
@ -0,0 +1,208 @@
|
||||
name: CI with MSVC and MinGW-w64
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
VCVARSALL: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat
|
||||
|
||||
# Interfaces
|
||||
# Lua
|
||||
LUA_VER: 54
|
||||
LUA_VER_DOT: '5.4'
|
||||
LUA_RELEASE: 5.4.0
|
||||
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
|
||||
LUA_DIR: D:\Lua
|
||||
# Python 2
|
||||
PYTHON_VER: 27
|
||||
PYTHON_VER_DOT: '2.7'
|
||||
# Python 3
|
||||
PYTHON3_VER: 38
|
||||
PYTHON3_VER_DOT: '3.8'
|
||||
|
||||
# Other dependencies
|
||||
# winpty
|
||||
WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
|
||||
|
||||
# Escape sequences
|
||||
COL_RED: "\x1b[31m"
|
||||
COL_GREEN: "\x1b[32m"
|
||||
COL_YELLOW: "\x1b[33m"
|
||||
COL_RESET: "\x1b[m"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
toolchain: [msvc, mingw]
|
||||
arch: [x64, x86]
|
||||
features: [HUGE, NORMAL]
|
||||
include:
|
||||
- arch: x64
|
||||
vcarch: amd64
|
||||
warch: x64
|
||||
bits: 64
|
||||
msystem: MINGW64
|
||||
cygreg: registry
|
||||
pyreg: ""
|
||||
- arch: x86
|
||||
vcarch: x86
|
||||
warch: ia32
|
||||
bits: 32
|
||||
msystem: MINGW32
|
||||
cygreg: registry32
|
||||
pyreg: "-32"
|
||||
exclude:
|
||||
- toolchain: msvc
|
||||
arch: x64
|
||||
features: NORMAL
|
||||
- toolchain: mingw
|
||||
arch: x86
|
||||
features: NORMAL
|
||||
|
||||
steps:
|
||||
- name: Initalize
|
||||
id: init
|
||||
shell: bash
|
||||
run: |
|
||||
git config --global core.autocrlf input
|
||||
python_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON_VER_DOT}/InstallPath/@")
|
||||
python3_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON3_VER_DOT}${{ matrix.pyreg }}/InstallPath/@")
|
||||
echo "::set-env name=PYTHON_DIR::$python_dir"
|
||||
echo "::set-env name=PYTHON3_DIR::$python3_dir"
|
||||
|
||||
- uses: msys2/setup-msys2@v2
|
||||
if: matrix.toolchain == 'mingw'
|
||||
with:
|
||||
msystem: ${{ matrix.msystem }}
|
||||
release: false
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Create a list of download URLs
|
||||
shell: cmd
|
||||
run: |
|
||||
type NUL > urls.txt
|
||||
echo %LUA_RELEASE%>> urls.txt
|
||||
echo %WINPTY_URL%>> urls.txt
|
||||
|
||||
- name: Cache downloaded files
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: downloads
|
||||
key: ${{ runner.os }}-${{ matrix.bits }}-${{ hashFiles('urls.txt') }}
|
||||
|
||||
- name: Download dependencies
|
||||
shell: cmd
|
||||
run: |
|
||||
path C:\Program Files\7-Zip;%path%
|
||||
if not exist downloads mkdir downloads
|
||||
|
||||
echo %COL_GREEN%Download Lua%COL_RESET%
|
||||
call :downloadfile %LUA${{ matrix.bits }}_URL% downloads\lua.zip
|
||||
7z x downloads\lua.zip -o%LUA_DIR% > nul || exit 1
|
||||
|
||||
echo %COL_GREEN%Download winpty%COL_RESET%
|
||||
call :downloadfile %WINPTY_URL% downloads\winpty.zip
|
||||
7z x -y downloads\winpty.zip -oD:\winpty > nul || exit 1
|
||||
copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty.dll src\winpty${{ matrix.bits }}.dll
|
||||
copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty-agent.exe src\
|
||||
|
||||
goto :eof
|
||||
|
||||
:downloadfile
|
||||
:: call :downloadfile <URL> <localfile>
|
||||
if not exist %2 (
|
||||
curl -f -L %1 -o %2
|
||||
)
|
||||
if ERRORLEVEL 1 (
|
||||
rem Retry once.
|
||||
curl -f -L %1 -o %2 || exit 1
|
||||
)
|
||||
goto :eof
|
||||
|
||||
- name: Build (MSVC)
|
||||
if: matrix.toolchain == 'msvc'
|
||||
shell: cmd
|
||||
run: |
|
||||
call "%VCVARSALL%" ${{ matrix.vcarch }}
|
||||
cd src
|
||||
:: Filter out the progress bar from the build log
|
||||
sed -e "s/@<<$/@<< | sed -e 's#.*\\\\r.*##'/" Make_mvc.mak > Make_mvc2.mak
|
||||
if "${{ matrix.features }}"=="HUGE" (
|
||||
nmake -nologo -f Make_mvc2.mak ^
|
||||
FEATURES=${{ matrix.features }} ^
|
||||
GUI=yes IME=yes ICONV=yes VIMDLL=yes ^
|
||||
DYNAMIC_LUA=yes LUA=%LUA_DIR% ^
|
||||
DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^
|
||||
DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR%
|
||||
) else (
|
||||
nmake -nologo -f Make_mvc2.mak ^
|
||||
FEATURES=${{ matrix.features }} ^
|
||||
GUI=yes IME=yes ICONV=yes VIMDLL=yes
|
||||
)
|
||||
if not exist vim${{ matrix.bits }}.dll (
|
||||
echo %COL_RED%Build failure.%COL_RESET%
|
||||
exit 1
|
||||
)
|
||||
|
||||
- name: Build (MinGW)
|
||||
if: matrix.toolchain == 'mingw'
|
||||
shell: msys2 {0}
|
||||
run: |
|
||||
cd src
|
||||
if [ "${{ matrix.features }}" = "HUGE" ]; then
|
||||
mingw32-make -f Make_ming.mak -j2 \
|
||||
FEATURES=${{ matrix.features }} \
|
||||
GUI=yes IME=yes ICONV=yes VIMDLL=yes \
|
||||
DYNAMIC_LUA=yes LUA=${LUA_DIR} \
|
||||
DYNAMIC_PYTHON=yes PYTHON=${PYTHON_DIR} \
|
||||
DYNAMIC_PYTHON3=yes PYTHON3=${PYTHON3_DIR} \
|
||||
STATIC_STDCPLUS=yes
|
||||
else
|
||||
mingw32-make -f Make_ming.mak -j2 \
|
||||
FEATURES=${{ matrix.features }} \
|
||||
GUI=yes IME=yes ICONV=yes VIMDLL=yes \
|
||||
STATIC_STDCPLUS=yes
|
||||
fi
|
||||
|
||||
# - name: Prepare Artifact
|
||||
# shell: cmd
|
||||
# run: |
|
||||
# mkdir artifacts
|
||||
# copy src\*vim.exe artifacts
|
||||
# copy src\vim*.dll artifacts
|
||||
#
|
||||
# - name: Upload Artifact
|
||||
# uses: actions/upload-artifact@v1
|
||||
# with:
|
||||
# name: vim${{ matrix.bits }}-${{ matrix.toolchain }}
|
||||
# path: ./artifacts
|
||||
|
||||
- name: Test
|
||||
shell: cmd
|
||||
timeout-minutes: 20
|
||||
run: |
|
||||
PATH %LUA_DIR%;C:\msys64\${{ matrix.msystem }}\bin;%PATH%;%PYTHON3_DIR%
|
||||
call "%VCVARSALL%" ${{ matrix.vcarch }}
|
||||
cd src
|
||||
echo.
|
||||
echo %COL_GREEN%vim version:%COL_RESET%
|
||||
.\vim --version || exit 1
|
||||
cd testdir
|
||||
echo %COL_GREEN%Test gvim:%COL_RESET%
|
||||
nmake -nologo -f Make_dos.mak VIMPROG=..\gvim || exit 1
|
||||
nmake -nologo -f Make_dos.mak clean
|
||||
echo %COL_GREEN%Test vim:%COL_RESET%
|
||||
if "${{ matrix.toolchain }}-${{ matrix.arch }}"=="msvc-x64" (
|
||||
rem This test may hang up unless it is executed in a separate console.
|
||||
start /wait cmd /c "nmake -nologo -f Make_dos.mak VIMPROG=..\vim > nul"
|
||||
if exist messages type messages
|
||||
nmake -nologo -f Make_dos.mak report || exit 1
|
||||
) else (
|
||||
nmake -nologo -f Make_dos.mak VIMPROG=..\vim || exit 1
|
||||
)
|
18
.travis.yml
18
.travis.yml
@ -3,21 +3,21 @@ language: c
|
||||
_anchors:
|
||||
envs:
|
||||
- &tiny-nogui
|
||||
BUILD=yes TEST=test FEATURES=tiny CONFOPT="--disable-gui" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
BUILD=yes TEST=test FEATURES=tiny CONFOPT="--disable-gui" LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
- &tiny
|
||||
BUILD=yes TEST=test FEATURES=tiny CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
BUILD=yes TEST=test FEATURES=tiny CONFOPT= LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
- &small
|
||||
BUILD=yes TEST=test FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
BUILD=yes TEST=test FEATURES=small CONFOPT= LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
- &normal
|
||||
BUILD=yes TEST=test FEATURES=normal CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
BUILD=yes TEST=test FEATURES=normal CONFOPT= LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
- &linux-huge
|
||||
BUILD=yes TEST="scripttests test_libvterm" CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
BUILD=yes TEST="scripttests test_libvterm" CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
CONFOPT="--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp"
|
||||
- &osx-huge # macOS build
|
||||
BUILD=yes TEST=test FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
BUILD=yes TEST=test FEATURES=huge LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no
|
||||
CONFOPT="--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp"
|
||||
- &unittests
|
||||
BUILD=no TEST=unittests CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes
|
||||
BUILD=no TEST=unittests CFLAGS="--coverage -DUSE_GCOV_FLUSH" LDFLAGS=--coverage FEATURES=huge LEAK_CFLAGS="-DEXITFREE" SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes
|
||||
- &asan # ASAN build
|
||||
SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer"
|
||||
ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt"
|
||||
@ -191,13 +191,13 @@ jobs:
|
||||
compiler: gcc
|
||||
env: *small
|
||||
- <<: *linux
|
||||
name: normal/clang
|
||||
name: normal+shadow/clang
|
||||
compiler: clang
|
||||
env:
|
||||
- *normal
|
||||
- *shadowopt
|
||||
- <<: *linux
|
||||
name: normal/gcc
|
||||
name: normal+shadow/gcc
|
||||
compiler: gcc
|
||||
env:
|
||||
- *normal
|
||||
|
9
Filelist
9
Filelist
@ -9,6 +9,7 @@ SRC_ALL = \
|
||||
.lgtm.yml \
|
||||
.travis.yml \
|
||||
.cirrus.yml \
|
||||
.github/workflows/ci-windows.yaml \
|
||||
appveyor.yml \
|
||||
ci/appveyor.bat \
|
||||
ci/if_ver*.vim \
|
||||
@ -68,6 +69,7 @@ SRC_ALL = \
|
||||
src/gui_beval.c \
|
||||
src/hardcopy.c \
|
||||
src/hashtab.c \
|
||||
src/help.c \
|
||||
src/highlight.c \
|
||||
src/indent.c \
|
||||
src/insexpand.c \
|
||||
@ -75,11 +77,13 @@ SRC_ALL = \
|
||||
src/json_test.c \
|
||||
src/kword_test.c \
|
||||
src/list.c \
|
||||
src/locale.c \
|
||||
src/keymap.h \
|
||||
src/macros.h \
|
||||
src/main.c \
|
||||
src/map.c \
|
||||
src/mark.c \
|
||||
src/match.c \
|
||||
src/mbyte.c \
|
||||
src/memfile.c \
|
||||
src/memfile_test.c \
|
||||
@ -239,14 +243,17 @@ SRC_ALL = \
|
||||
src/proto/gui_beval.pro \
|
||||
src/proto/hardcopy.pro \
|
||||
src/proto/hashtab.pro \
|
||||
src/proto/help.pro \
|
||||
src/proto/highlight.pro \
|
||||
src/proto/indent.pro \
|
||||
src/proto/insexpand.pro \
|
||||
src/proto/json.pro \
|
||||
src/proto/list.pro \
|
||||
src/proto/locale.pro \
|
||||
src/proto/main.pro \
|
||||
src/proto/map.pro \
|
||||
src/proto/mark.pro \
|
||||
src/proto/match.pro \
|
||||
src/proto/mbyte.pro \
|
||||
src/proto/memfile.pro \
|
||||
src/proto/memline.pro \
|
||||
@ -673,10 +680,8 @@ SRC_EXTRA = \
|
||||
$(SRC_QNX) \
|
||||
$(SRC_VMS) \
|
||||
README_os390.txt \
|
||||
src/Make_mint.mak \
|
||||
src/infplist.xml \
|
||||
src/link.390 \
|
||||
src/os_mint.h \
|
||||
src/os_vms_fix.com \
|
||||
src/toolbar.phi \
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
[](https://travis-ci.org/vim/vim)
|
||||
[](https://ci.appveyor.com/project/chrisbra/vim)
|
||||

|
||||
[](https://cirrus-ci.com/github/vim/vim)
|
||||
[](https://codecov.io/gh/vim/vim?branch=master)
|
||||
[](https://scan.coverity.com/projects/vim)
|
||||
|
@ -19,8 +19,6 @@ src/os_dos.* Files for the MS-DOS port.
|
||||
src/gui_mac.*
|
||||
src/os_mac.* Files for the Mac port.
|
||||
|
||||
src/os_mint.8 Files for the Atari Mint port.
|
||||
|
||||
src/os_vms* Files for the VMS port.
|
||||
|
||||
src/os_w32*
|
||||
|
@ -5,16 +5,17 @@ skip_tags: true
|
||||
environment:
|
||||
matrix:
|
||||
- FEATURE: HUGE
|
||||
- FEATURE: NORMAL
|
||||
# disabled
|
||||
# - FEATURE: TINY
|
||||
# - FEATURE: SMALL
|
||||
# - FEATURE: NORMAL
|
||||
# - FEATURE: BIG
|
||||
|
||||
matrix:
|
||||
fast_finish: true
|
||||
|
||||
before_build:
|
||||
# Use Windows SDK 7.1 (= MSVC 2010)
|
||||
- '"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 /release'
|
||||
- 'set INCLUDE=%INCLUDE%C:\Program Files (x86)\Windows Kits\8.1\Include\um'
|
||||
|
||||
@ -25,9 +26,9 @@ test_script:
|
||||
- cd src/testdir
|
||||
# Testing with MSVC gvim
|
||||
- path C:\Python35-x64;%PATH%
|
||||
- nmake -f Make_dos.mak POSTSCRIPT=yes VIMPROG=..\gvim
|
||||
- nmake -f Make_dos.mak VIMPROG=..\gvim
|
||||
- nmake -f Make_dos.mak clean
|
||||
# Testing with MingW console version
|
||||
- nmake -f Make_dos.mak POSTSCRIPT=yes VIMPROG=..\vim
|
||||
# Testing with MSVC console version
|
||||
- nmake -f Make_dos.mak VIMPROG=..\vim
|
||||
|
||||
# vim: sw=2 sts=2 et ts=8 sr
|
||||
|
@ -5,48 +5,32 @@ setlocal ENABLEDELAYEDEXPANSION
|
||||
cd %APPVEYOR_BUILD_FOLDER%
|
||||
|
||||
cd src
|
||||
echo "Building MinGW 32bit console version"
|
||||
set PATH=c:\msys64\mingw32\bin;%PATH%
|
||||
mingw32-make.exe -f Make_ming.mak GUI=no OPTIMIZE=speed IME=yes ICONV=yes DEBUG=no FEATURES=%FEATURE% || exit 1
|
||||
.\vim -u NONE -c "redir @a | ver |0put a | wq" ver_ming.txt
|
||||
:: Save vim.exe before Make clean, moved back below.
|
||||
copy vim.exe testdir
|
||||
mingw32-make.exe -f Make_ming.mak clean
|
||||
|
||||
:: Build Mingw huge version with python and channel support, or
|
||||
:: with specified features without python.
|
||||
echo "Building MinGW 32bit GUI version"
|
||||
if "%FEATURE%" == "HUGE" (
|
||||
mingw32-make.exe -f Make_ming.mak OPTIMIZE=speed CHANNEL=yes GUI=yes IME=yes ICONV=yes DEBUG=no PYTHON_VER=27 DYNAMIC_PYTHON=yes PYTHON=C:\Python27 PYTHON3_VER=35 DYNAMIC_PYTHON3=yes PYTHON3=C:\Python35 FEATURES=%FEATURE% || exit 1
|
||||
) ELSE (
|
||||
mingw32-make.exe -f Make_ming.mak OPTIMIZE=speed GUI=yes IME=yes ICONV=yes DEBUG=no FEATURES=%FEATURE% || exit 1
|
||||
)
|
||||
.\gvim -u NONE -c "redir @a | ver |0put a | wq" ver_ming_gui.txt
|
||||
|
||||
:: Filter out the progress bar from the build log
|
||||
sed -e "s/@<<$/@<< | sed -e 's#.*\\\\r.*##'/" Make_mvc.mak > Make_mvc2.mak
|
||||
|
||||
echo "Building MSVC 64bit console Version"
|
||||
nmake -f Make_mvc2.mak CPU=AMD64 OLE=no GUI=no IME=yes ICONV=yes DEBUG=no FEATURES=%FEATURE% || exit 1
|
||||
:: The executable is not used
|
||||
nmake -f Make_mvc2.mak clean
|
||||
nmake -f Make_mvc2.mak CPU=AMD64 ^
|
||||
OLE=no GUI=no IME=yes ICONV=yes DEBUG=no ^
|
||||
FEATURES=%FEATURE% || exit 1
|
||||
|
||||
:: build MSVC huge version with python and channel support
|
||||
:: GUI needs to be last, so that testing works
|
||||
echo "Building MSVC 64bit GUI Version"
|
||||
if "%FEATURE%" == "HUGE" (
|
||||
nmake -f Make_mvc2.mak DIRECTX=yes CPU=AMD64 CHANNEL=yes OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no PYTHON_VER=27 DYNAMIC_PYTHON=yes PYTHON=C:\Python27-x64 PYTHON3_VER=35 DYNAMIC_PYTHON3=yes PYTHON3=C:\Python35-x64 FEATURES=%FEATURE% || exit 1
|
||||
nmake -f Make_mvc2.mak CPU=AMD64 ^
|
||||
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no POSTSCRIPT=yes ^
|
||||
PYTHON_VER=27 DYNAMIC_PYTHON=yes PYTHON=C:\Python27-x64 ^
|
||||
PYTHON3_VER=35 DYNAMIC_PYTHON3=yes PYTHON3=C:\Python35-x64 ^
|
||||
FEATURES=%FEATURE% || exit 1
|
||||
) ELSE (
|
||||
nmake -f Make_mvc2.mak CPU=AMD64 OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no FEATURES=%FEATURE% || exit 1
|
||||
nmake -f Make_mvc2.mak CPU=AMD64 ^
|
||||
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no ^
|
||||
FEATURES=%FEATURE% || exit 1
|
||||
)
|
||||
.\gvim -u NONE -c "redir @a | ver |0put a | wq" ver_msvc.txt
|
||||
|
||||
:: Restore vim.exe, tests will run with this.
|
||||
move /Y testdir\vim.exe .
|
||||
echo "version output MinGW"
|
||||
type ver_ming.txt
|
||||
echo "version output MinGW GUI"
|
||||
type ver_ming_gui.txt
|
||||
echo "version output MVC"
|
||||
echo "version output MSVC console"
|
||||
.\vim --version
|
||||
echo "version output MSVC GUI"
|
||||
type ver_msvc.txt
|
||||
cd ..
|
||||
|
@ -687,6 +687,15 @@ SectionEnd
|
||||
${EndIf}
|
||||
!macroend
|
||||
|
||||
!macro LoadDefaultVimrc out_var reg_value default_value
|
||||
ClearErrors
|
||||
ReadRegStr ${out_var} HKLM "${UNINST_REG_KEY_VIM}" ${reg_value}
|
||||
${If} ${Errors}
|
||||
${OrIf} ${out_var} == ""
|
||||
StrCpy ${out_var} ${default_value}
|
||||
${EndIf}
|
||||
!macroend
|
||||
|
||||
Function .onInit
|
||||
!ifdef HAVE_MULTI_LANG
|
||||
# Select a language (or read from the registry).
|
||||
@ -718,10 +727,10 @@ Function .onInit
|
||||
!endif
|
||||
${EndIf}
|
||||
|
||||
# Load the selections from the registry (if any).
|
||||
${If} ${RunningX64}
|
||||
SetRegView 64
|
||||
${EndIf}
|
||||
# Load the selections from the registry (if any).
|
||||
!insertmacro LoadSectionSelection ${id_section_console} "select_console"
|
||||
!insertmacro LoadSectionSelection ${id_section_batch} "select_batch"
|
||||
!insertmacro LoadSectionSelection ${id_section_desktop} "select_desktop"
|
||||
@ -736,6 +745,10 @@ Function .onInit
|
||||
!ifdef HAVE_NLS
|
||||
!insertmacro LoadSectionSelection ${id_section_nls} "select_nls"
|
||||
!endif
|
||||
# Load the default _vimrc settings from the registry (if any).
|
||||
!insertmacro LoadDefaultVimrc $vim_compat_stat "vim_compat" "all"
|
||||
!insertmacro LoadDefaultVimrc $vim_keymap_stat "vim_keyremap" "default"
|
||||
!insertmacro LoadDefaultVimrc $vim_mouse_stat "vim_mouse" "default"
|
||||
${If} ${RunningX64}
|
||||
SetRegView lastused
|
||||
${EndIf}
|
||||
@ -799,17 +812,11 @@ Function SetCustom
|
||||
${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_defaults)
|
||||
${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_all)
|
||||
|
||||
# Default selection
|
||||
${If} $vim_compat_stat == ""
|
||||
ReadRegStr $3 HKLM "${UNINST_REG_KEY_VIM}" "vim_compat"
|
||||
${Else}
|
||||
StrCpy $3 $vim_compat_stat
|
||||
${EndIf}
|
||||
${If} $3 == "defaults"
|
||||
${If} $vim_compat_stat == "defaults"
|
||||
StrCpy $4 2
|
||||
${ElseIf} $3 == "vim"
|
||||
${ElseIf} $vim_compat_stat == "vim"
|
||||
StrCpy $4 1
|
||||
${ElseIf} $3 == "vi"
|
||||
${ElseIf} $vim_compat_stat == "vi"
|
||||
StrCpy $4 0
|
||||
${Else} # default
|
||||
StrCpy $4 3
|
||||
@ -828,13 +835,7 @@ Function SetCustom
|
||||
${NSD_CB_AddString} $vim_nsd_keymap $(str_msg_keymap_default)
|
||||
${NSD_CB_AddString} $vim_nsd_keymap $(str_msg_keymap_windows)
|
||||
|
||||
# Default selection
|
||||
${If} $vim_keymap_stat == ""
|
||||
ReadRegStr $3 HKLM "${UNINST_REG_KEY_VIM}" "vim_keyremap"
|
||||
${Else}
|
||||
StrCpy $3 $vim_keymap_stat
|
||||
${EndIf}
|
||||
${If} $3 == "windows"
|
||||
${If} $vim_keymap_stat == "windows"
|
||||
StrCpy $4 1
|
||||
${Else} # default
|
||||
StrCpy $4 0
|
||||
@ -854,15 +855,9 @@ Function SetCustom
|
||||
${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_windows)
|
||||
${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_unix)
|
||||
|
||||
# Default selection
|
||||
${If} $vim_mouse_stat == ""
|
||||
ReadRegStr $3 HKLM "${UNINST_REG_KEY_VIM}" "vim_mouse"
|
||||
${Else}
|
||||
StrCpy $3 $vim_mouse_stat
|
||||
${EndIf}
|
||||
${If} $3 == "xterm"
|
||||
${If} $vim_mouse_stat == "xterm"
|
||||
StrCpy $4 2
|
||||
${ElseIf} $3 == "windows"
|
||||
${ElseIf} $vim_mouse_stat == "windows"
|
||||
StrCpy $4 1
|
||||
${Else} # default
|
||||
StrCpy $4 0
|
||||
|
@ -25,7 +25,7 @@ function decada#Unit_Name () dict " {{{1
|
||||
" Convert filename into acs unit:
|
||||
" 1: remove the file extenstion.
|
||||
" 2: replace all double '_' or '-' with an dot (which denotes a separate)
|
||||
" 3: remove a trailing '_' (wich denotes a specification)
|
||||
" 3: remove a trailing '_' (which denotes a specification)
|
||||
return substitute (substitute (expand ("%:t:r"), '__\|-', ".", "g"), '_$', "", '')
|
||||
endfunction decada#Unit_Name " }}}1
|
||||
|
||||
|
@ -1,15 +1,11 @@
|
||||
" Vim script to download a missing spell file
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2012 Jan 08
|
||||
" Last Change: 2020 Jul 10
|
||||
|
||||
if !exists('g:spellfile_URL')
|
||||
" Prefer using http:// when netrw should be able to use it, since
|
||||
" more firewalls let this through.
|
||||
if executable("curl") || executable("wget") || executable("fetch")
|
||||
let g:spellfile_URL = 'http://ftp.vim.org/pub/vim/runtime/spell'
|
||||
else
|
||||
let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/runtime/spell'
|
||||
endif
|
||||
" Always use https:// because it's secure. The certificate is for nluug.nl,
|
||||
" thus we can't use the alias ftp.vim.org here.
|
||||
let g:spellfile_URL = 'https://ftp.nluug.nl/pub/vim/runtime/spell'
|
||||
endif
|
||||
let s:spellfile_URL = '' " Start with nothing so that s:donedict is reset.
|
||||
|
||||
|
@ -396,7 +396,7 @@ test_urls:
|
||||
vim -S test_urls.vim
|
||||
|
||||
clean:
|
||||
-rm doctags *.html tags.ref
|
||||
-rm -f doctags *.html tags.ref
|
||||
|
||||
# These files are in the extra archive, skip if not present
|
||||
|
||||
|
@ -77,7 +77,7 @@ Arabic requires ISO-8859-6 as well as Presentation Form-B fonts
|
||||
(without Form-B, Arabic will _NOT_ be usable). It is highly
|
||||
recommended that users search for so-called 'ISO-10646-1' fonts.
|
||||
Do an Internet search or check www.arabeyes.org for further
|
||||
info on where to attain the necessary Arabic fonts.
|
||||
info on where to obtain the necessary Arabic fonts.
|
||||
|
||||
|
||||
Font Installation
|
||||
@ -123,7 +123,7 @@ o Setting the appropriate character Encoding
|
||||
>
|
||||
:set encoding=utf-8
|
||||
<
|
||||
to your .vimrc file (entering the command manually into you Vim
|
||||
to your .vimrc file (entering the command manually into your Vim
|
||||
window is highly discouraged). In short, include ':set
|
||||
encoding=utf-8' to your .vimrc file.
|
||||
|
||||
|
@ -1755,7 +1755,7 @@ Some examples:
|
||||
Automatic formatting *auto-format* *autoformat*
|
||||
|
||||
When the 'a' flag is present in 'formatoptions' text is formatted
|
||||
automatically when inserting text or deleting text. This works nice for
|
||||
automatically when inserting text or deleting text. This works nicely for
|
||||
editing text paragraphs. A few hints on how to use this:
|
||||
|
||||
- You need to properly define paragraphs. The simplest is paragraphs that are
|
||||
|
@ -1,4 +1,4 @@
|
||||
*channel.txt* For Vim version 8.2. Last change: 2020 Jun 01
|
||||
*channel.txt* For Vim version 8.2. Last change: 2020 Jul 10
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -1259,7 +1259,7 @@ can start typing a line.
|
||||
The text of the prompt can be set with the |prompt_setprompt()| function.
|
||||
|
||||
The user can go to Normal mode and navigate through the buffer. This can be
|
||||
useful see older output or copy text.
|
||||
useful to see older output or copy text.
|
||||
|
||||
The CTRL-W key can be used to start a window command, such as CTRL-W w to
|
||||
switch to the next window. This also works in Insert mode (use Shift-CTRL-W
|
||||
|
@ -1,4 +1,4 @@
|
||||
*cmdline.txt* For Vim version 8.2. Last change: 2020 Apr 23
|
||||
*cmdline.txt* For Vim version 8.2. Last change: 2020 Jul 26
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -876,7 +876,7 @@ Also see |`=|.
|
||||
*:<cword>* *<cword>* *:<cWORD>* *<cWORD>*
|
||||
*:<cexpr>* *<cexpr>* *:<cfile>* *<cfile>*
|
||||
*:<afile>* *<afile>* *:<abuf>* *<abuf>*
|
||||
*:<amatch>* *<amatch>*
|
||||
*:<amatch>* *<amatch>* *:<stack>* *<stack>*
|
||||
*:<sfile>* *<sfile>* *:<slnum>* *<slnum>*
|
||||
*:<sflnum>* *<sflnum>* *E499* *E500*
|
||||
Note: these are typed literally, they are not special keys!
|
||||
@ -903,12 +903,16 @@ Note: these are typed literally, they are not special keys!
|
||||
events).
|
||||
<sfile> When executing a ":source" command, is replaced with the
|
||||
file name of the sourced file. *E498*
|
||||
When executing a function, is replaced with:
|
||||
"function {function-name}[{lnum}]"
|
||||
function call nesting is indicated like this:
|
||||
"function {function-name1}[{lnum}]..{function-name2}[{lnum}]"
|
||||
When executing a function, is replaced with the call stack,
|
||||
as with <stack> (this is for backwards compatibility, using
|
||||
<stack> is preferred).
|
||||
Note that filename-modifiers are useless when <sfile> is
|
||||
used inside a function.
|
||||
not used inside a script.
|
||||
<stack> is replaced with the call stack, using
|
||||
"function {function-name}[{lnum}]" for a function line
|
||||
and "script {file-name}[{lnum}]" for a script line, and
|
||||
".." in between items. E.g.:
|
||||
"function {function-name1}[{lnum}]..{function-name2}[{lnum}]"
|
||||
<slnum> When executing a ":source" command, is replaced with the
|
||||
line number. *E842*
|
||||
When executing a function it's the line number relative to
|
||||
|
@ -1,4 +1,4 @@
|
||||
*digraph.txt* For Vim version 8.2. Last change: 2019 May 05
|
||||
*digraph.txt* For Vim version 8.2. Last change: 2020 Jul 16
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -33,6 +33,8 @@ An alternative is using the 'keymap' option.
|
||||
it is the Unicode character, see |digraph-encoding|.
|
||||
Example: >
|
||||
:digr e: 235 a: 228
|
||||
< You can use `:exe` to enter a hex number: >
|
||||
:exe 'digr += ' .. 0x2A72
|
||||
< Avoid defining a digraph with '_' (underscore) as the
|
||||
first character, it has a special meaning in the
|
||||
future.
|
||||
|
@ -1,4 +1,4 @@
|
||||
*editing.txt* For Vim version 8.2. Last change: 2020 Jun 05
|
||||
*editing.txt* For Vim version 8.2. Last change: 2020 Jul 05
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -1402,7 +1402,7 @@ to 0, 'modeline' off, 'expandtab' off). Setting the 'binary' option has the
|
||||
same effect. Don't forget to do this before reading the file.
|
||||
|
||||
There are a few things to remember when editing binary files:
|
||||
- When editing executable files the number of characters must not change.
|
||||
- When editing executable files the number of bytes must not change.
|
||||
Use only the "R" or "r" command to change text. Do not delete characters
|
||||
with "x" or by backspacing.
|
||||
- Set the 'textwidth' option to 0. Otherwise lines will unexpectedly be
|
||||
@ -1410,7 +1410,7 @@ There are a few things to remember when editing binary files:
|
||||
- When there are not many <EOL>s, the lines will become very long. If you
|
||||
want to edit a line that does not fit on the screen reset the 'wrap' option.
|
||||
Horizontal scrolling is used then. If a line becomes too long (more than
|
||||
about 32767 characters on the Amiga, much more on 32-bit systems, see
|
||||
about 32767 bytes on the Amiga, much more on 32-bit and 64-bit systems, see
|
||||
|limits|) you cannot edit that line. The line will be split when reading
|
||||
the file. It is also possible that you get an "out of memory" error when
|
||||
reading the file.
|
||||
|
@ -1,4 +1,4 @@
|
||||
*eval.txt* For Vim version 8.2. Last change: 2020 Jun 17
|
||||
*eval.txt* For Vim version 8.2. Last change: 2020 Jul 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -94,8 +94,9 @@ the Number. Examples:
|
||||
Number 0 --> String "0" ~
|
||||
Number -1 --> String "-1" ~
|
||||
*octal*
|
||||
Conversion from a String to a Number is done by converting the first digits to
|
||||
a number. Hexadecimal "0xf9", Octal "017" or "0o17", and Binary "0b10"
|
||||
Conversion from a String to a Number only happens in legacy Vim script, not in
|
||||
Vim9 script. It is done by converting the first digits to a number.
|
||||
Hexadecimal "0xf9", Octal "017" or "0o17", and Binary "0b10"
|
||||
numbers are recognized (NOTE: when using |scriptversion-4| octal with a
|
||||
leading "0" is not recognized). If the String doesn't start with digits, the
|
||||
result is zero.
|
||||
@ -157,7 +158,7 @@ You will not get an error if you try to change the type of a variable.
|
||||
|
||||
|
||||
1.2 Function references ~
|
||||
*Funcref* *E695* *E718*
|
||||
*Funcref* *E695* *E718*
|
||||
A Funcref variable is obtained with the |function()| function, the |funcref()|
|
||||
function or created with the lambda expression |expr-lambda|. It can be used
|
||||
in an expression in the place of a function name, before the parenthesis
|
||||
@ -1993,6 +1994,8 @@ v:mouse_col Column number for a mouse click obtained with |getchar()|.
|
||||
*v:none* *none-variable* *None*
|
||||
v:none An empty String. Used to put an empty item in JSON. See
|
||||
|json_encode()|.
|
||||
This can also be used as a function argument to use the
|
||||
default value, see |none-function_argument|.
|
||||
When used as a number this evaluates to zero.
|
||||
When used as a string this evaluates to "v:none". >
|
||||
echo v:none
|
||||
@ -2511,13 +2514,15 @@ getjumplist([{winnr} [, {tabnr}]])
|
||||
List list of jump list items
|
||||
getline({lnum}) String line {lnum} of current buffer
|
||||
getline({lnum}, {end}) List lines {lnum} to {end} of current buffer
|
||||
getloclist({nr} [, {what}]) List list of location list items
|
||||
getloclist({nr}) List list of location list items
|
||||
getloclist({nr}, {what}) Dict get specific location list properties
|
||||
getmarklist([{expr}]) List list of global/local marks
|
||||
getmatches([{win}]) List list of current matches
|
||||
getmousepos() Dict last known mouse position
|
||||
getpid() Number process ID of Vim
|
||||
getpos({expr}) List position of cursor, mark, etc.
|
||||
getqflist([{what}]) List list of quickfix items
|
||||
getqflist() List list of quickfix items
|
||||
getqflist({what}) Dict get specific quickfix list properties
|
||||
getreg([{regname} [, 1 [, {list}]]])
|
||||
String or List contents of a register
|
||||
getreginfo([{regname}]) Dict information about a register
|
||||
@ -2756,12 +2761,15 @@ setcmdpos({pos}) Number set cursor position in command-line
|
||||
setenv({name}, {val}) none set environment variable
|
||||
setfperm({fname}, {mode}) Number set {fname} file permissions to {mode}
|
||||
setline({lnum}, {line}) Number set line {lnum} to {line}
|
||||
setloclist({nr}, {list} [, {action} [, {what}]])
|
||||
Number modify location list using {list}
|
||||
setloclist({nr}, {list} [, {action}])
|
||||
Number modify location list using {list}
|
||||
setloclist({nr}, {list}, {action}, {what})
|
||||
Number modify specific location list props
|
||||
setmatches({list} [, {win}]) Number restore a list of matches
|
||||
setpos({expr}, {list}) Number set the {expr} position to {list}
|
||||
setqflist({list} [, {action} [, {what}]])
|
||||
Number modify quickfix list using {list}
|
||||
setqflist({list} [, {action}]) Number modify quickfix list using {list}
|
||||
setqflist({list}, {action}, {what})
|
||||
Number modify specific quickfix list props
|
||||
setreg({n}, {v} [, {opt}]) Number set register to value and type
|
||||
settabvar({nr}, {varname}, {val}) none set {varname} in tab page {nr} to {val}
|
||||
settabwinvar({tabnr}, {winnr}, {varname}, {val})
|
||||
@ -2826,7 +2834,7 @@ stridx({haystack}, {needle} [, {start}])
|
||||
string({expr}) String String representation of {expr} value
|
||||
strlen({expr}) Number length of the String {expr}
|
||||
strpart({str}, {start} [, {len}])
|
||||
String {len} characters of {str} at {start}
|
||||
String {len} bytes of {str} at byte {start}
|
||||
strptime({format}, {timestring})
|
||||
Number Convert {timestring} to unix timestamp
|
||||
strridx({haystack}, {needle} [, {start}])
|
||||
@ -3031,7 +3039,8 @@ append({lnum}, {text}) *append()*
|
||||
:let failed = append(line('$'), "# THE END")
|
||||
:let failed = append(0, ["Chapter 1", "the beginning"])
|
||||
|
||||
< Can also be used as a |method| after a List: >
|
||||
< Can also be used as a |method| after a List, the base is
|
||||
passed as the second argument: >
|
||||
mylist->append(lnum)
|
||||
|
||||
|
||||
@ -3053,7 +3062,8 @@ appendbufline({expr}, {lnum}, {text}) *appendbufline()*
|
||||
error message is given. Example: >
|
||||
:let failed = appendbufline(13, 0, "# THE START")
|
||||
<
|
||||
Can also be used as a |method| after a List: >
|
||||
< Can also be used as a |method| after a List, the base is
|
||||
passed as the second argument: >
|
||||
mylist->appendbufline(buf, lnum)
|
||||
|
||||
|
||||
@ -3635,7 +3645,7 @@ complete_check() *complete_check()*
|
||||
|
||||
*complete_info()*
|
||||
complete_info([{what}])
|
||||
Returns a Dictionary with information about Insert mode
|
||||
Returns a |Dictionary| with information about Insert mode
|
||||
completion. See |ins-completion|.
|
||||
The items are:
|
||||
mode Current completion mode name string.
|
||||
@ -3897,6 +3907,7 @@ deepcopy({expr} [, {noref}]) *deepcopy()* *E698*
|
||||
changing an item in the copy does not change the contents of
|
||||
the original |List|.
|
||||
A |Dictionary| is copied in a similar way as a |List|.
|
||||
|
||||
When {noref} is omitted or zero a contained |List| or
|
||||
|Dictionary| is only copied once. All references point to
|
||||
this single copy. With {noref} set to 1 every occurrence of a
|
||||
@ -4833,12 +4844,14 @@ get({list}, {idx} [, {default}]) *get()*
|
||||
Get item {idx} from |List| {list}. When this item is not
|
||||
available return {default}. Return zero when {default} is
|
||||
omitted.
|
||||
Can also be used as a |method|: >
|
||||
Preferably used as a |method|: >
|
||||
mylist->get(idx)
|
||||
get({blob}, {idx} [, {default}])
|
||||
Get byte {idx} from |Blob| {blob}. When this byte is not
|
||||
available return {default}. Return -1 when {default} is
|
||||
omitted.
|
||||
Preferably used as a |method|: >
|
||||
myblob->get(idx)
|
||||
get({dict}, {key} [, {default}])
|
||||
Get item with key {key} from |Dictionary| {dict}. When this
|
||||
item is not available return {default}. Return zero when
|
||||
@ -4846,6 +4859,8 @@ get({dict}, {key} [, {default}])
|
||||
let val = get(g:, 'var_name', 'default')
|
||||
< This gets the value of g:var_name if it exists, and uses
|
||||
'default' when it does not exist.
|
||||
Preferably used as a |method|: >
|
||||
mydict->get(key)
|
||||
get({func}, {what})
|
||||
Get an item with from Funcref {func}. Possible values for
|
||||
{what} are:
|
||||
@ -4853,7 +4868,9 @@ get({func}, {what})
|
||||
"func" The function
|
||||
"dict" The dictionary
|
||||
"args" The list with arguments
|
||||
|
||||
Preferably used as a |method|: >
|
||||
myfunc->get(what)
|
||||
<
|
||||
*getbufinfo()*
|
||||
getbufinfo([{expr}])
|
||||
getbufinfo([{dict}])
|
||||
@ -4862,7 +4879,7 @@ getbufinfo([{dict}])
|
||||
Without an argument information about all the buffers is
|
||||
returned.
|
||||
|
||||
When the argument is a Dictionary only the buffers matching
|
||||
When the argument is a |Dictionary| only the buffers matching
|
||||
the specified criteria are returned. The following keys can
|
||||
be specified in {dict}:
|
||||
buflisted include only listed buffers.
|
||||
@ -4915,8 +4932,11 @@ getbufinfo([{dict}])
|
||||
<
|
||||
To get buffer-local options use: >
|
||||
getbufvar({bufnr}, '&option_name')
|
||||
|
||||
<
|
||||
Can also be used as a |method|: >
|
||||
GetBufnr()->getbufinfo()
|
||||
<
|
||||
|
||||
*getbufline()*
|
||||
getbufline({expr}, {lnum} [, {end}])
|
||||
Return a |List| with the lines starting from {lnum} to {end}
|
||||
@ -5018,8 +5038,9 @@ getchar([expr]) *getchar()*
|
||||
When the user clicks a mouse button, the mouse event will be
|
||||
returned. The position can then be found in |v:mouse_col|,
|
||||
|v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|.
|
||||
|getmousepos()| can also be used. This example positions the
|
||||
mouse as it would normally happen: >
|
||||
|getmousepos()| can also be used. Mouse move events will be
|
||||
ignored.
|
||||
This example positions the mouse as it would normally happen: >
|
||||
let c = getchar()
|
||||
if c == "\<LeftMouse>" && v:mouse_win > 0
|
||||
exe v:mouse_win . "wincmd w"
|
||||
@ -5393,7 +5414,7 @@ getline({lnum} [, {end}])
|
||||
< To get lines from another buffer see |getbufline()|
|
||||
|
||||
getloclist({nr} [, {what}]) *getloclist()*
|
||||
Returns a list with all the entries in the location list for
|
||||
Returns a |List| with all the entries in the location list for
|
||||
window {nr}. {nr} can be the window number or the |window-ID|.
|
||||
When {nr} is zero the current window is used.
|
||||
|
||||
@ -5415,6 +5436,14 @@ getloclist({nr} [, {what}]) *getloclist()*
|
||||
|location-list-file-window| for more
|
||||
details.
|
||||
|
||||
Returns an empty Dictionary if there is no location list for
|
||||
the window {nr} or the window is not present.
|
||||
|
||||
Examples (See also |getqflist-examples|): >
|
||||
:echo getloclist(3, {'all': 0})
|
||||
:echo getloclist(5, {'filewinid': 0})
|
||||
|
||||
|
||||
getmarklist([{expr}] *getmarklist()*
|
||||
Without the {expr} argument returns a |List| with information
|
||||
about all the global marks. |mark|
|
||||
@ -5459,7 +5488,7 @@ getmatches([{win}]) *getmatches()*
|
||||
:unlet m
|
||||
<
|
||||
getmousepos() *getmousepos()*
|
||||
Returns a Dictionary with the last known position of the
|
||||
Returns a |Dictionary| with the last known position of the
|
||||
mouse. This can be used in a mapping for a mouse click or in
|
||||
a filter of a popup window. The items are:
|
||||
screenrow screen row
|
||||
@ -5679,12 +5708,12 @@ getregtype([{regname}]) *getregtype()*
|
||||
|
||||
gettabinfo([{arg}]) *gettabinfo()*
|
||||
If {arg} is not specified, then information about all the tab
|
||||
pages is returned as a List. Each List item is a Dictionary.
|
||||
pages is returned as a |List|. Each List item is a |Dictionary|.
|
||||
Otherwise, {arg} specifies the tab page number and information
|
||||
about that one is returned. If the tab page does not exist an
|
||||
empty List is returned.
|
||||
|
||||
Each List item is a Dictionary with the following entries:
|
||||
Each List item is a |Dictionary| with the following entries:
|
||||
tabnr tab page number.
|
||||
variables a reference to the dictionary with
|
||||
tabpage-local variables
|
||||
@ -5712,7 +5741,7 @@ gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
|
||||
When {varname} is empty a dictionary with all window-local
|
||||
variables is returned.
|
||||
When {varname} is equal to "&" get the values of all
|
||||
window-local options in a Dictionary.
|
||||
window-local options in a |Dictionary|.
|
||||
Otherwise, when {varname} starts with "&" get the value of a
|
||||
window-local option.
|
||||
Note that {varname} must be the name without "w:".
|
||||
@ -5767,16 +5796,16 @@ gettagstack([{nr}]) *gettagstack()*
|
||||
GetWinnr()->gettagstack()
|
||||
|
||||
getwininfo([{winid}]) *getwininfo()*
|
||||
Returns information about windows as a List with Dictionaries.
|
||||
Returns information about windows as a |List| with Dictionaries.
|
||||
|
||||
If {winid} is given Information about the window with that ID
|
||||
is returned, as a List with one item. If the window does not
|
||||
is returned, as a |List| with one item. If the window does not
|
||||
exist the result is an empty list.
|
||||
|
||||
Without {winid} information about all the windows in all the
|
||||
tab pages is returned.
|
||||
|
||||
Each List item is a Dictionary with the following entries:
|
||||
Each List item is a |Dictionary| with the following entries:
|
||||
botline last displayed buffer line
|
||||
bufnr number of buffer in the window
|
||||
height window height (excluding winbar)
|
||||
@ -5804,7 +5833,7 @@ getwininfo([{winid}]) *getwininfo()*
|
||||
GetWinnr()->getwininfo()
|
||||
|
||||
getwinpos([{timeout}]) *getwinpos()*
|
||||
The result is a List with two numbers, the result of
|
||||
The result is a |List| with two numbers, the result of
|
||||
|getwinposx()| and |getwinposy()| combined:
|
||||
[x-pos, y-pos]
|
||||
{timeout} can be used to specify how long to wait in msec for
|
||||
@ -5859,7 +5888,7 @@ glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()*
|
||||
'suffixes' affect the ordering of matches.
|
||||
'wildignorecase' always applies.
|
||||
|
||||
When {list} is present and it is |TRUE| the result is a List
|
||||
When {list} is present and it is |TRUE| the result is a |List|
|
||||
with all matching files. The advantage of using a List is,
|
||||
you also get filenames containing newlines correctly.
|
||||
Otherwise the result is a String and when there are several
|
||||
@ -5922,7 +5951,7 @@ globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
|
||||
one of the patterns in 'wildignore' will be skipped and
|
||||
'suffixes' affect the ordering of matches.
|
||||
|
||||
When {list} is present and it is |TRUE| the result is a List
|
||||
When {list} is present and it is |TRUE| the result is a |List|
|
||||
with all matching files. The advantage of using a List is, you
|
||||
also get filenames containing newlines correctly. Otherwise
|
||||
the result is a String and when there are several matches,
|
||||
@ -7281,7 +7310,7 @@ matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()*
|
||||
|
||||
*max()*
|
||||
max({expr}) Return the maximum value of all items in {expr}.
|
||||
{expr} can be a List or a Dictionary. For a Dictionary,
|
||||
{expr} can be a |List| or a |Dictionary|. For a Dictionary,
|
||||
it returns the maximum of all values in the Dictionary.
|
||||
If {expr} is neither a List nor a Dictionary, or one of the
|
||||
items in {expr} cannot be used as a Number this results in
|
||||
@ -7352,7 +7381,7 @@ menu_info({name} [, {mode}]) *menu_info()*
|
||||
|
||||
< *min()*
|
||||
min({expr}) Return the minimum value of all items in {expr}.
|
||||
{expr} can be a List or a Dictionary. For a Dictionary,
|
||||
{expr} can be a |List| or a |Dictionary|. For a Dictionary,
|
||||
it returns the minimum of all values in the Dictionary.
|
||||
If {expr} is neither a List nor a Dictionary, or one of the
|
||||
items in {expr} cannot be used as a Number this results in
|
||||
@ -8014,7 +8043,7 @@ readdirex({directory} [, {expr} [, {dict}]]) *readdirex()*
|
||||
If {expr} results in 1 then this entry will be added
|
||||
to the list.
|
||||
The entries "." and ".." are always excluded.
|
||||
Each time {expr} is evaluated |v:val| is set to a Dictionary
|
||||
Each time {expr} is evaluated |v:val| is set to a |Dictionary|
|
||||
of the entry.
|
||||
When {expr} is a function the entry is passed as the argument.
|
||||
For example, to get a list of files ending in ".txt": >
|
||||
@ -8263,7 +8292,7 @@ remove({list}, {idx} [, {end}]) *remove()*
|
||||
Without {end}: Remove the item at {idx} from |List| {list} and
|
||||
return the item.
|
||||
With {end}: Remove items from {idx} to {end} (inclusive) and
|
||||
return a List with these items. When {idx} points to the same
|
||||
return a |List| with these items. When {idx} points to the same
|
||||
item as {end} a list with one item is returned. When {end}
|
||||
points to an item before {idx} this is an error.
|
||||
See |list-index| for possible values of {idx} and {end}.
|
||||
@ -8400,7 +8429,7 @@ screenchar({row}, {col}) *screenchar()*
|
||||
GetRow()->screenchar(col)
|
||||
|
||||
screenchars({row}, {col}) *screenchars()*
|
||||
The result is a List of Numbers. The first number is the same
|
||||
The result is a |List| of Numbers. The first number is the same
|
||||
as what |screenchar()| returns. Further numbers are
|
||||
composing characters on top of the base character.
|
||||
This is mainly to be used for testing.
|
||||
@ -8565,7 +8594,7 @@ searchcount([{options}]) *searchcount()*
|
||||
without the "S" flag in 'shortmess'. This works even if
|
||||
'shortmess' does contain the "S" flag.
|
||||
|
||||
This returns a Dictionary. The dictionary is empty if the
|
||||
This returns a |Dictionary|. The dictionary is empty if the
|
||||
previous pattern was not set and "pattern" was not specified.
|
||||
|
||||
key type meaning ~
|
||||
@ -8647,7 +8676,7 @@ searchcount([{options}]) *searchcount()*
|
||||
" search again
|
||||
call searchcount()
|
||||
<
|
||||
{options} must be a Dictionary. It can contain:
|
||||
{options} must be a |Dictionary|. It can contain:
|
||||
key type meaning ~
|
||||
recompute |Boolean| if |TRUE|, recompute the count
|
||||
like |n| or |N| was executed.
|
||||
@ -8999,6 +9028,8 @@ setloclist({nr}, {list} [, {action} [, {what}]]) *setloclist()*
|
||||
Otherwise, same as |setqflist()|.
|
||||
Also see |location-list|.
|
||||
|
||||
For {action} see |setqflist-action|.
|
||||
|
||||
If the optional {what} dictionary argument is supplied, then
|
||||
only the items listed in {what} are set. Refer to |setqflist()|
|
||||
for the list of supported keys in {what}.
|
||||
@ -9077,7 +9108,7 @@ setqflist({list} [, {action} [, {what}]]) *setqflist()*
|
||||
only the items listed in {what} are set. The first {list}
|
||||
argument is ignored. See below for the supported items in
|
||||
{what}.
|
||||
|
||||
*setqflist-what*
|
||||
When {what} is not present, the items in {list} or used. Each
|
||||
item must be a dictionary. Non-dictionary items in {list} are
|
||||
ignored. Each dictionary item can contain the following
|
||||
@ -9114,7 +9145,7 @@ setqflist({list} [, {action} [, {what}]]) *setqflist()*
|
||||
Note that the list is not exactly the same as what
|
||||
|getqflist()| returns.
|
||||
|
||||
{action} values: *E927*
|
||||
{action} values: *setqflist-action* *E927*
|
||||
'a' The items from {list} are added to the existing
|
||||
quickfix list. If there is no existing list, then a
|
||||
new list is created.
|
||||
@ -9155,7 +9186,8 @@ setqflist({list} [, {action} [, {what}]]) *setqflist()*
|
||||
the last quickfix list.
|
||||
quickfixtextfunc
|
||||
function to get the text to display in the
|
||||
quickfix window. Refer to
|
||||
quickfix window. The value can be the name of
|
||||
a function or a funcref or a lambda. Refer to
|
||||
|quickfix-window-function| for an explanation
|
||||
of how to write the function and an example.
|
||||
title quickfix list title text. See |quickfix-title|
|
||||
@ -9186,10 +9218,12 @@ setqflist({list} [, {action} [, {what}]]) *setqflist()*
|
||||
setreg({regname}, {value} [, {options}])
|
||||
Set the register {regname} to {value}.
|
||||
If {regname} is "" or "@", the unnamed register '"' is used.
|
||||
|
||||
{value} may be any value returned by |getreg()| or
|
||||
|getreginfo()|, including a |List| or |Dict|.
|
||||
If {options} contains "a" or {regname} is upper case,
|
||||
then the value is appended.
|
||||
|
||||
{options} can also contain a register type specification:
|
||||
"c" or "v" |characterwise| mode
|
||||
"l" or "V" |linewise| mode
|
||||
@ -9220,7 +9254,7 @@ setreg({regname}, {value} [, {options}])
|
||||
register: >
|
||||
:let var_a = getreginfo()
|
||||
:call setreg('a', var_a)
|
||||
< or:
|
||||
< or: >
|
||||
:let var_a = getreg('a', 1, 1)
|
||||
:let var_amode = getregtype('a')
|
||||
....
|
||||
@ -9697,13 +9731,13 @@ state([{what}]) *state()*
|
||||
something is busy:
|
||||
m halfway a mapping, :normal command, feedkeys() or
|
||||
stuffed command
|
||||
o operator pending or waiting for a command argument,
|
||||
e.g. after |f|
|
||||
o operator pending, e.g. after |d|
|
||||
a Insert mode autocomplete active
|
||||
x executing an autocommand
|
||||
w blocked on waiting, e.g. ch_evalexpr(), ch_read() and
|
||||
ch_readraw() when reading json.
|
||||
S not triggering SafeState or SafeStateAgain
|
||||
ch_readraw() when reading json
|
||||
S not triggering SafeState or SafeStateAgain, e.g. after
|
||||
|f| or a count
|
||||
c callback invoked, including timer (repeats for
|
||||
recursiveness up to "ccc")
|
||||
s screen has scrolled for messages
|
||||
@ -9884,7 +9918,7 @@ string({expr}) Return {expr} converted to a String. If {expr} is a Number,
|
||||
List [item, item]
|
||||
Dictionary {key: value, key: value}
|
||||
|
||||
When a List or Dictionary has a recursive reference it is
|
||||
When a |List| or |Dictionary| has a recursive reference it is
|
||||
replaced by "[...]" or "{...}". Using eval() on the result
|
||||
will then fail.
|
||||
|
||||
@ -10175,7 +10209,7 @@ synIDtrans({synID}) *synIDtrans()*
|
||||
:echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
|
||||
|
||||
synconcealed({lnum}, {col}) *synconcealed()*
|
||||
The result is a List with currently three items:
|
||||
The result is a |List| with currently three items:
|
||||
1. The first item in the list is 0 if the character at the
|
||||
position {lnum} and {col} is not part of a concealable
|
||||
region, 1 if it is.
|
||||
@ -10220,7 +10254,7 @@ synstack({lnum}, {col}) *synstack()*
|
||||
|
||||
system({expr} [, {input}]) *system()* *E677*
|
||||
Get the output of the shell command {expr} as a string. See
|
||||
|systemlist()| to get the output as a List.
|
||||
|systemlist()| to get the output as a |List|.
|
||||
|
||||
When {input} is given and is a string this string is written
|
||||
to a file and passed as stdin to the command. The string is
|
||||
@ -10482,7 +10516,7 @@ timer_info([{id}])
|
||||
returned.
|
||||
When {id} is omitted information about all timers is returned.
|
||||
|
||||
For each timer the information is stored in a Dictionary with
|
||||
For each timer the information is stored in a |Dictionary| with
|
||||
these items:
|
||||
"id" the timer ID
|
||||
"time" time the timer was started with
|
||||
@ -10716,7 +10750,7 @@ undotree() *undotree()*
|
||||
undo blocks.
|
||||
|
||||
The first item in the "entries" list is the oldest undo item.
|
||||
Each List item is a Dictionary with these items:
|
||||
Each List item is a |Dictionary| with these items:
|
||||
"seq" Undo sequence number. Same as what appears in
|
||||
|:undolist|.
|
||||
"time" Timestamp when the change happened. Use
|
||||
@ -10928,7 +10962,7 @@ win_splitmove({nr}, {target} [, {options}]) *win_splitmove()*
|
||||
|
||||
Returns zero for success, non-zero for failure.
|
||||
|
||||
{options} is a Dictionary with the following optional entries:
|
||||
{options} is a |Dictionary| with the following optional entries:
|
||||
"vertical" When TRUE, the split is created vertically,
|
||||
like with |:vsplit|.
|
||||
"rightbelow" When TRUE, the split is made below or to the
|
||||
@ -11678,7 +11712,7 @@ The argument default expressions are evaluated at the time of the function
|
||||
call, not definition. Thus it is possible to use an expression which is
|
||||
invalid the moment the function is defined. The expressions are also only
|
||||
evaluated when arguments are not specified during a call.
|
||||
|
||||
*none-function_argument*
|
||||
You can pass |v:none| to use the default expression. Note that this means you
|
||||
cannot pass v:none as an ordinary value when an argument has a default
|
||||
expression.
|
||||
@ -12093,8 +12127,9 @@ An assignment leaves out the `:let` command. |vim9-declaration|
|
||||
text...
|
||||
text...
|
||||
{endmarker}
|
||||
Set internal variable {var-name} to a List containing
|
||||
the lines of text bounded by the string {endmarker}.
|
||||
Set internal variable {var-name} to a |List|
|
||||
containing the lines of text bounded by the string
|
||||
{endmarker}.
|
||||
{endmarker} must not contain white space.
|
||||
{endmarker} cannot start with a lower case character.
|
||||
The last line should end only with the {endmarker}
|
||||
|
@ -312,7 +312,7 @@ can create any of the following: >
|
||||
$VIM/vimfiles/indent/sqlite.vim
|
||||
|
||||
No changes are necessary to the SQLSetType function. It will automatically
|
||||
pickup the new SQL files and load them when you issue the SQLSetType command.
|
||||
pick up the new SQL files and load them when you issue the SQLSetType command.
|
||||
|
||||
|
||||
==============================================================================
|
||||
@ -519,7 +519,7 @@ beginning with those characters. >
|
||||
4.3.2 Column Completion: *sql-completion-columns*
|
||||
|
||||
The SQL completion plugin can also display a list of columns for particular
|
||||
tables. The column completion is trigger via <C-C>c.
|
||||
tables. The column completion is triggered via <C-C>c.
|
||||
|
||||
NOTE: The following example uses <Right> to trigger a column list while
|
||||
the popup window is active.
|
||||
@ -727,7 +727,7 @@ your platform (often a case on *nix) you define the following variable in
|
||||
your |vimrc|: >
|
||||
let g:omni_sql_no_default_maps = 1
|
||||
|
||||
Do no edit ftplugin/sql.vim directly! If you change this file your changes
|
||||
Do not edit ftplugin/sql.vim directly! If you change this file your changes
|
||||
will be over written on future updates. Vim has a special directory structure
|
||||
which allows you to make customizations without changing the files that are
|
||||
included with the Vim distribution. If you wish to customize the maps
|
||||
|
@ -1,4 +1,4 @@
|
||||
*if_lua.txt* For Vim version 8.2. Last change: 2020 May 17
|
||||
*if_lua.txt* For Vim version 8.2. Last change: 2020 Jun 28
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Luis Carvalho
|
||||
@ -217,14 +217,27 @@ Vim's syntax for lists. Since lists are objects, changes in list references in
|
||||
Lua are reflected in Vim and vice-versa. A list "l" has the following
|
||||
properties and methods:
|
||||
|
||||
NOTE: In patch 8.2.1066 array indexes were changed from zero-based to
|
||||
one-based. You can check with: >
|
||||
if has("patch-8.2.1066")
|
||||
|
||||
Properties
|
||||
----------
|
||||
o "#l" is the number of items in list "l", equivalent to "len(l)"
|
||||
in Vim.
|
||||
o "l[k]" returns the k-th item in "l"; "l" is zero-indexed, as in Vim.
|
||||
o "l[k]" returns the k-th item in "l"; "l" is one-indexed, as in Lua.
|
||||
To modify the k-th item, simply do "l[k] = newitem"; in
|
||||
particular, "l[k] = nil" removes the k-th item from "l".
|
||||
particular, "l[k] = nil" removes the k-th item from "l". Item can
|
||||
be added to the end of the list by "l[#l + 1] = newitem"
|
||||
o "l()" returns an iterator for "l".
|
||||
o "table.insert(l, newitem)" inserts an item at the end of the list.
|
||||
(only Lua 5.3 and later)
|
||||
o "table.insert(l, position, newitem)" inserts an item at the
|
||||
specified position. "position" is one-indexed. (only Lua 5.3 and
|
||||
later)
|
||||
o "table.remove(l, position)" removes an item at the specified
|
||||
position. "position" is one-indexed.
|
||||
|
||||
|
||||
Methods
|
||||
-------
|
||||
@ -237,13 +250,16 @@ Examples:
|
||||
:let l = [1, 'item']
|
||||
:lua l = vim.eval('l') -- same 'l'
|
||||
:lua l:add(vim.list())
|
||||
:lua l[0] = math.pi
|
||||
:lua l[1] = math.pi
|
||||
:echo l[0] " 3.141593
|
||||
:lua l[0] = nil -- remove first item
|
||||
:lua l[1] = nil -- remove first item
|
||||
:lua l:insert(true, 1)
|
||||
:lua print(l, #l, l[0], l[1], l[-1])
|
||||
:lua print(l, #l, l[1], l[2])
|
||||
:lua l[#l + 1] = 'value'
|
||||
:lua table.insert(l, 100)
|
||||
:lua table.insert(l, 2, 200)
|
||||
:lua table.remove(l, 1)
|
||||
:lua for item in l() do print(item) end
|
||||
<
|
||||
|
||||
==============================================================================
|
||||
4. Dict userdata *lua-dict*
|
||||
@ -333,6 +349,14 @@ Examples:
|
||||
:lua l = d.len -- assign d as 'self'
|
||||
:lua print(l())
|
||||
<
|
||||
Lua functions and closures are automatically converted to a Vim |Funcref| and
|
||||
can be accessed in Vim scripts. Example:
|
||||
>
|
||||
lua <<EOF
|
||||
vim.fn.timer_start(1000, function(timer)
|
||||
print('timer callback')
|
||||
end)
|
||||
EOF
|
||||
|
||||
==============================================================================
|
||||
7. Buffer userdata *lua-buffer*
|
||||
|
@ -843,11 +843,10 @@ When modifyOtherKeys is enabled you can map <C-[> and <C-S-{>: >
|
||||
imap <C-S-{> {{{
|
||||
Without modifyOtherKeys <C-[> and <C-S-{> are indistinguishable from Esc.
|
||||
|
||||
A known side effect effect is that in Insert mode the raw escape sequence is
|
||||
inserted after the CTRL-V key. This can be used to check whether
|
||||
modifyOtherKeys is enabled: In Insert mode type CTRL-SHIFT-V CTRL-V, if you
|
||||
get one byte then modifyOtherKeys is off, if you get <1b>27;5;118~ then it is
|
||||
on.
|
||||
A known side effect is that in Insert mode the raw escape sequence is inserted
|
||||
after the CTRL-V key. This can be used to check whether modifyOtherKeys is
|
||||
enabled: In Insert mode type CTRL-SHIFT-V CTRL-V, if you get one byte then
|
||||
modifyOtherKeys is off, if you get <1b>27;5;118~ then it is on.
|
||||
|
||||
When the 'esckeys' option is off, then modifyOtherKeys will be disabled in
|
||||
Insert mode to avoid every key with a modifier causing Insert mode to end.
|
||||
|
@ -128,7 +128,7 @@ There are several ways to enter multi-byte characters:
|
||||
- For MS-Windows IME can be used. See |IME|.
|
||||
- For all systems keymaps can be used. See |mbyte-keymap|.
|
||||
|
||||
The options 'iminsert', 'imsearch' and 'imcmdline' can be used to chose
|
||||
The options 'iminsert', 'imsearch' and 'imcmdline' can be used to choose
|
||||
the different input methods or disable them temporarily.
|
||||
|
||||
==============================================================================
|
||||
@ -141,8 +141,8 @@ in, or just use a certain locale inside Vim.
|
||||
|
||||
WHAT IS A LOCALE? *locale*
|
||||
|
||||
There are many of languages in the world. And there are different cultures
|
||||
and environments at least as much as the number of languages. A linguistic
|
||||
There are many languages in the world. And there are different cultures and
|
||||
environments at least as many as the number of languages. A linguistic
|
||||
environment corresponding to an area is called "locale". This includes
|
||||
information about the used language, the charset, collating order for sorting,
|
||||
date format, currency format and so on. For Vim only the language and charset
|
||||
@ -889,7 +889,7 @@ input_server_name is your |IM-server| name (check your |IM-server|
|
||||
your_input_style is one of |OverTheSpot|, |OffTheSpot|, |Root|. See
|
||||
also |xim-input-style|.
|
||||
|
||||
*international may not necessary if you use X11R6.
|
||||
*international may not be necessary if you use X11R6.
|
||||
*.inputMethod and *.preeditType are optional if you use X11R6.
|
||||
|
||||
For example, when you are using kinput2 as |IM-server|, >
|
||||
@ -952,7 +952,7 @@ automatically.
|
||||
|
||||
This works on not only insert-normal mode, but also search-command input and
|
||||
replace mode.
|
||||
The options 'iminsert', 'imsearch' and 'imcmdline' can be used to chose
|
||||
The options 'iminsert', 'imsearch' and 'imcmdline' can be used to choose
|
||||
the different input methods or disable them temporarily.
|
||||
|
||||
WHAT IS IME
|
||||
|
@ -1,4 +1,4 @@
|
||||
*options.txt* For Vim version 8.2. Last change: 2020 Jun 10
|
||||
*options.txt* For Vim version 8.2. Last change: 2020 Jul 18
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -1951,9 +1951,11 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
{not available when compiled without the |+textprop|
|
||||
or |+quickfix| feature}
|
||||
When 'completeopt' contains "popup" then this option is used for the
|
||||
properties of the info popup when it is created. You can also use
|
||||
|popup_findinfo()| and then set properties for an existing info popup
|
||||
with |popup_setoptions()|. See |complete-popup|.
|
||||
properties of the info popup when it is created. If an info popup
|
||||
window already exists it is closed, so that the option value is
|
||||
applied when it is created again.
|
||||
You can also use |popup_findinfo()| and then set properties for an
|
||||
existing info popup with |popup_setoptions()|. See |complete-popup|.
|
||||
|
||||
|
||||
*'concealcursor'* *'cocu'*
|
||||
@ -4133,7 +4135,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
global
|
||||
This option specifies a function that will be called to
|
||||
activate or deactivate the Input Method.
|
||||
It is not used in the GUI.
|
||||
It is not used in the MS-Windows GUI version.
|
||||
The expression will be evaluated in the |sandbox| when set from a
|
||||
modeline, see |sandbox-option|.
|
||||
|
||||
@ -4242,7 +4244,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
global
|
||||
This option specifies a function that is called to obtain the status
|
||||
of Input Method. It must return a positive number when IME is active.
|
||||
It is not used in the GUI.
|
||||
It is not used in the MS-Windows GUI version.
|
||||
|
||||
Example: >
|
||||
function ImStatusFunc()
|
||||
@ -5911,7 +5913,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
customize the information displayed in the quickfix or location window
|
||||
for each entry in the corresponding quickfix or location list. See
|
||||
|quickfix-window-function| for an explanation of how to write the
|
||||
function and an example.
|
||||
function and an example. The value can be the name of a function or a
|
||||
lambda.
|
||||
|
||||
This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||
security reasons.
|
||||
@ -6730,7 +6733,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
flag meaning when present ~
|
||||
f use "(3 of 5)" instead of "(file 3 of 5)"
|
||||
i use "[noeol]" instead of "[Incomplete last line]"
|
||||
l use "999L, 888C" instead of "999 lines, 888 characters"
|
||||
l use "999L, 888B" instead of "999 lines, 888 bytes"
|
||||
m use "[+]" instead of "[Modified]"
|
||||
n use "[New]" instead of "[New File]"
|
||||
r use "[RO]" instead of "[readonly]"
|
||||
@ -7708,7 +7711,6 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
on Amiga: "amiga"
|
||||
on Haiku: "xterm"
|
||||
on Mac: "mac-ansi"
|
||||
on MiNT: "vt52"
|
||||
on Unix: "ansi"
|
||||
on VMS: "ansi"
|
||||
on Win 32: "win32")
|
||||
|
@ -1,39 +1,15 @@
|
||||
*os_mint.txt* For Vim version 8.2. Last change: 2005 Mar 29
|
||||
*os_mint.txt* For Vim version 8.2. Last change: 2020 Jul 14
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Jens M. Felderhoff
|
||||
|
||||
|
||||
*MiNT* *Atari*
|
||||
This file contains the particularities for the Atari MiNT version of Vim.
|
||||
The Atari MiNT support was removed with patch 8.2.1215. It probably didn't
|
||||
work at that time, since the code was old and not maintained.
|
||||
|
||||
For compiling Vim on the Atari running MiNT see "INSTALL" and "Makefile"
|
||||
in the src directory.
|
||||
|
||||
Vim for MiNT behaves almost exactly like the Unix version.
|
||||
The Unix behavior described in the documentation also refers to the
|
||||
MiNT version of Vim unless explicitly stated otherwise.
|
||||
Originally added by: Jens M. Felderhoff, e-mail: <jmf@infko.uni-koblenz.de>
|
||||
|
||||
For wildcard expansion of <~> (home directory) you need a shell that
|
||||
expands the tilde. The vanilla Bourne shell doesn't recognize it.
|
||||
With csh and ksh it should work OK.
|
||||
|
||||
The MiNT version of vim needs the termcap file /etc/termcap with the
|
||||
terminal capabilities of your terminal. Builtin termcaps are
|
||||
supported for the vt52 terminal. Termcap entries for the TOSWIN window
|
||||
manager and the virtual console terminals have been appended to the
|
||||
termcap file that comes with the Vim distribution.
|
||||
|
||||
If you should encounter problems with swapped <BS> and <Del> keys, see
|
||||
|:fixdel|.
|
||||
|
||||
Because terminal updating under MiNT is often slow (e.g. serial line
|
||||
terminal), the 'showcmd' and 'ruler' options are default off.
|
||||
If you have a fast terminal, try setting them on. You might
|
||||
also want to set 'ttyfast'.
|
||||
|
||||
Send bug reports to
|
||||
|
||||
Jens M. Felderhoff, e-mail: <jmf@infko.uni-koblenz.de>
|
||||
|
||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||
|
@ -30,8 +30,8 @@ can be changed at compile time.
|
||||
|
||||
Because terminal updating under Unix is often slow (e.g. serial line
|
||||
terminal, shell window in suntools), the 'showcmd' and 'ruler' options
|
||||
are default off. If you have a fast terminal, try setting them on. You might
|
||||
also want to set 'ttyfast'.
|
||||
are off by default. If you have a fast terminal, try setting them on. You
|
||||
might also want to set 'ttyfast'.
|
||||
|
||||
When using Vim in an xterm the mouse clicks can be used by Vim by setting
|
||||
'mouse' to "a". If there is access to an X-server gui style copy/paste will
|
||||
|
@ -1,4 +1,4 @@
|
||||
*pattern.txt* For Vim version 8.2. Last change: 2019 Dec 07
|
||||
*pattern.txt* For Vim version 8.2. Last change: 2020 Jul 10
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -1279,7 +1279,7 @@ not match in "càt" (where the a has the composing character 0x0300), but
|
||||
0xe1, it does not have a compositing character). It does match "cat" (where
|
||||
the a is just an a).
|
||||
|
||||
When a composing character appears at the start of the pattern of after an
|
||||
When a composing character appears at the start of the pattern or after an
|
||||
item that doesn't include the composing character, a match is found at any
|
||||
character that includes this composing character.
|
||||
|
||||
|
@ -1964,7 +1964,10 @@ The function should return a single line of text to display in the quickfix
|
||||
window for each entry from start_idx to end_idx. The function can obtain
|
||||
information about the entries using the |getqflist()| function and specifying
|
||||
the quickfix list identifier "id". For a location list, getloclist() function
|
||||
can be used with the 'winid' argument.
|
||||
can be used with the 'winid' argument. If an empty list is returned, then the
|
||||
default format is used to display all the entries. If an item in the returned
|
||||
list is an empty string, then the default format is used to display the
|
||||
corresponding entry.
|
||||
|
||||
If a quickfix or location list specific customization is needed, then the
|
||||
'quickfixtextfunc' attribute of the list can be set using the |setqflist()| or
|
||||
|
@ -642,7 +642,7 @@ disallowed though.
|
||||
This assumes you write one or more plugins that you distribute as a package.
|
||||
|
||||
If you have two unrelated plugins you would use two packages, so that Vim
|
||||
users can chose what they include or not. Or you can decide to use one
|
||||
users can choose what they include or not. Or you can decide to use one
|
||||
package with optional plugins, and tell the user to add the ones he wants with
|
||||
`:packadd`.
|
||||
|
||||
|
@ -69,7 +69,7 @@ o Invocations
|
||||
+ 'rightleft' ('rl') sets window orientation to right-to-left.
|
||||
+ 'delcombine' ('deco'), boolean, if editing UTF-8 encoded languages,
|
||||
allows one to remove a composing character which gets superimposed
|
||||
on those that proceeded them (some languages require this).
|
||||
on those that preceded them (some languages require this).
|
||||
+ 'rightleftcmd' ('rlc') sets the command-line within certain modes
|
||||
(such as search) to be utilized in right-to-left orientation as well.
|
||||
|
||||
|
@ -78,7 +78,7 @@ used by popup windows where 'cursorline' is set.
|
||||
*sign-priority*
|
||||
Each placed sign is assigned a priority value. When multiple signs are placed
|
||||
on the same line, the attributes of the sign with the highest priority is used
|
||||
independent of the sign group. The default priority for a sign is 10. The
|
||||
independently of the sign group. The default priority for a sign is 10. The
|
||||
priority is assigned at the time of placing a sign.
|
||||
|
||||
When the line on which the sign is placed is deleted, the sign is moved to the
|
||||
|
@ -1,4 +1,4 @@
|
||||
*spell.txt* For Vim version 8.2. Last change: 2020 Jun 10
|
||||
*spell.txt* For Vim version 8.2. Last change: 2020 Jul 10
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -653,11 +653,12 @@ ask you where to write the file (there must be a writable directory in
|
||||
'runtimepath' for this).
|
||||
|
||||
The plugin has a default place where to look for spell files, on the Vim ftp
|
||||
server. If you want to use another location or another protocol, set the
|
||||
g:spellfile_URL variable to the directory that holds the spell files. The
|
||||
|netrw| plugin is used for getting the file, look there for the specific
|
||||
syntax of the URL. Example: >
|
||||
let g:spellfile_URL = 'http://ftp.vim.org/vim/runtime/spell'
|
||||
server. The protocol used is SSL (https://) for security. If you want to use
|
||||
another location or another protocol, set the g:spellfile_URL variable to the
|
||||
directory that holds the spell files. You can use http:// or ftp://, but you
|
||||
are taking a security risk then. The |netrw| plugin is used for getting the
|
||||
file, look there for the specific syntax of the URL. Example: >
|
||||
let g:spellfile_URL = 'https://ftp.nluug.nl/vim/runtime/spell'
|
||||
You may need to escape special characters.
|
||||
|
||||
The plugin will only ask about downloading a language once. If you want to
|
||||
|
@ -1,4 +1,4 @@
|
||||
*syntax.txt* For Vim version 8.2. Last change: 2020 Jun 01
|
||||
*syntax.txt* For Vim version 8.2. Last change: 2020 Jul 08
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -1403,7 +1403,7 @@ to your startup file.
|
||||
|
||||
EUPHORIA *euphoria3.vim* *euphoria4.vim* *ft-euphoria-syntax*
|
||||
|
||||
Two syntax highlighting files exists for Euphoria. One for Euphoria
|
||||
Two syntax highlighting files exist for Euphoria. One for Euphoria
|
||||
version 3.1.1, which is the default syntax highlighting file, and one for
|
||||
Euphoria version 4.0.5 or later.
|
||||
|
||||
@ -1937,7 +1937,7 @@ new highlightings for the following groups.:
|
||||
Debug, DebugSpecial, DebugString, DebugBoolean, DebugType
|
||||
which are used for the statement itself, special characters used in debug
|
||||
strings, strings, boolean constants and types (this, super) respectively. I
|
||||
have opted to chose another background for those statements.
|
||||
have opted to choose another background for those statements.
|
||||
|
||||
Javadoc is a program that takes special comments out of Java program files and
|
||||
creates HTML pages. The standard configuration will highlight this HTML code
|
||||
@ -5018,7 +5018,7 @@ ctermul={color-nr} *highlight-ctermul*
|
||||
console. Example, for reverse video: >
|
||||
:highlight Visual ctermfg=bg ctermbg=fg
|
||||
< Note that the colors are used that are valid at the moment this
|
||||
command are given. If the Normal group colors are changed later, the
|
||||
command is given. If the Normal group colors are changed later, the
|
||||
"fg" and "bg" colors will not be adjusted.
|
||||
|
||||
|
||||
|
@ -1979,6 +1979,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
|
||||
:<sfile> cmdline.txt /*:<sfile>*
|
||||
:<sflnum> cmdline.txt /*:<sflnum>*
|
||||
:<slnum> cmdline.txt /*:<slnum>*
|
||||
:<stack> cmdline.txt /*:<stack>*
|
||||
:= various.txt /*:=*
|
||||
:> change.txt /*:>*
|
||||
:? cmdline.txt /*:?*
|
||||
@ -3647,6 +3648,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
|
||||
<sfile> cmdline.txt /*<sfile>*
|
||||
<sflnum> cmdline.txt /*<sflnum>*
|
||||
<slnum> cmdline.txt /*<slnum>*
|
||||
<stack> cmdline.txt /*<stack>*
|
||||
<xCSI> intro.txt /*<xCSI>*
|
||||
<xDown> term.txt /*<xDown>*
|
||||
<xEnd> term.txt /*<xEnd>*
|
||||
@ -3894,9 +3896,11 @@ E103 diff.txt /*E103*
|
||||
E104 digraph.txt /*E104*
|
||||
E1042 vim9.txt /*E1042*
|
||||
E105 mbyte.txt /*E105*
|
||||
E1050 vim9.txt /*E1050*
|
||||
E107 eval.txt /*E107*
|
||||
E108 eval.txt /*E108*
|
||||
E109 eval.txt /*E109*
|
||||
E1092 vim9.txt /*E1092*
|
||||
E1094 vim9.txt /*E1094*
|
||||
E11 cmdline.txt /*E11*
|
||||
E110 eval.txt /*E110*
|
||||
@ -4698,6 +4702,7 @@ E855 autocmd.txt /*E855*
|
||||
E858 eval.txt /*E858*
|
||||
E859 eval.txt /*E859*
|
||||
E86 windows.txt /*E86*
|
||||
E860 textprop.txt /*E860*
|
||||
E861 popup.txt /*E861*
|
||||
E862 eval.txt /*E862*
|
||||
E863 popup.txt /*E863*
|
||||
@ -8196,6 +8201,7 @@ no_plugin_maps filetype.txt /*no_plugin_maps*
|
||||
nocombine syntax.txt /*nocombine*
|
||||
non-greedy pattern.txt /*non-greedy*
|
||||
non-zero-arg eval.txt /*non-zero-arg*
|
||||
none-function_argument eval.txt /*none-function_argument*
|
||||
none-variable eval.txt /*none-variable*
|
||||
normal-index index.txt /*normal-index*
|
||||
not-compatible usr_01.txt /*not-compatible*
|
||||
@ -8819,7 +8825,9 @@ setloclist() eval.txt /*setloclist()*
|
||||
setmatches() eval.txt /*setmatches()*
|
||||
setpos() eval.txt /*setpos()*
|
||||
setqflist() eval.txt /*setqflist()*
|
||||
setqflist-action eval.txt /*setqflist-action*
|
||||
setqflist-examples quickfix.txt /*setqflist-examples*
|
||||
setqflist-what eval.txt /*setqflist-what*
|
||||
setreg() eval.txt /*setreg()*
|
||||
settabvar() eval.txt /*settabvar()*
|
||||
settabwinvar() eval.txt /*settabwinvar()*
|
||||
@ -10002,6 +10010,7 @@ vim9-declaration vim9.txt /*vim9-declaration*
|
||||
vim9-declarations usr_46.txt /*vim9-declarations*
|
||||
vim9-differences vim9.txt /*vim9-differences*
|
||||
vim9-export vim9.txt /*vim9-export*
|
||||
vim9-gotchas vim9.txt /*vim9-gotchas*
|
||||
vim9-import vim9.txt /*vim9-import*
|
||||
vim9-rationale vim9.txt /*vim9-rationale*
|
||||
vim9-scopes vim9.txt /*vim9-scopes*
|
||||
|
@ -1,4 +1,4 @@
|
||||
*testing.txt* For Vim version 8.2. Last change: 2020 Jun 15
|
||||
*testing.txt* For Vim version 8.2. Last change: 2020 Jul 11
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -264,7 +264,8 @@ assert_equal({expected}, {actual} [, {msg}])
|
||||
< Will result in a string to be added to |v:errors|:
|
||||
test.vim line 12: Expected 'foo' but got 'bar' ~
|
||||
|
||||
Can also be used as a |method|: >
|
||||
Can also be used as a |method|, the base is passed as the
|
||||
second argument: >
|
||||
mylist->assert_equal([1, 2, 3])
|
||||
|
||||
< *assert_equalfile()*
|
||||
@ -294,8 +295,23 @@ assert_exception({error} [, {msg}]) *assert_exception()*
|
||||
|
||||
assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()*
|
||||
Run {cmd} and add an error message to |v:errors| if it does
|
||||
NOT produce an error. Also see |assert-return|.
|
||||
When {error} is given it must match in |v:errmsg|.
|
||||
NOT produce an error or when {error} is not found in the
|
||||
error message. Also see |assert-return|.
|
||||
|
||||
When {error} is a string it must be found literally in the
|
||||
first reported error. Most often this will be the error code,
|
||||
including the colon, e.g. "E123:". >
|
||||
assert_fails('bad cmd', 'E987:')
|
||||
<
|
||||
When {error} is a |List| with one or two strings, these are
|
||||
used as patterns. The first pattern is matched against the
|
||||
first reported error: >
|
||||
assert_fails('cmd', ['E987:.*expected bool'])
|
||||
< The second pattern, if present, is matched against the last
|
||||
reported error. To only match the last error use an empty
|
||||
string for the first error: >
|
||||
assert_fails('cmd', ['', 'E987:'])
|
||||
<
|
||||
Note that beeping is not considered an error, and some failing
|
||||
commands only beep. Use |assert_beeps()| for those.
|
||||
|
||||
|
@ -220,7 +220,7 @@ prop_list({lnum} [, {props}]) *prop_list()*
|
||||
Can also be used as a |method|: >
|
||||
GetLnum()->prop_list()
|
||||
<
|
||||
*prop_remove()* *E968*
|
||||
*prop_remove()* *E968* *E860*
|
||||
prop_remove({props} [, {lnum} [, {lnum-end}]])
|
||||
Remove a matching text property from line {lnum}. When
|
||||
{lnum-end} is given, remove matching text properties from line
|
||||
|
@ -1,4 +1,4 @@
|
||||
*todo.txt* For Vim version 8.2. Last change: 2020 Jun 21
|
||||
*todo.txt* For Vim version 8.2. Last change: 2020 Jul 26
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -38,23 +38,37 @@ browser use: https://github.com/vim/vim/issues/1234
|
||||
*known-bugs*
|
||||
-------------------- Known bugs and current work -----------------------
|
||||
|
||||
Include src/po/vim.pot ?
|
||||
|
||||
See if resizing a terminal can be fixed.
|
||||
|
||||
Vim9 script:
|
||||
Making everything work:
|
||||
- Error for "g:var: string = 'value'"
|
||||
- Make func()->append('$') work - value is last argument, not first. #6305
|
||||
- possible memory leak in test_vim9_func through compile_nested_function.
|
||||
- memory leaks in test_vim9_expr
|
||||
- memory leaks in test_vim9_script
|
||||
- more return types depending on the first argument, like sort().
|
||||
- more items in https://github.com/vim/vim/issues/6507
|
||||
- More "goto failed" with check for trylevel.
|
||||
- memory leak in test_vim9_script
|
||||
- Check that when sourcing a Vim9 script, only the global items can be used.
|
||||
- Make "true" and "false" work in vim9script
|
||||
- :put with a "=" register argument doesn't work, need to find the expression
|
||||
and compile it. (#6397)
|
||||
- At the script level, keep script variables local to the block they are
|
||||
declared in? Need to remember what variables were declared and delete them
|
||||
when leaving the block.
|
||||
- Implement { } block at the script level.
|
||||
- need to check type when a declaration specifies a type: #6507
|
||||
let nr: number = 'asdf'
|
||||
- Make map() give an error if the resulting type is wrong.
|
||||
Add mapnew() to create a new List/Dict for the result, which can have a
|
||||
different value type.
|
||||
- Implement "export {one, two three}".
|
||||
- ISN_CHECKTYPE could use check_argtype()
|
||||
- Slice of list: [1, 2, 3][1:2].
|
||||
- give error for variable name:
|
||||
let p = function('NoSuchFunc')
|
||||
- Give runtime error if function argument is wrong.
|
||||
def Increment(nr: number)
|
||||
range(3)->Increment()
|
||||
- Expand `=expr` in :next, :argedit, :argadd, :argdelete, :drop
|
||||
- Expand `=expr` in :vimgrep, :vimgrepadd, :lvimgrep, :lvimgrepadd
|
||||
- Expand `=expr` in :mkspell
|
||||
- Test that a function defined inside a :def function is local to that
|
||||
function, g: functions can be defined and script-local functions cannot be
|
||||
defined.
|
||||
- Support passing v:none to use the default argument value. (#6504)
|
||||
- make 0 == 'string' fail on the script level, like inside :def.
|
||||
- Check that when using a user function name without prefix, it does not find
|
||||
a global function. Prefixing g: is required.
|
||||
@ -68,15 +82,12 @@ Making everything work:
|
||||
- Compile redir to local variable: var_redir_start().
|
||||
- Compile builtin functions that access local variables:
|
||||
islocked()
|
||||
- Expand `=expr` in :next, :argedit, :argadd, :argdelete, :drop
|
||||
- Expand `=expr` in :vimgrep, :vimgrepadd, :lvimgrep, :lvimgrepadd
|
||||
- Expand `=expr` in :mkspell
|
||||
- possible memory leak in test_vim9_func through compile_nested_function.
|
||||
- memory leaks in test_vim9_expr
|
||||
- memory leaks in test_vim9_script
|
||||
- memory leaks in test_vim9_cmd
|
||||
- When evaluating constants for script variables, some functions could work:
|
||||
has('asdf'), len('string')
|
||||
- Support type for ":let"/":const" at script level for Vim9 script.
|
||||
(Ben Jackson, #5671)
|
||||
Can we share the code from ex_let_const() between direct execution and
|
||||
compiling?
|
||||
- Implement "as Name" in "import Item as Name from ..."
|
||||
- Disallow unlet for local/script/imported vars
|
||||
- Make "++nr" work.
|
||||
@ -87,6 +98,7 @@ Making everything work:
|
||||
- eval_expr() call in dbg_parsearg() and debuggy_find()
|
||||
- has() is compiled as a constant, but some checks are dynamic.
|
||||
Check for dynamic values, such as "gui_running".
|
||||
- Implement command modifiers, such as "silent". (#6530)
|
||||
New syntax and functionality:
|
||||
Improve error checking:
|
||||
- "echo Func()" is an error if Func() does not return anything.
|
||||
@ -134,18 +146,16 @@ Further improvements:
|
||||
- compile "expr" and "call" expression of a channel in channel_exe_cmd()?
|
||||
|
||||
Popup windows:
|
||||
- With some sequence get get hidden finished terminal buffer. (#5768)
|
||||
Cannot close popup terminal (#5744)
|
||||
Buffer can't be wiped, gets status "aF". (#5764)
|
||||
Is buf->nwindows incorrect?
|
||||
- popup_clear() and popup_close() should close the terminal popup, and
|
||||
make the buffer hidden. #5745
|
||||
- Cursor not updated before a redraw, making it jump. (#5943)
|
||||
- Add a termcap entry for changing the cursor when it goes under the popup and
|
||||
back. like t_SI and t_EI (t_SU and t_EU, where "U" means under?)
|
||||
- With terminal in popup, allow for popup_hide() to temporarily hide it.?
|
||||
- Fire some autocommand event after a new popup window was created and
|
||||
positioned? PopupNew? Could be used to set some options or move it out of
|
||||
the way. (#5737)
|
||||
However, it may also cause trouble, changing the popup of another plugin.
|
||||
- Add a way to use popup_menu() synchronously: instead of invoking the
|
||||
callback, return the choice. (Ben Jackson, #6534)
|
||||
- Use popup (or popup menu) for command line completion
|
||||
- When using a popup for the info of a completion menu, and there is not
|
||||
enough space, let the popup overlap with the menu. (#4544)
|
||||
@ -201,6 +211,9 @@ Terminal debugger:
|
||||
|
||||
Terminal emulator window:
|
||||
- No support for underline color, t_8u.
|
||||
- When in terminal-Normal mode when the job finishes, the cursor jumps to the
|
||||
end but the window is not updated. This only happens when typing "a".
|
||||
:term bash -c "for V in {0..5}; do echo $V; sleep 1; done"
|
||||
- When started with ":terminal ++close" and the shell exits but there is a
|
||||
background process, the window remains open, because the channel still
|
||||
exists (and output still shows). Perhaps close the window when an explicit
|
||||
@ -240,7 +253,7 @@ Terminal emulator window:
|
||||
conversions.
|
||||
|
||||
Error numbers available:
|
||||
E489, E610, E611, E653, E856
|
||||
E610, E611, E653
|
||||
|
||||
Remove SPACE_IN_FILENAME ? It is only used for completion.
|
||||
|
||||
@ -271,11 +284,32 @@ autocommands for the buffer lifecycle:
|
||||
BufIsRenamed (after buffer ID gets another name)
|
||||
The buffer list and windows are locked, no changes possible
|
||||
|
||||
How about removing Atari MiNT support?
|
||||
src/Make_mint.mak, src/os_mint.h, matches with __MINT__
|
||||
Make it possible to map (console and GUI): #6457
|
||||
<C-[> 0x27 or is this <Esc> ?
|
||||
<C-\> 0x28
|
||||
<C-]> 0x29
|
||||
<C-^> 0x30
|
||||
<C-_> 0x31
|
||||
|
||||
Patch for Template string: #4634
|
||||
Have another look at the implementation.
|
||||
|
||||
Add the <=> (spaceship) operator and "cond ?< expr ?= expr ?> expr"
|
||||
replace this:
|
||||
let left = GetLeftFunc()
|
||||
let right = GetRightFunc()
|
||||
let res = left < right ? lower : left == right ? equal : upper
|
||||
by:
|
||||
let res = GetLeftFunc() <=> GetRightFunc() ?< lower ?= equal ?> upper
|
||||
Patch to make :q work with local arglist. (Christian Brabandt, #6286)
|
||||
|
||||
Lua: updating wrong buffer when using newly created, unloaded buffer.
|
||||
(#6539)
|
||||
|
||||
When "+ register is set then "" points to it. If another Vim grabs the "+
|
||||
register, then "" doesn't contain anything. Make it still follow "+.
|
||||
(#6435)
|
||||
|
||||
Patch to fix drawing error with DirectX. (James Grant, #5688)
|
||||
Causes flicker on resizing. Workaround from Ken Takata.
|
||||
How about only setting the attribute when part of the Vim window is offscreen?
|
||||
@ -320,6 +354,9 @@ When changing the crypt key the buffer should be considered modified.
|
||||
Like when changing 'fileformat'. Save the old key in save_file_ff().
|
||||
(Ninu-Ciprian Marginean)
|
||||
|
||||
Patch to implement the vimtutor with a plugin: #6414
|
||||
Was originally writtten by Felipe Morales.
|
||||
|
||||
Strange sequence of BufWipeout and BufNew events while doing omni-complete.
|
||||
(Paul Jolly, #5656)
|
||||
Get BufDelete without preceding BufNew. (Paul Jolly, #5694)
|
||||
@ -339,6 +376,10 @@ Test loose_clipboard() by selecting text before suspending.
|
||||
|
||||
Undo puts cursor in wrong line after "cG<Esc>" undo.
|
||||
|
||||
Implement completion for "breakadd". Should expand the second argument, e.g.
|
||||
"func", and then function names after ":breakadd func". Including
|
||||
script-local functions.
|
||||
|
||||
:unmap <c-n> gives error but does remove the mapping. (Antony Scriven, 2019
|
||||
Dec 19)
|
||||
|
||||
@ -378,10 +419,6 @@ behavior of i_CTRl-R_CTRL-R differs from documentation. (Paul Desmond Parker,
|
||||
goes to any buffer, and then :bnext skips help buffers, since they are
|
||||
unlisted. (#4478)
|
||||
|
||||
Patch for Template string: #4634
|
||||
Copies the text twice, not very efficient. Requires a separate implementation
|
||||
for Vim9 script, compiling the string parts and expressions.
|
||||
|
||||
Statusline highlighting error, off by one. (#5599)
|
||||
|
||||
":find" with 'path' set to "data*" does not find files, while completion does
|
||||
@ -495,9 +532,6 @@ window 2. User expects 10 to be added to size of window 2. (Daniel Steinberg,
|
||||
Would be nice to set tab-local values for 'diffexpr' and 'diffopt'. Use
|
||||
t:diffexpr_option t:diffopt_option? (#4782)
|
||||
|
||||
v:register isn't reset early enough, may be used by next command.
|
||||
(Andy Massimino, #5294, possible fix in #5305)
|
||||
|
||||
Internal diff doesn't handle binary file like external diff does. (Mike
|
||||
Williams, 2018 Oct 30)
|
||||
|
||||
@ -580,9 +614,6 @@ buffer didn't change at all.
|
||||
Line numbers in profile are off when function was defined with ":execute".
|
||||
(Daniel Hahler, #4511)
|
||||
|
||||
Add a way to create an empty, hidden buffer. Like doing ":new|hide".
|
||||
":let buf = bufcreate('name')
|
||||
|
||||
Session file contains absolute paths when "curdir" is removed form
|
||||
'sessionoptions', making it impossible to have a session with a relative path.
|
||||
(#4450)
|
||||
@ -1060,7 +1091,7 @@ Problem with three-piece comment. (Michael Lee, 2017 May 11, #1696)
|
||||
|
||||
Creating a partial with an autoload function is confused about the "self"
|
||||
attribute of the function. For an unknown function assume "self" and make
|
||||
that optiona? (Bjorn Linse, 2017 Aug 5)
|
||||
that optional? (Bjorn Linse, 2017 Aug 5)
|
||||
|
||||
Cindent: returning a structure has more indent for the second item.
|
||||
(Sam Pagenkopf, 2017 Sep 14, #2090)
|
||||
@ -1199,8 +1230,8 @@ Make a function to check for function-like type?
|
||||
Screen updated delayed when using CTRL-O u in Insert mode.
|
||||
(Barlik, #1191) Perhaps because status message?
|
||||
|
||||
Implement named arguments for functions:
|
||||
func Foo(start, count = 1 all = 1)
|
||||
Implement named arguments for functions with optional arguments:
|
||||
func Foo(start, count = 1, all = 1)
|
||||
call Foo(12, all = 0)
|
||||
|
||||
Add a command to take a range of lines, filter them and put the output
|
||||
@ -1393,8 +1424,6 @@ Did maintainer reply?
|
||||
ml_get errors when reloading file. (Chris Desjardins, 2016 Apr 19)
|
||||
Also with latest version.
|
||||
|
||||
Cannot delete a file with square brackets with delete(). (#696)
|
||||
|
||||
Completion for input() does not expand environment variables. (chdiza, 2016
|
||||
Jul 25, #948)
|
||||
|
||||
@ -1403,8 +1432,6 @@ names, shell commands and the like. (Kikuchan, 2010 Oct 14)
|
||||
Assume the system converts between the actual encoding of the filesystem to
|
||||
the system encoding (usually utf-8).
|
||||
|
||||
'hlsearch' interferes with a Conceal match. (Rom Grk, 2016 Aug 9)
|
||||
|
||||
MS-Windows: use WS_HIDE instead of SW_SHOWMINNOACTIVE in os_win32.c?
|
||||
Otherwise task flickers in taskbar.
|
||||
|
||||
@ -1416,8 +1443,6 @@ Have a way to get the call stack, in a function and from an exception.
|
||||
Second problem in #966: ins_compl_add_tv() uses get_dict_string() multiple
|
||||
times, overwrites the one buffer. (Nikolay Pavlov, 2016 Aug 5)
|
||||
|
||||
Possibly wrong value for seq_cur. (Florent Fayolle, 2016 May 15, #806)
|
||||
|
||||
Filetype plugin for awk. (Doug Kearns, 2016 Sep 5)
|
||||
|
||||
Patch to improve map documentation. Issue #799.
|
||||
@ -1436,8 +1461,6 @@ Reject the value? #710.
|
||||
When doing "vi buf.md" a BufNew autocommand for *.md is not triggered.
|
||||
Because of using the initial buffer? (Dun Peal, 2016 May 12)
|
||||
|
||||
Add redrawtabline command. (Naruhiko Nishino, 2016 Jun 11)
|
||||
|
||||
Neovim patch for utfc_ptr2char_len() https://github.com/neovim/neovim/pull/4574
|
||||
No test, needs some work to include.
|
||||
|
||||
@ -1507,20 +1530,10 @@ If ":bd" also closes a Tab page then the " mark is not set. (Harm te Hennepe,
|
||||
Patch to avoid redrawing tabline when the popup menu is visible.
|
||||
(Christian Brabandt, 2016 Jan 28)
|
||||
|
||||
Patch to show search statistics. (Christian Brabandt, 2016 Jul 22)
|
||||
|
||||
When the CursorMovedI event triggers, and CTRL-X was typed, a script cannot
|
||||
restore the mode properly. (Andrew Stewart, 2016 Apr 20)
|
||||
Do not trigger the event?
|
||||
|
||||
Using ":windo" to set options in all windows has the side effect that it
|
||||
changes the window layout and the current window. Make a variant that saves
|
||||
and restores. Use in the matchparen plugin.
|
||||
Perhaps we can use ":windo <restore> {cmd}"?
|
||||
Patch to add <restore> to :windo, :bufdo, etc. (Christian Brabandt, 2015 Jan
|
||||
6, 2nd message)
|
||||
Alternative: ":keeppos" command modifier: ":keeppos windo {cmd}".
|
||||
|
||||
Patch to fix display of listchars on the cursorline. (Nayuri Aohime, 2013)
|
||||
Update suggested by Yasuhiro Matsumoto, 2014 Nov 25:
|
||||
https://gist.github.com/presuku/d3d6b230b9b6dcfc0477
|
||||
@ -1549,10 +1562,6 @@ Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
|
||||
|
||||
Comparing nested structures with "==" uses a different comparator than when
|
||||
comparing individual items.
|
||||
Also, "'' == 0" evaluates to true, which isn't nice.
|
||||
Add "===" to have a strict comparison (type and value match).
|
||||
Add "==*" (?) to have a value match, but no automatic conversion, and v:true
|
||||
equals 1 and 1.0, v:false equals 0 and 0.0.?
|
||||
|
||||
Using uninitialized memory. (Dominique Pelle, 2015 Nov 4)
|
||||
|
||||
@ -1723,8 +1732,6 @@ arguments.
|
||||
|
||||
Problem with transparent and matchgroup. Issue #475
|
||||
|
||||
Patch to add :arglocal and :arglists. (Marcin Szamotulski, 2014 Aug 6)
|
||||
|
||||
Spell files use a latin single quote. Unicode also has another single quote:
|
||||
0x2019. (Ron Aaron, 2014 Apr 4)
|
||||
New OpenOffice spell files support this with ICONV. But they are not
|
||||
@ -1751,8 +1758,11 @@ from?
|
||||
Problem with upwards search on Windows (works OK on Linux). (Brett Stahlman,
|
||||
2014 Jun 8)
|
||||
|
||||
Include a plugin manager with Vim? Neobundle seems to be the best currently.
|
||||
Include a plugin manager with Vim? vim-plug seems to be the best currently:
|
||||
https://github.com/junegunn/vim-plug.
|
||||
Also Vundle: https://github.com/gmarik/vundle
|
||||
Or minpac: https://github.com/k-takata/minpac, since it leverages the builtin
|
||||
package feature.
|
||||
Long message about this from ZyX, 2014 Mar 23. And following replies.
|
||||
Also see http://vim-wiki.mawercer.de/wiki/topic/vim%20plugin%20managment.html
|
||||
User view:
|
||||
@ -1807,6 +1817,7 @@ instead. (Samuel Ferencik, 2013 Sep 28)
|
||||
|
||||
Patch for XDG base directory support. (Jean François Bignolles, 2014 Mar 4)
|
||||
Remark on the docs. Should not be a compile time feature. But then what?
|
||||
Also see #2034.
|
||||
|
||||
Completion of ":e" is ":earlier", should be ":edit". Complete to the matching
|
||||
command instead of doing this alphabetically. (Mikel Jorgensen)
|
||||
@ -1868,6 +1879,10 @@ Patch to add {lhs} to :mapclear: clear all maps starting with {lhs}.
|
||||
|
||||
Exception caused by argument of return is not caught by try/catch.
|
||||
(David Barnett, 2013 Nov 19)
|
||||
Bug in try/catch: return with invalid compare throws error that isn't caught.
|
||||
(ZyX, 2011 Jan 26)
|
||||
try/catch not working for argument of return. (Matt Wozniski, 2008 Sep 15)
|
||||
try/catch not working when inside a for loop. (ZyX, 2011 Jan 25)
|
||||
|
||||
Patch to fix that 'cedit' is recognized after :normal. (Christian Brabandt,
|
||||
2013 Mar 19, later message)
|
||||
@ -1903,6 +1918,8 @@ process that is running. It might actually be some other program, e.g. after
|
||||
a reboot.
|
||||
|
||||
patch to add "combine" flag to syntax commands. (so8res, 2012 Dec 6)
|
||||
Patch to add "combine" to :syntax, combines highlight attributes. (Nate
|
||||
Soares, 2012 Dec 3)
|
||||
|
||||
Syntax update problem in one buffer opened in two windows, bottom window is
|
||||
not correctly updated. (Paul Harris, 2012 Feb 27)
|
||||
@ -1940,13 +1957,6 @@ Szamotulski, 2012 Nov 8)
|
||||
Session file creation: 'autochdir' causes trouble. Keep it off until after
|
||||
loading all files.
|
||||
|
||||
MS-Windows resizing problems:
|
||||
- Windows window on screen positioning: Patch by Yukihiro Nakadaira, 2012 Jun
|
||||
20. Uses getWindowRect() instead of GetWindowPlacement()
|
||||
- Win32: When the taskbar is at the top of the screen creating the tabbar
|
||||
causes the window to move unnecessarily. (William E. Skeith III, 2012 Jan
|
||||
12) Patch: 2012 Jan 13 Needs more work (2012 Feb 2)
|
||||
|
||||
'iminsert' global value set when using ":setlocal iminsert"? (Wu, 2012 Jun 23)
|
||||
|
||||
Patch to append regexp to tag commands to make it possible to select one out
|
||||
@ -2090,9 +2100,6 @@ doesn't jump to the correct line with :cfirst. (ZyX, 2011 Sep 18)
|
||||
|
||||
Behavior of i" and a" text objects isn't logical. (Ben Fritz, 2013 Nov 19)
|
||||
|
||||
Bug in try/catch: return with invalid compare throws error that isn't caught.
|
||||
(ZyX, 2011 Jan 26)
|
||||
|
||||
When setting a local option value from the global value, add a script ID that
|
||||
indicates this, so that ":verbose set" can give a hint. Check with options in
|
||||
the help file.
|
||||
@ -2281,9 +2288,6 @@ Add local time at start of --startuptime output.
|
||||
Requires configure check for localtime().
|
||||
Use format year-month-day hr:min:sec.
|
||||
|
||||
Patch to add "combine" to :syntax, combines highlight attributes. (Nate
|
||||
Soares, 2012 Dec 3)
|
||||
|
||||
Patch to make ":hi link" also take arguments. (Nate Soares, 2012 Dec 4)
|
||||
|
||||
Shell not recognized properly if it ends in "csh -f". (James Vega, 2009 Nov 3)
|
||||
@ -2478,6 +2482,9 @@ Sergey Khorev)
|
||||
|
||||
Consider making YankRing or something else that keeps a list of yanked text
|
||||
part of standard Vim. The "1 to "9 registers are not sufficient.
|
||||
6 When yanking into the unnamed registers several times, somehow make the
|
||||
previous contents also available (like it's done for deleting). What
|
||||
register names to use? g"1, g"2, etc.?
|
||||
|
||||
After doing "su" $HOME can be the old user's home, thus ~root/file is not
|
||||
correct. Don't use it in the swap file.
|
||||
@ -2684,10 +2691,6 @@ Problem with 'ts' set to 9 and 'showbreak' to ">>>". (Matthew Winn, 2007 Oct
|
||||
In the swapfile dialog, add a H(elp) option that gives more info about what
|
||||
each choice does. Similar to ":help swap-exists-choices"
|
||||
|
||||
try/catch not working for argument of return. (Matt Wozniski, 2008 Sep 15)
|
||||
|
||||
try/catch not working when inside a for loop. (ZyX, 2011 Jan 25)
|
||||
|
||||
":tab help" always opens a new tab, while ":help" re-uses an existing window.
|
||||
Would be more consistent when an existing tab is re-used. (Tony Mechelynck)
|
||||
|
||||
@ -3257,7 +3260,7 @@ Quickfix/Location List:
|
||||
":grep" and ":helpgrep".
|
||||
More generic solution: support a filter (e.g., by calling a function).
|
||||
7 Add a command that goes back to the position from before jumping to the
|
||||
first quickfix location. ":cbefore"?
|
||||
first quickfix location.
|
||||
|
||||
Vi incompatibility:
|
||||
- Try new POSIX tests, made after my comments. (Geoff Clare, 2005 April 7)
|
||||
@ -3294,7 +3297,6 @@ Vi incompatibility:
|
||||
7 The ":map" command output overwrites the command. Perhaps it should keep
|
||||
the ":map" when it's used without arguments?
|
||||
7 CTRL-L is not the end of a section? It is for Posix! Make it an option.
|
||||
7 Implement 'prompt' option. Init to off when stdin is not a tty.
|
||||
7 Add a way to send an email for a crashed edit session. Create a file when
|
||||
making changes (containing name of the swap file), delete it when writing
|
||||
the file. Supply a program that can check for crashed sessions (either
|
||||
@ -3472,8 +3474,6 @@ GUI:
|
||||
Solaris 2.6. (Marley)
|
||||
9 On Solaris: Using a "-geometry" argument, bigger than the window where Vim
|
||||
is started from, causes empty lines below the cmdline. (raf)
|
||||
8 X11 GUI: When menu is disabled by excluding 'm' from 'guioptions', ALT key
|
||||
should not be used to trigger a menu (like the Win32 version).
|
||||
8 When setting 'langmenu', it should be effective immediately. Store both
|
||||
the English and the translated text in the menu structure. Re-generate
|
||||
the translation when 'langmenu' has changed.
|
||||
@ -3512,10 +3512,6 @@ GUI:
|
||||
When the "+0+0" is omitted it works.
|
||||
8 When starting an external command, and 'guipty' set, BS and DEL are mixed
|
||||
up. Set erase character somehow?
|
||||
8 A dead circumflex followed by a space should give the '^' character
|
||||
(Rommel). Look how xterm does this.
|
||||
Also: Bednar has some code for dead key handling.
|
||||
Also: Nedit 5.0.2 with USE_XMIM does it right. (Gaya)
|
||||
8 The compose key doesn't work properly (Cepas). Both for Win32 and X11.
|
||||
7 The cursor in an inactive window should be hollow. Currently it's not
|
||||
visible.
|
||||
@ -3612,17 +3608,8 @@ Macintosh:
|
||||
|
||||
|
||||
"Small" problems:
|
||||
- Can't disable terminal flow control, to enable the use of CTRL-S and
|
||||
CTRL-Q. Add an option for it?
|
||||
- When using e_secure in do_one_cmd() mention the command being executed,
|
||||
otherwise it's not clear where it comes from.
|
||||
- When the quickfix window is open and executing ":echo 'hello'" using the
|
||||
Command-line window, the text is immediately removed by the redrawing.
|
||||
(Michael Henry, 2008 Nov 1)
|
||||
Generic solution: When redrawing while there is a message on the
|
||||
cmdline, don't erase the display but draw over the existing text.
|
||||
Other solution, redraw after closing the cmdline window, before executing
|
||||
the command.
|
||||
9 For Turkish vim_tolower() and vim_toupper() also need to use utf_
|
||||
functions for characters below 0x80. (Sertacyildiz)
|
||||
9 When the last edited file is a help file, using '0 in a new Vim doesn't
|
||||
@ -4082,8 +4069,6 @@ Spell checking:
|
||||
- Considering Hunspell 1.1.4:
|
||||
What does MAXNGRAMSUGS do?
|
||||
Is COMPLEXPREFIXES necessary when we have flags for affixes?
|
||||
- Support spelling words in CamelCase as if they were two separate words.
|
||||
Requires some option to enable it. (Timothy Knox)
|
||||
- There is no Finnish spell checking file. For openoffice Voikko is now
|
||||
used, which is based on Malaga: http://home.arcor.de/bjoern-beutel/malaga/
|
||||
(Teemu Likonen)
|
||||
@ -4458,8 +4443,6 @@ Vim script language:
|
||||
7 Execute a function with standard option values. No need to save and
|
||||
restore option values. Especially useful for new options. Problem: how
|
||||
to avoid a performance penalty (esp. for string options)?
|
||||
8 Add referring to key options with "&t_xx". Both for "echo &t_xx" and
|
||||
":let &t_xx =". Useful for making portable mappings.
|
||||
- range for ":exec", pass it on to the executed command. (Webb)
|
||||
8 ":{range}source": source the lines from the current file.
|
||||
You can already yank lines and use :@" to execute them.
|
||||
@ -4690,8 +4673,6 @@ Messages:
|
||||
- Delete message after new command has been entered and have waited for key.
|
||||
Perhaps after ten seconds?
|
||||
- Make message history available in "msg" variables: msg1, msg2, .. msg9.
|
||||
8 When reading from stdin allow suppressing the "reading from stdin"
|
||||
message.
|
||||
9 Check handling of overwriting of messages and delays:
|
||||
Very wrong: errors while redrawing cause endless loop.
|
||||
When switching to another file and screen scrolls because of the long
|
||||
@ -5979,9 +5960,6 @@ Registers:
|
||||
8 Add put command that overwrites existing text. Should also work for
|
||||
blocks. Useful to move text around in a table. Works like using "R ^R r"
|
||||
for every line.
|
||||
6 When yanking into the unnamed registers several times, somehow make the
|
||||
previous contents also available (like it's done for deleting). What
|
||||
register names to use? g"1, g"2, etc.?
|
||||
- When appending to a register, also report the total resulting number of
|
||||
lines. Or just say "99 more lines yanked", add the "more".
|
||||
- When inserting a register in Insert mode with CTRL-R, don't insert comment
|
||||
|
@ -1,4 +1,4 @@
|
||||
*usr_11.txt* For Vim version 8.2. Last change: 2020 Jan 17
|
||||
*usr_11.txt* For Vim version 8.2. Last change: 2020 Jul 08
|
||||
|
||||
VIM USER MANUAL - by Bram Moolenaar
|
||||
|
||||
@ -256,7 +256,7 @@ O Open the file readonly. Use this when you just want to view the file and
|
||||
|
||||
E Edit the file anyway. Use this with caution! If the file is being edited
|
||||
in another Vim, you might end up with two versions of the file. Vim will
|
||||
try to warn you when this happens, but better be safe then sorry.
|
||||
try to warn you when this happens, but better be safe than sorry.
|
||||
|
||||
R Recover the file from the swap file. Use this if you know that the swap
|
||||
file contains changes that you want to recover.
|
||||
|
@ -434,7 +434,7 @@ redefined without changing the search pattern.
|
||||
|
||||
/\f\+
|
||||
|
||||
The "\f" items stands for file name characters. Thus this matches a sequence
|
||||
The "\f" item stands for file name characters. Thus this matches a sequence
|
||||
of characters that can be a file name.
|
||||
Which characters can be part of a file name depends on the system you are
|
||||
using. On MS-Windows, the backslash is included, on Unix it is not. This is
|
||||
|
@ -226,7 +226,7 @@ We will use "82" here, which is version 8.2.
|
||||
This is all you need for the second method. Just launch the executable, and
|
||||
follow the prompts.
|
||||
|
||||
For the first method you must chose one of the binary archives. These are
|
||||
For the first method you must choose one of the binary archives. These are
|
||||
available:
|
||||
|
||||
gvim82.zip The normal MS-Windows GUI version.
|
||||
|
@ -1,4 +1,4 @@
|
||||
*various.txt* For Vim version 8.2. Last change: 2020 May 30
|
||||
*various.txt* For Vim version 8.2. Last change: 2020 Jul 10
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -754,7 +754,7 @@ up mappings to simulate the commands that less supports. Otherwise, you can
|
||||
still use the Vim commands.
|
||||
|
||||
This isn't perfect. For example, when viewing a short file Vim will still use
|
||||
the whole screen. But it works good enough for most uses, and you get syntax
|
||||
the whole screen. But it works well enough for most uses, and you get syntax
|
||||
highlighting.
|
||||
|
||||
The "h" key will give you a short overview of the available commands.
|
||||
|
@ -7882,7 +7882,7 @@ Files: src/buffer.c, src/ex_cmds.c, src/fileio.c, src/globals.h,
|
||||
Patch 6.1.221
|
||||
Problem: Changing case may not work properly, depending on the current
|
||||
locale.
|
||||
Solution: Add the 'casemap' option to let the user chose how changing case
|
||||
Solution: Add the 'casemap' option to let the user choose how changing case
|
||||
is to be done.
|
||||
Also fix lowering case when an UTF-8 character doesn't keep the
|
||||
same byte length.
|
||||
|
@ -147,7 +147,7 @@ Se ":help search\-pattern" for tilg
|
||||
{kommando} fortolkes som en Ex-kommando.
|
||||
Hvis {kommando} indeholder mellemrum, s<> skal den omsluttes af
|
||||
dobbelte citationstegn (det afh<66>nger af den skal der bruges).
|
||||
Eksempel: Vim "+set si" main.c
|
||||
Eksempel: vim "+set si" main.c
|
||||
.br
|
||||
Bem<EFBFBD>rk: Du kan bruge op til 10 "+"- eller "\-c"-kommandoer.
|
||||
.TP
|
||||
|
@ -147,7 +147,7 @@ Se ":help search\-pattern" for tilgængelige søgemønstre.
|
||||
{kommando} fortolkes som en Ex-kommando.
|
||||
Hvis {kommando} indeholder mellemrum, så skal den omsluttes af
|
||||
dobbelte citationstegn (det afhænger af den skal der bruges).
|
||||
Eksempel: Vim "+set si" main.c
|
||||
Eksempel: vim "+set si" main.c
|
||||
.br
|
||||
Bemærk: Du kan bruge op til 10 "+"- eller "\-c"-kommandoer.
|
||||
.TP
|
||||
|
@ -156,7 +156,7 @@ Ex
|
||||
{commande} est interpr<70>t<EFBFBD>e comme une commande Ex.
|
||||
Si la {commande} contient des espaces, elle doit <20>tre entour<75>e
|
||||
de doubles-apostrophes (cela d<>pend du shell utilis<69>).
|
||||
Exemple : Vim "+set si" main.c
|
||||
Exemple : vim "+set si" main.c
|
||||
.br
|
||||
Note : vous pouvez utiliser jusqu'<27> 10 commandes "+" ou "\-c".
|
||||
.TP
|
||||
|
@ -156,7 +156,7 @@ Exécute {commande} après la lecture du premier fichier.
|
||||
{commande} est interprétée comme une commande Ex.
|
||||
Si la {commande} contient des espaces, elle doit être entourée
|
||||
de doubles-apostrophes (cela dépend du shell utilisé).
|
||||
Exemple : Vim "+set si" main.c
|
||||
Exemple : vim "+set si" main.c
|
||||
.br
|
||||
Note : vous pouvez utiliser jusqu'à 10 commandes "+" ou "\-c".
|
||||
.TP
|
||||
|
@ -150,7 +150,7 @@ primo file
|
||||
{comando} <20> interpretato come un comando Ex.
|
||||
Se il {comando} contiene spazi deve essere incluso fra doppi apici
|
||||
(o altro delimitatore, a seconda della shell che si sta usando).
|
||||
Esempio: Vim "+set si" main.c
|
||||
Esempio: vim "+set si" main.c
|
||||
.br
|
||||
Note: Si possono avere fino a 10 comandi "+" o "\-c".
|
||||
.TP
|
||||
|
@ -150,7 +150,7 @@ primo file è stato letto.
|
||||
{comando} è interpretato come un comando Ex.
|
||||
Se il {comando} contiene spazi deve essere incluso fra doppi apici
|
||||
(o altro delimitatore, a seconda della shell che si sta usando).
|
||||
Esempio: Vim "+set si" main.c
|
||||
Esempio: vim "+set si" main.c
|
||||
.br
|
||||
Note: Si possono avere fino a 10 comandi "+" o "\-c".
|
||||
.TP
|
||||
|
@ -150,7 +150,7 @@ wzorce wyszukiwania.
|
||||
{polecenie} jest interpretowane jako polecenie Ex.
|
||||
Je<EFBFBD>li {poleceni} zawiera bia<69>e znaki musi by<62> umieszczone w podw<64>jnych
|
||||
cudzys<EFBFBD>owach (zale<6C>y to od u<>ywanej pow<6F>oki).
|
||||
Przyk<EFBFBD>ad: Vim "+set si" main.c
|
||||
Przyk<EFBFBD>ad: vim "+set si" main.c
|
||||
.br
|
||||
Uwaga: Mo<4D>na u<>y<EFBFBD> do 10 polece<63> "+" lub "\-c".
|
||||
.TP
|
||||
|
@ -150,7 +150,7 @@ wzorce wyszukiwania.
|
||||
{polecenie} jest interpretowane jako polecenie Ex.
|
||||
Jeśli {poleceni} zawiera białe znaki musi być umieszczone w podwójnych
|
||||
cudzysłowach (zależy to od używanej powłoki).
|
||||
Przykład: Vim "+set si" main.c
|
||||
Przykład: vim "+set si" main.c
|
||||
.br
|
||||
Uwaga: Można użyć do 10 poleceń "+" lub "\-c".
|
||||
.TP
|
||||
|
@ -145,7 +145,7 @@ Kullan
|
||||
{komut} bir Ex komutu olarak i<>letilir.
|
||||
E<EFBFBD>er {komut} bo<62>luk i<>eriyorsa <20>ift t<>rnak i<>erisine al<61>nmal<61>d<EFBFBD>r (bu
|
||||
kullan<EFBFBD>lan kabu<62>a ba<62>l<EFBFBD>d<EFBFBD>r).
|
||||
<EFBFBD>rnek: Vim "+set si" main.c
|
||||
<EFBFBD>rnek: vim "+set si" main.c
|
||||
.br
|
||||
Not: 10 taneye kadar "+" veya "\-c" komutu kullanabilirsiniz.
|
||||
.TP
|
||||
|
@ -145,7 +145,7 @@ Kullanılabilir arama dizgileri için ":help search\-pattern" yazın.
|
||||
{komut} bir Ex komutu olarak işletilir.
|
||||
Eğer {komut} boşluk içeriyorsa çift tırnak içerisine alınmalıdır (bu
|
||||
kullanılan kabuğa bağlıdır).
|
||||
Örnek: Vim "+set si" main.c
|
||||
Örnek: vim "+set si" main.c
|
||||
.br
|
||||
Not: 10 taneye kadar "+" veya "\-c" komutu kullanabilirsiniz.
|
||||
.TP
|
||||
|
@ -146,7 +146,7 @@ See ":help search\-pattern" for the available search patterns.
|
||||
{command} is interpreted as an Ex command.
|
||||
If the {command} contains spaces it must be enclosed in double quotes (this
|
||||
depends on the shell that is used).
|
||||
Example: Vim "+set si" main.c
|
||||
Example: vim "+set si" main.c
|
||||
.br
|
||||
Note: You can use up to 10 "+" or "\-c" commands.
|
||||
.TP
|
||||
|
@ -110,7 +110,7 @@ OPTIONS
|
||||
read. {command} is interpreted as an Ex command. If the
|
||||
{command} contains spaces it must be enclosed in double
|
||||
quotes (this depends on the shell that is used). Example:
|
||||
Vim "+set si" main.c
|
||||
vim "+set si" main.c
|
||||
Note: You can use up to 10 "+" or "-c" commands.
|
||||
|
||||
-S {file} {file} will be sourced after the first file has been read.
|
||||
|
@ -1,4 +1,4 @@
|
||||
*vim9.txt* For Vim version 8.2. Last change: 2020 Jun 21
|
||||
*vim9.txt* For Vim version 8.2. Last change: 2020 Jul 25
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -64,15 +64,24 @@ THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
|
||||
|
||||
Comments starting with # ~
|
||||
|
||||
In Vim script comments normally start with double quote. That can also be the
|
||||
start of a string, thus in many places it cannot be used. In Vim9 script a
|
||||
comment can also start with #. In Vi this is a command to list text with
|
||||
numbers, but you can also use `:number` for that. >
|
||||
In legacy Vim script comments start with double quote. In Vim9 script
|
||||
comments start with #. >
|
||||
# declarations
|
||||
let count = 0 # number of occurrences
|
||||
|
||||
To improve readability there must be a space between the command and the #
|
||||
The reason is that a double quote can also be the start of a string. In many
|
||||
places, especially halfway an expression with a line break, it's hard to tell
|
||||
what the meaning is, since both a string and a comment can be followed by
|
||||
arbitrary text. To avoid confusion only # comments are recognized. This is
|
||||
the same as in shell scripts and Python programs.
|
||||
|
||||
In Vi # is a command to list text with numbers. In Vim9 script you can use
|
||||
`:number` for that. >
|
||||
101 number
|
||||
|
||||
To improve readability there must be a space between a command and the #
|
||||
that starts a comment. Note that #{ is the start of a dictionary, therefore
|
||||
it cannot start a comment.
|
||||
it does not start a comment.
|
||||
|
||||
|
||||
Vim9 functions ~
|
||||
@ -85,7 +94,7 @@ The syntax is strict, to enforce code that is easy to read and understand.
|
||||
|
||||
Compilation is done when the function is first called, or when the
|
||||
`:defcompile` command is encountered in the script where the function was
|
||||
defined.
|
||||
defined. `:disassemble` also compiles the function.
|
||||
|
||||
`:def` has no options like `:function` does: "range", "abort", "dict" or
|
||||
"closure". A `:def` function always aborts on an error, does not get a range
|
||||
@ -96,7 +105,7 @@ be used, type checking will then be done at runtime, like with legacy
|
||||
functions.
|
||||
|
||||
Arguments are accessed by name, without "a:". There is no "a:" dictionary or
|
||||
"a:000" list.
|
||||
"a:000" list. Just like any other language.
|
||||
|
||||
Variable arguments are defined as the last argument, with a name and have a
|
||||
list type, similar to Typescript. For example, a list of numbers: >
|
||||
@ -176,8 +185,9 @@ To intentionally avoid a variable being available later, a block can be used:
|
||||
echo temp " Error!
|
||||
|
||||
An existing variable cannot be assigned to with `:let`, since that implies a
|
||||
declaration. An exception is global variables: these can be both used with
|
||||
and without `:let`, because there is no rule about where they are declared.
|
||||
declaration. Global, window, tab, buffer and Vim variables can only be used
|
||||
without `:let`, because they are are not really declared, they can also be
|
||||
deleted with `:unlet`.
|
||||
|
||||
Variables cannot shadow previously defined variables.
|
||||
Variables may shadow Ex commands, rename the variable if needed.
|
||||
@ -186,12 +196,19 @@ Global variables and user defined functions must be prefixed with "g:", also
|
||||
at the script level. >
|
||||
vim9script
|
||||
let script_local = 'text'
|
||||
let g:global = 'value'
|
||||
g:global = 'value'
|
||||
let Funcref = g:ThatFunction
|
||||
|
||||
Since "&opt = value" is now assigning a value to option "opt", ":&" cannot be
|
||||
used to repeat a `:substitute` command.
|
||||
|
||||
*E1092*
|
||||
Declaring more than one variable at a time, using the unpack notation, is
|
||||
currently not supported: >
|
||||
let [v1, v2] = GetValues() # Error!
|
||||
That is because the type needs to be inferred from the list item type, which
|
||||
isn't that easy.
|
||||
|
||||
|
||||
Omitting :call and :eval ~
|
||||
|
||||
@ -200,29 +217,29 @@ Functions can be called without `:call`: >
|
||||
Using `:call` is still possible, but this is discouraged.
|
||||
|
||||
A method call without `eval` is possible, so long as the start is an
|
||||
identifier or can't be an Ex command. It does NOT work for string constants: >
|
||||
myList->add(123) " works
|
||||
g:myList->add(123) " works
|
||||
[1, 2, 3]->Process() " works
|
||||
#{a: 1, b: 2}->Process() " works
|
||||
{'a': 1, 'b': 2}->Process() " works
|
||||
"foobar"->Process() " does NOT work
|
||||
("foobar")->Process() " works
|
||||
'foobar'->Process() " does NOT work
|
||||
('foobar')->Process() " works
|
||||
identifier or can't be an Ex command. Examples: >
|
||||
myList->add(123)
|
||||
g:myList->add(123)
|
||||
[1, 2, 3]->Process()
|
||||
#{a: 1, b: 2}->Process()
|
||||
{'a': 1, 'b': 2}->Process()
|
||||
"foobar"->Process()
|
||||
("foobar")->Process()
|
||||
'foobar'->Process()
|
||||
('foobar')->Process()
|
||||
|
||||
In case there is ambiguity between a function name and an Ex command, use ":"
|
||||
to make clear you want to use the Ex command. For example, there is both the
|
||||
`:substitute` command and the `substitute()` function. When the line starts
|
||||
with `substitute(` this will use the function, prepend a colon to use the
|
||||
command instead: >
|
||||
In rare case there is ambiguity between a function name and an Ex command, use
|
||||
":" to make clear you want to use the Ex command. For example, there is both
|
||||
the `:substitute` command and the `substitute()` function. When the line
|
||||
starts with `substitute(` this will use the function. Prepend a colon to use
|
||||
the command instead: >
|
||||
:substitute(pattern (replacement (
|
||||
|
||||
Note that while variables need to be defined before they can be used,
|
||||
functions can be called before being defined. This is required to be able
|
||||
have cyclic dependencies between functions. It is slightly less efficient,
|
||||
since the function has to be looked up by name. And a typo in the function
|
||||
name will only be found when the call is executed.
|
||||
name will only be found when the function is called.
|
||||
|
||||
|
||||
Omitting function() ~
|
||||
@ -257,27 +274,39 @@ Function call: >
|
||||
arg2
|
||||
)
|
||||
|
||||
For binary operators iin expressions not in [], {} or () a line break is
|
||||
possible AFTER the operators. For example: >
|
||||
let text = lead ..
|
||||
middle ..
|
||||
end
|
||||
For binary operators in expressions not in [], {} or () a line break is
|
||||
possible just before or after the operator. For example: >
|
||||
let text = lead
|
||||
.. middle
|
||||
.. end
|
||||
let total = start +
|
||||
end -
|
||||
correction
|
||||
let result = positive ?
|
||||
PosFunc(arg) :
|
||||
NegFunc(arg)
|
||||
let result = positive
|
||||
? PosFunc(arg)
|
||||
: NegFunc(arg)
|
||||
|
||||
A special case is "->" for function call chains, it can appear in the next
|
||||
line: >
|
||||
For a method call using "->" and a member using a dot, a line break is allowed
|
||||
before it: >
|
||||
let result = GetBuilder()
|
||||
->BuilderSetWidth(333)
|
||||
->BuilderSetHeight(777)
|
||||
->BuilderBuild()
|
||||
let result = MyDict
|
||||
.member
|
||||
|
||||
Note that "enddef" cannot be used at the start of a continuation line, it ends
|
||||
the current function.
|
||||
< *E1050*
|
||||
To make it possible for the operator at the start of the line to be
|
||||
recognized, it is required to put a colon before a range. This will add
|
||||
"start" and print: >
|
||||
let result = start
|
||||
+ print
|
||||
Like this: >
|
||||
let result = start + print
|
||||
|
||||
This will assign "start" and print a line: >
|
||||
let result = start
|
||||
:+ print
|
||||
|
||||
It is also possible to split a function header over multiple lines, in between
|
||||
arguments: >
|
||||
@ -286,15 +315,43 @@ arguments: >
|
||||
separator = '-'
|
||||
): string
|
||||
|
||||
Notes:
|
||||
- "enddef" cannot be used at the start of a continuation line, it ends the
|
||||
current function.
|
||||
- No line break is allowed in the LHS of an assignment. Specifically when
|
||||
unpacking a list |:let-unpack|. This is OK: >
|
||||
[var1, var2] =
|
||||
Func()
|
||||
< This does not work: >
|
||||
[var1,
|
||||
var2] =
|
||||
Func()
|
||||
- No line break is allowed in between arguments of an `:echo`, `:execute` and
|
||||
similar commands. This is OK: >
|
||||
echo [1,
|
||||
2] [3,
|
||||
4]
|
||||
< This does not work: >
|
||||
echo [1, 2]
|
||||
[3, 4]
|
||||
- No line break is allowed in the arguments of a lambda, between the "{" and
|
||||
"->". This is OK: >
|
||||
filter(list, {k, v ->
|
||||
v > 0})
|
||||
< This does not work: >
|
||||
filter(list, {k,
|
||||
v -> v > 0})
|
||||
|
||||
|
||||
No curly braces expansion ~
|
||||
|
||||
|curly-braces-names| cannot be used.
|
||||
|
||||
|
||||
No :append, :change or :insert ~
|
||||
No :xit, :append, :change or :insert ~
|
||||
|
||||
These commands are too quickly confused with local variable names.
|
||||
These commands are too easily confused with local variable names. Instead of
|
||||
`:x` or `:xit` you can use `:exit`.
|
||||
|
||||
|
||||
Comparators ~
|
||||
@ -310,7 +367,8 @@ Vim9 script enforces proper use of white space. This is no longer allowed: >
|
||||
let var =234 " Error!
|
||||
There must be white space before and after the "=": >
|
||||
let var = 234 " OK
|
||||
White space must also be put before the # that starts a comment: >
|
||||
White space must also be put before the # that starts a comment after a
|
||||
command: >
|
||||
let var = 234# Error!
|
||||
let var = 234 # OK
|
||||
|
||||
@ -360,6 +418,7 @@ The boolean operators "||" and "&&" do not change the value: >
|
||||
0 || '' == ''
|
||||
8 && 2 == 2
|
||||
0 && 2 == 0
|
||||
2 && 0 == 0
|
||||
[] && 2 == []
|
||||
|
||||
When using `..` for string concatenation the arguments are always converted to
|
||||
@ -370,6 +429,51 @@ string. >
|
||||
In Vim9 script one can use "true" for v:true and "false" for v:false.
|
||||
|
||||
|
||||
What to watch out for ~
|
||||
*vim9-gotchas*
|
||||
Vim9 was designed to be closer to often used programming languages, but at the
|
||||
same time tries to support the legacy Vim commands. Some compromises had to
|
||||
be made. Here is a summary of what might be unexpected.
|
||||
|
||||
Ex command ranges need to be prefixed with a colon. >
|
||||
-> " legacy Vim: shifts the previous line to the right
|
||||
->func() " Vim9: method call in continuation line
|
||||
:-> " Vim9: shifts the previous line to the right
|
||||
|
||||
%s/a/b " legacy Vim: substitute on all lines
|
||||
x = alongname
|
||||
% another " Vim9: line continuation without a backslash
|
||||
:%s/a/b " Vim9: substitute on all lines
|
||||
'text'->func() " Vim9: method call
|
||||
:'t " legacy Vim: jump to mark m
|
||||
|
||||
Functions defined with `:def` compile the whole function. Legacy functions
|
||||
can bail out, and the following lines are not parsed: >
|
||||
func Maybe()
|
||||
if !has('feature')
|
||||
return
|
||||
endif
|
||||
use-feature
|
||||
endfunc
|
||||
Vim9 functions are compiled as a whole: >
|
||||
def Maybe()
|
||||
if !has('feature')
|
||||
return
|
||||
endif
|
||||
use-feature " May give compilation error
|
||||
enddef
|
||||
For a workaround, split it in two functions: >
|
||||
func Maybe()
|
||||
if has('feature')
|
||||
call MaybyInner()
|
||||
endif
|
||||
endfunc
|
||||
if has('feature')
|
||||
def MaybeInner()
|
||||
use-feature
|
||||
enddef
|
||||
endif
|
||||
|
||||
==============================================================================
|
||||
|
||||
3. New style functions *fast-functions*
|
||||
@ -396,19 +500,20 @@ THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
|
||||
When the caller omits an argument the {value} is used.
|
||||
|
||||
The function will be compiled into instructions when
|
||||
called, or when `:defcompile` is used. Syntax and
|
||||
type errors will be produced at that time.
|
||||
called, or when `:disassemble` or `:defcompile` is
|
||||
used. Syntax and type errors will be produced at that
|
||||
time.
|
||||
|
||||
NOTE: It is possible to nest `:def` inside another
|
||||
`:def`, but it is not possible to nest `:def` inside
|
||||
`:function`, for backwards compatibility.
|
||||
It is possible to nest `:def` inside another `:def` or
|
||||
`:function` up to about 50 levels deep.
|
||||
|
||||
[!] is used as with `:function`. Note that in Vim9
|
||||
script script-local functions cannot be deleted or
|
||||
redefined later in the same script.
|
||||
|
||||
*:enddef*
|
||||
:enddef End of a function defined with `:def`.
|
||||
:enddef End of a function defined with `:def`. It should be on
|
||||
a line by its own.
|
||||
|
||||
|
||||
If the script the function is defined in is Vim9 script, then script-local
|
||||
@ -428,6 +533,22 @@ prefix.
|
||||
Note that for command line completion of {func} you
|
||||
can prepend "s:" to find script-local functions.
|
||||
|
||||
Limitations ~
|
||||
|
||||
Local variables will not be visible to string evaluation. For example: >
|
||||
def EvalString(): list<string>
|
||||
let list = ['aa', 'bb', 'cc', 'dd']
|
||||
return range(1, 2)->map('list[v:val]')
|
||||
enddef
|
||||
|
||||
The map argument is a string expression, which is evaluated without the
|
||||
function scope. Instead, use a lambda: >
|
||||
def EvalString(): list<string>
|
||||
let list = ['aa', 'bb', 'cc', 'dd']
|
||||
return range(1, 2)->map({ _, v -> list[v] })
|
||||
enddef
|
||||
|
||||
|
||||
==============================================================================
|
||||
|
||||
4. Types *vim9-types*
|
||||
@ -453,7 +574,7 @@ Not supported yet:
|
||||
tuple<a: {type}, b: {type}, ...>
|
||||
|
||||
These types can be used in declarations, but no value will have this type:
|
||||
{type}|{type}
|
||||
{type}|{type} {not implemented yet}
|
||||
void
|
||||
any
|
||||
|
||||
@ -555,19 +676,15 @@ The original value of 'cpoptions' is restored at the end of the script.
|
||||
|
||||
Export ~
|
||||
*:export* *:exp*
|
||||
Exporting one item can be written as: >
|
||||
Exporting an item can be written as: >
|
||||
export const EXPORTED_CONST = 1234
|
||||
export let someValue = ...
|
||||
export def MyFunc() ...
|
||||
export class MyClass ...
|
||||
|
||||
As this suggests, only constants, variables, `:def` functions and classes can
|
||||
be exported.
|
||||
be exported. {classes are not implemented yet}
|
||||
|
||||
Alternatively, an export statement can be used to export several already
|
||||
defined (otherwise script-local) items: >
|
||||
export {EXPORTED_CONST, someValue, MyFunc, MyClass}
|
||||
<
|
||||
*E1042*
|
||||
`:export` can only be used in Vim9 script, at the script level.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
" Vim support file to detect file types
|
||||
"
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2020 Jun 15
|
||||
" Last Change: 2020 Jun 25
|
||||
|
||||
" Listen very carefully, I will say this only once
|
||||
if exists("did_load_filetypes")
|
||||
@ -88,6 +88,9 @@ endif
|
||||
" AHDL
|
||||
au BufNewFile,BufRead *.tdf setf ahdl
|
||||
|
||||
" AIDL
|
||||
au BufNewFile,BufRead *.aidl setf aidl
|
||||
|
||||
" AMPL
|
||||
au BufNewFile,BufRead *.run setf ampl
|
||||
|
||||
@ -542,7 +545,7 @@ au BufNewFile,BufRead *.ecd setf ecd
|
||||
au BufNewFile,BufRead *.e,*.E call dist#ft#FTe()
|
||||
|
||||
" Elinks configuration
|
||||
au BufNewFile,BufRead */etc/elinks.conf,*/.elinks/elinks.conf setf elinks
|
||||
au BufNewFile,BufRead elinks.conf setf elinks
|
||||
|
||||
" ERicsson LANGuage; Yaws is erlang too
|
||||
au BufNewFile,BufRead *.erl,*.hrl,*.yaws setf erlang
|
||||
@ -1134,8 +1137,17 @@ au BufNewFile,BufRead *.ora setf ora
|
||||
" Packet filter conf
|
||||
au BufNewFile,BufRead pf.conf setf pf
|
||||
|
||||
" Pacman Config (close enough to dosini)
|
||||
au BufNewFile,BufRead */etc/pacman.conf setf dosini
|
||||
|
||||
" Pacman hooks
|
||||
au BufNewFile,BufRead *.hook
|
||||
\ if getline(1) == '[Trigger]' |
|
||||
\ setf dosini |
|
||||
\ endif
|
||||
|
||||
" Pam conf
|
||||
au BufNewFile,BufRead */etc/pam.conf setf pamconf
|
||||
au BufNewFile,BufRead */etc/pam.conf setf pamconf
|
||||
|
||||
" Pam environment
|
||||
au BufNewFile,BufRead pam_env.conf,.pam_environment setf pamenv
|
||||
@ -1655,8 +1667,9 @@ au BufNewFile,BufRead *.sil setf sil
|
||||
au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf setf sysctl
|
||||
|
||||
" Systemd unit files
|
||||
au BufNewFile,BufRead */systemd/*.{automount,mount,path,service,socket,swap,target,timer} setf systemd
|
||||
au BufNewFile,BufRead */systemd/*.{automount,dnssd,link,mount,netdev,network,nspawn,path,service,slice,socket,swap,target,timer} setf systemd
|
||||
" Systemd overrides
|
||||
au BufNewFile,BufRead */etc/systemd/*.conf.d/*.conf setf systemd
|
||||
au BufNewFile,BufRead */etc/systemd/system/*.d/*.conf setf systemd
|
||||
au BufNewFile,BufRead */.config/systemd/user/*.d/*.conf setf systemd
|
||||
" Systemd temp files
|
||||
|
@ -1,12 +1,17 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: C++
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2001 Jan 15
|
||||
" Last Change: 2020 Jul 26
|
||||
|
||||
" Only do this when not done yet for this buffer
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Behaves just like C
|
||||
" Behaves mostly just like C
|
||||
runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
|
||||
|
||||
" C++ uses templates with <things>
|
||||
" Disabled, because it gives an error for typing an unmatched ">".
|
||||
" set matchpairs+=<:>
|
||||
" let b:undo_ftplugin ..= ' | setl matchpairs<'
|
||||
|
@ -1,7 +1,7 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: Diff
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2005 Jul 27
|
||||
" Last Change: 2020 Jul 18
|
||||
|
||||
" Only do this when not done yet for this buffer
|
||||
if exists("b:did_ftplugin")
|
||||
@ -13,3 +13,6 @@ let b:undo_ftplugin = "setl modeline<"
|
||||
|
||||
" Don't use modelines in a diff, they apply to the diffed file
|
||||
setlocal nomodeline
|
||||
|
||||
" If there are comments they start with #
|
||||
let &commentstring = "# %s"
|
||||
|
@ -1,7 +1,7 @@
|
||||
" Vim filetype plugin
|
||||
" Language: Vim
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2020 Jun 16
|
||||
" Last Change: 2020 Jul 26
|
||||
|
||||
" Only do this when not done yet for this buffer
|
||||
if exists("b:did_ftplugin")
|
||||
@ -49,14 +49,14 @@ setlocal isk+=#
|
||||
setlocal keywordprg=:help
|
||||
|
||||
" Set 'comments' to format dashed lists in comments
|
||||
setlocal com=sO:\"\ -,mO:\"\ \ ,eO:\"\",:\"
|
||||
setlocal com=sO:\"\ -,mO:\"\ \ ,sO:#\ -,mO:#\ \ ,eO:##,:\",:#
|
||||
|
||||
" Format comments to be up to 78 characters long
|
||||
if &tw == 0
|
||||
setlocal tw=78
|
||||
endif
|
||||
|
||||
" Comments start with a double quote
|
||||
" Comments start with a double quote; in Vim9 script # would also work
|
||||
setlocal commentstring=\"%s
|
||||
|
||||
if !exists("no_plugin_maps") && !exists("no_vim_maps")
|
||||
@ -83,7 +83,7 @@ endif
|
||||
if exists("loaded_matchit")
|
||||
let b:match_ignorecase = 0
|
||||
let b:match_words =
|
||||
\ '\<\%(fu\%[nction]\|def\)\>:\<retu\%[rn]\>:\<\%(endf\%[unction]\|enddef\)\>,' .
|
||||
\ '\<\%(fu\%[nction]\|def\)\>[^(]:\<retu\%[rn]\>:\<\%(endf\%[unction]\|enddef\)\>,' .
|
||||
\ '\<\(wh\%[ile]\|for\)\>:\<brea\%[k]\>:\<con\%[tinue]\>:\<end\(w\%[hile]\|fo\%[r]\)\>,' .
|
||||
\ '\<if\>:\<el\%[seif]\>:\<en\%[dif]\>,' .
|
||||
\ '{:},' .
|
||||
|
@ -10,5 +10,5 @@ test:
|
||||
VIMRUNTIME=$(VIMRUNTIME) $(VIM) --clean --not-a-term -u testdir/runtest.vim
|
||||
|
||||
|
||||
clean:
|
||||
clean testclean:
|
||||
rm -f testdir/*.fail testdir/*.out
|
||||
|
@ -1,9 +1,8 @@
|
||||
" Vim indent script for HTML
|
||||
" Header: "{{{
|
||||
" Maintainer: Bram Moolenaar
|
||||
" Original Author: Andy Wokula <anwoku@yahoo.de>
|
||||
" Last Change: 2020 Jun 18
|
||||
" Version: 1.0
|
||||
" Last Change: 2020 Jul 06
|
||||
" Version: 1.0 "{{{
|
||||
" Description: HTML indent script with cached state for faster indenting on a
|
||||
" range of lines.
|
||||
" Supports template systems through hooks.
|
||||
@ -587,7 +586,7 @@ func! s:Alien3()
|
||||
return eval(b:hi_js1indent)
|
||||
endif
|
||||
if b:hi_indent.scripttype == "javascript"
|
||||
return GetJavascriptIndent()
|
||||
return eval(b:hi_js1indent) + GetJavascriptIndent()
|
||||
else
|
||||
return -1
|
||||
endif
|
||||
|
@ -2,6 +2,16 @@
|
||||
|
||||
|
||||
" START_INDENT
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
div#d1 { color: red; }
|
||||
div#d2 { color: green; }
|
||||
</style>
|
||||
<script>
|
||||
var v1 = "v1";
|
||||
var v2 = "v2";
|
||||
</script>
|
||||
<div>
|
||||
<div>
|
||||
text
|
||||
@ -32,5 +42,25 @@ dt text
|
||||
</dt>
|
||||
</dl>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
" END_INDENT
|
||||
|
||||
% START_INDENT
|
||||
% INDENT_EXE let g:html_indent_style1 = "inc"
|
||||
% INDENT_EXE let g:html_indent_script1 = "zero"
|
||||
% INDENT_EXE call HtmlIndent_CheckUserSettings()
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
div#d1 { color: red; }
|
||||
div#d2 { color: green; }
|
||||
</style>
|
||||
<script>
|
||||
var v1 = "v1";
|
||||
var v2 = "v2";
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
% END_INDENT
|
||||
|
@ -2,35 +2,65 @@
|
||||
|
||||
|
||||
" START_INDENT
|
||||
<div>
|
||||
<div>
|
||||
text
|
||||
</div>
|
||||
</div>
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
div#d1 { color: red; }
|
||||
div#d2 { color: green; }
|
||||
</style>
|
||||
<script>
|
||||
var v1 = "v1";
|
||||
var v2 = "v2";
|
||||
</script>
|
||||
<div>
|
||||
<div>
|
||||
text
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="foo bar">
|
||||
text
|
||||
</div>
|
||||
<div
|
||||
class="foo bar">
|
||||
text
|
||||
</div>
|
||||
|
||||
<div class="foo bar"
|
||||
data="something">
|
||||
text
|
||||
</div>
|
||||
<div class="foo bar"
|
||||
data="something">
|
||||
text
|
||||
</div>
|
||||
|
||||
<div class="foo
|
||||
bar">
|
||||
text
|
||||
</div>
|
||||
<div class="foo
|
||||
bar">
|
||||
text
|
||||
</div>
|
||||
|
||||
<dl>
|
||||
<dd>
|
||||
dd text
|
||||
</dd>
|
||||
<dt>
|
||||
dt text
|
||||
</dt>
|
||||
</dl>
|
||||
<dl>
|
||||
<dd>
|
||||
dd text
|
||||
</dd>
|
||||
<dt>
|
||||
dt text
|
||||
</dt>
|
||||
</dl>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
" END_INDENT
|
||||
|
||||
% START_INDENT
|
||||
% INDENT_EXE let g:html_indent_style1 = "inc"
|
||||
% INDENT_EXE let g:html_indent_script1 = "zero"
|
||||
% INDENT_EXE call HtmlIndent_CheckUserSettings()
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
div#d1 { color: red; }
|
||||
div#d2 { color: green; }
|
||||
</style>
|
||||
<script>
|
||||
var v1 = "v1";
|
||||
var v2 = "v2";
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
% END_INDENT
|
||||
|
@ -1,7 +1,7 @@
|
||||
" Vim indent file
|
||||
" Language: Vim script
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2019 Oct 31
|
||||
" Last Change: 2020 Jul 19
|
||||
|
||||
" Only load this indent file when no other was loaded.
|
||||
if exists("b:did_indent")
|
||||
@ -11,6 +11,7 @@ let b:did_indent = 1
|
||||
|
||||
setlocal indentexpr=GetVimIndent()
|
||||
setlocal indentkeys+==end,=},=else,=cat,=fina,=END,0\\,0=\"\\\
|
||||
setlocal indentkeys-=0#
|
||||
|
||||
let b:undo_indent = "setl indentkeys< indentexpr<"
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
"
|
||||
" Author: Bram Moolenaar
|
||||
" Copyright: Vim license applies, see ":help license"
|
||||
" Last Change: 2020 Jun 12
|
||||
" Last Change: 2020 Jul 12
|
||||
"
|
||||
" WORK IN PROGRESS - Only the basics work
|
||||
" Note: On MS-Windows you need a recent version of gdb. The one included with
|
||||
|
23
runtime/syntax/aidl.vim
Normal file
23
runtime/syntax/aidl.vim
Normal file
@ -0,0 +1,23 @@
|
||||
" Vim syntax file
|
||||
" Language: aidl (Android Interface Definition Language)
|
||||
" https://developer.android.com/guide/components/aidl
|
||||
" Maintainer: Dominique Pelle <dominique.pelle@tomtom.com>
|
||||
" LastChange: 2020/07/25
|
||||
|
||||
" Quit when a syntax file was already loaded.
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
source <sfile>:p:h/java.vim
|
||||
|
||||
syn keyword aidlParamDir in out inout
|
||||
syn keyword aidlKeyword oneway parcelable
|
||||
|
||||
" Needed for the 'in', 'out', 'inout' keywords to be highlighted.
|
||||
syn cluster javaTop add=aidlParamDir
|
||||
|
||||
hi def link aidlParamDir StorageClass
|
||||
hi def link aidlKeyword Keyword
|
||||
|
||||
let b:current_syntax = "aidl"
|
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,8 @@
|
||||
" Vim syntax file
|
||||
" Language: TeX
|
||||
" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
|
||||
" Last Change: Jun 07, 2020
|
||||
" Version: 118
|
||||
" Last Change: Jun 29, 2020
|
||||
" Version: 119
|
||||
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
|
||||
"
|
||||
" Notes: {{{1
|
||||
@ -147,6 +147,11 @@ if exists("g:tex_nospell") && g:tex_nospell
|
||||
else
|
||||
let s:tex_nospell = 0
|
||||
endif
|
||||
if exists("g:tex_matchcheck")
|
||||
let s:tex_matchcheck= g:tex_matchcheck
|
||||
else
|
||||
let s:tex_matchcheck= '[({[]'
|
||||
endif
|
||||
if exists("g:tex_excludematcher")
|
||||
let s:tex_excludematcher= g:tex_excludematcher
|
||||
else
|
||||
@ -205,27 +210,41 @@ if !exists("g:tex_no_math")
|
||||
endif
|
||||
endif
|
||||
|
||||
" Try to flag {} and () mismatches: {{{1
|
||||
" Try to flag {}, [], and () mismatches: {{{1
|
||||
if s:tex_fast =~# 'm'
|
||||
if !s:tex_no_error
|
||||
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
|
||||
syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
|
||||
syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError
|
||||
syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell
|
||||
if s:tex_matchcheck =~ '{'
|
||||
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
|
||||
syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError
|
||||
endif
|
||||
if s:tex_matchcheck =~ '\['
|
||||
syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
|
||||
syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell
|
||||
endif
|
||||
else
|
||||
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
|
||||
syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
|
||||
syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup
|
||||
syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup
|
||||
if s:tex_matchcheck =~ '{'
|
||||
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
|
||||
syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup
|
||||
endif
|
||||
if s:tex_matchcheck =~ '\['
|
||||
syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
|
||||
syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup
|
||||
endif
|
||||
endif
|
||||
if !s:tex_nospell
|
||||
syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
|
||||
else
|
||||
syn region texParen start="(" end=")" transparent contains=@texMatchGroup
|
||||
if s:tex_matchcheck =~ '('
|
||||
if !s:tex_nospell
|
||||
syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
|
||||
else
|
||||
syn region texParen start="(" end=")" transparent contains=@texMatchGroup
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
if !s:tex_no_error
|
||||
syn match texError "[}\])]"
|
||||
if s:tex_matchcheck =~ '('
|
||||
syn match texError "[}\]]"
|
||||
else
|
||||
syn match texError "[}\])]"
|
||||
endif
|
||||
endif
|
||||
if s:tex_fast =~# 'M'
|
||||
if !exists("g:tex_no_math")
|
||||
@ -756,7 +775,7 @@ if has("conceal") && &enc == 'utf-8'
|
||||
\ ['ldots' , '…'],
|
||||
\ ['le' , '≤'],
|
||||
\ ['left|' , '|'],
|
||||
\ ['left\|' , '‖'],
|
||||
\ ['left\\|' , '‖'],
|
||||
\ ['left(' , '('],
|
||||
\ ['left\[' , '['],
|
||||
\ ['left\\{' , '{'],
|
||||
|
@ -1,8 +1,8 @@
|
||||
" Vim syntax file
|
||||
" Language: Vim 8.0 script
|
||||
" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
|
||||
" Last Change: Jun 01, 20200
|
||||
" Version: 8.0-37
|
||||
" Last Change: July 15, 2020
|
||||
" Version: 8.0-41
|
||||
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
|
||||
" Automatically generated keyword lists: {{{1
|
||||
|
||||
@ -29,14 +29,14 @@ syn match vimCommand contained "\<z[-+^.=]\=\>"
|
||||
syn keyword vimStdPlugin contained Arguments Break Cfilter Clear Continue DiffOrig Evaluate Finish Gdb Lfilter Man N[ext] Over P[rint] Program Run S Source Step Stop Termdebug TermdebugCommand TOhtml Winbar XMLent XMLns
|
||||
|
||||
" vimOptions are caught only when contained in a vimSet {{{2
|
||||
syn keyword vimOption contained acd ambw arshape background ballooneval bex bl brk buftype cf cinkeys cmdwinheight com completeslash cpoptions cscoperelative csre cursorcolumn delcombine digraph eadirection emo equalprg expandtab fdls fex fileignorecase fml foldlevel formatexpr gcr go guifontset helpheight history hlsearch imaf ims includeexpr infercase iskeyword keywordprg laststatus lispwords lrm magic maxfuncdepth menuitems mm modifiable mousemodel mzq numberwidth opfunc patchexpr pfn pp printfont pumwidth pythonthreehome re restorescreen ro rulerformat scl scs sft shellredir shiftwidth showmatch signcolumn smarttab sp spf srr startofline suffixes switchbuf ta tagfunc tbi term termwintype tgc titlelen toolbariconsize ttimeout ttymouse twt undofile varsofttabstop verbosefile viminfofile wak weirdinvert wig wildoptions winheight wm wrapscan
|
||||
syn keyword vimOption contained ai anti autochdir backspace balloonevalterm bexpr bo browsedir casemap cfu cino cmp comments concealcursor cpp cscopetag cst cursorline dex dip eb emoji errorbells exrc fdm ff filetype fmr foldlevelstart formatlistpat gd gp guifontwide helplang hk ic imak imsearch incsearch insertmode isp km lazyredraw list ls makeef maxmapdepth mfd mmd modified mouses mzquantum nuw osfiletype patchmode ph preserveindent printheader pvh pyx readonly revins rop runtimepath scr sect sh shellslash shm showmode siso smc spc spl ss statusline suffixesadd sws tabline taglength tbidi termbidi terse tgst titleold top ttimeoutlen ttyscroll tx undolevels vartabstop vfile virtualedit warn wfh wildchar wim winminheight wmh write
|
||||
syn keyword vimOption contained akm antialias autoindent backup balloonexpr bg bomb bs cb ch cinoptions cms commentstring conceallevel cpt cscopetagorder csto cursorlineopt dg dir ed enc errorfile fcl fdn ffs fillchars fo foldmarker formatoptions gdefault grepformat guiheadroom hf hkmap icon imc imsf inde is isprint kmp lbr listchars lsp makeencoding maxmem mh mmp more mouseshape mzschemedll odev pa path pheader previewheight printmbcharset pvp pyxversion redrawtime ri rs sb scroll sections shcf shelltemp shortmess showtabline sj smd spell splitbelow ssl stl sw sxe tabpagemax tagrelative tbis termencoding textauto thesaurus titlestring tpm ttm ttytype uc undoreload vb vi visualbell wb wfw wildcharm winaltkeys winminwidth wmnu writeany
|
||||
syn keyword vimOption contained al ar autoread backupcopy bdir bh breakat bsdir cc charconvert cinw co compatible confirm crb cscopeverbose csverb cwh dict directory edcompatible encoding errorformat fcs fdo fic fixendofline foldclose foldmethod formatprg gfm grepprg guioptions hh hkmapp iconstring imcmdline imst indentexpr isf joinspaces kp lcs lm luadll makeprg maxmempattern mis mmt mouse mouset mzschemegcdll oft packpath pdev pi previewpopup printmbfont pvw qe regexpengine rightleft rtp sbo scrollbind secure shell shelltype shortname shq slm sn spellcapcheck splitright ssop stmp swapfile sxq tabstop tags tbs termguicolors textmode tildeop tl tr tty tw udf updatecount vbs viewdir vop wc wh wildignore wincolor winptydll wmw writebackup
|
||||
syn keyword vimOption contained aleph arab autowrite backupdir bdlay bin breakindent bsk ccv ci cinwords cocu complete copyindent cryptmethod csl cuc debug dictionary display ef endofline esckeys fdc fdt fileencoding fixeol foldcolumn foldminlines fp gfn gtl guipty hi hkp ignorecase imd imstatusfunc indentkeys isfname js langmap linebreak lmap lw mat maxmemtot mkspellmem mod mousef mousetime nf ofu para penc pm previewwindow printoptions pw qftf relativenumber rightleftcmd ru sbr scrollfocus sel shellcmdflag shellxescape showbreak si sm so spellfile spr st sts swapsync syn tag tagstack tc termwinkey textwidth timeout tm ts ttybuiltin twk udir updatetime vdir viewoptions vsts wcm whichwrap wildignorecase window winwidth wop writedelay
|
||||
syn keyword vimOption contained allowrevins arabic autowriteall backupext belloff binary breakindentopt bt cd cin clipboard cole completefunc cot cscopepathcomp cspc cul deco diff dy efm eol et fde fen fileencodings fk foldenable foldnestmax fs gfs gtt guitablabel hid hl im imdisable imstyle indk isi key langmenu lines lnr lz matchpairs mco ml modeline mousefocus mp nrformats omnifunc paragraphs perldll pmbcs printdevice prompt pythondll quickfixtextfunc remap rl rubydll sc scrolljump selection shellpipe shellxquote showcmd sidescroll smartcase softtabstop spelllang sps sta su swb synmaxcol tagbsearch tal tcldll termwinscroll tf timeoutlen to tsl ttyfast tws ul ur ve vif vts wcr wi wildmenu winfixheight wiv wrap ws
|
||||
syn keyword vimOption contained altkeymap arabicshape aw backupskip beval bk bri bufhidden cdpath cindent cm colorcolumn completeopt cp cscopeprg csprg culopt def diffexpr ea ei ep eventignore fdi fenc fileformat fkmap foldexpr foldopen fsync gfw guicursor guitabtooltip hidden hlg imactivatefunc imi inc inex isident keymap langnoremap linespace loadplugins ma matchtime mef mle modelineexpr mousehide mps nu opendevice paste pex pmbfn printencoding pt pythonhome quoteescape renderoptions rlc ruf scb scrolloff selectmode shellquote shiftround showfulltag sidescrolloff smartindent sol spellsuggest sr stal sua swf syntax tagcase tb tenc termwinsize tfu title toolbar tsr ttym twsl undodir ut verbose viminfo wa wd wic wildmode winfixwidth wiw wrapmargin ww
|
||||
syn keyword vimOption contained ambiwidth ari awa balloondelay bevalterm bkc briopt buflisted cedit cink cmdheight columns completepopup cpo cscopequickfix csqf cursorbind define diffopt ead ek equalalways ex fdl fencs fileformats flp foldignore foldtext ft ghr guifont helpfile highlight hls imactivatekey iminsert include inf isk keymodel langremap lisp lpl macatsui maxcombine menc mls modelines mousem msm number operatorfunc pastetoggle pexpr popt printexpr pumheight pythonthreedll rdt report rnu ruler scf scrollopt sessionoptions
|
||||
syn keyword vimOption contained acd ambw arshape background ballooneval bex bl brk buftype cf cinkeys cmdwinheight com completeslash cpoptions cscoperelative csre cursorcolumn delcombine digraph eadirection emo equalprg expandtab fdls fex fileignorecase fml foldlevel formatexpr gcr go guifontset helpheight history hlsearch imaf ims includeexpr infercase iskeyword keywordprg laststatus lispwords lrm magic maxfuncdepth menuitems mm modifiable mousemodel mzq numberwidth opfunc patchexpr pfn pp printfont pumwidth pythonthreehome re restorescreen ro rulerformat scl scs sft shellslash shortmess showtabline sj smd spell spl srr startofline suffixes switchbuf ta tagfunc tbi term termwintype tgc titlelen toolbariconsize ttimeout ttymouse twt undofile varsofttabstop verbosefile viminfofile wak weirdinvert wig wildoptions winheight wm wrapscan
|
||||
syn keyword vimOption contained ai anti autochdir backspace balloonevalterm bexpr bo browsedir casemap cfu cino cmp comments concealcursor cpp cscopetag cst cursorline dex dip eb emoji errorbells exrc fdm ff filetype fmr foldlevelstart formatlistpat gd gp guifontwide helplang hk ic imak imsearch incsearch insertmode isp km lazyredraw list ls makeef maxmapdepth mfd mmd modified mouses mzquantum nuw osfiletype patchmode ph preserveindent printheader pvh pyx readonly revins rop runtimepath scr sect sh shelltemp shortname shq slm sn spellcapcheck splitbelow ss statusline suffixesadd sws tabline taglength tbidi termbidi terse tgst titleold top ttimeoutlen ttyscroll tx undolevels vartabstop vfile virtualedit warn wfh wildchar wim winminheight wmh write
|
||||
syn keyword vimOption contained akm antialias autoindent backup balloonexpr bg bomb bs cb ch cinoptions cms commentstring conceallevel cpt cscopetagorder csto cursorlineopt dg dir ed enc errorfile fcl fdn ffs fillchars fo foldmarker formatoptions gdefault grepformat guiheadroom hf hkmap icon imc imsf inde is isprint kmp lbr listchars lsp makeencoding maxmem mh mmp more mouseshape mzschemedll odev pa path pheader previewheight printmbcharset pvp pyxversion redrawtime ri rs sb scroll sections shcf shelltype showbreak si sm so spellfile splitright ssl stl sw sxe tabpagemax tagrelative tbis termencoding textauto thesaurus titlestring tpm ttm ttytype uc undoreload vb vi visualbell wb wfw wildcharm winaltkeys winminwidth wmnu writeany
|
||||
syn keyword vimOption contained al ar autoread backupcopy bdir bh breakat bsdir cc charconvert cinw co compatible confirm crb cscopeverbose csverb cwh dict directory edcompatible encoding errorformat fcs fdo fic fixendofline foldclose foldmethod formatprg gfm grepprg guioptions hh hkmapp iconstring imcmdline imst indentexpr isf joinspaces kp lcs lm luadll makeprg maxmempattern mis mmt mouse mouset mzschemegcdll oft packpath pdev pi previewpopup printmbfont pvw qe regexpengine rightleft rtp sbo scrollbind secure shell shellxescape showcmd sidescroll smartcase softtabstop spelllang spo ssop stmp swapfile sxq tabstop tags tbs termguicolors textmode tildeop tl tr tty tw udf updatecount vbs viewdir vop wc wh wildignore wincolor winptydll wmw writebackup
|
||||
syn keyword vimOption contained aleph arab autowrite backupdir bdlay bin breakindent bsk ccv ci cinwords cocu complete copyindent cryptmethod csl cuc debug dictionary display ef endofline esckeys fdc fdt fileencoding fixeol foldcolumn foldminlines fp gfn gtl guipty hi hkp ignorecase imd imstatusfunc indentkeys isfname js langmap linebreak lmap lw mat maxmemtot mkspellmem mod mousef mousetime nf ofu para penc pm previewwindow printoptions pw qftf relativenumber rightleftcmd ru sbr scrollfocus sel shellcmdflag shellxquote showfulltag sidescrolloff smartindent sol spelloptions spr st sts swapsync syn tag tagstack tc termwinkey textwidth timeout tm ts ttybuiltin twk udir updatetime vdir viewoptions vsts wcm whichwrap wildignorecase window winwidth wop writedelay
|
||||
syn keyword vimOption contained allowrevins arabic autowriteall backupext belloff binary breakindentopt bt cd cin clipboard cole completefunc cot cscopepathcomp cspc cul deco diff dy efm eol et fde fen fileencodings fk foldenable foldnestmax fs gfs gtt guitablabel hid hl im imdisable imstyle indk isi key langmenu lines lnr lz matchpairs mco ml modeline mousefocus mp nrformats omnifunc paragraphs perldll pmbcs printdevice prompt pythondll quickfixtextfunc remap rl rubydll sc scrolljump selection shellpipe shiftround showmatch signcolumn smarttab sp spellsuggest sps sta su swb synmaxcol tagbsearch tal tcldll termwinscroll tf timeoutlen to tsl ttyfast tws ul ur ve vif vts wcr wi wildmenu winfixheight wiv wrap ws
|
||||
syn keyword vimOption contained altkeymap arabicshape aw backupskip beval bk bri bufhidden cdpath cindent cm colorcolumn completeopt cp cscopeprg csprg culopt def diffexpr ea ei ep eventignore fdi fenc fileformat fkmap foldexpr foldopen fsync gfw guicursor guitabtooltip hidden hlg imactivatefunc imi inc inex isident keymap langnoremap linespace loadplugins ma matchtime mef mle modelineexpr mousehide mps nu opendevice paste pex pmbfn printencoding pt pythonhome quoteescape renderoptions rlc ruf scb scrolloff selectmode shellquote shiftwidth showmode siso smc spc spf sr stal sua swf syntax tagcase tb tenc termwinsize tfu title toolbar tsr ttym twsl undodir ut verbose viminfo wa wd wic wildmode winfixwidth wiw wrapmargin ww
|
||||
syn keyword vimOption contained ambiwidth ari awa balloondelay bevalterm bkc briopt buflisted cedit cink cmdheight columns completepopup cpo cscopequickfix csqf cursorbind define diffopt ead ek equalalways ex fdl fencs fileformats flp foldignore foldtext ft ghr guifont helpfile highlight hls imactivatekey iminsert include inf isk keymodel langremap lisp lpl macatsui maxcombine menc mls modelines mousem msm number operatorfunc pastetoggle pexpr popt printexpr pumheight pythonthreedll rdt report rnu ruler scf scrollopt sessionoptions shellredir shm
|
||||
|
||||
" vimOptions: These are the turn-off setting variants {{{2
|
||||
syn keyword vimOption contained noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobevalterm nobk nobreakindent nocf nocindent nocopyindent nocscoperelative nocsre nocuc nocursorcolumn nodelcombine nodigraph noed noemo noeol noesckeys noexpandtab nofic nofixeol nofoldenable nogd nohid nohkmap nohls noicon noimc noimdisable noinfercase nojoinspaces nolangremap nolinebreak nolnr nolrm nomacatsui noml nomod nomodelineexpr nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscrollbind noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx noundofile novisualbell nowarn noweirdinvert nowfw nowildignorecase nowinfixheight nowiv nowrap nowrite nowritebackup
|
||||
@ -66,8 +66,8 @@ syn keyword vimErrSetting contained bioskey biosk conskey consk autoprint beauti
|
||||
|
||||
" AutoCmd Events {{{2
|
||||
syn case ignore
|
||||
syn keyword vimAutoEvent contained BufAdd BufDelete BufFilePost BufHidden BufNew BufRead BufReadPost BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre CmdlineChanged CmdlineEnter CmdlineLeave CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedI DiffUpdated DirChanged EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave MenuPopup OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost ShellCmdPost ShellFilterPost SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TextChanged TextChangedI TextChangedP TextYankPost User VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave WinNew
|
||||
syn keyword vimAutoEvent contained BufCreate BufEnter BufFilePre BufLeave BufNewFile BufReadCmd BufReadPre
|
||||
syn keyword vimAutoEvent contained BufAdd BufDelete BufFilePost BufHidden BufNew BufRead BufReadPost BufUnload BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre CmdlineChanged CmdlineEnter CmdlineLeave CmdUndefined CmdwinEnter CmdwinLeave ColorScheme ColorSchemePre CompleteChanged CompleteDone CompleteDonePre CursorHold CursorHoldI CursorMoved CursorMovedI DiffUpdated DirChanged EncodingChanged ExitPre FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave MenuPopup OptionSet QuickFixCmdPost QuickFixCmdPre QuitPre RemoteReply SafeState SafeStateAgain SessionLoadPost ShellCmdPost ShellFilterPost SigUSR1 SourceCmd SourcePost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabClosed TabEnter TabLeave TabNew TermChanged TerminalOpen TerminalWinOpen TermResponse TextChanged TextChangedI TextChangedP TextYankPost User VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave WinNew
|
||||
syn keyword vimAutoEvent contained BufCreate BufEnter BufFilePre BufLeave BufNewFile BufReadCmd BufReadPre BufWinEnter
|
||||
|
||||
" Highlight commonly used Groupnames {{{2
|
||||
syn keyword vimGroup contained Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
|
||||
@ -78,11 +78,11 @@ syn match vimHLGroup contained "Conceal"
|
||||
syn case match
|
||||
|
||||
" Function Names {{{2
|
||||
syn keyword vimFuncName contained abs appendbufline asin assert_fails assert_notmatch balloon_gettext bufadd bufname byteidx char2nr ch_evalexpr ch_log ch_readraw cindent complete_check cosh deepcopy diff_hlID eval exists feedkeys findfile fnamemodify foldtextresult get getchar getcmdtype getenv getftype getmarklist getqflist gettabwinvar getwinposy has histdel hostname inputdialog insert islocked job_setoptions js_decode len lispindent localtime maparg matchaddpos matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prop_add prop_type_add pum_getpos rand reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setline setreg sha256 sign_getplaced sign_unplace sort sound_stop srand strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setapi term_wait test_garbagecollect_soon test_null_dict test_null_string test_setmouse timer_info tolower trunc uniq wildmenumode win_execute win_gotoid winlayout winrestview winwidth
|
||||
syn keyword vimFuncName contained acos argc assert_beeps assert_false assert_report balloon_show bufexists bufnr byteidxcomp ch_canread ch_evalraw ch_logfile ch_sendexpr clearmatches complete_info count delete echoraw eventhandler exp filereadable float2nr foldclosed foreground getbufinfo getcharmod getcmdwintype getfontname getimstatus getmatches getreg gettagstack getwinvar has_key histget iconv inputlist interrupt isnan job_start js_encode libcall list2str log mapcheck matcharg matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_clear prop_type_change pumvisible range reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcharsearch setloclist settabvar shellescape sign_jump sign_unplacelist sound_clear spellbadword state strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled term_list term_setkill test_alloc_fail test_getvalue test_null_function test_option_not_set test_settime timer_pause toupper type values winbufnr win_findbuf winheight winline winsaveview wordcount
|
||||
syn keyword vimFuncName contained add argidx assert_equal assert_inrange assert_true balloon_split buflisted bufwinid call ch_close ch_getbufnr ch_open ch_sendraw col confirm cscope_connection deletebufline empty executable expand filewritable floor foldclosedend funcref getbufline getcharsearch getcompletion getfperm getjumplist getmousepos getregtype getwininfo glob haslocaldir histnr indent inputrestore invert items job_status json_decode libcallnr listener_add log10 mapset matchdelete max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_setcallback prop_find prop_type_delete py3eval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcmdpos setmatches settabwinvar shiftwidth sign_place simplify soundfold spellsuggest str2float strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_scrape term_setrestore test_autochdir test_ignore_error test_null_job test_override test_srand_seed timer_start tr undofile virtcol wincol win_getid win_id2tabwin winnr win_screenpos writefile
|
||||
syn keyword vimFuncName contained and arglistid assert_equalfile assert_match atan browse bufload bufwinnr ceil ch_close_in ch_getjob ch_read ch_setoptions complete copy cursor did_filetype environ execute expandcmd filter fmod foldlevel function getbufvar getcmdline getcurpos getfsize getline getpid gettabinfo getwinpos glob2regpat hasmapto hlexists index inputsave isdirectory job_getchannel job_stop json_encode line listener_flush luaeval match matchend menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setinterrupt prop_list prop_type_get pyeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setenv setpos settagstack sign_define sign_placelist sin sound_playevent split str2list strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_sendkeys term_setsize test_feedinput test_null_blob test_null_list test_refcount test_unknown timer_stop trim undotree visualmode windowsversion win_gettype win_id2win winrestcmd win_splitmove xor
|
||||
syn keyword vimFuncName contained append argv assert_exception assert_notequal atan2 browsedir bufloaded byte2line changenr chdir ch_info ch_readblob ch_status complete_add cos debugbreak diff_filler escape exepath extend finddir fnameescape foldtext garbagecollect getchangelist getcmdpos getcwd getftime getloclist getpos gettabvar getwinposx globpath histadd hlID input inputsecret isinf job_info join keys line2byte listener_remove map matchadd matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setprompt prop_remove prop_type_list pyxeval readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playfile sqrt str2nr strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_setansicolors term_start test_garbagecollect_now test_null_channel test_null_partial test_scrollbar test_void timer_stopall
|
||||
syn keyword vimFuncName contained abs appendbufline asin assert_fails assert_notmatch balloon_gettext bufadd bufname byteidx char2nr ch_evalexpr ch_log ch_readraw cindent complete_check cosh deepcopy diff_hlID eval exists feedkeys findfile fnameescape foldtext garbagecollect getchangelist getcmdpos getcwd getftime getloclist getpos gettabinfo getwinpos glob2regpat hasmapto hlexists index inputsave isdirectory job_getchannel job_stop json_encode line listener_flush luaeval match matchend menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setinterrupt prop_list prop_type_get pyeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setenv setpos settagstack sign_define sign_placelist sin sound_playevent split str2list strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_ignore_error test_null_job test_override test_srand_seed timer_start tr undotree wildmenumode win_execute win_gotoid winlayout winrestview winwidth
|
||||
syn keyword vimFuncName contained acos argc assert_beeps assert_false assert_report balloon_show bufexists bufnr byteidxcomp ch_canread ch_evalraw ch_logfile ch_sendexpr clearmatches complete_info count delete echoraw eventhandler exp filereadable flatten fnamemodify foldtextresult get getchar getcmdtype getenv getftype getmarklist getqflist gettabvar getwinposx globpath histadd hlID input inputsecret isinf job_info join keys line2byte listener_remove map matchadd matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setprompt prop_remove prop_type_list pyxeval readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playfile sqrt str2nr strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_null_blob test_null_list test_refcount test_unknown timer_stop trim uniq winbufnr win_findbuf winheight winline winsaveview wordcount
|
||||
syn keyword vimFuncName contained add argidx assert_equal assert_inrange assert_true balloon_split buflisted bufwinid call ch_close ch_getbufnr ch_open ch_sendraw col confirm cscope_connection deletebufline empty executable expand filewritable float2nr foldclosed foreground getbufinfo getcharmod getcmdwintype getfontname getimstatus getmatches getreg gettabwinvar getwinposy has histdel hostname inputdialog insert islocked job_setoptions js_decode len lispindent localtime maparg matchaddpos matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prop_add prop_type_add pum_getpos rand reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setline setreg sha256 sign_getplaced sign_unplace sort sound_stop srand strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_null_channel test_null_partial test_scrollbar test_void timer_stopall trunc values wincol win_getid win_id2tabwin winnr win_screenpos writefile
|
||||
syn keyword vimFuncName contained and arglistid assert_equalfile assert_match atan browse bufload bufwinnr ceil ch_close_in ch_getjob ch_read ch_setoptions complete copy cursor did_filetype environ execute expandcmd filter floor foldclosedend funcref getbufline getcharsearch getcompletion getfperm getjumplist getmousepos getreginfo gettagstack getwinvar has_key histget iconv inputlist interrupt isnan job_start js_encode libcall list2str log mapcheck matcharg matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_clear prop_type_change pumvisible range reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcharsearch setloclist settabvar shellescape sign_jump sign_unplacelist sound_clear spellbadword state strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_dict test_null_string test_setmouse timer_info tolower type virtcol windowsversion win_gettype win_id2win winrestcmd win_splitmove xor
|
||||
syn keyword vimFuncName contained append argv assert_exception assert_notequal atan2 browsedir bufloaded byte2line changenr chdir ch_info ch_readblob ch_status complete_add cos debugbreak diff_filler escape exepath extend finddir fmod foldlevel function getbufvar getcmdline getcurpos getfsize getline getpid getregtype getwininfo glob haslocaldir histnr indent inputrestore invert items job_status json_decode libcallnr listener_add log10 mapset matchdelete max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_setcallback prop_find prop_type_delete py3eval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcmdpos setmatches settabwinvar shiftwidth sign_place simplify soundfold spellsuggest str2float strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_function test_option_not_set test_settime timer_pause toupper undofile visualmode
|
||||
|
||||
"--- syntax here and above generated by mkvimvim ---
|
||||
" Special Vim Highlighting (not automatic) {{{1
|
||||
@ -295,6 +295,7 @@ syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentS
|
||||
syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString
|
||||
syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"'
|
||||
" Vim9 comments - TODO: might be highlighted while they don't work
|
||||
syn match vim9Comment excludenl +^#[^{].*$+ contains=@vimCommentGroup,vimCommentString
|
||||
syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString
|
||||
syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString
|
||||
syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString
|
||||
@ -453,6 +454,9 @@ syn case match
|
||||
syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" contains=vimFuncName,vimUserFunc,vimExecute
|
||||
syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation
|
||||
|
||||
" User Command Highlighting: {{{2
|
||||
syn match vimUsrCmd '^\s*\zs\u\w*.*$'
|
||||
|
||||
" Errors And Warnings: {{{2
|
||||
" ====================
|
||||
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
|
||||
@ -598,7 +602,7 @@ syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'"
|
||||
syn match vimHiGuiRgb contained "#\x\{6}"
|
||||
|
||||
" Highlighting: hi group key=arg ... {{{2
|
||||
syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
|
||||
syn cluster vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
|
||||
syn region vimHiKeyList contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||" contains=@vimHiCluster
|
||||
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
|
||||
syn match vimHiKeyError contained "\i\+="he=e-1
|
||||
@ -607,6 +611,7 @@ syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList
|
||||
syn match vimHiStartStop contained "\c\(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption
|
||||
syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList
|
||||
syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
|
||||
syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
|
||||
syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList
|
||||
syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname
|
||||
syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
|
||||
@ -629,7 +634,7 @@ syn match vimCtrlChar "[--]"
|
||||
" Beginners - Patterns that involve ^ {{{2
|
||||
" =========
|
||||
syn match vimLineComment +^[ \t:]*".*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
|
||||
syn match vim9LineComment +^[ \t:]\+#.*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
|
||||
syn match vim9LineComment +^[ \t:]*#.*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle
|
||||
syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
|
||||
syn match vimContinue "^\s*\\"
|
||||
syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
|
||||
@ -877,6 +882,7 @@ if !exists("skip_vim_syntax_inits")
|
||||
hi def link vimError Error
|
||||
hi def link vimFBVar vimVar
|
||||
hi def link vimFgBgAttrib vimHiAttrib
|
||||
hi def link vimHiCtermul vimHiTerm
|
||||
hi def link vimFold Folded
|
||||
hi def link vimFTCmd vimCommand
|
||||
hi def link vimFTOption vimSynType
|
||||
|
@ -7,7 +7,7 @@
|
||||
fasonita por priskribi sufi<66>ajn komandojn, por ke vi kapablu uzi Vim
|
||||
kun sufi<66>a facileco.
|
||||
|
||||
La tempo bezonata por plenumi la kurson estas 25-30 minutoj, kaj dependas
|
||||
La tempo bezonata por plenumi la kurson estas 30 minutoj, kaj dependas
|
||||
de kiom da tempo estas uzata por eksperimenti.
|
||||
|
||||
ATENTU:
|
||||
@ -100,7 +100,7 @@ RIMARKO: Trairante la instruilon, ne provu memori, lernu per la uzo.
|
||||
1. Movu la kursoron al la unua suba linio markita per --->.
|
||||
|
||||
2. Por igi la unuan linion sama kiel la dua, movu la kursoron sur la unuan
|
||||
signon post kie la teksto estas enmetenda.
|
||||
signon anta<EFBFBD> kie la teksto estas enmetenda.
|
||||
|
||||
3. Premu i kaj tajpu la bezonatajn aldonojn.
|
||||
|
||||
@ -200,7 +200,7 @@ Nun da
|
||||
|
||||
1. Premu <ESK> por certigi, ke vi estas en normala re<72>imo.
|
||||
|
||||
2. Movu la kursoron al la linio markita per --->.
|
||||
2. Movu la kursoron al la suba linio markita per --->.
|
||||
|
||||
3. Movu la kursoron al la komenco de vorto, kiu forvi<76>endas.
|
||||
|
||||
@ -225,7 +225,7 @@ Nun da
|
||||
|
||||
1. Premu <ESK> por certigi, ke vi estas en normala re<72>imo.
|
||||
|
||||
2. Movu la kursoron sur la suban linion markita per --->.
|
||||
2. Movu la kursoron al la suba linio markita per --->.
|
||||
|
||||
3. Movu la kursoron <20>e la fino de la <20>usta linio (POST la unua . ).
|
||||
|
||||
@ -296,10 +296,10 @@ RIMARKO: Premo de nur la movo en Normala re
|
||||
|
||||
1. Movu la kursoron <20>e la unua MAJUSKLA vorto en la linio markita per --->.
|
||||
|
||||
2. Tajpu d2w por forvi<76>i la du MAJUSKLAJN vortojn
|
||||
2. Tajpu d2w por forvi<76>i la du MAJUSKLAJN vortojn.
|
||||
|
||||
3. Ripetu pa<70>ojn 1 <20>is 2 per malsama nombro por forvi<76>i la sinsekvajn
|
||||
MAJUSKLAJN vortojn per unu komando
|
||||
MAJUSKLAJN vortojn per unu komando.
|
||||
|
||||
---> Tiu AB CDE linio FGHI JK LMN OP de vortoj estas Q RS TUV purigita.
|
||||
|
||||
@ -379,7 +379,7 @@ RIMARKO: Premo de nur la movo en Normala re
|
||||
|
||||
** Tajpu p por meti tekston forvi<76>itan anta<74>e post la kursoro. **
|
||||
|
||||
1. Movu la kursoron <20>e la unua ---> suba linio.
|
||||
1. Movu la kursoron <20>e la unua suba linio markita per --->.
|
||||
|
||||
2. Tajpu dd por forvi<76>i la linion kaj konservi <20>in ene de re<72>istro de Vim.
|
||||
|
||||
@ -652,7 +652,7 @@ RIMARKO: Se vi volus eliri el Vim kaj restartigi
|
||||
la dosiero estus precize same kiel kopio de la instruilo kiam vi
|
||||
konservis <20>in.
|
||||
|
||||
5. Nun forvi<76>u la dosieron tajpante (WINDOWS): :!del TESTO
|
||||
5. Nun forvi<76>u la dosieron tajpante (VINDOZO): :!del TESTO
|
||||
a<> (UNIKSO): :!rm TESTO
|
||||
|
||||
|
||||
@ -713,7 +713,7 @@ RIMARKO: Vi nun povas legi la eliron de ekstera komando. Ekzemple,
|
||||
1. :!komando plenumas eksteran komandon.
|
||||
|
||||
Iuj utilaj ekzemploj estas:
|
||||
(WINDOWS) (UNIKSO)
|
||||
(VINDOZO) (UNIKSO)
|
||||
:!dir :!ls - listigas dosierujon
|
||||
:!del DOSIERNOMO :!rm DOSIERNOMO - forvi<76>as la dosieron DOSIERNOMO
|
||||
|
||||
@ -808,7 +808,7 @@ RIMARKO: Anstata
|
||||
** Uzu la y operatoron por kopii tekston, kaj p por alglui <20>in **
|
||||
|
||||
|
||||
1. Iru al la linio markita per ---> sube kaj poziciu la kursoron post "a)".
|
||||
1. Iru al la suba linio markita per ---> kaj poziciu la kursoron post "a)".
|
||||
|
||||
2. Komencu la Viduman re<72>imon per v kaj movu la kursoron tuj anta<74> "unua".
|
||||
|
||||
@ -914,7 +914,7 @@ RIMARKO: Se vi deziras ignori usklecon por nur unu ser
|
||||
|
||||
1. Ekredaktu la dosieron "vimrc". Tio dependas de via sistemo:
|
||||
:e ~/.vimrc por Unikso
|
||||
:e $VIM/_vimrc por Windows
|
||||
:e $VIM/_vimrc por Vindozo
|
||||
|
||||
2. Nun legu la enhavon de la ekzempla "vimrc"
|
||||
:r $VIMRUNTIME/vimrc_example.vim
|
||||
@ -945,7 +945,7 @@ RIMARKO: Se vi deziras ignori usklecon por nur unu ser
|
||||
|
||||
6. Nun aldonu spaceton kaj la komencon de ekzistanta nomo: :edit DOSI
|
||||
|
||||
7. Premu <TAB>. Vim kompletigos la nomon (se <20>i estas unika)
|
||||
7. Premu d<TAB>. Vim kompletigos la nomon (se <20>i estas unika)
|
||||
|
||||
RIMARKO: Kompletigo funkcias por multaj komandoj. Nur provu premi CTRL-D kaj
|
||||
<TAB>. Estas aparte utila por :help .
|
||||
@ -986,6 +986,6 @@ RIMARKO: Kompletigo funkcias por multaj komandoj. Nur provu premi CTRL-D kaj
|
||||
|
||||
Esperantigita fare de Dominique Pell<6C>, 2008-04-01
|
||||
Retpo<70>to: dominique.pelle@gmail.com
|
||||
Lasta <20>an<61>o: 2018-12-02
|
||||
Lasta <20>an<61>o: 2020-07-19
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -7,7 +7,7 @@
|
||||
fasonita por priskribi sufiĉajn komandojn, por ke vi kapablu uzi Vim
|
||||
kun sufiĉa facileco.
|
||||
|
||||
La tempo bezonata por plenumi la kurson estas 25-30 minutoj, kaj dependas
|
||||
La tempo bezonata por plenumi la kurson estas 30 minutoj, kaj dependas
|
||||
de kiom da tempo estas uzata por eksperimenti.
|
||||
|
||||
ATENTU:
|
||||
@ -100,7 +100,7 @@ RIMARKO: Trairante la instruilon, ne provu memori, lernu per la uzo.
|
||||
1. Movu la kursoron al la unua suba linio markita per --->.
|
||||
|
||||
2. Por igi la unuan linion sama kiel la dua, movu la kursoron sur la unuan
|
||||
signon post kie la teksto estas enmetenda.
|
||||
signon antaŭ kie la teksto estas enmetenda.
|
||||
|
||||
3. Premu i kaj tajpu la bezonatajn aldonojn.
|
||||
|
||||
@ -200,7 +200,7 @@ Nun daŭrigu al la leciono 2.
|
||||
|
||||
1. Premu <ESK> por certigi, ke vi estas en normala reĝimo.
|
||||
|
||||
2. Movu la kursoron al la linio markita per --->.
|
||||
2. Movu la kursoron al la suba linio markita per --->.
|
||||
|
||||
3. Movu la kursoron al la komenco de vorto, kiu forviŝendas.
|
||||
|
||||
@ -225,7 +225,7 @@ Nun daŭrigu al la leciono 2.
|
||||
|
||||
1. Premu <ESK> por certigi, ke vi estas en normala reĝimo.
|
||||
|
||||
2. Movu la kursoron sur la suban linion markita per --->.
|
||||
2. Movu la kursoron al la suba linio markita per --->.
|
||||
|
||||
3. Movu la kursoron ĉe la fino de la ĝusta linio (POST la unua . ).
|
||||
|
||||
@ -296,10 +296,10 @@ RIMARKO: Premo de nur la movo en Normala reĝimo sen operatoro movos
|
||||
|
||||
1. Movu la kursoron ĉe la unua MAJUSKLA vorto en la linio markita per --->.
|
||||
|
||||
2. Tajpu d2w por forviŝi la du MAJUSKLAJN vortojn
|
||||
2. Tajpu d2w por forviŝi la du MAJUSKLAJN vortojn.
|
||||
|
||||
3. Ripetu paŝojn 1 ĝis 2 per malsama nombro por forviŝi la sinsekvajn
|
||||
MAJUSKLAJN vortojn per unu komando
|
||||
MAJUSKLAJN vortojn per unu komando.
|
||||
|
||||
---> Tiu AB CDE linio FGHI JK LMN OP de vortoj estas Q RS TUV purigita.
|
||||
|
||||
@ -379,7 +379,7 @@ RIMARKO: Premo de nur la movo en Normala reĝimo sen operatoro movos
|
||||
|
||||
** Tajpu p por meti tekston forviŝitan antaŭe post la kursoro. **
|
||||
|
||||
1. Movu la kursoron ĉe la unua ---> suba linio.
|
||||
1. Movu la kursoron ĉe la unua suba linio markita per --->.
|
||||
|
||||
2. Tajpu dd por forviŝi la linion kaj konservi ĝin ene de reĝistro de Vim.
|
||||
|
||||
@ -652,7 +652,7 @@ RIMARKO: Se vi volus eliri el Vim kaj restartigi ĝin denove per vim TESTO,
|
||||
la dosiero estus precize same kiel kopio de la instruilo kiam vi
|
||||
konservis ĝin.
|
||||
|
||||
5. Nun forviŝu la dosieron tajpante (WINDOWS): :!del TESTO
|
||||
5. Nun forviŝu la dosieron tajpante (VINDOZO): :!del TESTO
|
||||
aŭ (UNIKSO): :!rm TESTO
|
||||
|
||||
|
||||
@ -713,7 +713,7 @@ RIMARKO: Vi nun povas legi la eliron de ekstera komando. Ekzemple,
|
||||
1. :!komando plenumas eksteran komandon.
|
||||
|
||||
Iuj utilaj ekzemploj estas:
|
||||
(WINDOWS) (UNIKSO)
|
||||
(VINDOZO) (UNIKSO)
|
||||
:!dir :!ls - listigas dosierujon
|
||||
:!del DOSIERNOMO :!rm DOSIERNOMO - forviŝas la dosieron DOSIERNOMO
|
||||
|
||||
@ -808,7 +808,7 @@ RIMARKO: Anstataŭiga reĝimo estas same kiel Enmeta reĝimo, sed ĉiu signo
|
||||
** Uzu la y operatoron por kopii tekston, kaj p por alglui ĝin **
|
||||
|
||||
|
||||
1. Iru al la linio markita per ---> sube kaj poziciu la kursoron post "a)".
|
||||
1. Iru al la suba linio markita per ---> kaj poziciu la kursoron post "a)".
|
||||
|
||||
2. Komencu la Viduman reĝimon per v kaj movu la kursoron tuj antaŭ "unua".
|
||||
|
||||
@ -914,7 +914,7 @@ RIMARKO: Se vi deziras ignori usklecon por nur unu serĉa komando, uzu \c
|
||||
|
||||
1. Ekredaktu la dosieron "vimrc". Tio dependas de via sistemo:
|
||||
:e ~/.vimrc por Unikso
|
||||
:e $VIM/_vimrc por Windows
|
||||
:e $VIM/_vimrc por Vindozo
|
||||
|
||||
2. Nun legu la enhavon de la ekzempla "vimrc"
|
||||
:r $VIMRUNTIME/vimrc_example.vim
|
||||
@ -945,7 +945,7 @@ RIMARKO: Se vi deziras ignori usklecon por nur unu serĉa komando, uzu \c
|
||||
|
||||
6. Nun aldonu spaceton kaj la komencon de ekzistanta nomo: :edit DOSI
|
||||
|
||||
7. Premu <TAB>. Vim kompletigos la nomon (se ĝi estas unika)
|
||||
7. Premu d<TAB>. Vim kompletigos la nomon (se ĝi estas unika)
|
||||
|
||||
RIMARKO: Kompletigo funkcias por multaj komandoj. Nur provu premi CTRL-D kaj
|
||||
<TAB>. Estas aparte utila por :help .
|
||||
@ -986,6 +986,6 @@ RIMARKO: Kompletigo funkcias por multaj komandoj. Nur provu premi CTRL-D kaj
|
||||
|
||||
Esperantigita fare de Dominique Pellé, 2008-04-01
|
||||
Retpoŝto: dominique.pelle@gmail.com
|
||||
Lasta ŝanĝo: 2018-12-02
|
||||
Lasta ŝanĝo: 2020-07-19
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
201
src/INSTALL
201
src/INSTALL
@ -181,203 +181,4 @@ OS/2 support was removed in patch 7.4.1008
|
||||
4. Atari MiNT
|
||||
=============
|
||||
|
||||
[NOTE: this is quite old, it might not work anymore]
|
||||
|
||||
To compile Vim for MiNT you may either copy Make_mint.mak to Makefile or use
|
||||
the Unix Makefile adapted for the MiNT configuration.
|
||||
|
||||
Now proceed as described in the Unix section.
|
||||
|
||||
Prerequisites:
|
||||
|
||||
You need a curses or termcap library that supports non-alphanumeric
|
||||
termcap names. If you don't have any, link with termlib.o.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
The rest of this file is based on the INSTALL file that comes with GNU
|
||||
autoconf 2.12. Not everything applies to Vim. Read Makefile too!
|
||||
|
||||
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
These are generic installation instructions.
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, a file
|
||||
`config.cache' that saves the results of its tests to speed up
|
||||
reconfiguring, and a file `config.log' containing compiler output
|
||||
(useful mainly for debugging `configure').
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If at some point `config.cache'
|
||||
contains results you don't want to keep, you may remove or edit it.
|
||||
|
||||
The file `configure.ac' is used to create `configure' by a program
|
||||
called `autoconf'. You only need `configure.ac' if you want to change
|
||||
it or regenerate `configure' using a newer version of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system. If you're
|
||||
using `csh' on an old version of System V, you might need to type
|
||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
||||
`configure' itself.
|
||||
|
||||
Running `configure' takes awhile. While running, it prints some
|
||||
messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
the package.
|
||||
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
5. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the `configure' script does not know about. You can give `configure'
|
||||
initial values for variables by setting them in the environment. Using
|
||||
a Bourne-compatible shell, you can do that on the command line like
|
||||
this:
|
||||
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
|
||||
|
||||
Or on systems that have the `env' program, you can do it like this:
|
||||
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you must use a version of `make' that
|
||||
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'.
|
||||
|
||||
If you have to use a `make' that does not support the `VPATH'
|
||||
variable, you have to compile the package for one architecture at a time
|
||||
in the source code directory. After you have installed the package for
|
||||
one architecture, use `make distclean' before reconfiguring for another
|
||||
architecture.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' will install the package's files in
|
||||
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
||||
installation prefix other than `/usr/local' by giving `configure' the
|
||||
option `--prefix=PATH'.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
give `configure' the option `--exec-prefix=PATH', the package will use
|
||||
PATH as the prefix for installing programs and libraries.
|
||||
Documentation and other data files will still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like `--bindir=PATH' to specify different values for particular
|
||||
kinds of files. Run `configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them.
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' can not figure out
|
||||
automatically, but needs to determine by the type of host the package
|
||||
will run on. Usually `configure' can figure that out, but if it prints
|
||||
a message saying it can not guess the host type, give it the
|
||||
`--host=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name with three fields:
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the host type.
|
||||
|
||||
If you are building compiler tools for cross-compiling, you can also
|
||||
use the `--target=TYPE' option to select the type of system they will
|
||||
produce code for and the `--build=TYPE' option to select the type of
|
||||
system on which you are compiling the package.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share,
|
||||
you can create a site shell script called `config.site' that gives
|
||||
default values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Operation Controls
|
||||
==================
|
||||
|
||||
`configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Use and save the results of the tests in FILE instead of
|
||||
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
|
||||
debugging `configure'.
|
||||
|
||||
`--help'
|
||||
Print a summary of the options to `configure', and exit.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to `/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
`--version'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options.
|
||||
Atari MiNT support was removed in patch 8.2.1215.
|
||||
|
@ -744,15 +744,18 @@ OBJ = \
|
||||
$(OUTDIR)/gui_xim.o \
|
||||
$(OUTDIR)/hardcopy.o \
|
||||
$(OUTDIR)/hashtab.o \
|
||||
$(OUTDIR)/help.o \
|
||||
$(OUTDIR)/highlight.o \
|
||||
$(OUTDIR)/if_cscope.o \
|
||||
$(OUTDIR)/indent.o \
|
||||
$(OUTDIR)/insexpand.o \
|
||||
$(OUTDIR)/json.o \
|
||||
$(OUTDIR)/list.o \
|
||||
$(OUTDIR)/locale.o \
|
||||
$(OUTDIR)/main.o \
|
||||
$(OUTDIR)/map.o \
|
||||
$(OUTDIR)/mark.o \
|
||||
$(OUTDIR)/match.o \
|
||||
$(OUTDIR)/memfile.o \
|
||||
$(OUTDIR)/memline.o \
|
||||
$(OUTDIR)/menu.o \
|
||||
|
@ -1,56 +0,0 @@
|
||||
#
|
||||
# Makefile for Vim on MiNT vim:ts=8:sw=8:tw=78
|
||||
#
|
||||
# This is a wrapper around the Unix Makefile. It is configured to accompany
|
||||
# the MiNT distribution of Vim.
|
||||
#
|
||||
# See "Makefile" for instructions how to run "make".
|
||||
#
|
||||
# BUT: Always run: "make -f Make_mint.mak config",
|
||||
# and then: "make -f Make_mint.mak"!
|
||||
# Otherwise the postprocessing won't get done.
|
||||
#
|
||||
|
||||
### This Makefile has been successfully tested on these systems.
|
||||
### Check the (*) column for remarks, listed below.
|
||||
### Later code changes may cause small problems, otherwise Vim is supposed to
|
||||
### compile and run without problems.
|
||||
|
||||
#system: configurations: version (*) tested by:
|
||||
#------------- ------------------------ ------- - ----------
|
||||
#MiNT 1.12.5 gcc gcc-2.6.1 3.29 Jens Felderhoff
|
||||
#MiNT 1.12.6 gcc gcc-2.6.1 -GUI 4.6b Jens Felderhoff
|
||||
#MiNT 1.12.6 gcc gcc-2.6.1 -GUI 4.6 Jens Felderhoff
|
||||
|
||||
# set this to the pathname prefix of your symbol link editor, i.e. if it is
|
||||
# /usr/local/bin/sym-ld set:
|
||||
#
|
||||
SYMLDPREFIX = /usr/local/bin/sym-
|
||||
#SYMLDPREFIX = /gnu/bin/sym-
|
||||
|
||||
POSTPROCESS = fixstk 20k $(VIMTARGET)
|
||||
DBGPOSTPROCESS = fixstk 20k $(DBGTARGET)
|
||||
DBGLDFLAGS = -B$(SYMLDPREFIX)
|
||||
DBGTARGET = $(VIMTARGET).sym
|
||||
|
||||
|
||||
# Default target is making the executable and then do the post processing
|
||||
all: $(VIMTARGET) $(TOOLS)
|
||||
$(POSTPROCESS)
|
||||
|
||||
debug: $(DBGTARGET)
|
||||
$(DBGPOSTPROCESS)
|
||||
|
||||
#################### include the Unix Makefile ###############
|
||||
|
||||
include Makefile
|
||||
|
||||
|
||||
### (M) MiNT with gcc 2.6.1 and gdb 3.5
|
||||
CC = gcc -mint
|
||||
CFLAGS = -g -O -Iproto
|
||||
|
||||
$(DBGTARGET): $(OBJ) version.c version.h
|
||||
$(CC) -c $(ALL_CFLAGS) version.c
|
||||
$(CC) $(LDFLAGS) $(DBGLDFLAGS) -o $(DBGTARGET) -g $(OBJ) \
|
||||
version.o $(ALL_LIBS)
|
@ -64,14 +64,17 @@ SRC = arabic.c \
|
||||
gui_xim.c \
|
||||
hardcopy.c \
|
||||
hashtab.c \
|
||||
help.c \
|
||||
highlight.c \
|
||||
indent.c \
|
||||
insexpand.c \
|
||||
json.c \
|
||||
list.c \
|
||||
locale.c \
|
||||
main.c \
|
||||
map.c \
|
||||
mark.c \
|
||||
match.c \
|
||||
mbyte.c \
|
||||
memfile.c \
|
||||
memline.c \
|
||||
|
@ -766,15 +766,18 @@ OBJ = \
|
||||
$(OUTDIR)\gui_xim.obj \
|
||||
$(OUTDIR)\hardcopy.obj \
|
||||
$(OUTDIR)\hashtab.obj \
|
||||
$(OUTDIR)\help.obj \
|
||||
$(OUTDIR)\highlight.obj \
|
||||
$(OBJDIR)\if_cscope.obj \
|
||||
$(OUTDIR)\indent.obj \
|
||||
$(OUTDIR)\insexpand.obj \
|
||||
$(OUTDIR)\json.obj \
|
||||
$(OUTDIR)\list.obj \
|
||||
$(OUTDIR)\locale.obj \
|
||||
$(OUTDIR)\main.obj \
|
||||
$(OUTDIR)\map.obj \
|
||||
$(OUTDIR)\mark.obj \
|
||||
$(OUTDIR)\match.obj \
|
||||
$(OUTDIR)\mbyte.obj \
|
||||
$(OUTDIR)\memfile.obj \
|
||||
$(OUTDIR)\memline.obj \
|
||||
@ -1607,6 +1610,8 @@ $(OUTDIR)/hardcopy.obj: $(OUTDIR) hardcopy.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/hashtab.obj: $(OUTDIR) hashtab.c $(INCL)
|
||||
|
||||
$(OUTDIR)/help.obj: $(OUTDIR) help.c $(INCL)
|
||||
|
||||
$(OUTDIR)/highlight.obj: $(OUTDIR) highlight.c $(INCL)
|
||||
|
||||
$(OUTDIR)/indent.obj: $(OUTDIR) indent.c $(INCL)
|
||||
@ -1665,12 +1670,16 @@ $(OUTDIR)/json.obj: $(OUTDIR) json.c $(INCL)
|
||||
|
||||
$(OUTDIR)/list.obj: $(OUTDIR) list.c $(INCL)
|
||||
|
||||
$(OUTDIR)/locale.obj: $(OUTDIR) locale.c $(INCL)
|
||||
|
||||
$(OUTDIR)/main.obj: $(OUTDIR) main.c $(INCL) $(CUI_INCL)
|
||||
|
||||
$(OUTDIR)/map.obj: $(OUTDIR) map.c $(INCL)
|
||||
|
||||
$(OUTDIR)/mark.obj: $(OUTDIR) mark.c $(INCL)
|
||||
|
||||
$(OUTDIR)/match.obj: $(OUTDIR) match.c $(INCL)
|
||||
|
||||
$(OUTDIR)/memfile.obj: $(OUTDIR) memfile.c $(INCL)
|
||||
|
||||
$(OUTDIR)/memline.obj: $(OUTDIR) memline.c $(INCL)
|
||||
@ -1927,14 +1936,17 @@ proto.h: \
|
||||
proto/gui_xim.pro \
|
||||
proto/hardcopy.pro \
|
||||
proto/hashtab.pro \
|
||||
proto/help.pro \
|
||||
proto/highlight.pro \
|
||||
proto/indent.pro \
|
||||
proto/insexpand.pro \
|
||||
proto/json.pro \
|
||||
proto/list.pro \
|
||||
proto/locale.pro \
|
||||
proto/main.pro \
|
||||
proto/map.pro \
|
||||
proto/mark.pro \
|
||||
proto/match.pro \
|
||||
proto/memfile.pro \
|
||||
proto/memline.pro \
|
||||
proto/menu.pro \
|
||||
|
@ -337,6 +337,7 @@ SRC = \
|
||||
gui_xim.c \
|
||||
hardcopy.c \
|
||||
hashtab.c \
|
||||
help.c \
|
||||
highlight.c \
|
||||
if_cscope.c \
|
||||
if_xcmdsrv.c \
|
||||
@ -344,9 +345,11 @@ SRC = \
|
||||
insexpand.c \
|
||||
json.c \
|
||||
list.c \
|
||||
locale.c \
|
||||
main.c \
|
||||
map.c \
|
||||
mark.c \
|
||||
match.c \
|
||||
mbyte.c \
|
||||
memfile.c \
|
||||
memline.c \
|
||||
@ -449,6 +452,7 @@ OBJ = \
|
||||
gui_xim.obj \
|
||||
hardcopy.obj \
|
||||
hashtab.obj \
|
||||
help.obj \
|
||||
highlight.obj \
|
||||
if_cscope.obj \
|
||||
if_mzsch.obj \
|
||||
@ -457,9 +461,11 @@ OBJ = \
|
||||
insexpand.obj \
|
||||
json.obj \
|
||||
list.obj \
|
||||
locale.obj \
|
||||
main.obj \
|
||||
map.obj \
|
||||
mark.obj \
|
||||
match.obj \
|
||||
mbyte.obj \
|
||||
memfile.obj \
|
||||
memline.obj \
|
||||
@ -832,6 +838,10 @@ hashtab.obj : hashtab.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
globals.h
|
||||
help.obj : help.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
globals.h
|
||||
highlight.obj : highlight.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
@ -857,6 +867,10 @@ list.obj : list.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
|
||||
beval.h [.proto]gui_beval.pro alloc.h ex_cmds.h spell.h proto.h \
|
||||
globals.h
|
||||
locale.obj : locale.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
|
||||
beval.h [.proto]gui_beval.pro alloc.h ex_cmds.h spell.h proto.h \
|
||||
globals.h
|
||||
main.obj : main.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h beval.h \
|
||||
[.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h \
|
||||
@ -867,6 +881,9 @@ map.obj : map.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
mark.obj : mark.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h beval.h \
|
||||
[.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h
|
||||
match.obj : match.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h beval.h \
|
||||
[.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h
|
||||
memfile.obj : memfile.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
|
37
src/Makefile
37
src/Makefile
@ -1639,6 +1639,7 @@ BASIC_SRC = \
|
||||
gui_xim.c \
|
||||
hardcopy.c \
|
||||
hashtab.c \
|
||||
help.c \
|
||||
highlight.c \
|
||||
if_cscope.c \
|
||||
if_xcmdsrv.c \
|
||||
@ -1646,9 +1647,11 @@ BASIC_SRC = \
|
||||
insexpand.c \
|
||||
json.c \
|
||||
list.c \
|
||||
locale.c \
|
||||
main.c \
|
||||
map.c \
|
||||
mark.c \
|
||||
match.c \
|
||||
mbyte.c \
|
||||
memfile.c \
|
||||
memline.c \
|
||||
@ -1789,14 +1792,17 @@ OBJ_COMMON = \
|
||||
objects/gui_xim.o \
|
||||
objects/hardcopy.o \
|
||||
objects/hashtab.o \
|
||||
objects/help.o \
|
||||
objects/highlight.o \
|
||||
objects/if_cscope.o \
|
||||
objects/if_xcmdsrv.o \
|
||||
objects/indent.o \
|
||||
objects/insexpand.o \
|
||||
objects/list.o \
|
||||
objects/locale.o \
|
||||
objects/map.o \
|
||||
objects/mark.o \
|
||||
objects/match.o \
|
||||
objects/mbyte.o \
|
||||
objects/memline.o \
|
||||
objects/menu.o \
|
||||
@ -1956,6 +1962,7 @@ PRO_AUTO = \
|
||||
gui_beval.pro \
|
||||
hardcopy.pro \
|
||||
hashtab.pro \
|
||||
help.pro \
|
||||
highlight.pro \
|
||||
if_cscope.pro \
|
||||
if_lua.pro \
|
||||
@ -1968,9 +1975,11 @@ PRO_AUTO = \
|
||||
insexpand.pro \
|
||||
json.pro \
|
||||
list.pro \
|
||||
locale.pro \
|
||||
main.pro \
|
||||
map.pro \
|
||||
mark.pro \
|
||||
match.pro \
|
||||
mbyte.pro \
|
||||
memfile.pro \
|
||||
memline.pro \
|
||||
@ -2301,12 +2310,7 @@ test_libvterm:
|
||||
|
||||
# Run individual OLD style test.
|
||||
# These do not depend on the executable, compile it when needed.
|
||||
test1 \
|
||||
test42 test44 test49 \
|
||||
test52 test59 \
|
||||
test70 \
|
||||
test86 test87 \
|
||||
test99:
|
||||
test1 test49 test59:
|
||||
cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
|
||||
|
||||
# Run individual NEW style test.
|
||||
@ -3262,6 +3266,9 @@ objects/hardcopy.o: hardcopy.c
|
||||
objects/hashtab.o: hashtab.c
|
||||
$(CCC) -o $@ hashtab.c
|
||||
|
||||
objects/help.o: help.c
|
||||
$(CCC) -o $@ help.c
|
||||
|
||||
objects/gui.o: gui.c
|
||||
$(CCC) -o $@ gui.c
|
||||
|
||||
@ -3370,6 +3377,9 @@ objects/kword_test.o: kword_test.c
|
||||
objects/list.o: list.c
|
||||
$(CCC) -o $@ list.c
|
||||
|
||||
objects/locale.o: locale.c
|
||||
$(CCC) -o $@ locale.c
|
||||
|
||||
objects/main.o: main.c
|
||||
$(CCC) -o $@ main.c
|
||||
|
||||
@ -3379,6 +3389,9 @@ objects/map.o: map.c
|
||||
objects/mark.o: mark.c
|
||||
$(CCC) -o $@ mark.c
|
||||
|
||||
objects/match.o: match.c
|
||||
$(CCC) -o $@ match.c
|
||||
|
||||
objects/memfile.o: memfile.c
|
||||
$(CCC) -o $@ memfile.c
|
||||
|
||||
@ -3925,6 +3938,10 @@ objects/hashtab.o: hashtab.c vim.h protodef.h auto/config.h feature.h os_unix.h
|
||||
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
proto.h globals.h
|
||||
objects/help.o: help.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
proto.h globals.h
|
||||
objects/highlight.o: highlight.c vim.h protodef.h auto/config.h feature.h \
|
||||
os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
@ -3953,6 +3970,10 @@ objects/list.o: list.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
proto.h globals.h
|
||||
objects/locale.o: locale.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
proto.h globals.h
|
||||
objects/main.o: main.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
@ -3965,6 +3986,10 @@ objects/mark.o: mark.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
proto.h globals.h
|
||||
objects/match.o: match.c vim.h protodef.h auto/config.h feature.h \
|
||||
os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
proto.h globals.h
|
||||
objects/mbyte.o: mbyte.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
|
@ -48,11 +48,14 @@ filepath.c | dealing with file names and paths
|
||||
findfile.c | search for files in 'path'
|
||||
fold.c | folding
|
||||
getchar.c | getting characters and key mapping
|
||||
help.c | vim help related functions
|
||||
highlight.c | syntax highlighting
|
||||
indent.c | text indentation
|
||||
insexpand.c | Insert mode completion
|
||||
mark.c | marks
|
||||
locale.c | locale/language handling
|
||||
map.c | mapping and abbreviations
|
||||
mark.c | marks
|
||||
match.c | highlight matching
|
||||
mbyte.c | multi-byte character handling
|
||||
memfile.c | storing lines for buffers in a swapfile
|
||||
memline.c | storing lines for buffers in memory
|
||||
|
6
src/auto/configure
vendored
6
src/auto/configure
vendored
@ -12106,7 +12106,7 @@ if test "x$olibs" = "x$LIBS"; then
|
||||
$as_echo_n "checking for tgetent()... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
int tgetent(char *, const char *);
|
||||
int
|
||||
main ()
|
||||
{
|
||||
@ -14143,8 +14143,8 @@ else
|
||||
main() {
|
||||
uint32_t nr1 = (uint32_t)-1;
|
||||
uint32_t nr2 = (uint32_t)0xffffffffUL;
|
||||
if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
|
||||
exit(0);
|
||||
if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_run "$LINENO"; then :
|
||||
|
@ -285,7 +285,7 @@ general_beval_cb(BalloonEval *beval, int state UNUSED)
|
||||
++textwinlock;
|
||||
|
||||
vim_free(result);
|
||||
result = eval_to_string(bexpr, NULL, TRUE);
|
||||
result = eval_to_string(bexpr, TRUE);
|
||||
|
||||
// Remove one trailing newline, it is added when the result was a
|
||||
// list and it's hardly ever useful. If the user really wants a
|
||||
|
15
src/buffer.c
15
src/buffer.c
@ -1188,7 +1188,7 @@ do_bufdel(
|
||||
if (addr_count == 2)
|
||||
{
|
||||
if (*arg) // both range and argument is not allowed
|
||||
return _(e_trailing);
|
||||
return ex_errmsg(e_trailing_arg, arg);
|
||||
bnr = start_bnr;
|
||||
}
|
||||
else // addr_count == 1
|
||||
@ -4094,7 +4094,7 @@ build_stl_str_hl(
|
||||
tv.vval.v_number = wp->w_id;
|
||||
set_var((char_u *)"g:statusline_winid", &tv, FALSE);
|
||||
|
||||
usefmt = eval_to_string_safe(fmt + 2, NULL, use_sandbox);
|
||||
usefmt = eval_to_string_safe(fmt + 2, use_sandbox);
|
||||
if (usefmt == NULL)
|
||||
usefmt = fmt;
|
||||
|
||||
@ -4229,12 +4229,19 @@ build_stl_str_hl(
|
||||
}
|
||||
if (n == curitem && group_start_userhl == group_end_userhl)
|
||||
{
|
||||
// empty group
|
||||
p = t;
|
||||
l = 0;
|
||||
// do not use the highlighting from the removed group
|
||||
for (n = groupitem[groupdepth] + 1; n < curitem; n++)
|
||||
{
|
||||
// do not use the highlighting from the removed group
|
||||
if (item[n].type == Highlight)
|
||||
item[n].type = Empty;
|
||||
// adjust the start position of TabPage to the next
|
||||
// item position
|
||||
if (item[n].type == TabPage)
|
||||
item[n].start = p;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (l > item[groupitem[groupdepth]].maxwid)
|
||||
@ -4434,7 +4441,7 @@ build_stl_str_hl(
|
||||
if (curwin != save_curwin)
|
||||
VIsual_active = FALSE;
|
||||
|
||||
str = eval_to_string_safe(p, &t, use_sandbox);
|
||||
str = eval_to_string_safe(p, use_sandbox);
|
||||
|
||||
curwin = save_curwin;
|
||||
curbuf = save_curbuf;
|
||||
|
@ -1101,27 +1101,6 @@ channel_open(
|
||||
return channel;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy callback from "src" to "dest", incrementing the refcounts.
|
||||
*/
|
||||
static void
|
||||
copy_callback(callback_T *dest, callback_T *src)
|
||||
{
|
||||
dest->cb_partial = src->cb_partial;
|
||||
if (dest->cb_partial != NULL)
|
||||
{
|
||||
dest->cb_name = src->cb_name;
|
||||
dest->cb_free_name = FALSE;
|
||||
++dest->cb_partial->pt_refcount;
|
||||
}
|
||||
else
|
||||
{
|
||||
dest->cb_name = vim_strsave(src->cb_name);
|
||||
dest->cb_free_name = TRUE;
|
||||
func_ref(src->cb_name);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
free_set_callback(callback_T *cbp, callback_T *callback)
|
||||
{
|
||||
|
@ -86,7 +86,7 @@ eval_client_expr_to_string(char_u *expr)
|
||||
// to be typed. Do generate errors so that try/catch works.
|
||||
++emsg_silent;
|
||||
|
||||
res = eval_to_string(expr, NULL, TRUE);
|
||||
res = eval_to_string(expr, TRUE);
|
||||
|
||||
debug_break_level = save_dbl;
|
||||
redir_off = save_ro;
|
||||
|
@ -494,18 +494,9 @@ ExpandOne(
|
||||
void
|
||||
ExpandInit(expand_T *xp)
|
||||
{
|
||||
xp->xp_pattern = NULL;
|
||||
xp->xp_pattern_len = 0;
|
||||
CLEAR_POINTER(xp);
|
||||
xp->xp_backslash = XP_BS_NONE;
|
||||
#ifndef BACKSLASH_IN_FILENAME
|
||||
xp->xp_shell = FALSE;
|
||||
#endif
|
||||
xp->xp_numfiles = -1;
|
||||
xp->xp_files = NULL;
|
||||
#if defined(FEAT_EVAL)
|
||||
xp->xp_arg = NULL;
|
||||
#endif
|
||||
xp->xp_line = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1099,6 +1090,15 @@ set_one_cmd_context(
|
||||
|
||||
arg = skipwhite(p);
|
||||
|
||||
// Skip over ++argopt argument
|
||||
if ((ea.argt & EX_ARGOPT) && *arg != NUL && STRNCMP(arg, "++", 2) == 0)
|
||||
{
|
||||
p = arg;
|
||||
while (*p && !vim_isspace(*p))
|
||||
MB_PTR_ADV(p);
|
||||
arg = skipwhite(p);
|
||||
}
|
||||
|
||||
if (ea.cmdidx == CMD_write || ea.cmdidx == CMD_update)
|
||||
{
|
||||
if (*arg == '>') // append
|
||||
@ -1146,14 +1146,6 @@ set_one_cmd_context(
|
||||
arg = skipwhite(arg);
|
||||
}
|
||||
|
||||
// Skip over ++argopt argument
|
||||
if ((ea.argt & EX_ARGOPT) && *arg != NUL && STRNCMP(arg, "++", 2) == 0)
|
||||
{
|
||||
p = arg;
|
||||
while (*p && !vim_isspace(*p))
|
||||
MB_PTR_ADV(p);
|
||||
arg = skipwhite(p);
|
||||
}
|
||||
|
||||
// Check for '|' to separate commands and '"' to start comments.
|
||||
// Don't do this for ":read !cmd" and ":write !cmd".
|
||||
@ -1886,62 +1878,6 @@ expand_cmdline(
|
||||
return EXPAND_OK;
|
||||
}
|
||||
|
||||
#ifdef FEAT_MULTI_LANG
|
||||
/*
|
||||
* Cleanup matches for help tags:
|
||||
* Remove "@ab" if the top of 'helplang' is "ab" and the language of the first
|
||||
* tag matches it. Otherwise remove "@en" if "en" is the only language.
|
||||
*/
|
||||
static void
|
||||
cleanup_help_tags(int num_file, char_u **file)
|
||||
{
|
||||
int i, j;
|
||||
int len;
|
||||
char_u buf[4];
|
||||
char_u *p = buf;
|
||||
|
||||
if (p_hlg[0] != NUL && (p_hlg[0] != 'e' || p_hlg[1] != 'n'))
|
||||
{
|
||||
*p++ = '@';
|
||||
*p++ = p_hlg[0];
|
||||
*p++ = p_hlg[1];
|
||||
}
|
||||
*p = NUL;
|
||||
|
||||
for (i = 0; i < num_file; ++i)
|
||||
{
|
||||
len = (int)STRLEN(file[i]) - 3;
|
||||
if (len <= 0)
|
||||
continue;
|
||||
if (STRCMP(file[i] + len, "@en") == 0)
|
||||
{
|
||||
// Sorting on priority means the same item in another language may
|
||||
// be anywhere. Search all items for a match up to the "@en".
|
||||
for (j = 0; j < num_file; ++j)
|
||||
if (j != i && (int)STRLEN(file[j]) == len + 3
|
||||
&& STRNCMP(file[i], file[j], len + 1) == 0)
|
||||
break;
|
||||
if (j == num_file)
|
||||
// item only exists with @en, remove it
|
||||
file[i][len] = NUL;
|
||||
}
|
||||
}
|
||||
|
||||
if (*buf != NUL)
|
||||
for (i = 0; i < num_file; ++i)
|
||||
{
|
||||
len = (int)STRLEN(file[i]) - 3;
|
||||
if (len <= 0)
|
||||
continue;
|
||||
if (STRCMP(file[i] + len, buf) == 0)
|
||||
{
|
||||
// remove the default language
|
||||
file[i][len] = NUL;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Function given to ExpandGeneric() to obtain the possible arguments of the
|
||||
* ":behave {mswin,xterm}" command.
|
||||
@ -2480,7 +2416,7 @@ expand_shellcmd(
|
||||
# if defined(FEAT_EVAL)
|
||||
/*
|
||||
* Call "user_expand_func()" to invoke a user defined Vim script function and
|
||||
* return the result (either a string or a List).
|
||||
* return the result (either a string, a List or NULL).
|
||||
*/
|
||||
static void *
|
||||
call_user_expand_func(
|
||||
|
@ -705,7 +705,7 @@ ex_history(exarg_T *eap)
|
||||
else
|
||||
{
|
||||
*end = i;
|
||||
emsg(_(e_trailing));
|
||||
semsg(_(e_trailing_arg), arg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -717,7 +717,7 @@ ex_history(exarg_T *eap)
|
||||
end = arg;
|
||||
if (!get_list_range(&end, &hisidx1, &hisidx2) || *end != NUL)
|
||||
{
|
||||
emsg(_(e_trailing));
|
||||
semsg(_(e_trailing_arg), end);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3510,7 +3510,7 @@ fi
|
||||
|
||||
if test "x$olibs" = "x$LIBS"; then
|
||||
AC_MSG_CHECKING([for tgetent()])
|
||||
AC_TRY_LINK([],
|
||||
AC_TRY_LINK([int tgetent(char *, const char *);],
|
||||
[char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_ERROR([NOT FOUND!
|
||||
@ -4151,8 +4151,8 @@ AC_TRY_RUN([
|
||||
main() {
|
||||
uint32_t nr1 = (uint32_t)-1;
|
||||
uint32_t nr2 = (uint32_t)0xffffffffUL;
|
||||
if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) exit(1);
|
||||
exit(0);
|
||||
if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
|
||||
return 0;
|
||||
}],
|
||||
AC_MSG_RESULT(ok),
|
||||
AC_MSG_ERROR([WRONG! uint32_t not defined correctly.]),
|
||||
|
@ -105,7 +105,7 @@ do_debug(char_u *cmd)
|
||||
vim_free(debug_newval);
|
||||
debug_newval = NULL;
|
||||
}
|
||||
sname = estack_sfile();
|
||||
sname = estack_sfile(FALSE);
|
||||
if (sname != NULL)
|
||||
msg((char *)sname);
|
||||
vim_free(sname);
|
||||
@ -344,7 +344,7 @@ do_checkbacktracelevel(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
char_u *sname = estack_sfile();
|
||||
char_u *sname = estack_sfile(FALSE);
|
||||
int max = get_maxbacktrace_level(sname);
|
||||
|
||||
if (debug_backtrace_level > max)
|
||||
@ -365,7 +365,7 @@ do_showbacktrace(char_u *cmd)
|
||||
int i = 0;
|
||||
int max;
|
||||
|
||||
sname = estack_sfile();
|
||||
sname = estack_sfile(FALSE);
|
||||
max = get_maxbacktrace_level(sname);
|
||||
if (sname != NULL)
|
||||
{
|
||||
|
42
src/dict.c
42
src/dict.c
@ -787,13 +787,15 @@ get_literal_key(char_u **arg, typval_T *tv)
|
||||
|
||||
/*
|
||||
* Allocate a variable for a Dictionary and fill it from "*arg".
|
||||
* "*arg" points to the "{".
|
||||
* "literal" is TRUE for #{key: val}
|
||||
* Return OK or FAIL. Returns NOTDONE for {expr}.
|
||||
*/
|
||||
int
|
||||
eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
|
||||
eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal)
|
||||
{
|
||||
int evaluate = flags & EVAL_EVALUATE;
|
||||
int evaluate = evalarg == NULL ? FALSE
|
||||
: evalarg->eval_flags & EVAL_EVALUATE;
|
||||
dict_T *d = NULL;
|
||||
typval_T tvkey;
|
||||
typval_T tv;
|
||||
@ -801,7 +803,8 @@ eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
|
||||
dictitem_T *item;
|
||||
char_u *start = skipwhite(*arg + 1);
|
||||
char_u buf[NUMBUFLEN];
|
||||
int vim9script = current_sctx.sc_version == SCRIPT_VERSION_VIM9;
|
||||
int vim9script = in_vim9script();
|
||||
int had_comma;
|
||||
|
||||
/*
|
||||
* First check if it's not a curly-braces thing: {expr}.
|
||||
@ -812,7 +815,7 @@ eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
|
||||
*/
|
||||
if (!vim9script && *start != '}')
|
||||
{
|
||||
if (eval1(&start, &tv, 0) == FAIL) // recursive!
|
||||
if (eval1(&start, &tv, NULL) == FAIL) // recursive!
|
||||
return FAIL;
|
||||
if (*start == '}')
|
||||
return NOTDONE;
|
||||
@ -827,12 +830,12 @@ eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
|
||||
tvkey.v_type = VAR_UNKNOWN;
|
||||
tv.v_type = VAR_UNKNOWN;
|
||||
|
||||
*arg = skipwhite(*arg + 1);
|
||||
*arg = skipwhite_and_linebreak(*arg + 1, evalarg);
|
||||
while (**arg != '}' && **arg != NUL)
|
||||
{
|
||||
if ((literal
|
||||
? get_literal_key(arg, &tvkey)
|
||||
: eval1(arg, &tvkey, flags)) == FAIL) // recursive!
|
||||
: eval1(arg, &tvkey, evalarg)) == FAIL) // recursive!
|
||||
goto failret;
|
||||
|
||||
if (**arg != ':')
|
||||
@ -852,9 +855,15 @@ eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
|
||||
goto failret;
|
||||
}
|
||||
}
|
||||
if (vim9script && (*arg)[1] != NUL && !VIM_ISWHITE((*arg)[1]))
|
||||
{
|
||||
semsg(_(e_white_after), ":");
|
||||
clear_tv(&tvkey);
|
||||
goto failret;
|
||||
}
|
||||
|
||||
*arg = skipwhite(*arg + 1);
|
||||
if (eval1(arg, &tv, flags) == FAIL) // recursive!
|
||||
*arg = skipwhite_and_linebreak(*arg + 1, evalarg);
|
||||
if (eval1(arg, &tv, evalarg) == FAIL) // recursive!
|
||||
{
|
||||
if (evaluate)
|
||||
clear_tv(&tvkey);
|
||||
@ -882,15 +891,28 @@ eval_dict(char_u **arg, typval_T *rettv, int flags, int literal)
|
||||
}
|
||||
clear_tv(&tvkey);
|
||||
|
||||
// the comma must come after the value
|
||||
had_comma = **arg == ',';
|
||||
if (had_comma)
|
||||
{
|
||||
if (vim9script && (*arg)[1] != NUL && !VIM_ISWHITE((*arg)[1]))
|
||||
{
|
||||
semsg(_(e_white_after), ",");
|
||||
goto failret;
|
||||
}
|
||||
*arg = skipwhite(*arg + 1);
|
||||
}
|
||||
|
||||
// the "}" can be on the next line
|
||||
*arg = skipwhite_and_linebreak(*arg, evalarg);
|
||||
if (**arg == '}')
|
||||
break;
|
||||
if (**arg != ',')
|
||||
if (!had_comma)
|
||||
{
|
||||
if (evaluate)
|
||||
semsg(_(e_missing_dict_comma), *arg);
|
||||
goto failret;
|
||||
}
|
||||
*arg = skipwhite(*arg + 1);
|
||||
}
|
||||
|
||||
if (**arg != '}')
|
||||
|
139
src/digraph.c
139
src/digraph.c
@ -35,73 +35,7 @@ static garray_T user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL};
|
||||
*/
|
||||
static digr_T digraphdefault[] =
|
||||
|
||||
#ifdef __MINT__
|
||||
/*
|
||||
* ATARI digraphs
|
||||
*/
|
||||
{{'C', ',', 128}, // ~@ XX
|
||||
{'u', '"', 129}, //
|
||||
{'e', '\'', 130}, //
|
||||
{'a', '^', 131}, //
|
||||
{'a', '"', 132}, //
|
||||
{'a', '`', 133}, //
|
||||
{'a', '@', 134}, //
|
||||
{'c', ',', 135}, // ~G XX
|
||||
{'e', '^', 136}, // ~H XX
|
||||
{'e', '"', 137}, //
|
||||
{'e', '`', 138}, //
|
||||
{'i', '"', 139}, //
|
||||
{'i', '^', 140}, //
|
||||
{'i', '`', 141}, //
|
||||
{'A', '"', 142}, //
|
||||
{'A', '@', 143}, //
|
||||
{'E', '\'', 144}, //
|
||||
{'a', 'e', 145}, //
|
||||
{'A', 'E', 146}, //
|
||||
{'o', '^', 147}, //
|
||||
{'o', '"', 148}, //
|
||||
{'o', '`', 149}, //
|
||||
{'u', '^', 150}, //
|
||||
{'u', '`', 151}, //
|
||||
{'y', '"', 152}, //
|
||||
{'O', '"', 153}, //
|
||||
{'U', '"', 154}, //
|
||||
{'c', '|', 155}, //
|
||||
{'$', '$', 156}, //
|
||||
{'Y', '-', 157}, // ~] XX
|
||||
{'s', 's', 158}, //
|
||||
{'f', 'f', 159}, //
|
||||
{'a', '\'', 160}, //
|
||||
{'i', '\'', 161}, // ¡
|
||||
{'o', '\'', 162}, // ¢
|
||||
{'u', '\'', 163}, // £
|
||||
{'n', '~', 164}, // ¤
|
||||
{'N', '~', 165}, // ¥
|
||||
{'a', 'a', 166}, // ¦
|
||||
{'o', 'o', 167}, // §
|
||||
{'~', '?', 168}, // ¨
|
||||
{'-', 'a', 169}, // ©
|
||||
{'a', '-', 170}, // ª
|
||||
{'1', '2', 171}, // «
|
||||
{'1', '4', 172}, // ¬
|
||||
{'~', '!', 173}, //
|
||||
{'<', '<', 174}, // ®
|
||||
{'>', '>', 175}, // ¯
|
||||
{'j', 'u', 230}, // æ
|
||||
{'o', '/', 237}, // í
|
||||
{'+', '-', 241}, // ñ
|
||||
{'>', '=', 242}, // ò
|
||||
{'<', '=', 243}, // ó
|
||||
{':', '-', 246}, // ö
|
||||
{'~', '~', 247}, // ÷
|
||||
{'~', 'o', 248}, // ø
|
||||
{'2', '2', 253}, // ý
|
||||
{NUL, NUL, NUL}
|
||||
};
|
||||
|
||||
#else // !__MINT__
|
||||
# ifdef HPUX_DIGRAPHS
|
||||
|
||||
#ifdef HPUX_DIGRAPHS
|
||||
/*
|
||||
* different HPUX digraphs
|
||||
*/
|
||||
@ -203,9 +137,9 @@ static digr_T digraphdefault[] =
|
||||
{NUL, NUL, NUL}
|
||||
};
|
||||
|
||||
# else // !HPUX_DIGRAPHS
|
||||
#else // !HPUX_DIGRAPHS
|
||||
|
||||
# ifdef EBCDIC
|
||||
# ifdef EBCDIC
|
||||
|
||||
/*
|
||||
* EBCDIC - ISO digraphs
|
||||
@ -315,8 +249,8 @@ static digr_T digraphdefault[] =
|
||||
{NUL, NUL, NUL}
|
||||
};
|
||||
|
||||
# else
|
||||
# ifdef OLD_DIGRAPHS
|
||||
# else // EBCDIC
|
||||
# ifdef OLD_DIGRAPHS
|
||||
|
||||
/*
|
||||
* digraphs compatible with Vim 5.x
|
||||
@ -423,7 +357,7 @@ static digr_T digraphdefault[] =
|
||||
{'y', '"', 255}, // x XX
|
||||
{NUL, NUL, NUL}
|
||||
};
|
||||
# else // OLD_DIGRAPHS
|
||||
# else // OLD_DIGRAPHS
|
||||
|
||||
/*
|
||||
* digraphs for Unicode from RFC1345
|
||||
@ -509,7 +443,7 @@ static digr_T digraphdefault[] =
|
||||
{'P', 'M', 0x9e},
|
||||
{'A', 'C', 0x9f},
|
||||
{'N', 'S', 0xa0},
|
||||
#define DG_START_LATIN 0xa1
|
||||
# define DG_START_LATIN 0xa1
|
||||
{'!', 'I', 0xa1},
|
||||
{'~', '!', 0xa1}, // ¡ Vim 5.x compatible
|
||||
{'C', 't', 0xa2},
|
||||
@ -658,7 +592,7 @@ static digr_T digraphdefault[] =
|
||||
{'y', ':', 0xff},
|
||||
{'y', '"', 0xff}, // x XX Vim 5.x compatible
|
||||
|
||||
# define USE_UNICODE_DIGRAPHS
|
||||
# define USE_UNICODE_DIGRAPHS
|
||||
|
||||
{'A', '-', 0x0100},
|
||||
{'a', '-', 0x0101},
|
||||
@ -833,7 +767,7 @@ static digr_T digraphdefault[] =
|
||||
{'\'', '0', 0x02da},
|
||||
{'\'', ';', 0x02db},
|
||||
{'\'', '"', 0x02dd},
|
||||
#define DG_START_GREEK 0x0386
|
||||
# define DG_START_GREEK 0x0386
|
||||
{'A', '%', 0x0386},
|
||||
{'E', '%', 0x0388},
|
||||
{'Y', '%', 0x0389},
|
||||
@ -915,7 +849,7 @@ static digr_T digraphdefault[] =
|
||||
{'p', '3', 0x03e1},
|
||||
{'\'', '%', 0x03f4},
|
||||
{'j', '3', 0x03f5},
|
||||
#define DG_START_CYRILLIC 0x0401
|
||||
# define DG_START_CYRILLIC 0x0401
|
||||
{'I', 'O', 0x0401},
|
||||
{'D', '%', 0x0402},
|
||||
{'G', '%', 0x0403},
|
||||
@ -1020,7 +954,7 @@ static digr_T digraphdefault[] =
|
||||
{'c', '3', 0x0481},
|
||||
{'G', '3', 0x0490},
|
||||
{'g', '3', 0x0491},
|
||||
#define DG_START_HEBREW 0x05d0
|
||||
# define DG_START_HEBREW 0x05d0
|
||||
{'A', '+', 0x05d0},
|
||||
{'B', '+', 0x05d1},
|
||||
{'G', '+', 0x05d2},
|
||||
@ -1048,7 +982,7 @@ static digr_T digraphdefault[] =
|
||||
{'R', '+', 0x05e8},
|
||||
{'S', 'h', 0x05e9},
|
||||
{'T', '+', 0x05ea},
|
||||
#define DG_START_ARABIC 0x060c
|
||||
# define DG_START_ARABIC 0x060c
|
||||
{',', '+', 0x060c},
|
||||
{';', '+', 0x061b},
|
||||
{'?', '+', 0x061f},
|
||||
@ -1111,7 +1045,7 @@ static digr_T digraphdefault[] =
|
||||
{'7', 'a', 0x06f7},
|
||||
{'8', 'a', 0x06f8},
|
||||
{'9', 'a', 0x06f9},
|
||||
#define DG_START_LATIN_EXTENDED 0x1e02
|
||||
# define DG_START_LATIN_EXTENDED 0x1e02
|
||||
{'B', '.', 0x1e02},
|
||||
{'b', '.', 0x1e03},
|
||||
{'B', '_', 0x1e06},
|
||||
@ -1206,7 +1140,7 @@ static digr_T digraphdefault[] =
|
||||
{'y', '2', 0x1ef7},
|
||||
{'Y', '?', 0x1ef8},
|
||||
{'y', '?', 0x1ef9},
|
||||
#define DG_START_GREEK_EXTENDED 0x1f00
|
||||
# define DG_START_GREEK_EXTENDED 0x1f00
|
||||
{';', '\'', 0x1f00},
|
||||
{',', '\'', 0x1f01},
|
||||
{';', '!', 0x1f02},
|
||||
@ -1215,7 +1149,7 @@ static digr_T digraphdefault[] =
|
||||
{'?', ',', 0x1f05},
|
||||
{'!', ':', 0x1f06},
|
||||
{'?', ':', 0x1f07},
|
||||
#define DG_START_PUNCTUATION 0x2002
|
||||
# define DG_START_PUNCTUATION 0x2002
|
||||
{'1', 'N', 0x2002},
|
||||
{'1', 'M', 0x2003},
|
||||
{'3', 'M', 0x2004},
|
||||
@ -1254,7 +1188,7 @@ static digr_T digraphdefault[] =
|
||||
{':', 'X', 0x203b},
|
||||
{'\'', '-', 0x203e},
|
||||
{'/', 'f', 0x2044},
|
||||
#define DG_START_SUB_SUPER 0x2070
|
||||
# define DG_START_SUB_SUPER 0x2070
|
||||
{'0', 'S', 0x2070},
|
||||
{'4', 'S', 0x2074},
|
||||
{'5', 'S', 0x2075},
|
||||
@ -1283,7 +1217,7 @@ static digr_T digraphdefault[] =
|
||||
{'=', 's', 0x208c},
|
||||
{'(', 's', 0x208d},
|
||||
{')', 's', 0x208e},
|
||||
#define DG_START_CURRENCY 0x20a4
|
||||
# define DG_START_CURRENCY 0x20a4
|
||||
{'L', 'i', 0x20a4},
|
||||
{'P', 't', 0x20a7},
|
||||
{'W', '=', 0x20a9},
|
||||
@ -1291,7 +1225,7 @@ static digr_T digraphdefault[] =
|
||||
{'E', 'u', 0x20ac}, // euro
|
||||
{'=', 'R', 0x20bd}, // rouble
|
||||
{'=', 'P', 0x20bd}, // rouble
|
||||
#define DG_START_OTHER1 0x2103
|
||||
# define DG_START_OTHER1 0x2103
|
||||
{'o', 'C', 0x2103},
|
||||
{'c', 'o', 0x2105},
|
||||
{'o', 'F', 0x2109},
|
||||
@ -1314,7 +1248,7 @@ static digr_T digraphdefault[] =
|
||||
{'3', '8', 0x215c},
|
||||
{'5', '8', 0x215d},
|
||||
{'7', '8', 0x215e},
|
||||
#define DG_START_ROMAN 0x2160
|
||||
# define DG_START_ROMAN 0x2160
|
||||
{'1', 'R', 0x2160},
|
||||
{'2', 'R', 0x2161},
|
||||
{'3', 'R', 0x2162},
|
||||
@ -1339,7 +1273,7 @@ static digr_T digraphdefault[] =
|
||||
{'a', 'r', 0x2179},
|
||||
{'b', 'r', 0x217a},
|
||||
{'c', 'r', 0x217b},
|
||||
#define DG_START_ARROWS 0x2190
|
||||
# define DG_START_ARROWS 0x2190
|
||||
{'<', '-', 0x2190},
|
||||
{'-', '!', 0x2191},
|
||||
{'-', '>', 0x2192},
|
||||
@ -1349,7 +1283,7 @@ static digr_T digraphdefault[] =
|
||||
{'<', '=', 0x21d0},
|
||||
{'=', '>', 0x21d2},
|
||||
{'=', '=', 0x21d4},
|
||||
#define DG_START_MATH 0x2200
|
||||
# define DG_START_MATH 0x2200
|
||||
{'F', 'A', 0x2200},
|
||||
{'d', 'P', 0x2202},
|
||||
{'T', 'E', 0x2203},
|
||||
@ -1407,7 +1341,7 @@ static digr_T digraphdefault[] =
|
||||
{'.', 'P', 0x22c5},
|
||||
{':', '3', 0x22ee},
|
||||
{'.', '3', 0x22ef},
|
||||
#define DG_START_TECHNICAL 0x2302
|
||||
# define DG_START_TECHNICAL 0x2302
|
||||
{'E', 'h', 0x2302},
|
||||
{'<', '7', 0x2308},
|
||||
{'>', '7', 0x2309},
|
||||
@ -1420,7 +1354,7 @@ static digr_T digraphdefault[] =
|
||||
{'I', 'l', 0x2321},
|
||||
{'<', '/', 0x2329},
|
||||
{'/', '>', 0x232a},
|
||||
#define DG_START_OTHER2 0x2423
|
||||
# define DG_START_OTHER2 0x2423
|
||||
{'V', 's', 0x2423},
|
||||
{'1', 'h', 0x2440},
|
||||
{'3', 'h', 0x2441},
|
||||
@ -1439,7 +1373,7 @@ static digr_T digraphdefault[] =
|
||||
{'7', '.', 0x248e},
|
||||
{'8', '.', 0x248f},
|
||||
{'9', '.', 0x2490},
|
||||
#define DG_START_DRAWING 0x2500
|
||||
# define DG_START_DRAWING 0x2500
|
||||
{'h', 'h', 0x2500},
|
||||
{'H', 'H', 0x2501},
|
||||
{'v', 'v', 0x2502},
|
||||
@ -1490,7 +1424,7 @@ static digr_T digraphdefault[] =
|
||||
{'V', 'H', 0x254b},
|
||||
{'F', 'D', 0x2571},
|
||||
{'B', 'D', 0x2572},
|
||||
#define DG_START_BLOCK 0x2580
|
||||
# define DG_START_BLOCK 0x2580
|
||||
{'T', 'B', 0x2580},
|
||||
{'L', 'B', 0x2584},
|
||||
{'F', 'B', 0x2588},
|
||||
@ -1499,7 +1433,7 @@ static digr_T digraphdefault[] =
|
||||
{'.', 'S', 0x2591},
|
||||
{':', 'S', 0x2592},
|
||||
{'?', 'S', 0x2593},
|
||||
#define DG_START_SHAPES 0x25a0
|
||||
# define DG_START_SHAPES 0x25a0
|
||||
{'f', 'S', 0x25a0},
|
||||
{'O', 'S', 0x25a1},
|
||||
{'R', 'O', 0x25a2},
|
||||
@ -1533,7 +1467,7 @@ static digr_T digraphdefault[] =
|
||||
{'I', 'c', 0x25d9},
|
||||
{'F', 'd', 0x25e2},
|
||||
{'B', 'd', 0x25e3},
|
||||
#define DG_START_SYMBOLS 0x2605
|
||||
# define DG_START_SYMBOLS 0x2605
|
||||
{'*', '2', 0x2605},
|
||||
{'*', '1', 0x2606},
|
||||
{'<', 'H', 0x261c},
|
||||
@ -1553,11 +1487,11 @@ static digr_T digraphdefault[] =
|
||||
{'M', 'b', 0x266d},
|
||||
{'M', 'x', 0x266e},
|
||||
{'M', 'X', 0x266f},
|
||||
#define DG_START_DINGBATS 0x2713
|
||||
# define DG_START_DINGBATS 0x2713
|
||||
{'O', 'K', 0x2713},
|
||||
{'X', 'X', 0x2717},
|
||||
{'-', 'X', 0x2720},
|
||||
#define DG_START_CJK_SYMBOLS 0x3000
|
||||
# define DG_START_CJK_SYMBOLS 0x3000
|
||||
{'I', 'S', 0x3000},
|
||||
{',', '_', 0x3001},
|
||||
{'.', '_', 0x3002},
|
||||
@ -1581,7 +1515,7 @@ static digr_T digraphdefault[] =
|
||||
{'(', 'I', 0x3016},
|
||||
{')', 'I', 0x3017},
|
||||
{'-', '?', 0x301c},
|
||||
#define DG_START_HIRAGANA 0x3041
|
||||
# define DG_START_HIRAGANA 0x3041
|
||||
{'A', '5', 0x3041},
|
||||
{'a', '5', 0x3042},
|
||||
{'I', '5', 0x3043},
|
||||
@ -1670,7 +1604,7 @@ static digr_T digraphdefault[] =
|
||||
{'0', '5', 0x309c},
|
||||
{'*', '5', 0x309d},
|
||||
{'+', '5', 0x309e},
|
||||
#define DG_START_KATAKANA 0x30a1
|
||||
# define DG_START_KATAKANA 0x30a1
|
||||
{'a', '6', 0x30a1},
|
||||
{'A', '6', 0x30a2},
|
||||
{'i', '6', 0x30a3},
|
||||
@ -1765,7 +1699,7 @@ static digr_T digraphdefault[] =
|
||||
{'-', '6', 0x30fc},
|
||||
{'*', '6', 0x30fd},
|
||||
{'+', '6', 0x30fe},
|
||||
#define DG_START_BOPOMOFO 0x3105
|
||||
# define DG_START_BOPOMOFO 0x3105
|
||||
{'b', '4', 0x3105},
|
||||
{'p', '4', 0x3106},
|
||||
{'m', '4', 0x3107},
|
||||
@ -1805,7 +1739,7 @@ static digr_T digraphdefault[] =
|
||||
{'v', '4', 0x312a},
|
||||
{'n', 'G', 0x312b},
|
||||
{'g', 'n', 0x312c},
|
||||
#define DG_START_OTHER3 0x3220
|
||||
# define DG_START_OTHER3 0x3220
|
||||
{'1', 'c', 0x3220},
|
||||
{'2', 'c', 0x3221},
|
||||
{'3', 'c', 0x3222},
|
||||
@ -1826,10 +1760,9 @@ static digr_T digraphdefault[] =
|
||||
{NUL, NUL, NUL}
|
||||
};
|
||||
|
||||
# endif // OLD_DIGRAPHS
|
||||
# endif // EBCDIC
|
||||
# endif // !HPUX_DIGRAPHS
|
||||
#endif // !__MINT__
|
||||
# endif // OLD_DIGRAPHS
|
||||
# endif // EBCDIC
|
||||
#endif // !HPUX_DIGRAPHS
|
||||
|
||||
/*
|
||||
* handle digraphs after typing a character
|
||||
|
@ -967,7 +967,7 @@ win_line(
|
||||
for (;;)
|
||||
{
|
||||
#if defined(FEAT_CONCEAL) || defined(FEAT_SEARCH_EXTRA)
|
||||
int has_match_conc = 0; // match wants to conceal
|
||||
int has_match_conc = 0; // match wants to conceal
|
||||
#endif
|
||||
#ifdef FEAT_CONCEAL
|
||||
int did_decrement_ptr = FALSE;
|
||||
@ -1334,6 +1334,11 @@ win_line(
|
||||
&screen_search_hl, &has_match_conc,
|
||||
&match_conc, did_line_attr, lcs_eol_one);
|
||||
ptr = line + v; // "line" may have been changed
|
||||
|
||||
// Do not allow a conceal over EOL otherwise EOL will be missed
|
||||
// and bad things happen.
|
||||
if (*ptr == NUL)
|
||||
has_match_conc = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -2353,13 +2358,14 @@ win_line(
|
||||
{
|
||||
char_attr = conceal_attr;
|
||||
if ((prev_syntax_id != syntax_seqnr || has_match_conc > 1)
|
||||
&& (syn_get_sub_char() != NUL || match_conc
|
||||
|| wp->w_p_cole == 1)
|
||||
&& (syn_get_sub_char() != NUL
|
||||
|| (has_match_conc && match_conc)
|
||||
|| wp->w_p_cole == 1)
|
||||
&& wp->w_p_cole != 3)
|
||||
{
|
||||
// First time at this concealed item: display one
|
||||
// character.
|
||||
if (match_conc)
|
||||
if (has_match_conc && match_conc)
|
||||
c = match_conc;
|
||||
else if (syn_get_sub_char() != NUL)
|
||||
c = syn_get_sub_char();
|
||||
|
988
src/eval.c
988
src/eval.c
File diff suppressed because it is too large
Load Diff
107
src/evalfunc.c
107
src/evalfunc.c
@ -347,6 +347,52 @@ ret_first_arg(int argcount, type_T **argtypes)
|
||||
return &t_void;
|
||||
}
|
||||
|
||||
/*
|
||||
* Used for getqflist(): returns list if there is no argument, dict if there is
|
||||
* one.
|
||||
*/
|
||||
static type_T *
|
||||
ret_list_or_dict_0(int argcount, type_T **argtypes UNUSED)
|
||||
{
|
||||
if (argcount > 0)
|
||||
return &t_dict_any;
|
||||
return &t_list_dict_any;
|
||||
}
|
||||
|
||||
/*
|
||||
* Used for getloclist(): returns list if there is one argument, dict if there
|
||||
* are two.
|
||||
*/
|
||||
static type_T *
|
||||
ret_list_or_dict_1(int argcount, type_T **argtypes UNUSED)
|
||||
{
|
||||
if (argcount > 1)
|
||||
return &t_dict_any;
|
||||
return &t_list_dict_any;
|
||||
}
|
||||
|
||||
static type_T *
|
||||
ret_argv(int argcount, type_T **argtypes UNUSED)
|
||||
{
|
||||
// argv() returns list of strings
|
||||
if (argcount == 0)
|
||||
return &t_list_string;
|
||||
|
||||
// argv(0) returns a string, but argv(-1] returns a list
|
||||
return &t_any;
|
||||
}
|
||||
|
||||
static type_T *
|
||||
ret_remove(int argcount UNUSED, type_T **argtypes)
|
||||
{
|
||||
if (argtypes[0]->tt_type == VAR_LIST
|
||||
|| argtypes[0]->tt_type == VAR_DICT)
|
||||
return argtypes[0]->tt_member;
|
||||
if (argtypes[0]->tt_type == VAR_BLOB)
|
||||
return &t_number;
|
||||
return &t_any;
|
||||
}
|
||||
|
||||
static type_T *ret_f_function(int argcount, type_T **argtypes);
|
||||
|
||||
/*
|
||||
@ -417,14 +463,14 @@ static funcentry_T global_functions[] =
|
||||
{
|
||||
{"abs", 1, 1, FEARG_1, ret_any, FLOAT_FUNC(f_abs)},
|
||||
{"acos", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_acos)},
|
||||
{"add", 2, 2, FEARG_1, ret_any, f_add},
|
||||
{"add", 2, 2, FEARG_1, ret_first_arg, f_add},
|
||||
{"and", 2, 2, FEARG_1, ret_number, f_and},
|
||||
{"append", 2, 2, FEARG_LAST, ret_number, f_append},
|
||||
{"appendbufline", 3, 3, FEARG_LAST, ret_number, f_appendbufline},
|
||||
{"append", 2, 2, FEARG_2, ret_number, f_append},
|
||||
{"appendbufline", 3, 3, FEARG_3, ret_number, f_appendbufline},
|
||||
{"argc", 0, 1, 0, ret_number, f_argc},
|
||||
{"argidx", 0, 0, 0, ret_number, f_argidx},
|
||||
{"arglistid", 0, 2, 0, ret_number, f_arglistid},
|
||||
{"argv", 0, 2, 0, ret_any, f_argv},
|
||||
{"argv", 0, 2, 0, ret_argv, f_argv},
|
||||
{"asin", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_asin)},
|
||||
{"assert_beeps", 1, 2, FEARG_1, ret_number, f_assert_beeps},
|
||||
{"assert_equal", 2, 3, FEARG_2, ret_number, f_assert_equal},
|
||||
@ -509,7 +555,7 @@ static funcentry_T global_functions[] =
|
||||
{"complete_check", 0, 0, 0, ret_number, f_complete_check},
|
||||
{"complete_info", 0, 1, FEARG_1, ret_dict_any, f_complete_info},
|
||||
{"confirm", 1, 4, FEARG_1, ret_number, f_confirm},
|
||||
{"copy", 1, 1, FEARG_1, ret_any, f_copy},
|
||||
{"copy", 1, 1, FEARG_1, ret_first_arg, f_copy},
|
||||
{"cos", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_cos)},
|
||||
{"cosh", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_cosh)},
|
||||
{"count", 2, 4, FEARG_1, ret_number, f_count},
|
||||
@ -522,7 +568,7 @@ static funcentry_T global_functions[] =
|
||||
NULL
|
||||
#endif
|
||||
},
|
||||
{"deepcopy", 1, 2, FEARG_1, ret_any, f_deepcopy},
|
||||
{"deepcopy", 1, 2, FEARG_1, ret_first_arg, f_deepcopy},
|
||||
{"delete", 1, 2, FEARG_1, ret_number, f_delete},
|
||||
{"deletebufline", 2, 3, FEARG_1, ret_number, f_deletebufline},
|
||||
{"did_filetype", 0, 0, 0, ret_number, f_did_filetype},
|
||||
@ -541,12 +587,12 @@ static funcentry_T global_functions[] =
|
||||
{"exp", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_exp)},
|
||||
{"expand", 1, 3, FEARG_1, ret_any, f_expand},
|
||||
{"expandcmd", 1, 1, FEARG_1, ret_string, f_expandcmd},
|
||||
{"extend", 2, 3, FEARG_1, ret_any, f_extend},
|
||||
{"extend", 2, 3, FEARG_1, ret_first_arg, f_extend},
|
||||
{"feedkeys", 1, 2, FEARG_1, ret_void, f_feedkeys},
|
||||
{"file_readable", 1, 1, FEARG_1, ret_number, f_filereadable}, // obsolete
|
||||
{"filereadable", 1, 1, FEARG_1, ret_number, f_filereadable},
|
||||
{"filewritable", 1, 1, FEARG_1, ret_number, f_filewritable},
|
||||
{"filter", 2, 2, FEARG_1, ret_any, f_filter},
|
||||
{"filter", 2, 2, FEARG_1, ret_first_arg, f_filter},
|
||||
{"finddir", 1, 3, FEARG_1, ret_string, f_finddir},
|
||||
{"findfile", 1, 3, FEARG_1, ret_string, f_findfile},
|
||||
{"flatten", 1, 2, FEARG_1, ret_list_any, f_flatten},
|
||||
@ -565,7 +611,7 @@ static funcentry_T global_functions[] =
|
||||
{"function", 1, 3, FEARG_1, ret_f_function, f_function},
|
||||
{"garbagecollect", 0, 1, 0, ret_void, f_garbagecollect},
|
||||
{"get", 2, 3, FEARG_1, ret_any, f_get},
|
||||
{"getbufinfo", 0, 1, 0, ret_list_dict_any, f_getbufinfo},
|
||||
{"getbufinfo", 0, 1, FEARG_1, ret_list_dict_any, f_getbufinfo},
|
||||
{"getbufline", 2, 3, FEARG_1, ret_list_string, f_getbufline},
|
||||
{"getbufvar", 2, 3, FEARG_1, ret_any, f_getbufvar},
|
||||
{"getchangelist", 0, 1, FEARG_1, ret_list_any, f_getchangelist},
|
||||
@ -588,13 +634,13 @@ static funcentry_T global_functions[] =
|
||||
{"getimstatus", 0, 0, 0, ret_number, f_getimstatus},
|
||||
{"getjumplist", 0, 2, FEARG_1, ret_list_any, f_getjumplist},
|
||||
{"getline", 1, 2, FEARG_1, ret_f_getline, f_getline},
|
||||
{"getloclist", 1, 2, 0, ret_list_dict_any, f_getloclist},
|
||||
{"getloclist", 1, 2, 0, ret_list_or_dict_1, f_getloclist},
|
||||
{"getmarklist", 0, 1, FEARG_1, ret_list_dict_any, f_getmarklist},
|
||||
{"getmatches", 0, 1, 0, ret_list_dict_any, f_getmatches},
|
||||
{"getmousepos", 0, 0, 0, ret_dict_number, f_getmousepos},
|
||||
{"getpid", 0, 0, 0, ret_number, f_getpid},
|
||||
{"getpos", 1, 1, FEARG_1, ret_list_number, f_getpos},
|
||||
{"getqflist", 0, 1, 0, ret_list_dict_any, f_getqflist},
|
||||
{"getqflist", 0, 1, 0, ret_list_or_dict_0, f_getqflist},
|
||||
{"getreg", 0, 3, FEARG_1, ret_string, f_getreg},
|
||||
{"getreginfo", 0, 1, FEARG_1, ret_dict_any, f_getreginfo},
|
||||
{"getregtype", 0, 1, FEARG_1, ret_string, f_getregtype},
|
||||
@ -632,7 +678,7 @@ static funcentry_T global_functions[] =
|
||||
{"inputrestore", 0, 0, 0, ret_number, f_inputrestore},
|
||||
{"inputsave", 0, 0, 0, ret_number, f_inputsave},
|
||||
{"inputsecret", 1, 2, FEARG_1, ret_string, f_inputsecret},
|
||||
{"insert", 2, 3, FEARG_1, ret_any, f_insert},
|
||||
{"insert", 2, 3, FEARG_1, ret_first_arg, f_insert},
|
||||
{"interrupt", 0, 0, 0, ret_void, f_interrupt},
|
||||
{"invert", 1, 1, FEARG_1, ret_number, f_invert},
|
||||
{"isdirectory", 1, 1, FEARG_1, ret_number, f_isdirectory},
|
||||
@ -791,12 +837,12 @@ static funcentry_T global_functions[] =
|
||||
{"remote_peek", 1, 2, FEARG_1, ret_number, f_remote_peek},
|
||||
{"remote_read", 1, 2, FEARG_1, ret_string, f_remote_read},
|
||||
{"remote_send", 2, 3, FEARG_1, ret_string, f_remote_send},
|
||||
{"remote_startserver", 1, 1, FEARG_1, ret_void, f_remote_startserver},
|
||||
{"remove", 2, 3, FEARG_1, ret_any, f_remove},
|
||||
{"remote_startserver", 1, 1, FEARG_1, ret_void, f_remote_startserver},
|
||||
{"remove", 2, 3, FEARG_1, ret_remove, f_remove},
|
||||
{"rename", 2, 2, FEARG_1, ret_number, f_rename},
|
||||
{"repeat", 2, 2, FEARG_1, ret_any, f_repeat},
|
||||
{"repeat", 2, 2, FEARG_1, ret_first_arg, f_repeat},
|
||||
{"resolve", 1, 1, FEARG_1, ret_string, f_resolve},
|
||||
{"reverse", 1, 1, FEARG_1, ret_any, f_reverse},
|
||||
{"reverse", 1, 1, FEARG_1, ret_first_arg, f_reverse},
|
||||
{"round", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_round)},
|
||||
{"rubyeval", 1, 1, FEARG_1, ret_any,
|
||||
#ifdef FEAT_RUBY
|
||||
@ -1145,7 +1191,9 @@ internal_func_ret_type(int idx, int argcount, type_T **argtypes)
|
||||
|
||||
/*
|
||||
* Check the argument count to use for internal function "idx".
|
||||
* Returns OK or FAIL;
|
||||
* Returns -1 for failure, 0 if no method base accepted, 1 if method base is
|
||||
* first argument, 2 if method base is second argument, etc. 9 if method base
|
||||
* is last argument.
|
||||
*/
|
||||
int
|
||||
check_internal_func(int idx, int argcount)
|
||||
@ -1158,14 +1206,14 @@ check_internal_func(int idx, int argcount)
|
||||
else if (argcount > global_functions[idx].f_max_argc)
|
||||
res = FCERR_TOOMANY;
|
||||
else
|
||||
return OK;
|
||||
return global_functions[idx].f_argtype;
|
||||
|
||||
name = internal_func_name(idx);
|
||||
if (res == FCERR_TOOMANY)
|
||||
semsg(_(e_toomanyarg), name);
|
||||
else
|
||||
semsg(_(e_toofewarg), name);
|
||||
return FAIL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
@ -2084,7 +2132,7 @@ f_eval(typval_T *argvars, typval_T *rettv)
|
||||
s = skipwhite(s);
|
||||
|
||||
p = s;
|
||||
if (s == NULL || eval1(&s, rettv, EVAL_EVALUATE) == FAIL)
|
||||
if (s == NULL || eval1(&s, rettv, &EVALARG_EVALUATE) == FAIL)
|
||||
{
|
||||
if (p != NULL && !aborting())
|
||||
semsg(_(e_invexpr2), p);
|
||||
@ -2093,7 +2141,7 @@ f_eval(typval_T *argvars, typval_T *rettv)
|
||||
rettv->vval.v_number = 0;
|
||||
}
|
||||
else if (*s != NUL)
|
||||
emsg(_(e_trailing));
|
||||
semsg(_(e_trailing_arg), s);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2300,7 +2348,7 @@ f_exists(typval_T *argvars, typval_T *rettv)
|
||||
}
|
||||
else if (*p == '&' || *p == '+') // option
|
||||
{
|
||||
n = (get_option_tv(&p, NULL, TRUE) == OK);
|
||||
n = (eval_option(&p, NULL, TRUE) == OK);
|
||||
if (*skipwhite(p) != NUL)
|
||||
n = FALSE; // trailing garbage
|
||||
}
|
||||
@ -5065,7 +5113,7 @@ f_islocked(typval_T *argvars, typval_T *rettv)
|
||||
if (end != NULL && lv.ll_name != NULL)
|
||||
{
|
||||
if (*end != NUL)
|
||||
emsg(_(e_trailing));
|
||||
semsg(_(e_trailing_arg), end);
|
||||
else
|
||||
{
|
||||
if (lv.ll_tv == NULL)
|
||||
@ -6272,7 +6320,7 @@ f_getreginfo(typval_T *argvars, typval_T *rettv)
|
||||
list = (list_T *)get_reg_contents(regname, GREG_EXPR_SRC | GREG_LIST);
|
||||
if (list == NULL)
|
||||
return;
|
||||
dict_add_list(dict, "regcontents", list);
|
||||
(void)dict_add_list(dict, "regcontents", list);
|
||||
|
||||
buf[0] = NUL;
|
||||
buf[1] = NUL;
|
||||
@ -6285,12 +6333,12 @@ f_getreginfo(typval_T *argvars, typval_T *rettv)
|
||||
reglen + 1);
|
||||
break;
|
||||
}
|
||||
dict_add_string(dict, (char *)"regtype", buf);
|
||||
(void)dict_add_string(dict, (char *)"regtype", buf);
|
||||
|
||||
buf[0] = get_register_name(get_unname_register());
|
||||
buf[1] = NUL;
|
||||
if (regname == '"')
|
||||
dict_add_string(dict, (char *)"points_to", buf);
|
||||
(void)dict_add_string(dict, (char *)"points_to", buf);
|
||||
else
|
||||
{
|
||||
dictitem_T *item = dictitem_alloc((char_u *)"isunnamed");
|
||||
@ -6300,7 +6348,7 @@ f_getreginfo(typval_T *argvars, typval_T *rettv)
|
||||
item->di_tv.v_type = VAR_SPECIAL;
|
||||
item->di_tv.vval.v_number = regname == buf[0]
|
||||
? VVAL_TRUE : VVAL_FALSE;
|
||||
dict_add(dict, item);
|
||||
(void)dict_add(dict, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7811,9 +7859,9 @@ f_split(typval_T *argvars, typval_T *rettv)
|
||||
pat = (char_u *)"[\\x01- ]\\+";
|
||||
|
||||
if (rettv_list_alloc(rettv) == FAIL)
|
||||
return;
|
||||
goto theend;
|
||||
if (typeerr)
|
||||
return;
|
||||
goto theend;
|
||||
|
||||
regmatch.regprog = vim_regcomp(pat, RE_MAGIC + RE_STRING);
|
||||
if (regmatch.regprog != NULL)
|
||||
@ -7850,6 +7898,7 @@ f_split(typval_T *argvars, typval_T *rettv)
|
||||
vim_regfree(regmatch.regprog);
|
||||
}
|
||||
|
||||
theend:
|
||||
p_cpo = save_cpo;
|
||||
}
|
||||
|
||||
|
162
src/evalvars.c
162
src/evalvars.c
@ -435,7 +435,7 @@ eval_spell_expr(char_u *badword, char_u *expr)
|
||||
if (p_verbose == 0)
|
||||
++emsg_off;
|
||||
|
||||
if (eval1(&p, &rettv, EVAL_EVALUATE) == OK)
|
||||
if (eval1(&p, &rettv, &EVALARG_EVALUATE) == OK)
|
||||
{
|
||||
if (rettv.v_type != VAR_LIST)
|
||||
clear_tv(&rettv);
|
||||
@ -592,7 +592,7 @@ heredoc_get(exarg_T *eap, char_u *cmd, int script_get)
|
||||
p = skiptowhite(marker);
|
||||
if (*skipwhite(p) != NUL && *skipwhite(p) != '"')
|
||||
{
|
||||
emsg(_(e_trailing));
|
||||
semsg(_(e_trailing_arg), p);
|
||||
return NULL;
|
||||
}
|
||||
*p = NUL;
|
||||
@ -698,12 +698,13 @@ ex_let(exarg_T *eap)
|
||||
int i;
|
||||
int var_count = 0;
|
||||
int semicolon = 0;
|
||||
char_u op[2];
|
||||
char_u op[4];
|
||||
char_u *argend;
|
||||
int first = TRUE;
|
||||
int concat;
|
||||
int has_assign;
|
||||
int flags = eap->cmdidx == CMD_const ? LET_IS_CONST : 0;
|
||||
int vim9script = in_vim9script();
|
||||
|
||||
// detect Vim9 assignment without ":let" or ":const"
|
||||
if (eap->arg == eap->cmd)
|
||||
@ -725,11 +726,11 @@ ex_let(exarg_T *eap)
|
||||
// ":let" without "=": list variables
|
||||
if (*arg == '[')
|
||||
emsg(_(e_invarg));
|
||||
else if (expr[0] == '.')
|
||||
emsg(_("E985: .= is not supported with script version 2"));
|
||||
else if (expr[0] == '.' && expr[1] == '=')
|
||||
emsg(_("E985: .= is not supported with script version >= 2"));
|
||||
else if (!ends_excmd2(eap->cmd, arg))
|
||||
{
|
||||
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9)
|
||||
if (vim9script)
|
||||
{
|
||||
// Vim9 declaration ":let var: type"
|
||||
arg = vim9_declare_scriptvar(eap, arg);
|
||||
@ -774,7 +775,8 @@ ex_let(exarg_T *eap)
|
||||
}
|
||||
else
|
||||
{
|
||||
int eval_flags;
|
||||
evalarg_T evalarg;
|
||||
int len = 1;
|
||||
|
||||
rettv.v_type = VAR_UNKNOWN;
|
||||
i = FAIL;
|
||||
@ -787,29 +789,49 @@ ex_let(exarg_T *eap)
|
||||
if (vim_strchr((char_u *)"+-*/%.", *expr) != NULL)
|
||||
{
|
||||
op[0] = *expr; // +=, -=, *=, /=, %= or .=
|
||||
++len;
|
||||
if (expr[0] == '.' && expr[1] == '.') // ..=
|
||||
{
|
||||
++expr;
|
||||
++len;
|
||||
}
|
||||
}
|
||||
expr = skipwhite(expr + 2);
|
||||
expr += 2;
|
||||
}
|
||||
else
|
||||
expr = skipwhite(expr + 1);
|
||||
++expr;
|
||||
|
||||
if (vim9script && (!VIM_ISWHITE(*argend) || !VIM_ISWHITE(*expr)))
|
||||
{
|
||||
vim_strncpy(op, expr - len, len);
|
||||
semsg(_(e_white_both), op);
|
||||
i = FAIL;
|
||||
}
|
||||
expr = skipwhite(expr);
|
||||
|
||||
if (eap->skip)
|
||||
++emsg_skip;
|
||||
eval_flags = eap->skip ? 0 : EVAL_EVALUATE;
|
||||
i = eval0(expr, &rettv, &eap->nextcmd, eval_flags);
|
||||
CLEAR_FIELD(evalarg);
|
||||
evalarg.eval_flags = eap->skip ? 0 : EVAL_EVALUATE;
|
||||
if (getline_equal(eap->getline, eap->cookie, getsourceline))
|
||||
{
|
||||
evalarg.eval_getline = eap->getline;
|
||||
evalarg.eval_cookie = eap->cookie;
|
||||
}
|
||||
i = eval0(expr, &rettv, eap, &evalarg);
|
||||
if (eap->skip)
|
||||
--emsg_skip;
|
||||
clear_evalarg(&evalarg, eap);
|
||||
}
|
||||
if (eap->skip)
|
||||
{
|
||||
if (i != FAIL)
|
||||
clear_tv(&rettv);
|
||||
--emsg_skip;
|
||||
}
|
||||
else if (i != FAIL)
|
||||
{
|
||||
(void)ex_let_vars(eap->arg, &rettv, FALSE, semicolon, var_count,
|
||||
flags, op);
|
||||
flags, op);
|
||||
clear_tv(&rettv);
|
||||
}
|
||||
}
|
||||
@ -985,13 +1007,13 @@ skip_var_one(char_u *arg, int include_type)
|
||||
return arg + 2;
|
||||
end = find_name_end(*arg == '$' || *arg == '&' ? arg + 1 : arg,
|
||||
NULL, NULL, FNE_INCL_BR | FNE_CHECK_START);
|
||||
if (include_type && current_sctx.sc_version == SCRIPT_VERSION_VIM9)
|
||||
if (include_type && in_vim9script())
|
||||
{
|
||||
// "a: type" is declaring variable "a" with a type, not "a:".
|
||||
if (end == arg + 2 && end[-1] == ':')
|
||||
--end;
|
||||
if (*end == ':')
|
||||
end = skip_type(skipwhite(end + 1));
|
||||
end = skip_type(skipwhite(end + 1), FALSE);
|
||||
}
|
||||
return end;
|
||||
}
|
||||
@ -1091,7 +1113,7 @@ list_arg_vars(exarg_T *eap, char_u *arg, int *first)
|
||||
if (!VIM_ISWHITE(*arg) && !ends_excmd(*arg))
|
||||
{
|
||||
emsg_severe = TRUE;
|
||||
emsg(_(e_trailing));
|
||||
semsg(_(e_trailing_arg), arg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1116,14 +1138,14 @@ list_arg_vars(exarg_T *eap, char_u *arg, int *first)
|
||||
{
|
||||
if (tofree != NULL)
|
||||
name = tofree;
|
||||
if (get_var_tv(name, len, &tv, NULL, TRUE, FALSE) == FAIL)
|
||||
if (eval_variable(name, len, &tv, NULL, TRUE, FALSE) == FAIL)
|
||||
error = TRUE;
|
||||
else
|
||||
{
|
||||
// handle d.key, l[idx], f(expr)
|
||||
arg_subsc = arg;
|
||||
if (handle_subscript(&arg, &tv, EVAL_EVALUATE, TRUE,
|
||||
name, &name) == FAIL)
|
||||
if (handle_subscript(&arg, &tv, &EVALARG_EVALUATE, TRUE)
|
||||
== FAIL)
|
||||
error = TRUE;
|
||||
else
|
||||
{
|
||||
@ -1204,8 +1226,7 @@ ex_let_one(
|
||||
emsg(_("E996: Cannot lock an environment variable"));
|
||||
return NULL;
|
||||
}
|
||||
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
|
||||
&& (flags & LET_NO_COMMAND) == 0)
|
||||
if (in_vim9script() && (flags & LET_NO_COMMAND) == 0)
|
||||
{
|
||||
vim9_declare_error(arg);
|
||||
return NULL;
|
||||
@ -1468,7 +1489,7 @@ ex_unletlock(
|
||||
if (name_end != NULL)
|
||||
{
|
||||
emsg_severe = TRUE;
|
||||
emsg(_(e_trailing));
|
||||
semsg(_(e_trailing_arg), name_end);
|
||||
}
|
||||
if (!(eap->skip || error))
|
||||
clear_lval(&lv);
|
||||
@ -1568,8 +1589,7 @@ do_unlet(char_u *name, int forceit)
|
||||
dict_T *d;
|
||||
dictitem_T *di;
|
||||
|
||||
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
|
||||
&& check_vim9_unlet(name) == FAIL)
|
||||
if (in_vim9script() && check_vim9_unlet(name) == FAIL)
|
||||
return FAIL;
|
||||
|
||||
ht = find_var_ht(name, &varname);
|
||||
@ -2357,7 +2377,7 @@ set_cmdarg(exarg_T *eap, char_u *oldarg)
|
||||
* Return OK or FAIL. If OK is returned "rettv" must be cleared.
|
||||
*/
|
||||
int
|
||||
get_var_tv(
|
||||
eval_variable(
|
||||
char_u *name,
|
||||
int len, // length of "name"
|
||||
typval_T *rettv, // NULL when only checking existence
|
||||
@ -2367,6 +2387,7 @@ get_var_tv(
|
||||
{
|
||||
int ret = OK;
|
||||
typval_T *tv = NULL;
|
||||
int foundFunc = FALSE;
|
||||
dictitem_T *v;
|
||||
int cc;
|
||||
|
||||
@ -2383,8 +2404,7 @@ get_var_tv(
|
||||
*dip = v;
|
||||
}
|
||||
|
||||
if (tv == NULL && (current_sctx.sc_version == SCRIPT_VERSION_VIM9
|
||||
|| STRNCMP(name, "s:", 2) == 0))
|
||||
if (tv == NULL && (in_vim9script() || STRNCMP(name, "s:", 2) == 0))
|
||||
{
|
||||
imported_T *import;
|
||||
char_u *p = STRNCMP(name, "s:", 2) == 0 ? name + 2 : name;
|
||||
@ -2394,21 +2414,36 @@ get_var_tv(
|
||||
// imported variable from another script
|
||||
if (import != NULL)
|
||||
{
|
||||
scriptitem_T *si = SCRIPT_ITEM(import->imp_sid);
|
||||
svar_T *sv = ((svar_T *)si->sn_var_vals.ga_data)
|
||||
if (import->imp_funcname != NULL)
|
||||
{
|
||||
foundFunc = TRUE;
|
||||
if (rettv != NULL)
|
||||
{
|
||||
rettv->v_type = VAR_FUNC;
|
||||
rettv->vval.v_string = vim_strsave(import->imp_funcname);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
scriptitem_T *si = SCRIPT_ITEM(import->imp_sid);
|
||||
svar_T *sv = ((svar_T *)si->sn_var_vals.ga_data)
|
||||
+ import->imp_var_vals_idx;
|
||||
tv = sv->sv_tv;
|
||||
tv = sv->sv_tv;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tv == NULL)
|
||||
if (!foundFunc)
|
||||
{
|
||||
if (rettv != NULL && verbose)
|
||||
semsg(_(e_undefvar), name);
|
||||
ret = FAIL;
|
||||
if (tv == NULL)
|
||||
{
|
||||
if (rettv != NULL && verbose)
|
||||
semsg(_(e_undefvar), name);
|
||||
ret = FAIL;
|
||||
}
|
||||
else if (rettv != NULL)
|
||||
copy_tv(tv, rettv);
|
||||
}
|
||||
else if (rettv != NULL)
|
||||
copy_tv(tv, rettv);
|
||||
|
||||
name[len] = cc;
|
||||
|
||||
@ -2610,7 +2645,7 @@ find_var_ht(char_u *name, char_u **varname)
|
||||
return ht; // local variable
|
||||
|
||||
// in Vim9 script items at the script level are script-local
|
||||
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9)
|
||||
if (in_vim9script())
|
||||
{
|
||||
ht = get_script_local_ht();
|
||||
if (ht != NULL)
|
||||
@ -2844,7 +2879,7 @@ set_var(
|
||||
typval_T *tv,
|
||||
int copy) // make copy of value in "tv"
|
||||
{
|
||||
set_var_const(name, NULL, tv, copy, 0);
|
||||
set_var_const(name, NULL, tv, copy, LET_NO_COMMAND);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2873,7 +2908,7 @@ set_var_const(
|
||||
}
|
||||
is_script_local = ht == get_script_local_ht();
|
||||
|
||||
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
|
||||
if (in_vim9script()
|
||||
&& !is_script_local
|
||||
&& (flags & LET_NO_COMMAND) == 0
|
||||
&& name[1] == ':')
|
||||
@ -2902,8 +2937,7 @@ set_var_const(
|
||||
return;
|
||||
}
|
||||
|
||||
if (is_script_local
|
||||
&& current_sctx.sc_version == SCRIPT_VERSION_VIM9)
|
||||
if (is_script_local && in_vim9script())
|
||||
{
|
||||
if ((flags & LET_NO_COMMAND) == 0)
|
||||
{
|
||||
@ -2999,7 +3033,7 @@ set_var_const(
|
||||
if (flags & LET_IS_CONST)
|
||||
di->di_flags |= DI_FLAGS_LOCK;
|
||||
|
||||
if (is_script_local && current_sctx.sc_version == SCRIPT_VERSION_VIM9)
|
||||
if (is_script_local && in_vim9script())
|
||||
{
|
||||
scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
|
||||
|
||||
@ -3198,7 +3232,7 @@ getwinvar(
|
||||
done = TRUE;
|
||||
}
|
||||
}
|
||||
else if (get_option_tv(&varname, rettv, 1) == OK)
|
||||
else if (eval_option(&varname, rettv, 1) == OK)
|
||||
// window-local-option
|
||||
done = TRUE;
|
||||
}
|
||||
@ -3334,12 +3368,11 @@ var_exists(char_u *var)
|
||||
{
|
||||
if (tofree != NULL)
|
||||
name = tofree;
|
||||
n = (get_var_tv(name, len, &tv, NULL, FALSE, TRUE) == OK);
|
||||
n = (eval_variable(name, len, &tv, NULL, FALSE, TRUE) == OK);
|
||||
if (n)
|
||||
{
|
||||
// handle d.key, l[idx], f(expr)
|
||||
n = (handle_subscript(&var, &tv, EVAL_EVALUATE,
|
||||
FALSE, name, &name) == OK);
|
||||
n = (handle_subscript(&var, &tv, &EVALARG_EVALUATE, FALSE) == OK);
|
||||
if (n)
|
||||
clear_tv(&tv);
|
||||
}
|
||||
@ -3365,8 +3398,7 @@ static char_u *redir_varname = NULL;
|
||||
int
|
||||
var_redir_start(char_u *name, int append)
|
||||
{
|
||||
int save_emsg;
|
||||
int err;
|
||||
int called_emsg_before;
|
||||
typval_T tv;
|
||||
|
||||
// Catch a bad name early.
|
||||
@ -3399,9 +3431,9 @@ var_redir_start(char_u *name, int append)
|
||||
clear_lval(redir_lval);
|
||||
if (redir_endp != NULL && *redir_endp != NUL)
|
||||
// Trailing characters are present after the variable name
|
||||
emsg(_(e_trailing));
|
||||
semsg(_(e_trailing_arg), redir_endp);
|
||||
else
|
||||
emsg(_(e_invarg));
|
||||
semsg(_(e_invarg2), name);
|
||||
redir_endp = NULL; // don't store a value, only cleanup
|
||||
var_redir_stop();
|
||||
return FAIL;
|
||||
@ -3409,8 +3441,7 @@ var_redir_start(char_u *name, int append)
|
||||
|
||||
// check if we can write to the variable: set it to or append an empty
|
||||
// string
|
||||
save_emsg = did_emsg;
|
||||
did_emsg = FALSE;
|
||||
called_emsg_before = called_emsg;
|
||||
tv.v_type = VAR_STRING;
|
||||
tv.vval.v_string = (char_u *)"";
|
||||
if (append)
|
||||
@ -3418,9 +3449,7 @@ var_redir_start(char_u *name, int append)
|
||||
else
|
||||
set_var_lval(redir_lval, redir_endp, &tv, TRUE, 0, (char_u *)"=");
|
||||
clear_lval(redir_lval);
|
||||
err = did_emsg;
|
||||
did_emsg |= save_emsg;
|
||||
if (err)
|
||||
if (called_emsg > called_emsg_before)
|
||||
{
|
||||
redir_endp = NULL; // don't store a value, only cleanup
|
||||
var_redir_stop();
|
||||
@ -3602,7 +3631,7 @@ f_getbufvar(typval_T *argvars, typval_T *rettv)
|
||||
done = TRUE;
|
||||
}
|
||||
}
|
||||
else if (get_option_tv(&varname, rettv, TRUE) == OK)
|
||||
else if (eval_option(&varname, rettv, TRUE) == OK)
|
||||
// buffer-local-option
|
||||
done = TRUE;
|
||||
|
||||
@ -3833,6 +3862,27 @@ set_callback(callback_T *dest, callback_T *src)
|
||||
dest->cb_partial = src->cb_partial;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy callback from "src" to "dest", incrementing the refcounts.
|
||||
*/
|
||||
void
|
||||
copy_callback(callback_T *dest, callback_T *src)
|
||||
{
|
||||
dest->cb_partial = src->cb_partial;
|
||||
if (dest->cb_partial != NULL)
|
||||
{
|
||||
dest->cb_name = src->cb_name;
|
||||
dest->cb_free_name = FALSE;
|
||||
++dest->cb_partial->pt_refcount;
|
||||
}
|
||||
else
|
||||
{
|
||||
dest->cb_name = vim_strsave(src->cb_name);
|
||||
dest->cb_free_name = TRUE;
|
||||
func_ref(src->cb_name);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Unref/free "callback" returned by get_callback() or set_callback().
|
||||
*/
|
||||
|
1284
src/ex_cmds.c
1284
src/ex_cmds.c
File diff suppressed because it is too large
Load Diff
644
src/ex_cmds.h
644
src/ex_cmds.h
File diff suppressed because it is too large
Load Diff
502
src/ex_cmds2.c
502
src/ex_cmds2.c
@ -996,505 +996,3 @@ ex_checktime(exarg_T *eap)
|
||||
}
|
||||
no_check_timestamps = save_no_check_timestamps;
|
||||
}
|
||||
|
||||
#if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
|
||||
&& (defined(FEAT_EVAL) || defined(FEAT_MULTI_LANG))
|
||||
# define HAVE_GET_LOCALE_VAL
|
||||
static char_u *
|
||||
get_locale_val(int what)
|
||||
{
|
||||
char_u *loc;
|
||||
|
||||
// Obtain the locale value from the libraries.
|
||||
loc = (char_u *)setlocale(what, NULL);
|
||||
|
||||
# ifdef MSWIN
|
||||
if (loc != NULL)
|
||||
{
|
||||
char_u *p;
|
||||
|
||||
// setocale() returns something like "LC_COLLATE=<name>;LC_..." when
|
||||
// one of the values (e.g., LC_CTYPE) differs.
|
||||
p = vim_strchr(loc, '=');
|
||||
if (p != NULL)
|
||||
{
|
||||
loc = ++p;
|
||||
while (*p != NUL) // remove trailing newline
|
||||
{
|
||||
if (*p < ' ' || *p == ';')
|
||||
{
|
||||
*p = NUL;
|
||||
break;
|
||||
}
|
||||
++p;
|
||||
}
|
||||
}
|
||||
}
|
||||
# endif
|
||||
|
||||
return loc;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef MSWIN
|
||||
/*
|
||||
* On MS-Windows locale names are strings like "German_Germany.1252", but
|
||||
* gettext expects "de". Try to translate one into another here for a few
|
||||
* supported languages.
|
||||
*/
|
||||
static char_u *
|
||||
gettext_lang(char_u *name)
|
||||
{
|
||||
int i;
|
||||
static char *(mtable[]) = {
|
||||
"afrikaans", "af",
|
||||
"czech", "cs",
|
||||
"dutch", "nl",
|
||||
"german", "de",
|
||||
"english_united kingdom", "en_GB",
|
||||
"spanish", "es",
|
||||
"french", "fr",
|
||||
"italian", "it",
|
||||
"japanese", "ja",
|
||||
"korean", "ko",
|
||||
"norwegian", "no",
|
||||
"polish", "pl",
|
||||
"russian", "ru",
|
||||
"slovak", "sk",
|
||||
"swedish", "sv",
|
||||
"ukrainian", "uk",
|
||||
"chinese_china", "zh_CN",
|
||||
"chinese_taiwan", "zh_TW",
|
||||
NULL};
|
||||
|
||||
for (i = 0; mtable[i] != NULL; i += 2)
|
||||
if (STRNICMP(mtable[i], name, STRLEN(mtable[i])) == 0)
|
||||
return (char_u *)mtable[i + 1];
|
||||
return name;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_MULTI_LANG) || defined(PROTO)
|
||||
/*
|
||||
* Return TRUE when "lang" starts with a valid language name.
|
||||
* Rejects NULL, empty string, "C", "C.UTF-8" and others.
|
||||
*/
|
||||
static int
|
||||
is_valid_mess_lang(char_u *lang)
|
||||
{
|
||||
return lang != NULL && ASCII_ISALPHA(lang[0]) && ASCII_ISALPHA(lang[1]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Obtain the current messages language. Used to set the default for
|
||||
* 'helplang'. May return NULL or an empty string.
|
||||
*/
|
||||
char_u *
|
||||
get_mess_lang(void)
|
||||
{
|
||||
char_u *p;
|
||||
|
||||
# ifdef HAVE_GET_LOCALE_VAL
|
||||
# if defined(LC_MESSAGES)
|
||||
p = get_locale_val(LC_MESSAGES);
|
||||
# else
|
||||
// This is necessary for Win32, where LC_MESSAGES is not defined and $LANG
|
||||
// may be set to the LCID number. LC_COLLATE is the best guess, LC_TIME
|
||||
// and LC_MONETARY may be set differently for a Japanese working in the
|
||||
// US.
|
||||
p = get_locale_val(LC_COLLATE);
|
||||
# endif
|
||||
# else
|
||||
p = mch_getenv((char_u *)"LC_ALL");
|
||||
if (!is_valid_mess_lang(p))
|
||||
{
|
||||
p = mch_getenv((char_u *)"LC_MESSAGES");
|
||||
if (!is_valid_mess_lang(p))
|
||||
p = mch_getenv((char_u *)"LANG");
|
||||
}
|
||||
# endif
|
||||
# ifdef MSWIN
|
||||
p = gettext_lang(p);
|
||||
# endif
|
||||
return is_valid_mess_lang(p) ? p : NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Complicated #if; matches with where get_mess_env() is used below.
|
||||
#if (defined(FEAT_EVAL) && !((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
|
||||
&& defined(LC_MESSAGES))) \
|
||||
|| ((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
|
||||
&& !defined(LC_MESSAGES))
|
||||
/*
|
||||
* Get the language used for messages from the environment.
|
||||
*/
|
||||
static char_u *
|
||||
get_mess_env(void)
|
||||
{
|
||||
char_u *p;
|
||||
|
||||
p = mch_getenv((char_u *)"LC_ALL");
|
||||
if (p == NULL || *p == NUL)
|
||||
{
|
||||
p = mch_getenv((char_u *)"LC_MESSAGES");
|
||||
if (p == NULL || *p == NUL)
|
||||
{
|
||||
p = mch_getenv((char_u *)"LANG");
|
||||
if (p != NULL && VIM_ISDIGIT(*p))
|
||||
p = NULL; // ignore something like "1043"
|
||||
# ifdef HAVE_GET_LOCALE_VAL
|
||||
if (p == NULL || *p == NUL)
|
||||
p = get_locale_val(LC_CTYPE);
|
||||
# endif
|
||||
}
|
||||
}
|
||||
return p;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_EVAL) || defined(PROTO)
|
||||
|
||||
/*
|
||||
* Set the "v:lang" variable according to the current locale setting.
|
||||
* Also do "v:lc_time"and "v:ctype".
|
||||
*/
|
||||
void
|
||||
set_lang_var(void)
|
||||
{
|
||||
char_u *loc;
|
||||
|
||||
# ifdef HAVE_GET_LOCALE_VAL
|
||||
loc = get_locale_val(LC_CTYPE);
|
||||
# else
|
||||
// setlocale() not supported: use the default value
|
||||
loc = (char_u *)"C";
|
||||
# endif
|
||||
set_vim_var_string(VV_CTYPE, loc, -1);
|
||||
|
||||
// When LC_MESSAGES isn't defined use the value from $LC_MESSAGES, fall
|
||||
// back to LC_CTYPE if it's empty.
|
||||
# if defined(HAVE_GET_LOCALE_VAL) && defined(LC_MESSAGES)
|
||||
loc = get_locale_val(LC_MESSAGES);
|
||||
# else
|
||||
loc = get_mess_env();
|
||||
# endif
|
||||
set_vim_var_string(VV_LANG, loc, -1);
|
||||
|
||||
# ifdef HAVE_GET_LOCALE_VAL
|
||||
loc = get_locale_val(LC_TIME);
|
||||
# endif
|
||||
set_vim_var_string(VV_LC_TIME, loc, -1);
|
||||
|
||||
# ifdef HAVE_GET_LOCALE_VAL
|
||||
loc = get_locale_val(LC_COLLATE);
|
||||
# else
|
||||
// setlocale() not supported: use the default value
|
||||
loc = (char_u *)"C";
|
||||
# endif
|
||||
set_vim_var_string(VV_COLLATE, loc, -1);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
|
||||
/*
|
||||
* ":language": Set the language (locale).
|
||||
*/
|
||||
void
|
||||
ex_language(exarg_T *eap)
|
||||
{
|
||||
char *loc;
|
||||
char_u *p;
|
||||
char_u *name;
|
||||
int what = LC_ALL;
|
||||
char *whatstr = "";
|
||||
# ifdef LC_MESSAGES
|
||||
# define VIM_LC_MESSAGES LC_MESSAGES
|
||||
# else
|
||||
# define VIM_LC_MESSAGES 6789
|
||||
# endif
|
||||
|
||||
name = eap->arg;
|
||||
|
||||
// Check for "messages {name}", "ctype {name}" or "time {name}" argument.
|
||||
// Allow abbreviation, but require at least 3 characters to avoid
|
||||
// confusion with a two letter language name "me" or "ct".
|
||||
p = skiptowhite(eap->arg);
|
||||
if ((*p == NUL || VIM_ISWHITE(*p)) && p - eap->arg >= 3)
|
||||
{
|
||||
if (STRNICMP(eap->arg, "messages", p - eap->arg) == 0)
|
||||
{
|
||||
what = VIM_LC_MESSAGES;
|
||||
name = skipwhite(p);
|
||||
whatstr = "messages ";
|
||||
}
|
||||
else if (STRNICMP(eap->arg, "ctype", p - eap->arg) == 0)
|
||||
{
|
||||
what = LC_CTYPE;
|
||||
name = skipwhite(p);
|
||||
whatstr = "ctype ";
|
||||
}
|
||||
else if (STRNICMP(eap->arg, "time", p - eap->arg) == 0)
|
||||
{
|
||||
what = LC_TIME;
|
||||
name = skipwhite(p);
|
||||
whatstr = "time ";
|
||||
}
|
||||
else if (STRNICMP(eap->arg, "collate", p - eap->arg) == 0)
|
||||
{
|
||||
what = LC_COLLATE;
|
||||
name = skipwhite(p);
|
||||
whatstr = "collate ";
|
||||
}
|
||||
}
|
||||
|
||||
if (*name == NUL)
|
||||
{
|
||||
# ifndef LC_MESSAGES
|
||||
if (what == VIM_LC_MESSAGES)
|
||||
p = get_mess_env();
|
||||
else
|
||||
# endif
|
||||
p = (char_u *)setlocale(what, NULL);
|
||||
if (p == NULL || *p == NUL)
|
||||
p = (char_u *)"Unknown";
|
||||
smsg(_("Current %slanguage: \"%s\""), whatstr, p);
|
||||
}
|
||||
else
|
||||
{
|
||||
# ifndef LC_MESSAGES
|
||||
if (what == VIM_LC_MESSAGES)
|
||||
loc = "";
|
||||
else
|
||||
# endif
|
||||
{
|
||||
loc = setlocale(what, (char *)name);
|
||||
# if defined(FEAT_FLOAT) && defined(LC_NUMERIC)
|
||||
// Make sure strtod() uses a decimal point, not a comma.
|
||||
setlocale(LC_NUMERIC, "C");
|
||||
# endif
|
||||
}
|
||||
if (loc == NULL)
|
||||
semsg(_("E197: Cannot set language to \"%s\""), name);
|
||||
else
|
||||
{
|
||||
# ifdef HAVE_NL_MSG_CAT_CNTR
|
||||
// Need to do this for GNU gettext, otherwise cached translations
|
||||
// will be used again.
|
||||
extern int _nl_msg_cat_cntr;
|
||||
|
||||
++_nl_msg_cat_cntr;
|
||||
# endif
|
||||
// Reset $LC_ALL, otherwise it would overrule everything.
|
||||
vim_setenv((char_u *)"LC_ALL", (char_u *)"");
|
||||
|
||||
if (what != LC_TIME && what != LC_COLLATE)
|
||||
{
|
||||
// Tell gettext() what to translate to. It apparently doesn't
|
||||
// use the currently effective locale. Also do this when
|
||||
// FEAT_GETTEXT isn't defined, so that shell commands use this
|
||||
// value.
|
||||
if (what == LC_ALL)
|
||||
{
|
||||
vim_setenv((char_u *)"LANG", name);
|
||||
|
||||
// Clear $LANGUAGE because GNU gettext uses it.
|
||||
vim_setenv((char_u *)"LANGUAGE", (char_u *)"");
|
||||
# ifdef MSWIN
|
||||
// Apparently MS-Windows printf() may cause a crash when
|
||||
// we give it 8-bit text while it's expecting text in the
|
||||
// current locale. This call avoids that.
|
||||
setlocale(LC_CTYPE, "C");
|
||||
# endif
|
||||
}
|
||||
if (what != LC_CTYPE)
|
||||
{
|
||||
char_u *mname;
|
||||
# ifdef MSWIN
|
||||
mname = gettext_lang(name);
|
||||
# else
|
||||
mname = name;
|
||||
# endif
|
||||
vim_setenv((char_u *)"LC_MESSAGES", mname);
|
||||
# ifdef FEAT_MULTI_LANG
|
||||
set_helplang_default(mname);
|
||||
# endif
|
||||
}
|
||||
}
|
||||
|
||||
# ifdef FEAT_EVAL
|
||||
// Set v:lang, v:lc_time, v:collate and v:ctype to the final result.
|
||||
set_lang_var();
|
||||
# endif
|
||||
# ifdef FEAT_TITLE
|
||||
maketitle();
|
||||
# endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static char_u **locales = NULL; // Array of all available locales
|
||||
|
||||
static int did_init_locales = FALSE;
|
||||
|
||||
/*
|
||||
* Return an array of strings for all available locales + NULL for the
|
||||
* last element. Return NULL in case of error.
|
||||
*/
|
||||
static char_u **
|
||||
find_locales(void)
|
||||
{
|
||||
garray_T locales_ga;
|
||||
char_u *loc;
|
||||
char_u *locale_list;
|
||||
# ifdef MSWIN
|
||||
size_t len = 0;
|
||||
# endif
|
||||
|
||||
// Find all available locales by running command "locale -a". If this
|
||||
// doesn't work we won't have completion.
|
||||
# ifndef MSWIN
|
||||
locale_list = get_cmd_output((char_u *)"locale -a",
|
||||
NULL, SHELL_SILENT, NULL);
|
||||
# else
|
||||
// Find all available locales by examining the directories in
|
||||
// $VIMRUNTIME/lang/
|
||||
{
|
||||
int options = WILD_SILENT|WILD_USE_NL|WILD_KEEP_ALL;
|
||||
expand_T xpc;
|
||||
char_u *p;
|
||||
|
||||
ExpandInit(&xpc);
|
||||
xpc.xp_context = EXPAND_DIRECTORIES;
|
||||
locale_list = ExpandOne(&xpc, (char_u *)"$VIMRUNTIME/lang/*",
|
||||
NULL, options, WILD_ALL);
|
||||
ExpandCleanup(&xpc);
|
||||
if (locale_list == NULL)
|
||||
// Add a dummy input, that will be skipped lated but we need to
|
||||
// have something in locale_list so that the C locale is added at
|
||||
// the end.
|
||||
locale_list = vim_strsave((char_u *)".\n");
|
||||
p = locale_list;
|
||||
// find the last directory delimiter
|
||||
while (p != NULL && *p != NUL)
|
||||
{
|
||||
if (*p == '\n')
|
||||
break;
|
||||
if (*p == '\\')
|
||||
len = p - locale_list;
|
||||
p++;
|
||||
}
|
||||
}
|
||||
# endif
|
||||
if (locale_list == NULL)
|
||||
return NULL;
|
||||
ga_init2(&locales_ga, sizeof(char_u *), 20);
|
||||
|
||||
// Transform locale_list string where each locale is separated by "\n"
|
||||
// into an array of locale strings.
|
||||
loc = (char_u *)strtok((char *)locale_list, "\n");
|
||||
|
||||
while (loc != NULL)
|
||||
{
|
||||
int ignore = FALSE;
|
||||
|
||||
# ifdef MSWIN
|
||||
if (len > 0)
|
||||
loc += len + 1;
|
||||
// skip locales with a dot (which indicates the charset)
|
||||
if (vim_strchr(loc, '.') != NULL)
|
||||
ignore = TRUE;
|
||||
# endif
|
||||
if (!ignore)
|
||||
{
|
||||
if (ga_grow(&locales_ga, 1) == FAIL)
|
||||
break;
|
||||
|
||||
loc = vim_strsave(loc);
|
||||
if (loc == NULL)
|
||||
break;
|
||||
|
||||
((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc;
|
||||
}
|
||||
loc = (char_u *)strtok(NULL, "\n");
|
||||
}
|
||||
|
||||
# ifdef MSWIN
|
||||
// Add the C locale
|
||||
if (ga_grow(&locales_ga, 1) == OK)
|
||||
((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] =
|
||||
vim_strsave((char_u *)"C");
|
||||
# endif
|
||||
|
||||
vim_free(locale_list);
|
||||
if (ga_grow(&locales_ga, 1) == FAIL)
|
||||
{
|
||||
ga_clear(&locales_ga);
|
||||
return NULL;
|
||||
}
|
||||
((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
|
||||
return (char_u **)locales_ga.ga_data;
|
||||
}
|
||||
|
||||
/*
|
||||
* Lazy initialization of all available locales.
|
||||
*/
|
||||
static void
|
||||
init_locales(void)
|
||||
{
|
||||
if (!did_init_locales)
|
||||
{
|
||||
did_init_locales = TRUE;
|
||||
locales = find_locales();
|
||||
}
|
||||
}
|
||||
|
||||
# if defined(EXITFREE) || defined(PROTO)
|
||||
void
|
||||
free_locales(void)
|
||||
{
|
||||
int i;
|
||||
if (locales != NULL)
|
||||
{
|
||||
for (i = 0; locales[i] != NULL; i++)
|
||||
vim_free(locales[i]);
|
||||
VIM_CLEAR(locales);
|
||||
}
|
||||
}
|
||||
# endif
|
||||
|
||||
/*
|
||||
* Function given to ExpandGeneric() to obtain the possible arguments of the
|
||||
* ":language" command.
|
||||
*/
|
||||
char_u *
|
||||
get_lang_arg(expand_T *xp UNUSED, int idx)
|
||||
{
|
||||
if (idx == 0)
|
||||
return (char_u *)"messages";
|
||||
if (idx == 1)
|
||||
return (char_u *)"ctype";
|
||||
if (idx == 2)
|
||||
return (char_u *)"time";
|
||||
if (idx == 3)
|
||||
return (char_u *)"collate";
|
||||
|
||||
init_locales();
|
||||
if (locales == NULL)
|
||||
return NULL;
|
||||
return locales[idx - 4];
|
||||
}
|
||||
|
||||
/*
|
||||
* Function given to ExpandGeneric() to obtain the available locales.
|
||||
*/
|
||||
char_u *
|
||||
get_locales(expand_T *xp UNUSED, int idx)
|
||||
{
|
||||
init_locales();
|
||||
if (locales == NULL)
|
||||
return NULL;
|
||||
return locales[idx];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
449
src/ex_docmd.c
449
src/ex_docmd.c
@ -25,7 +25,6 @@ static char_u *do_one_cmd(char_u **, int, cstack_T *, char_u *(*fgetline)(int, v
|
||||
static char_u *do_one_cmd(char_u **, int, char_u *(*fgetline)(int, void *, int, int), void *cookie);
|
||||
static int if_level = 0; // depth in :if
|
||||
#endif
|
||||
static void free_cmdmod(void);
|
||||
static void append_command(char_u *cmd);
|
||||
|
||||
#ifndef FEAT_MENU
|
||||
@ -629,6 +628,7 @@ do_cmdline(
|
||||
cstack_T cstack; // conditional stack
|
||||
garray_T lines_ga; // keep lines for ":while"/":for"
|
||||
int current_line = 0; // active line in lines_ga
|
||||
int current_line_before = 0;
|
||||
char_u *fname = NULL; // function or script name
|
||||
linenr_T *breakpoint = NULL; // ptr to breakpoint field in cookie
|
||||
int *dbg_tick = NULL; // ptr to dbg_tick field in cookie
|
||||
@ -851,27 +851,6 @@ do_cmdline(
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
if (cstack.cs_looplevel > 0)
|
||||
{
|
||||
// Inside a while/for loop we need to store the lines and use them
|
||||
// again. Pass a different "fgetline" function to do_one_cmd()
|
||||
// below, so that it stores lines in or reads them from
|
||||
// "lines_ga". Makes it possible to define a function inside a
|
||||
// while/for loop.
|
||||
cmd_getline = get_loop_line;
|
||||
cmd_cookie = (void *)&cmd_loop_cookie;
|
||||
cmd_loop_cookie.lines_gap = &lines_ga;
|
||||
cmd_loop_cookie.current_line = current_line;
|
||||
cmd_loop_cookie.getline = fgetline;
|
||||
cmd_loop_cookie.cookie = cookie;
|
||||
cmd_loop_cookie.repeating = (current_line < lines_ga.ga_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd_getline = fgetline;
|
||||
cmd_cookie = cookie;
|
||||
}
|
||||
#endif
|
||||
|
||||
// 2. If no line given, get an allocated line with fgetline().
|
||||
@ -929,21 +908,44 @@ do_cmdline(
|
||||
|
||||
#ifdef FEAT_EVAL
|
||||
/*
|
||||
* Save the current line when inside a ":while" or ":for", and when
|
||||
* the command looks like a ":while" or ":for", because we may need it
|
||||
* later. When there is a '|' and another command, it is stored
|
||||
* separately, because we need to be able to jump back to it from an
|
||||
* Inside a while/for loop, and when the command looks like a ":while"
|
||||
* or ":for", the line is stored, because we may need it later when
|
||||
* looping.
|
||||
*
|
||||
* When there is a '|' and another command, it is stored separately,
|
||||
* because we need to be able to jump back to it from an
|
||||
* :endwhile/:endfor.
|
||||
*
|
||||
* Pass a different "fgetline" function to do_one_cmd() below,
|
||||
* that it stores lines in or reads them from "lines_ga". Makes it
|
||||
* possible to define a function inside a while/for loop and handles
|
||||
* line continuation.
|
||||
*/
|
||||
if (current_line == lines_ga.ga_len
|
||||
&& (cstack.cs_looplevel || has_loop_cmd(next_cmdline)))
|
||||
if ((cstack.cs_looplevel > 0 || has_loop_cmd(next_cmdline)))
|
||||
{
|
||||
if (store_loop_line(&lines_ga, next_cmdline) == FAIL)
|
||||
cmd_getline = get_loop_line;
|
||||
cmd_cookie = (void *)&cmd_loop_cookie;
|
||||
cmd_loop_cookie.lines_gap = &lines_ga;
|
||||
cmd_loop_cookie.current_line = current_line;
|
||||
cmd_loop_cookie.getline = fgetline;
|
||||
cmd_loop_cookie.cookie = cookie;
|
||||
cmd_loop_cookie.repeating = (current_line < lines_ga.ga_len);
|
||||
|
||||
// Save the current line when encountering it the first time.
|
||||
if (current_line == lines_ga.ga_len
|
||||
&& store_loop_line(&lines_ga, next_cmdline) == FAIL)
|
||||
{
|
||||
retval = FAIL;
|
||||
break;
|
||||
}
|
||||
current_line_before = current_line;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd_getline = fgetline;
|
||||
cmd_cookie = cookie;
|
||||
}
|
||||
|
||||
did_endif = FALSE;
|
||||
#endif
|
||||
|
||||
@ -1078,7 +1080,7 @@ do_cmdline(
|
||||
else if (cstack.cs_lflags & CSL_HAD_LOOP)
|
||||
{
|
||||
cstack.cs_lflags &= ~CSL_HAD_LOOP;
|
||||
cstack.cs_line[cstack.cs_idx] = current_line - 1;
|
||||
cstack.cs_line[cstack.cs_idx] = current_line_before;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1515,7 +1517,7 @@ getline_cookie(
|
||||
{
|
||||
#ifdef FEAT_EVAL
|
||||
char_u *(*gp)(int, void *, int, int);
|
||||
struct loop_cookie *cp;
|
||||
struct loop_cookie *cp;
|
||||
|
||||
// When "fgetline" is "get_loop_line()" use the "cookie" to find the
|
||||
// cookie that's originally used to obtain the lines. This may be nested
|
||||
@ -1533,6 +1535,41 @@ getline_cookie(
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(FEAT_EVAL) || defined(PROT)
|
||||
/*
|
||||
* Get the next line source line without advancing.
|
||||
*/
|
||||
char_u *
|
||||
getline_peek(
|
||||
char_u *(*fgetline)(int, void *, int, int) UNUSED,
|
||||
void *cookie) // argument for fgetline()
|
||||
{
|
||||
char_u *(*gp)(int, void *, int, int);
|
||||
struct loop_cookie *cp;
|
||||
wcmd_T *wp;
|
||||
|
||||
// When "fgetline" is "get_loop_line()" use the "cookie" to find the
|
||||
// cookie that's originally used to obtain the lines. This may be nested
|
||||
// several levels.
|
||||
gp = fgetline;
|
||||
cp = (struct loop_cookie *)cookie;
|
||||
while (gp == get_loop_line)
|
||||
{
|
||||
if (cp->current_line + 1 < cp->lines_gap->ga_len)
|
||||
{
|
||||
// executing lines a second time, use the stored copy
|
||||
wp = (wcmd_T *)(cp->lines_gap->ga_data) + cp->current_line + 1;
|
||||
return wp->line;
|
||||
}
|
||||
gp = cp->getline;
|
||||
cp = cp->cookie;
|
||||
}
|
||||
if (gp == getsourceline)
|
||||
return source_nextline(cp);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Helper function to apply an offset for buffer commands, i.e. ":bdelete",
|
||||
@ -1612,6 +1649,16 @@ current_tab_nr(tabpage_T *tab)
|
||||
return nr;
|
||||
}
|
||||
|
||||
static int
|
||||
comment_start(char_u *p, int starts_with_colon UNUSED)
|
||||
{
|
||||
#ifdef FEAT_EVAL
|
||||
if (in_vim9script())
|
||||
return p[0] == '#' && p[1] != '{' && !starts_with_colon;
|
||||
#endif
|
||||
return *p == '"';
|
||||
}
|
||||
|
||||
# define CURRENT_WIN_NR current_win_nr(curwin)
|
||||
# define LAST_WIN_NR current_win_nr(NULL)
|
||||
# define CURRENT_TAB_NR current_tab_nr(curtab)
|
||||
@ -1661,8 +1708,10 @@ do_one_cmd(
|
||||
int save_reg_executing = reg_executing;
|
||||
int ni; // set when Not Implemented
|
||||
char_u *cmd;
|
||||
int starts_with_colon = FALSE;
|
||||
#ifdef FEAT_EVAL
|
||||
int starts_with_colon;
|
||||
int may_have_range;
|
||||
int vim9script = in_vim9script();
|
||||
#endif
|
||||
|
||||
CLEAR_FIELD(ea);
|
||||
@ -1723,13 +1772,28 @@ do_one_cmd(
|
||||
* We need the command to know what kind of range it uses.
|
||||
*/
|
||||
cmd = ea.cmd;
|
||||
ea.cmd = skip_range(ea.cmd, NULL);
|
||||
#ifdef FEAT_EVAL
|
||||
// In Vim9 script a colon is required before the range.
|
||||
may_have_range = !vim9script || starts_with_colon;
|
||||
if (may_have_range)
|
||||
#endif
|
||||
ea.cmd = skip_range(ea.cmd, NULL);
|
||||
if (*ea.cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL)
|
||||
ea.cmd = skipwhite(ea.cmd + 1);
|
||||
|
||||
#ifdef FEAT_EVAL
|
||||
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9 && !starts_with_colon)
|
||||
if (vim9script && !starts_with_colon)
|
||||
{
|
||||
if (ea.cmd == cmd + 1 && *cmd == '$')
|
||||
// should be "$VAR = val"
|
||||
--ea.cmd;
|
||||
else if (ea.cmd > cmd)
|
||||
{
|
||||
emsg(_(e_colon_required));
|
||||
goto doend;
|
||||
}
|
||||
p = find_ex_command(&ea, NULL, lookup_scriptvar, NULL);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
p = find_ex_command(&ea, NULL, NULL, NULL);
|
||||
@ -1815,8 +1879,11 @@ do_one_cmd(
|
||||
}
|
||||
|
||||
ea.cmd = cmd;
|
||||
if (parse_cmd_address(&ea, &errormsg, FALSE) == FAIL)
|
||||
goto doend;
|
||||
#ifdef FEAT_EVAL
|
||||
if (may_have_range)
|
||||
#endif
|
||||
if (parse_cmd_address(&ea, &errormsg, FALSE) == FAIL)
|
||||
goto doend;
|
||||
|
||||
/*
|
||||
* 5. Parse the command.
|
||||
@ -1833,12 +1900,8 @@ do_one_cmd(
|
||||
* If we got a line, but no command, then go to the line.
|
||||
* If we find a '|' or '\n' we set ea.nextcmd.
|
||||
*/
|
||||
if (*ea.cmd == NUL || *ea.cmd == '"'
|
||||
#ifdef FEAT_EVAL
|
||||
|| (*ea.cmd == '#' && ea.cmd[1] != '{'
|
||||
&& !starts_with_colon && in_vim9script())
|
||||
#endif
|
||||
|| (ea.nextcmd = check_nextcmd(ea.cmd)) != NULL)
|
||||
if (*ea.cmd == NUL || comment_start(ea.cmd, starts_with_colon)
|
||||
|| (ea.nextcmd = check_nextcmd(ea.cmd)) != NULL)
|
||||
{
|
||||
/*
|
||||
* strange vi behaviour:
|
||||
@ -2002,12 +2065,22 @@ do_one_cmd(
|
||||
goto doend;
|
||||
}
|
||||
|
||||
if (text_locked() && !(ea.argt & EX_CMDWIN)
|
||||
&& !IS_USER_CMDIDX(ea.cmdidx))
|
||||
if (!IS_USER_CMDIDX(ea.cmdidx))
|
||||
{
|
||||
// Command not allowed when editing the command line.
|
||||
errormsg = _(get_text_locked_msg());
|
||||
goto doend;
|
||||
#ifdef FEAT_CMDWIN
|
||||
if (cmdwin_type != 0 && !(ea.argt & EX_CMDWIN))
|
||||
{
|
||||
// Command not allowed in the command line window
|
||||
errormsg = _(e_cmdwin);
|
||||
goto doend;
|
||||
}
|
||||
#endif
|
||||
if (text_locked() && !(ea.argt & EX_LOCK_OK))
|
||||
{
|
||||
// Command not allowed when text is locked
|
||||
errormsg = _(get_text_locked_msg());
|
||||
goto doend;
|
||||
}
|
||||
}
|
||||
|
||||
// Disallow editing another buffer when "curbuf_lock" is set.
|
||||
@ -2172,7 +2245,7 @@ do_one_cmd(
|
||||
ea.do_ecmd_cmd = getargcmd(&ea.arg);
|
||||
|
||||
/*
|
||||
* Check for '|' to separate commands and '"' to start comments.
|
||||
* Check for '|' to separate commands and '"' or '#' to start comments.
|
||||
* Don't do this for ":read !cmd" and ":write !cmd".
|
||||
*/
|
||||
if ((ea.argt & EX_TRLBAR) && !ea.usefilter)
|
||||
@ -2337,7 +2410,7 @@ do_one_cmd(
|
||||
&& *ea.arg != '"' && (*ea.arg != '|' || (ea.argt & EX_TRLBAR) == 0))
|
||||
{
|
||||
// no arguments allowed but there is something
|
||||
errormsg = _(e_trailing);
|
||||
errormsg = ex_errmsg(e_trailing_arg, ea.arg);
|
||||
goto doend;
|
||||
}
|
||||
|
||||
@ -2511,7 +2584,7 @@ do_one_cmd(
|
||||
ea.errmsg = NULL;
|
||||
(cmdnames[ea.cmdidx].cmd_func)(&ea);
|
||||
if (ea.errmsg != NULL)
|
||||
errormsg = _(ea.errmsg);
|
||||
errormsg = ea.errmsg;
|
||||
}
|
||||
|
||||
#ifdef FEAT_EVAL
|
||||
@ -2566,32 +2639,10 @@ doend:
|
||||
? cmdnames[(int)ea.cmdidx].cmd_name : (char_u *)NULL);
|
||||
#endif
|
||||
|
||||
if (ea.verbose_save >= 0)
|
||||
p_verbose = ea.verbose_save;
|
||||
|
||||
free_cmdmod();
|
||||
undo_cmdmod(&ea, save_msg_scroll);
|
||||
cmdmod = save_cmdmod;
|
||||
reg_executing = save_reg_executing;
|
||||
|
||||
if (ea.save_msg_silent != -1)
|
||||
{
|
||||
// messages could be enabled for a serious error, need to check if the
|
||||
// counters don't become negative
|
||||
if (!did_emsg || msg_silent > ea.save_msg_silent)
|
||||
msg_silent = ea.save_msg_silent;
|
||||
emsg_silent -= ea.did_esilent;
|
||||
if (emsg_silent < 0)
|
||||
emsg_silent = 0;
|
||||
// Restore msg_scroll, it's set by file I/O commands, even when no
|
||||
// message is actually displayed.
|
||||
msg_scroll = save_msg_scroll;
|
||||
|
||||
// "silent reg" or "silent echo x" inside "redir" leaves msg_col
|
||||
// somewhere in the line. Put it back in the first column.
|
||||
if (redirecting())
|
||||
msg_col = 0;
|
||||
}
|
||||
|
||||
#ifdef HAVE_SANDBOX
|
||||
if (ea.did_sandbox)
|
||||
--sandbox;
|
||||
@ -2602,6 +2653,7 @@ doend:
|
||||
|
||||
#ifdef FEAT_EVAL
|
||||
--ex_nesting_level;
|
||||
vim_free(ea.cmdline_tofree);
|
||||
#endif
|
||||
|
||||
return ea.nextcmd;
|
||||
@ -2610,6 +2662,20 @@ doend:
|
||||
#pragma optimize( "", on )
|
||||
#endif
|
||||
|
||||
static char ex_error_buf[MSG_BUF_LEN];
|
||||
|
||||
/*
|
||||
* Return an error message with argument included.
|
||||
* Uses a static buffer, only the last error will be kept.
|
||||
* "msg" will be translated, caller should use N_().
|
||||
*/
|
||||
char *
|
||||
ex_errmsg(char *msg, char_u *arg)
|
||||
{
|
||||
vim_snprintf(ex_error_buf, MSG_BUF_LEN, _(msg), arg);
|
||||
return ex_error_buf;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse and skip over command modifiers:
|
||||
* - update eap->cmd
|
||||
@ -2627,7 +2693,8 @@ doend:
|
||||
int
|
||||
parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only)
|
||||
{
|
||||
char_u *p;
|
||||
char_u *p;
|
||||
int starts_with_colon = FALSE;
|
||||
|
||||
CLEAR_FIELD(cmdmod);
|
||||
eap->verbose_save = -1;
|
||||
@ -2637,7 +2704,11 @@ parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only)
|
||||
for (;;)
|
||||
{
|
||||
while (*eap->cmd == ' ' || *eap->cmd == '\t' || *eap->cmd == ':')
|
||||
{
|
||||
if (*eap->cmd == ':')
|
||||
starts_with_colon = TRUE;
|
||||
++eap->cmd;
|
||||
}
|
||||
|
||||
// in ex mode, an empty line works like :+
|
||||
if (*eap->cmd == NUL && exmode_active
|
||||
@ -2651,7 +2722,7 @@ parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only)
|
||||
}
|
||||
|
||||
// ignore comment and empty lines
|
||||
if (*eap->cmd == '"')
|
||||
if (comment_start(eap->cmd, starts_with_colon))
|
||||
return FAIL;
|
||||
if (*eap->cmd == NUL)
|
||||
{
|
||||
@ -2727,6 +2798,11 @@ parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only)
|
||||
if (*p == NUL || ends_excmd(*p))
|
||||
break;
|
||||
}
|
||||
#ifdef FEAT_EVAL
|
||||
// Avoid that "filter(arg)" is recognized.
|
||||
if (in_vim9script() && !VIM_ISWHITE(*p))
|
||||
break;
|
||||
#endif
|
||||
if (skip_only)
|
||||
p = skip_vimgrep_pat(p, NULL, NULL);
|
||||
else
|
||||
@ -2881,11 +2957,14 @@ parse_command_modifiers(exarg_T *eap, char **errormsg, int skip_only)
|
||||
}
|
||||
|
||||
/*
|
||||
* Free contents of "cmdmod".
|
||||
* Undo and free contents of "cmdmod".
|
||||
*/
|
||||
static void
|
||||
free_cmdmod(void)
|
||||
void
|
||||
undo_cmdmod(exarg_T *eap, int save_msg_scroll)
|
||||
{
|
||||
if (eap->verbose_save >= 0)
|
||||
p_verbose = eap->verbose_save;
|
||||
|
||||
if (cmdmod.save_ei != NULL)
|
||||
{
|
||||
// Restore 'eventignore' to the value before ":noautocmd".
|
||||
@ -2896,6 +2975,25 @@ free_cmdmod(void)
|
||||
|
||||
if (cmdmod.filter_regmatch.regprog != NULL)
|
||||
vim_regfree(cmdmod.filter_regmatch.regprog);
|
||||
|
||||
if (eap->save_msg_silent != -1)
|
||||
{
|
||||
// messages could be enabled for a serious error, need to check if the
|
||||
// counters don't become negative
|
||||
if (!did_emsg || msg_silent > eap->save_msg_silent)
|
||||
msg_silent = eap->save_msg_silent;
|
||||
emsg_silent -= eap->did_esilent;
|
||||
if (emsg_silent < 0)
|
||||
emsg_silent = 0;
|
||||
// Restore msg_scroll, it's set by file I/O commands, even when no
|
||||
// message is actually displayed.
|
||||
msg_scroll = save_msg_scroll;
|
||||
|
||||
// "silent reg" or "silent echo x" inside "redir" leaves msg_col
|
||||
// somewhere in the line. Put it back in the first column.
|
||||
if (redirecting())
|
||||
msg_col = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -3173,36 +3271,88 @@ find_ex_command(
|
||||
* "lvar = value", "lvar(arg)", "[1, 2 3]->Func()"
|
||||
*/
|
||||
p = eap->cmd;
|
||||
if (lookup != NULL && (*p == '('
|
||||
|| ((p = to_name_const_end(eap->cmd)) > eap->cmd && *p != NUL)))
|
||||
if (lookup != NULL)
|
||||
{
|
||||
int oplen;
|
||||
int heredoc;
|
||||
// Skip over first char for "&opt = val", "$ENV = val" and "@r = val".
|
||||
char_u *pskip = (*eap->cmd == '&' || *eap->cmd == '$'
|
||||
|| *eap->cmd == '@') ? eap->cmd + 1 : eap->cmd;
|
||||
|
||||
// "funcname(" is always a function call.
|
||||
// "varname[]" is an expression.
|
||||
// "g:varname" is an expression.
|
||||
// "varname->expr" is an expression.
|
||||
// "(..." is an expression.
|
||||
if (*p == '('
|
||||
|| *p == '['
|
||||
|| p[1] == ':'
|
||||
|| (*p == '-' && p[1] == '>'))
|
||||
if (vim_strchr((char_u *)"{('[", *p) != NULL
|
||||
|| ((p = to_name_const_end(pskip)) > eap->cmd && *p != NUL))
|
||||
{
|
||||
eap->cmdidx = CMD_eval;
|
||||
return eap->cmd;
|
||||
}
|
||||
int oplen;
|
||||
int heredoc;
|
||||
|
||||
if (
|
||||
// "(..." is an expression.
|
||||
// "funcname(" is always a function call.
|
||||
*p == '('
|
||||
|| (p == eap->cmd
|
||||
? (
|
||||
// "{..." is an dict expression.
|
||||
*eap->cmd == '{'
|
||||
// "'string'->func()" is an expression.
|
||||
|| *eap->cmd == '\''
|
||||
// "g:varname" is an expression.
|
||||
|| eap->cmd[1] == ':'
|
||||
)
|
||||
: (
|
||||
// "varname[]" is an expression.
|
||||
*p == '['
|
||||
// "varname->func()" is an expression.
|
||||
|| (*p == '-' && p[1] == '>')
|
||||
// "varname.expr" is an expression.
|
||||
|| (*p == '.' && ASCII_ISALPHA(p[1]))
|
||||
)))
|
||||
{
|
||||
eap->cmdidx = CMD_eval;
|
||||
return eap->cmd;
|
||||
}
|
||||
|
||||
// "[...]->Method()" is a list expression, but "[a, b] = Func()" is
|
||||
// an assignment.
|
||||
// If there is no line break inside the "[...]" then "p" is
|
||||
// advanced to after the "]" by to_name_const_end(): check if a "="
|
||||
// follows.
|
||||
// If "[...]" has a line break "p" still points at the "[" and it
|
||||
// can't be an assignment.
|
||||
if (*eap->cmd == '[')
|
||||
{
|
||||
p = to_name_const_end(eap->cmd);
|
||||
if (p == eap->cmd || *skipwhite(p) != '=')
|
||||
{
|
||||
eap->cmdidx = CMD_eval;
|
||||
return eap->cmd;
|
||||
}
|
||||
if (p > eap->cmd && *skipwhite(p) == '=')
|
||||
{
|
||||
eap->cmdidx = CMD_let;
|
||||
return eap->cmd;
|
||||
}
|
||||
}
|
||||
|
||||
oplen = assignment_len(skipwhite(p), &heredoc);
|
||||
if (oplen > 0)
|
||||
{
|
||||
// Recognize an assignment if we recognize the variable name:
|
||||
// "g:var = expr"
|
||||
// "var = expr" where "var" is a local var name.
|
||||
if (((p - eap->cmd) > 2 && eap->cmd[1] == ':')
|
||||
|| lookup(eap->cmd, p - eap->cmd, cctx) != NULL)
|
||||
oplen = assignment_len(skipwhite(p), &heredoc);
|
||||
if (oplen > 0)
|
||||
{
|
||||
eap->cmdidx = CMD_let;
|
||||
if (((p - eap->cmd) > 2 && eap->cmd[1] == ':')
|
||||
|| *eap->cmd == '&'
|
||||
|| *eap->cmd == '$'
|
||||
|| *eap->cmd == '@'
|
||||
|| lookup(eap->cmd, p - eap->cmd, cctx) != NULL)
|
||||
{
|
||||
eap->cmdidx = CMD_let;
|
||||
return eap->cmd;
|
||||
}
|
||||
}
|
||||
|
||||
// Recognize using a type for a w:, b:, t: or g: variable:
|
||||
// "w:varname: number = 123".
|
||||
if (eap->cmd[1] == ':' && *p == ':')
|
||||
{
|
||||
eap->cmdidx = CMD_eval;
|
||||
return eap->cmd;
|
||||
}
|
||||
}
|
||||
@ -3446,7 +3596,7 @@ excmd_get_argt(cmdidx_T idx)
|
||||
* Backslashed delimiters after / or ? will be skipped, and commands will
|
||||
* not be expanded between /'s and ?'s or after "'".
|
||||
*
|
||||
* Also skip white space and ":" characters.
|
||||
* Also skip white space and ":" characters after the range.
|
||||
* Returns the "cmd" pointer advanced to beyond the range.
|
||||
*/
|
||||
char_u *
|
||||
@ -3885,7 +4035,8 @@ get_flags(exarg_T *eap)
|
||||
ex_ni(exarg_T *eap)
|
||||
{
|
||||
if (!eap->skip)
|
||||
eap->errmsg = N_("E319: Sorry, the command is not available in this version");
|
||||
eap->errmsg =
|
||||
_("E319: Sorry, the command is not available in this version");
|
||||
}
|
||||
|
||||
#ifdef HAVE_EX_SCRIPT_NI
|
||||
@ -4437,14 +4588,20 @@ separate_nextcmd(exarg_T *eap)
|
||||
// Check for '"': start of comment or '|': next command
|
||||
// :@" and :*" do not start a comment!
|
||||
// :redir @" doesn't either.
|
||||
else if ((*p == '"' && !(eap->argt & EX_NOTRLCOM)
|
||||
&& ((eap->cmdidx != CMD_at && eap->cmdidx != CMD_star)
|
||||
|| p != eap->arg)
|
||||
&& (eap->cmdidx != CMD_redir
|
||||
|| p != eap->arg + 1 || p[-1] != '@'))
|
||||
else if ((*p == '"'
|
||||
#ifdef FEAT_EVAL
|
||||
|| (*p == '#' && in_vim9script()
|
||||
&& p[1] != '{' && p > eap->cmd && VIM_ISWHITE(p[-1]))
|
||||
&& !in_vim9script()
|
||||
#endif
|
||||
&& !(eap->argt & EX_NOTRLCOM)
|
||||
&& ((eap->cmdidx != CMD_at && eap->cmdidx != CMD_star)
|
||||
|| p != eap->arg)
|
||||
&& (eap->cmdidx != CMD_redir
|
||||
|| p != eap->arg + 1 || p[-1] != '@'))
|
||||
#ifdef FEAT_EVAL
|
||||
|| (*p == '#'
|
||||
&& in_vim9script()
|
||||
&& p[1] != '{'
|
||||
&& p > eap->cmd && VIM_ISWHITE(p[-1]))
|
||||
#endif
|
||||
|| *p == '|' || *p == '\n')
|
||||
{
|
||||
@ -4637,7 +4794,7 @@ ex_autocmd(exarg_T *eap)
|
||||
if (secure)
|
||||
{
|
||||
secure = 2;
|
||||
eap->errmsg = e_curdir;
|
||||
eap->errmsg = _(e_curdir);
|
||||
}
|
||||
else if (eap->cmdidx == CMD_autocmd)
|
||||
do_autocmd(eap->arg, eap->forceit);
|
||||
@ -4688,7 +4845,7 @@ ex_buffer(exarg_T *eap)
|
||||
if (ERROR_IF_ANY_POPUP_WINDOW)
|
||||
return;
|
||||
if (*eap->arg)
|
||||
eap->errmsg = e_trailing;
|
||||
eap->errmsg = ex_errmsg(e_trailing_arg, eap->arg);
|
||||
else
|
||||
{
|
||||
if (eap->addr_count == 0) // default is current buffer
|
||||
@ -4783,11 +4940,13 @@ ex_blast(exarg_T *eap)
|
||||
int
|
||||
ends_excmd(int c)
|
||||
{
|
||||
int comment_char = '"';
|
||||
|
||||
#ifdef FEAT_EVAL
|
||||
if (c == '#')
|
||||
return in_vim9script();
|
||||
if (in_vim9script())
|
||||
comment_char = '#';
|
||||
#endif
|
||||
return (c == NUL || c == '|' || c == '"' || c == '\n');
|
||||
return (c == NUL || c == '|' || c == comment_char || c == '\n');
|
||||
}
|
||||
|
||||
/*
|
||||
@ -4799,11 +4958,14 @@ ends_excmd2(char_u *cmd_start UNUSED, char_u *cmd)
|
||||
{
|
||||
int c = *cmd;
|
||||
|
||||
if (c == NUL || c == '|' || c == '\n')
|
||||
return TRUE;
|
||||
#ifdef FEAT_EVAL
|
||||
if (c == '#' && cmd[1] != '{' && (cmd == cmd_start || VIM_ISWHITE(cmd[-1])))
|
||||
return in_vim9script();
|
||||
if (in_vim9script())
|
||||
return c == '#' && cmd[1] != '{'
|
||||
&& (cmd == cmd_start || VIM_ISWHITE(cmd[-1]));
|
||||
#endif
|
||||
return (c == NUL || c == '|' || c == '"' || c == '\n');
|
||||
return c == '"';
|
||||
}
|
||||
|
||||
#if defined(FEAT_SYN_HL) || defined(FEAT_SEARCH_EXTRA) || defined(FEAT_EVAL) \
|
||||
@ -4905,7 +5067,7 @@ ex_colorscheme(exarg_T *eap)
|
||||
if (expr != NULL)
|
||||
{
|
||||
++emsg_off;
|
||||
p = eval_to_string(expr, NULL, FALSE);
|
||||
p = eval_to_string(expr, FALSE);
|
||||
--emsg_off;
|
||||
vim_free(expr);
|
||||
}
|
||||
@ -5170,6 +5332,13 @@ ex_win_close(
|
||||
int need_hide;
|
||||
buf_T *buf = win->w_buffer;
|
||||
|
||||
// Never close the autocommand window.
|
||||
if (win == aucmd_win)
|
||||
{
|
||||
emsg(_(e_autocmd_close));
|
||||
return;
|
||||
}
|
||||
|
||||
need_hide = (bufIsChanged(buf) && buf->b_nwindows <= 1);
|
||||
if (need_hide && !buf_hide(buf) && !forceit)
|
||||
{
|
||||
@ -5243,7 +5412,7 @@ get_tabpage_arg(exarg_T *eap)
|
||||
|| tab_number > LAST_TAB_NR)
|
||||
{
|
||||
// No numbers as argument.
|
||||
eap->errmsg = e_invarg;
|
||||
eap->errmsg = ex_errmsg(e_invarg2, eap->arg);
|
||||
goto theend;
|
||||
}
|
||||
}
|
||||
@ -5255,7 +5424,7 @@ get_tabpage_arg(exarg_T *eap)
|
||||
|| tab_number == 0)
|
||||
{
|
||||
// No numbers as argument.
|
||||
eap->errmsg = e_invarg;
|
||||
eap->errmsg = ex_errmsg(e_invarg2, eap->arg);
|
||||
goto theend;
|
||||
}
|
||||
tab_number = tab_number * relative + tabpage_index(curtab);
|
||||
@ -5263,13 +5432,13 @@ get_tabpage_arg(exarg_T *eap)
|
||||
--tab_number;
|
||||
}
|
||||
if (tab_number < unaccept_arg0 || tab_number > LAST_TAB_NR)
|
||||
eap->errmsg = e_invarg;
|
||||
eap->errmsg = ex_errmsg(e_invarg2, eap->arg);
|
||||
}
|
||||
else if (eap->addr_count > 0)
|
||||
{
|
||||
if (unaccept_arg0 && eap->line2 == 0)
|
||||
{
|
||||
eap->errmsg = e_invrange;
|
||||
eap->errmsg = _(e_invrange);
|
||||
tab_number = 0;
|
||||
}
|
||||
else
|
||||
@ -5279,7 +5448,7 @@ get_tabpage_arg(exarg_T *eap)
|
||||
{
|
||||
--tab_number;
|
||||
if (tab_number < unaccept_arg0)
|
||||
eap->errmsg = e_invarg;
|
||||
eap->errmsg = _(e_invrange);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5531,6 +5700,10 @@ ex_stop(exarg_T *eap)
|
||||
static void
|
||||
ex_exit(exarg_T *eap)
|
||||
{
|
||||
#ifdef FEAT_EVAL
|
||||
if (not_in_vim9(eap) == FAIL)
|
||||
return;
|
||||
#endif
|
||||
#ifdef FEAT_CMDWIN
|
||||
if (cmdwin_type != 0)
|
||||
{
|
||||
@ -5792,7 +5965,7 @@ ex_recover(exarg_T *eap)
|
||||
static void
|
||||
ex_wrongmodifier(exarg_T *eap)
|
||||
{
|
||||
eap->errmsg = e_invcmd;
|
||||
eap->errmsg = _(e_invcmd);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -5975,7 +6148,7 @@ ex_tabnext(exarg_T *eap)
|
||||
|| tab_number == 0)
|
||||
{
|
||||
// No numbers as argument.
|
||||
eap->errmsg = e_invarg;
|
||||
eap->errmsg = ex_errmsg(e_invarg2, eap->arg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -5988,7 +6161,7 @@ ex_tabnext(exarg_T *eap)
|
||||
tab_number = eap->line2;
|
||||
if (tab_number < 1)
|
||||
{
|
||||
eap->errmsg = e_invrange;
|
||||
eap->errmsg = _(e_invrange);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -6376,7 +6549,7 @@ do_exedit(
|
||||
static void
|
||||
ex_nogui(exarg_T *eap)
|
||||
{
|
||||
eap->errmsg = e_nogvim;
|
||||
eap->errmsg = _(e_nogvim);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -6938,7 +7111,12 @@ ex_wincmd(exarg_T *eap)
|
||||
|
||||
eap->nextcmd = check_nextcmd(p);
|
||||
p = skipwhite(p);
|
||||
if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
|
||||
if (*p != NUL && *p != (
|
||||
#ifdef FEAT_EVAL
|
||||
in_vim9script() ? '#' :
|
||||
#endif
|
||||
'"')
|
||||
&& eap->nextcmd == NULL)
|
||||
emsg(_(e_invarg));
|
||||
else if (!eap->skip)
|
||||
{
|
||||
@ -7583,7 +7761,7 @@ ex_mark(exarg_T *eap)
|
||||
if (*eap->arg == NUL) // No argument?
|
||||
emsg(_(e_argreq));
|
||||
else if (eap->arg[1] != NUL) // more than one character?
|
||||
emsg(_(e_trailing));
|
||||
semsg(_(e_trailing_arg), eap->arg);
|
||||
else
|
||||
{
|
||||
pos = curwin->w_cursor; // save curwin->w_cursor
|
||||
@ -7947,7 +8125,7 @@ ex_findpat(exarg_T *eap)
|
||||
|
||||
// Check for trailing illegal characters
|
||||
if (!ends_excmd2(eap->arg, p))
|
||||
eap->errmsg = e_trailing;
|
||||
eap->errmsg = ex_errmsg(e_trailing_arg, p);
|
||||
else
|
||||
eap->nextcmd = check_nextcmd(p);
|
||||
}
|
||||
@ -8108,8 +8286,10 @@ find_cmdline_var(char_u *src, int *usedlen)
|
||||
#define SPEC_SFILE (SPEC_CFILE + 1)
|
||||
"<slnum>", // ":so" file line number
|
||||
#define SPEC_SLNUM (SPEC_SFILE + 1)
|
||||
"<stack>", // call stack
|
||||
#define SPEC_STACK (SPEC_SLNUM + 1)
|
||||
"<afile>", // autocommand file name
|
||||
#define SPEC_AFILE (SPEC_SLNUM + 1)
|
||||
#define SPEC_AFILE (SPEC_STACK + 1)
|
||||
"<abuf>", // autocommand buffer number
|
||||
#define SPEC_ABUF (SPEC_AFILE + 1)
|
||||
"<amatch>", // autocommand match name
|
||||
@ -8360,10 +8540,13 @@ eval_vars(
|
||||
break;
|
||||
|
||||
case SPEC_SFILE: // file name for ":so" command
|
||||
result = estack_sfile();
|
||||
case SPEC_STACK: // call stack
|
||||
result = estack_sfile(spec_idx == SPEC_SFILE);
|
||||
if (result == NULL)
|
||||
{
|
||||
*errormsg = _("E498: no :source file name to substitute for \"<sfile>\"");
|
||||
*errormsg = spec_idx == SPEC_SFILE
|
||||
? _("E498: no :source file name to substitute for \"<sfile>\"")
|
||||
: _("E489: no call stack to substitute for \"<stack>\"");
|
||||
return NULL;
|
||||
}
|
||||
resultbuf = result; // remember allocated string
|
||||
|
@ -290,7 +290,7 @@ cause_errthrow(
|
||||
|
||||
// Get the source name and lnum now, it may change before
|
||||
// reaching do_errthrow().
|
||||
elem->sfile = estack_sfile();
|
||||
elem->sfile = estack_sfile(FALSE);
|
||||
elem->slnum = SOURCING_LNUM;
|
||||
}
|
||||
}
|
||||
@ -549,7 +549,7 @@ throw_exception(void *value, except_type_T type, char_u *cmdname)
|
||||
}
|
||||
else
|
||||
{
|
||||
excp->throw_name = estack_sfile();
|
||||
excp->throw_name = estack_sfile(FALSE);
|
||||
if (excp->throw_name == NULL)
|
||||
excp->throw_name = vim_strsave((char_u *)"");
|
||||
if (excp->throw_name == NULL)
|
||||
@ -895,10 +895,14 @@ report_discard_pending(int pending, void *value)
|
||||
ex_eval(exarg_T *eap)
|
||||
{
|
||||
typval_T tv;
|
||||
evalarg_T evalarg;
|
||||
|
||||
if (eval0(eap->arg, &tv, &eap->nextcmd, eap->skip ? 0 : EVAL_EVALUATE)
|
||||
== OK)
|
||||
fill_evalarg_from_eap(&evalarg, eap, eap->skip);
|
||||
|
||||
if (eval0(eap->arg, &tv, eap, &evalarg) == OK)
|
||||
clear_tv(&tv);
|
||||
|
||||
clear_evalarg(&evalarg, eap);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -913,7 +917,7 @@ ex_if(exarg_T *eap)
|
||||
cstack_T *cstack = eap->cstack;
|
||||
|
||||
if (cstack->cs_idx == CSTACK_LEN - 1)
|
||||
eap->errmsg = N_("E579: :if nesting too deep");
|
||||
eap->errmsg = _("E579: :if nesting too deep");
|
||||
else
|
||||
{
|
||||
++cstack->cs_idx;
|
||||
@ -926,7 +930,7 @@ ex_if(exarg_T *eap)
|
||||
skip = did_emsg || got_int || did_throw || (cstack->cs_idx > 0
|
||||
&& !(cstack->cs_flags[cstack->cs_idx - 1] & CSF_ACTIVE));
|
||||
|
||||
result = eval_to_bool(eap->arg, &error, &eap->nextcmd, skip);
|
||||
result = eval_to_bool(eap->arg, &error, eap, skip);
|
||||
|
||||
if (!skip && !error)
|
||||
{
|
||||
@ -949,7 +953,7 @@ ex_endif(exarg_T *eap)
|
||||
if (eap->cstack->cs_idx < 0
|
||||
|| (eap->cstack->cs_flags[eap->cstack->cs_idx]
|
||||
& (CSF_WHILE | CSF_FOR | CSF_TRY)))
|
||||
eap->errmsg = N_(e_endif_without_if);
|
||||
eap->errmsg = _(e_endif_without_if);
|
||||
else
|
||||
{
|
||||
/*
|
||||
@ -993,20 +997,20 @@ ex_else(exarg_T *eap)
|
||||
{
|
||||
if (eap->cmdidx == CMD_else)
|
||||
{
|
||||
eap->errmsg = N_(e_else_without_if);
|
||||
eap->errmsg = _(e_else_without_if);
|
||||
return;
|
||||
}
|
||||
eap->errmsg = N_(e_elseif_without_if);
|
||||
eap->errmsg = _(e_elseif_without_if);
|
||||
skip = TRUE;
|
||||
}
|
||||
else if (cstack->cs_flags[cstack->cs_idx] & CSF_ELSE)
|
||||
{
|
||||
if (eap->cmdidx == CMD_else)
|
||||
{
|
||||
eap->errmsg = N_("E583: multiple :else");
|
||||
eap->errmsg = _("E583: multiple :else");
|
||||
return;
|
||||
}
|
||||
eap->errmsg = N_("E584: :elseif after :else");
|
||||
eap->errmsg = _("E584: :elseif after :else");
|
||||
skip = TRUE;
|
||||
}
|
||||
|
||||
@ -1038,7 +1042,7 @@ ex_else(exarg_T *eap)
|
||||
|
||||
if (eap->cmdidx == CMD_elseif)
|
||||
{
|
||||
result = eval_to_bool(eap->arg, &error, &eap->nextcmd, skip);
|
||||
result = eval_to_bool(eap->arg, &error, eap, skip);
|
||||
|
||||
// When throwing error exceptions, we want to throw always the first
|
||||
// of several errors in a row. This is what actually happens when
|
||||
@ -1072,7 +1076,7 @@ ex_while(exarg_T *eap)
|
||||
cstack_T *cstack = eap->cstack;
|
||||
|
||||
if (cstack->cs_idx == CSTACK_LEN - 1)
|
||||
eap->errmsg = N_("E585: :while/:for nesting too deep");
|
||||
eap->errmsg = _("E585: :while/:for nesting too deep");
|
||||
else
|
||||
{
|
||||
/*
|
||||
@ -1100,11 +1104,20 @@ ex_while(exarg_T *eap)
|
||||
/*
|
||||
* ":while bool-expr"
|
||||
*/
|
||||
result = eval_to_bool(eap->arg, &error, &eap->nextcmd, skip);
|
||||
result = eval_to_bool(eap->arg, &error, eap, skip);
|
||||
}
|
||||
else
|
||||
{
|
||||
void *fi;
|
||||
void *fi;
|
||||
evalarg_T evalarg;
|
||||
|
||||
CLEAR_FIELD(evalarg);
|
||||
evalarg.eval_flags = skip ? 0 : EVAL_EVALUATE;
|
||||
if (getline_equal(eap->getline, eap->cookie, getsourceline))
|
||||
{
|
||||
evalarg.eval_getline = eap->getline;
|
||||
evalarg.eval_cookie = eap->cookie;
|
||||
}
|
||||
|
||||
/*
|
||||
* ":for var in list-expr"
|
||||
@ -1115,11 +1128,14 @@ ex_while(exarg_T *eap)
|
||||
// previously evaluated list.
|
||||
fi = cstack->cs_forinfo[cstack->cs_idx];
|
||||
error = FALSE;
|
||||
|
||||
// the "in expr" is not used, skip over it
|
||||
skip_for_lines(fi, &evalarg);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Evaluate the argument and get the info in a structure.
|
||||
fi = eval_for_line(eap->arg, &error, &eap->nextcmd, skip);
|
||||
fi = eval_for_line(eap->arg, &error, eap, &evalarg);
|
||||
cstack->cs_forinfo[cstack->cs_idx] = fi;
|
||||
}
|
||||
|
||||
@ -1134,6 +1150,7 @@ ex_while(exarg_T *eap)
|
||||
free_for_info(fi);
|
||||
cstack->cs_forinfo[cstack->cs_idx] = NULL;
|
||||
}
|
||||
clear_evalarg(&evalarg, eap);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1169,7 +1186,7 @@ ex_continue(exarg_T *eap)
|
||||
cstack_T *cstack = eap->cstack;
|
||||
|
||||
if (cstack->cs_looplevel <= 0 || cstack->cs_idx < 0)
|
||||
eap->errmsg = N_(e_continue);
|
||||
eap->errmsg = _(e_continue);
|
||||
else
|
||||
{
|
||||
// Try to find the matching ":while". This might stop at a try
|
||||
@ -1207,7 +1224,7 @@ ex_break(exarg_T *eap)
|
||||
cstack_T *cstack = eap->cstack;
|
||||
|
||||
if (cstack->cs_looplevel <= 0 || cstack->cs_idx < 0)
|
||||
eap->errmsg = N_(e_break);
|
||||
eap->errmsg = _(e_break);
|
||||
else
|
||||
{
|
||||
// Inactivate conditionals until the matching ":while" or a try
|
||||
@ -1247,7 +1264,7 @@ ex_endwhile(exarg_T *eap)
|
||||
}
|
||||
|
||||
if (cstack->cs_looplevel <= 0 || cstack->cs_idx < 0)
|
||||
eap->errmsg = err;
|
||||
eap->errmsg = _(err);
|
||||
else
|
||||
{
|
||||
fl = cstack->cs_flags[cstack->cs_idx];
|
||||
@ -1263,9 +1280,9 @@ ex_endwhile(exarg_T *eap)
|
||||
if (!(fl & (CSF_WHILE | CSF_FOR)))
|
||||
{
|
||||
if (!(fl & CSF_TRY))
|
||||
eap->errmsg = e_endif;
|
||||
eap->errmsg = _(e_endif);
|
||||
else if (fl & CSF_FINALLY)
|
||||
eap->errmsg = e_endtry;
|
||||
eap->errmsg = _(e_endtry);
|
||||
// Try to find the matching ":while" and report what's missing.
|
||||
for (idx = cstack->cs_idx; idx > 0; --idx)
|
||||
{
|
||||
@ -1274,7 +1291,7 @@ ex_endwhile(exarg_T *eap)
|
||||
{
|
||||
// Give up at a try conditional not in its finally clause.
|
||||
// Ignore the ":endwhile"/":endfor".
|
||||
eap->errmsg = err;
|
||||
eap->errmsg = _(err);
|
||||
return;
|
||||
}
|
||||
if (fl & csf)
|
||||
@ -1319,7 +1336,7 @@ ex_throw(exarg_T *eap)
|
||||
char_u *value;
|
||||
|
||||
if (*arg != NUL && *arg != '|' && *arg != '\n')
|
||||
value = eval_to_string_skip(arg, &eap->nextcmd, eap->skip);
|
||||
value = eval_to_string_skip(arg, eap, eap->skip);
|
||||
else
|
||||
{
|
||||
emsg(_(e_argreq));
|
||||
@ -1430,7 +1447,7 @@ ex_try(exarg_T *eap)
|
||||
cstack_T *cstack = eap->cstack;
|
||||
|
||||
if (cstack->cs_idx == CSTACK_LEN - 1)
|
||||
eap->errmsg = N_("E601: :try nesting too deep");
|
||||
eap->errmsg = _("E601: :try nesting too deep");
|
||||
else
|
||||
{
|
||||
++cstack->cs_idx;
|
||||
@ -1509,7 +1526,7 @@ ex_catch(exarg_T *eap)
|
||||
|
||||
if (cstack->cs_trylevel <= 0 || cstack->cs_idx < 0)
|
||||
{
|
||||
eap->errmsg = e_catch;
|
||||
eap->errmsg = _(e_catch);
|
||||
give_up = TRUE;
|
||||
}
|
||||
else
|
||||
@ -1528,7 +1545,7 @@ ex_catch(exarg_T *eap)
|
||||
{
|
||||
// Give up for a ":catch" after ":finally" and ignore it.
|
||||
// Just parse.
|
||||
eap->errmsg = N_("E604: :catch after :finally");
|
||||
eap->errmsg = _("E604: :catch after :finally");
|
||||
give_up = TRUE;
|
||||
}
|
||||
else
|
||||
@ -1571,7 +1588,7 @@ ex_catch(exarg_T *eap)
|
||||
if (end != NULL && *end != NUL
|
||||
&& !ends_excmd2(end, skipwhite(end + 1)))
|
||||
{
|
||||
emsg(_(e_trailing));
|
||||
semsg(_(e_trailing_arg), end);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1668,7 +1685,7 @@ ex_finally(exarg_T *eap)
|
||||
cstack_T *cstack = eap->cstack;
|
||||
|
||||
if (cstack->cs_trylevel <= 0 || cstack->cs_idx < 0)
|
||||
eap->errmsg = e_finally;
|
||||
eap->errmsg = _(e_finally);
|
||||
else
|
||||
{
|
||||
if (!(cstack->cs_flags[cstack->cs_idx] & CSF_TRY))
|
||||
@ -1688,7 +1705,7 @@ ex_finally(exarg_T *eap)
|
||||
if (cstack->cs_flags[idx] & CSF_FINALLY)
|
||||
{
|
||||
// Give up for a multiple ":finally" and ignore it.
|
||||
eap->errmsg = e_finally_dup;
|
||||
eap->errmsg = _(e_finally_dup);
|
||||
return;
|
||||
}
|
||||
rewind_conditionals(cstack, idx, CSF_WHILE | CSF_FOR,
|
||||
@ -1797,7 +1814,7 @@ ex_endtry(exarg_T *eap)
|
||||
cstack_T *cstack = eap->cstack;
|
||||
|
||||
if (cstack->cs_trylevel <= 0 || cstack->cs_idx < 0)
|
||||
eap->errmsg = e_no_endtry;
|
||||
eap->errmsg = _(e_no_endtry);
|
||||
else
|
||||
{
|
||||
/*
|
||||
@ -2259,10 +2276,10 @@ cleanup_conditionals(
|
||||
get_end_emsg(cstack_T *cstack)
|
||||
{
|
||||
if (cstack->cs_flags[cstack->cs_idx] & CSF_WHILE)
|
||||
return e_endwhile;
|
||||
return _(e_endwhile);
|
||||
if (cstack->cs_flags[cstack->cs_idx] & CSF_FOR)
|
||||
return e_endfor;
|
||||
return e_endif;
|
||||
return _(e_endfor);
|
||||
return _(e_endif);
|
||||
}
|
||||
|
||||
|
||||
|
16
src/fileio.c
16
src/fileio.c
@ -13,7 +13,7 @@
|
||||
|
||||
#include "vim.h"
|
||||
|
||||
#if defined(__TANDEM) || defined(__MINT__)
|
||||
#if defined(__TANDEM)
|
||||
# include <limits.h> // for SSIZE_MAX
|
||||
#endif
|
||||
#if defined(UNIX) && defined(FEAT_EVAL)
|
||||
@ -52,10 +52,14 @@ filemess(
|
||||
if (msg_silent != 0)
|
||||
return;
|
||||
msg_add_fname(buf, name); // put file name in IObuff with quotes
|
||||
|
||||
// If it's extremely long, truncate it.
|
||||
if (STRLEN(IObuff) > IOSIZE - 80)
|
||||
IObuff[IOSIZE - 80] = NUL;
|
||||
STRCAT(IObuff, s);
|
||||
if (STRLEN(IObuff) > IOSIZE - 100)
|
||||
IObuff[IOSIZE - 100] = NUL;
|
||||
|
||||
// Avoid an over-long translation to cause trouble.
|
||||
STRNCAT(IObuff, s, 99);
|
||||
|
||||
/*
|
||||
* For the first message may have to start a new line.
|
||||
* For further ones overwrite the previous one, reset msg_scroll before
|
||||
@ -3035,13 +3039,13 @@ msg_add_lines(
|
||||
*p++ = ' ';
|
||||
if (shortmess(SHM_LINES))
|
||||
vim_snprintf((char *)p, IOSIZE - (p - IObuff),
|
||||
"%ldL, %lldC", lnum, (varnumber_T)nchars);
|
||||
"%ldL, %lldB", lnum, (varnumber_T)nchars);
|
||||
else
|
||||
{
|
||||
sprintf((char *)p, NGETTEXT("%ld line, ", "%ld lines, ", lnum), lnum);
|
||||
p += STRLEN(p);
|
||||
vim_snprintf((char *)p, IOSIZE - (p - IObuff),
|
||||
NGETTEXT("%lld character", "%lld characters", nchars),
|
||||
NGETTEXT("%lld byte", "%lld bytes", nchars),
|
||||
(varnumber_T)nchars);
|
||||
}
|
||||
}
|
||||
|
@ -3083,7 +3083,7 @@ expand_backtick(
|
||||
|
||||
#ifdef FEAT_EVAL
|
||||
if (*cmd == '=') // `={expr}`: Expand expression
|
||||
buffer = eval_to_string(cmd + 1, &p, TRUE);
|
||||
buffer = eval_to_string(cmd + 1, TRUE);
|
||||
else
|
||||
#endif
|
||||
buffer = get_cmd_output(cmd, NULL,
|
||||
@ -3813,8 +3813,13 @@ gen_expand_wildcards(
|
||||
vim_free(p);
|
||||
}
|
||||
|
||||
// When returning FAIL the array must be freed here.
|
||||
if (retval == FAIL)
|
||||
ga_clear(&ga);
|
||||
|
||||
*num_file = ga.ga_len;
|
||||
*file = (ga.ga_data != NULL) ? (char_u **)ga.ga_data : (char_u **)"";
|
||||
*file = (ga.ga_data != NULL) ? (char_u **)ga.ga_data
|
||||
: (char_u **)_("no matches");
|
||||
|
||||
recursive = FALSE;
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user