Compare commits
225 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7676c15879 | ||
|
|
02a977ea5e | ||
|
|
5658ca343f | ||
|
|
a8ec4916ca | ||
|
|
5411910c77 | ||
|
|
6e1d31e9e3 | ||
|
|
2d3ac2e030 | ||
|
|
381692b6f1 | ||
|
|
a1c5195180 | ||
|
|
ab8f7c50cf | ||
|
|
73257149d7 | ||
|
|
adbb1bf21d | ||
|
|
9b4a80a665 | ||
|
|
eb4a9ba293 | ||
|
|
8133018f50 | ||
|
|
4e3b318230 | ||
|
|
68854a82fd | ||
|
|
9e0208f51c | ||
|
|
223a950a85 | ||
|
|
c570e9cf68 | ||
|
|
c4573eb12d | ||
|
|
424bcae1fb | ||
|
|
eb6c276595 | ||
|
|
1f47a287ee | ||
|
|
672776dbe8 | ||
|
|
48a604845e | ||
|
|
44d1f89c24 | ||
|
|
4c93aff20f | ||
|
|
5703310e64 | ||
|
|
6a05807092 | ||
|
|
d8fe6d34bb | ||
|
|
ec3637cbaf | ||
|
|
44a4d947bb | ||
|
|
679d66c2d2 | ||
|
|
848faddb87 | ||
|
|
06011e1a55 | ||
|
|
6970e1e36a | ||
|
|
f10911e5db | ||
|
|
62aec93bfd | ||
|
|
135e15251e | ||
|
|
d5cec1f1f0 | ||
|
|
f12b7815f6 | ||
|
|
37f47958b8 | ||
|
|
4dc0dd8699 | ||
|
|
97c554d514 | ||
|
|
24714a1916 | ||
|
|
585ee07cfe | ||
|
|
a0c4e2f2d7 | ||
|
|
06f15416bb | ||
|
|
e96eea7b6a | ||
|
|
652dee4486 | ||
|
|
14cbf77845 | ||
|
|
57ff2b7068 | ||
|
|
fb55207ed1 | ||
|
|
420fabcd4f | ||
|
|
fb80862e49 | ||
|
|
ddd815ba2a | ||
|
|
bd8168c770 | ||
|
|
fbf4f1ca15 | ||
|
|
166788c657 | ||
|
|
37cf413e3e | ||
|
|
b3d83980d2 | ||
|
|
a4bc2dd7cc | ||
|
|
98cd30383a | ||
|
|
35c807df1f | ||
|
|
94373c48e7 | ||
|
|
745b938a48 | ||
|
|
b0ad2d92fd | ||
|
|
e939f5ebba | ||
|
|
fc4c44836a | ||
|
|
70c43d84be | ||
|
|
1080c48ec8 | ||
|
|
1a804528ab | ||
|
|
47d1666d60 | ||
|
|
a827bf3ea8 | ||
|
|
250155ae31 | ||
|
|
44db8213d3 | ||
|
|
806d037671 | ||
|
|
8d02ce1ed7 | ||
|
|
06b77229ca | ||
|
|
dc5490e2cb | ||
|
|
85b6747abc | ||
|
|
76687d2717 | ||
|
|
1450112eef | ||
|
|
3a8ad5918b | ||
|
|
a6c09a7c20 | ||
|
|
3e93a2b075 | ||
|
|
dff97e65eb | ||
|
|
50e0525445 | ||
|
|
fe6fb267e6 | ||
|
|
4663435074 | ||
|
|
7924a17791 | ||
|
|
502d8ae3e8 | ||
|
|
acc4b5648b | ||
|
|
8e4af851fd | ||
|
|
7e765a39b7 | ||
|
|
c351dc1e0c | ||
|
|
058ee7c569 | ||
|
|
2a7aa83458 | ||
|
|
428058ab32 | ||
|
|
79a6e25b79 | ||
|
|
abe628e1bd | ||
|
|
f4e88f2152 | ||
|
|
7ef4a2fe37 | ||
|
|
e15ebeffb3 | ||
|
|
206919191f | ||
|
|
d1c58999c8 | ||
|
|
6f4754b9f7 | ||
|
|
bcfa11b7df | ||
|
|
ff5cbe8133 | ||
|
|
36c2add7f8 | ||
|
|
28e60cc088 | ||
|
|
47bcc5f4c8 | ||
|
|
3ba685eeef | ||
|
|
39b8944539 | ||
|
|
7b29f6a394 | ||
|
|
5600a709f4 | ||
|
|
9530b580a7 | ||
|
|
0bfa84916d | ||
|
|
b697dc295d | ||
|
|
3d8e25a6d2 | ||
|
|
0bd663a380 | ||
|
|
19e69a6330 | ||
|
|
e70dd11ef4 | ||
|
|
6517f14165 | ||
|
|
f0e7e6365e | ||
|
|
b7057bdd09 | ||
|
|
45f9cfbdc7 | ||
|
|
e6a4200ff4 | ||
|
|
dd5893be34 | ||
|
|
e615db0604 | ||
|
|
05386ca1d4 | ||
|
|
6f0ddbf00d | ||
|
|
2017d6f3b1 | ||
|
|
9c7cae66bc | ||
|
|
21f0d6cbca | ||
|
|
4ede01f188 | ||
|
|
92000e2e71 | ||
|
|
14b8d6ac6b | ||
|
|
ae1bd87fe8 | ||
|
|
726f7f91fd | ||
|
|
7e93577a95 | ||
|
|
05b2761548 | ||
|
|
4ac893f321 | ||
|
|
fc6ccebea6 | ||
|
|
57df9e8a9f | ||
|
|
8aa0e6c60d | ||
|
|
ca34db3bde | ||
|
|
f61c89d2e6 | ||
|
|
bed34f0a8a | ||
|
|
f67c717e34 | ||
|
|
937610bc9f | ||
|
|
1a8825d7a3 | ||
|
|
b0b2b73dca | ||
|
|
b4868eddd9 | ||
|
|
17dd519633 | ||
|
|
a9528b39a6 | ||
|
|
94075b2b0e | ||
|
|
ef7aadbe36 | ||
|
|
d02dce2bb5 | ||
|
|
fd218c8a36 | ||
|
|
6079da7cfb | ||
|
|
113b8dc111 | ||
|
|
840f16202e | ||
|
|
1836d61578 | ||
|
|
cbbc48f64b | ||
|
|
31dcc8de46 | ||
|
|
1247126956 | ||
|
|
64283d5e1f | ||
|
|
78f60322f7 | ||
|
|
afa76e1cf2 | ||
|
|
b3d9ceed2b | ||
|
|
6389baa669 | ||
|
|
15d1635e50 | ||
|
|
3f3597be3f | ||
|
|
262898ae43 | ||
|
|
9f8c304c8a | ||
|
|
e8741a73e2 | ||
|
|
0023f82a76 | ||
|
|
47036b6bd7 | ||
|
|
c73499351a | ||
|
|
c665dabdf4 | ||
|
|
c84287d6d8 | ||
|
|
dc98776f89 | ||
|
|
d9b74a2a41 | ||
|
|
d648c01f2f | ||
|
|
8f9956994d | ||
|
|
fd31be29b8 | ||
|
|
c81e9bf4f0 | ||
|
|
f6ebc82004 | ||
|
|
a9725221ac | ||
|
|
fa1a457059 | ||
|
|
b5988e3656 | ||
|
|
bfac409d0b | ||
|
|
38ecd97226 | ||
|
|
857c8bb1bb | ||
|
|
d4e2f50901 | ||
|
|
04b871da80 | ||
|
|
e32c3c462c | ||
|
|
069613c9e8 | ||
|
|
f60a63485e | ||
|
|
1050476ead | ||
|
|
e3ce17a3ca | ||
|
|
e1833bfd01 | ||
|
|
c53b467473 | ||
|
|
ece07639f4 | ||
|
|
0f112052ac | ||
|
|
26ebf1f036 | ||
|
|
7bfa6d698e | ||
|
|
c0a1d370fa | ||
|
|
3e4fa3d7d3 | ||
|
|
d9d2fd0aa3 | ||
|
|
c43e6235c7 | ||
|
|
130f65d46b | ||
|
|
0e3e7ba05f | ||
|
|
3049fcf0a1 | ||
|
|
4050305bfd | ||
|
|
a00e622a29 | ||
|
|
33b25d1317 | ||
|
|
ced2b38a56 | ||
|
|
8d9e470aa9 | ||
|
|
71930f174d | ||
|
|
78a70533c3 | ||
|
|
de05bb2573 | ||
|
|
54598066ca |
6
.github/CODEOWNERS
vendored
6
.github/CODEOWNERS
vendored
@@ -9,6 +9,7 @@
|
||||
# So if a pull request only touches javascript files, only these owners
|
||||
# will be requested to review.
|
||||
|
||||
runtime/autoload/freebasic.vim @dkearns
|
||||
runtime/autoload/getscript.vim @cecamp
|
||||
runtime/autoload/netrw.vim @cecamp
|
||||
runtime/autoload/netrwFileHandlers.vim @cecamp
|
||||
@@ -111,6 +112,7 @@ runtime/ftplugin/pbtxt.vim @lakshayg
|
||||
runtime/ftplugin/pdf.vim @tpope
|
||||
runtime/ftplugin/ps1.vim @heaths
|
||||
runtime/ftplugin/ps1xml.vim @heaths
|
||||
runtime/ftplugin/qb64.vim @dkearns
|
||||
runtime/ftplugin/routeros.vim @zainin
|
||||
runtime/ftplugin/ruby.vim @tpope @dkearns
|
||||
runtime/ftplugin/sass.vim @tpope
|
||||
@@ -126,6 +128,7 @@ runtime/ftplugin/typescript.vim @dkearns
|
||||
runtime/ftplugin/typescriptreact.vim @dkearns
|
||||
runtime/ftplugin/xml.vim @chrisbra
|
||||
runtime/ftplugin/zsh.vim @chrisbra
|
||||
runtime/indent/basic.vim @dkearns
|
||||
runtime/indent/bst.vim @tpope
|
||||
runtime/indent/cdl.vim @dkearns
|
||||
runtime/indent/clojure.vim @axvr
|
||||
@@ -140,6 +143,7 @@ runtime/indent/elm.vim @andys8
|
||||
runtime/indent/eruby.vim @tpope @dkearns
|
||||
runtime/indent/eterm.vim @dkearns
|
||||
runtime/indent/framescript.vim @dkearns
|
||||
runtime/indent/freebasic.vim @dkearns
|
||||
runtime/indent/gitconfig.vim @tpope
|
||||
runtime/indent/haml.vim @tpope
|
||||
runtime/indent/idlang.vim @dkearns
|
||||
@@ -154,6 +158,7 @@ runtime/indent/occam.vim @dkearns
|
||||
runtime/indent/postscr.vim @dkearns
|
||||
runtime/indent/prolog.vim @dkearns
|
||||
runtime/indent/ps1.vim @heaths
|
||||
runtime/indent/qb64.vim @dkearns
|
||||
runtime/indent/readline.vim @dkearns
|
||||
runtime/indent/ruby.vim @AndrewRadev @dkearns
|
||||
runtime/indent/sass.vim @tpope
|
||||
@@ -239,6 +244,7 @@ runtime/syntax/prolog.vim @XVilka
|
||||
runtime/syntax/ps1.vim @heaths
|
||||
runtime/syntax/ps1xml.vim @heaths
|
||||
runtime/syntax/psl.vim @danielkho
|
||||
runtime/syntax/qb64.vim @dkearns
|
||||
runtime/syntax/rc.vim @chrisbra
|
||||
runtime/syntax/routeros.vim @zainin
|
||||
runtime/syntax/rpcgen.vim @cecamp
|
||||
|
||||
48
.github/workflows/ci.yml
vendored
48
.github/workflows/ci.yml
vendored
@@ -64,23 +64,29 @@ jobs:
|
||||
|
||||
- name: Install packages
|
||||
run: |
|
||||
sudo apt update && sudo apt install -y \
|
||||
autoconf \
|
||||
lcov \
|
||||
PKGS=( \
|
||||
gettext \
|
||||
libcanberra-dev \
|
||||
libperl-dev \
|
||||
python-dev \
|
||||
python3-dev \
|
||||
liblua5.3-dev \
|
||||
lua5.3 \
|
||||
ruby-dev \
|
||||
tcl-dev \
|
||||
cscope \
|
||||
libgtk2.0-dev \
|
||||
desktop-file-utils \
|
||||
libtool-bin \
|
||||
libsodium-dev
|
||||
)
|
||||
if ${{ matrix.features == 'huge' }}; then
|
||||
PKGS+=( \
|
||||
autoconf \
|
||||
lcov \
|
||||
libcanberra-dev \
|
||||
libperl-dev \
|
||||
python-dev \
|
||||
python3-dev \
|
||||
liblua5.3-dev \
|
||||
lua5.3 \
|
||||
ruby-dev \
|
||||
tcl-dev \
|
||||
cscope \
|
||||
libsodium-dev \
|
||||
)
|
||||
fi
|
||||
sudo apt update && sudo apt install -y "${PKGS[@]}"
|
||||
|
||||
- name: Install clang-13
|
||||
if: matrix.compiler == 'clang'
|
||||
@@ -283,6 +289,7 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Install packages
|
||||
if: matrix.features == 'huge'
|
||||
env:
|
||||
HOMEBREW_NO_AUTO_UPDATE: 1
|
||||
run: |
|
||||
@@ -465,17 +472,15 @@ jobs:
|
||||
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 ^
|
||||
nmake -nologo -f Make_mvc.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 ^
|
||||
nmake -nologo -f Make_mvc.mak ^
|
||||
FEATURES=${{ matrix.features }} ^
|
||||
GUI=yes IME=yes ICONV=yes VIMDLL=yes
|
||||
)
|
||||
@@ -525,16 +530,18 @@ jobs:
|
||||
call "%VCVARSALL%" ${{ matrix.vcarch }}
|
||||
cd src
|
||||
echo.
|
||||
echo %COL_GREEN%vim version:%COL_RESET%
|
||||
echo ::group::%COL_GREEN%Vim version:%COL_RESET%
|
||||
.\vim --version || exit 1
|
||||
echo ::endgroup::
|
||||
|
||||
echo %COL_GREEN%Start testing vim in background.%COL_RESET%
|
||||
start cmd /c "cd ..\src2\testdir & nmake -nologo -f Make_dos.mak VIMPROG=..\..\src\vim > nul & echo done>done.txt"
|
||||
|
||||
echo %COL_GREEN%Test gvim:%COL_RESET%
|
||||
echo ::group::%COL_GREEN%Test gvim:%COL_RESET%
|
||||
cd testdir
|
||||
nmake -nologo -f Make_dos.mak VIMPROG=..\gvim || exit 1
|
||||
cd ..
|
||||
echo ::endgroup::
|
||||
|
||||
echo %COL_GREEN%Wait for vim tests to finish.%COL_RESET%
|
||||
cd ..\src2\testdir
|
||||
@@ -547,10 +554,11 @@ jobs:
|
||||
set timeout=1
|
||||
:exitloop
|
||||
|
||||
echo %COL_GREEN%Test results of vim:%COL_RESET%
|
||||
echo ::group::%COL_GREEN%Test results of vim:%COL_RESET%
|
||||
if exist messages type messages
|
||||
nmake -nologo -f Make_dos.mak report VIMPROG=..\..\src\vim || exit 1
|
||||
if "%timeout%"=="1" (
|
||||
echo %COL_RED%Timed out.%COL_RESET%
|
||||
exit 1
|
||||
)
|
||||
echo ::endgroup::
|
||||
|
||||
13
Filelist
13
Filelist
@@ -113,6 +113,8 @@ SRC_ALL = \
|
||||
src/nbdebug.h \
|
||||
src/netbeans.c \
|
||||
src/normal.c \
|
||||
src/nv_cmdidxs.h \
|
||||
src/nv_cmds.h \
|
||||
src/ops.c \
|
||||
src/option.c \
|
||||
src/option.h \
|
||||
@@ -443,6 +445,8 @@ SRC_UNIX = \
|
||||
src/configure \
|
||||
src/configure.ac \
|
||||
src/create_cmdidxs.vim \
|
||||
src/create_nvcmdidxs.c \
|
||||
src/create_nvcmdidxs.vim \
|
||||
src/gui_at_fs.c \
|
||||
src/gui_at_sb.c \
|
||||
src/gui_at_sb.h \
|
||||
@@ -497,7 +501,6 @@ SRC_UNIX = \
|
||||
SRC_DOS_UNIX = \
|
||||
src/gui_xim.c \
|
||||
src/if_cscope.c \
|
||||
src/if_cscope.h \
|
||||
src/if_lua.c \
|
||||
src/if_mzsch.c \
|
||||
src/if_mzsch.h \
|
||||
@@ -544,18 +547,14 @@ SRC_DOS = \
|
||||
tools/rename.bat \
|
||||
src/bigvim.bat \
|
||||
src/bigvim64.bat \
|
||||
src/msvcsetup.bat \
|
||||
src/msvc2008.bat \
|
||||
src/msvc2010.bat \
|
||||
src/msvc2015.bat \
|
||||
src/msys32.bat \
|
||||
src/msys64.bat \
|
||||
src/dimm.idl \
|
||||
src/dlldata.c \
|
||||
src/dosinst.c \
|
||||
src/dosinst.h \
|
||||
src/glbl_ime.cpp \
|
||||
src/glbl_ime.h \
|
||||
src/gui_dwrite.cpp \
|
||||
src/gui_dwrite.h \
|
||||
src/gui_w32.c \
|
||||
@@ -664,10 +663,7 @@ SRC_HAIKU = \
|
||||
# source files for the Mac (also in the extra archive)
|
||||
SRC_MAC = \
|
||||
src/INSTALLmac.txt \
|
||||
src/dehqx.py \
|
||||
src/os_mac_rsrc/*.icns \
|
||||
src/os_mac.h \
|
||||
src/os_mac.rsr.hqx \
|
||||
src/os_mac_conv.c \
|
||||
src/os_macosx.m \
|
||||
src/proto/os_mac_conv.pro \
|
||||
@@ -705,7 +701,6 @@ SRC_EXTRA = \
|
||||
$(SRC_QNX) \
|
||||
$(SRC_VMS) \
|
||||
README_os390.txt \
|
||||
src/infplist.xml \
|
||||
src/link.390 \
|
||||
src/os_vms_fix.com \
|
||||
src/toolbar.phi \
|
||||
|
||||
@@ -5,11 +5,9 @@ setlocal ENABLEDELAYEDEXPANSION
|
||||
cd %APPVEYOR_BUILD_FOLDER%
|
||||
|
||||
cd src
|
||||
:: 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 ^
|
||||
nmake -f Make_mvc.mak CPU=AMD64 ^
|
||||
OLE=no GUI=no IME=yes ICONV=yes DEBUG=no ^
|
||||
FEATURES=%FEATURE%
|
||||
if not exist vim.exe (
|
||||
@@ -21,13 +19,13 @@ if not exist vim.exe (
|
||||
:: GUI needs to be last, so that testing works
|
||||
echo "Building MSVC 64bit GUI Version"
|
||||
if "%FEATURE%" == "HUGE" (
|
||||
nmake -f Make_mvc2.mak CPU=AMD64 ^
|
||||
nmake -f Make_mvc.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%
|
||||
) ELSE (
|
||||
nmake -f Make_mvc2.mak CPU=AMD64 ^
|
||||
nmake -f Make_mvc.mak CPU=AMD64 ^
|
||||
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no ^
|
||||
FEATURES=%FEATURE%
|
||||
)
|
||||
|
||||
@@ -4,13 +4,13 @@ vim9script noclear
|
||||
# Language: C
|
||||
# Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
# Rewritten in Vim9 script by github user lacygoill
|
||||
# Last Change: 2021 Dec 27
|
||||
# Last Change: 2022 Jan 31
|
||||
|
||||
var prepended: string
|
||||
var grepCache: dict<list<dict<any>>>
|
||||
|
||||
# This function is used for the 'omnifunc' option.
|
||||
def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
|
||||
export def Complete(findstart: bool, abase: string): any # {{{1
|
||||
if findstart
|
||||
# Locate the start of the item, including ".", "->" and "[...]".
|
||||
var line: string = getline('.')
|
||||
@@ -202,7 +202,7 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
|
||||
|| !v['static']
|
||||
|| bufnr('%') == bufnr(v['filename']))
|
||||
|
||||
res = extendnew(res, tags->map((_, v: dict<any>) => Tag2item(v)))
|
||||
res = res->extend(tags->map((_, v: dict<any>) => Tag2item(v)))
|
||||
endif
|
||||
|
||||
if len(res) == 0
|
||||
@@ -216,9 +216,9 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
|
||||
for i: number in len(diclist)->range()
|
||||
# New ctags has the "typeref" field. Patched version has "typename".
|
||||
if diclist[i]->has_key('typename')
|
||||
res = extendnew(res, diclist[i]['typename']->StructMembers(items[1 :], true))
|
||||
res = res->extend(diclist[i]['typename']->StructMembers(items[1 :], true))
|
||||
elseif diclist[i]->has_key('typeref')
|
||||
res = extendnew(res, diclist[i]['typeref']->StructMembers(items[1 :], true))
|
||||
res = res->extend(diclist[i]['typeref']->StructMembers(items[1 :], true))
|
||||
endif
|
||||
|
||||
# For a variable use the command, which must be a search pattern that
|
||||
@@ -227,7 +227,7 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
|
||||
var line: string = diclist[i]['cmd']
|
||||
if line[: 1] == '/^'
|
||||
var col: number = line->charidx(match(line, '\<' .. items[0] .. '\>'))
|
||||
res = extendnew(res, line[2 : col - 1]->Nextitem(items[1 :], 0, true))
|
||||
res = res->extend(line[2 : col - 1]->Nextitem(items[1 :], 0, true))
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
@@ -256,11 +256,10 @@ def ccomplete#Complete(findstart: bool, abase: string): any # {{{1
|
||||
enddef
|
||||
|
||||
def GetAddition( # {{{1
|
||||
line: string,
|
||||
match: string,
|
||||
memarg: list<dict<any>>,
|
||||
bracket: bool
|
||||
): string
|
||||
line: string,
|
||||
match: string,
|
||||
memarg: list<dict<any>>,
|
||||
bracket: bool): string
|
||||
# Guess if the item is an array.
|
||||
if bracket && match(line, match .. '\s*\[') > 0
|
||||
return '['
|
||||
@@ -403,10 +402,9 @@ def Tagline2item(val: dict<any>, brackets: string): dict<string> # {{{1
|
||||
enddef
|
||||
|
||||
def Tagcmd2extra( # {{{1
|
||||
cmd: string,
|
||||
name: string,
|
||||
fname: string
|
||||
): string
|
||||
cmd: string,
|
||||
name: string,
|
||||
fname: string): string
|
||||
# Turn a command from a tag line to something that is useful in the menu
|
||||
var x: string
|
||||
if cmd =~ '^/^'
|
||||
@@ -427,11 +425,10 @@ def Tagcmd2extra( # {{{1
|
||||
enddef
|
||||
|
||||
def Nextitem( # {{{1
|
||||
lead: string,
|
||||
items: list<string>,
|
||||
depth: number,
|
||||
all: bool
|
||||
): list<dict<string>>
|
||||
lead: string,
|
||||
items: list<string>,
|
||||
depth: number,
|
||||
all: bool): list<dict<string>>
|
||||
# Find composing type in "lead" and match items[0] with it.
|
||||
# Repeat this recursively for items[1], if it's there.
|
||||
# When resolving typedefs "depth" is used to avoid infinite recursion.
|
||||
@@ -473,11 +470,11 @@ def Nextitem( # {{{1
|
||||
|
||||
# New ctags has the "typeref" field. Patched version has "typename".
|
||||
if item->has_key('typeref')
|
||||
res = extendnew(res, item['typeref']->StructMembers(items, all))
|
||||
res = res->extend(item['typeref']->StructMembers(items, all))
|
||||
continue
|
||||
endif
|
||||
if item->has_key('typename')
|
||||
res = extendnew(res, item['typename']->StructMembers(items, all))
|
||||
res = res->extend(item['typename']->StructMembers(items, all))
|
||||
continue
|
||||
endif
|
||||
|
||||
@@ -511,11 +508,11 @@ def Nextitem( # {{{1
|
||||
endif
|
||||
endfor
|
||||
if name != ''
|
||||
res = extendnew(res, StructMembers(cmdtokens[0] .. ':' .. name, items, all))
|
||||
res = res->extend(StructMembers(cmdtokens[0] .. ':' .. name, items, all))
|
||||
endif
|
||||
elseif depth < 10
|
||||
# Could be "typedef other_T some_T".
|
||||
res = extendnew(res, cmdtokens[0]->Nextitem(items, depth + 1, all))
|
||||
res = res->extend(cmdtokens[0]->Nextitem(items, depth + 1, all))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@@ -529,10 +526,9 @@ def Nextitem( # {{{1
|
||||
enddef
|
||||
|
||||
def StructMembers( # {{{1
|
||||
atypename: string,
|
||||
items: list<string>,
|
||||
all: bool
|
||||
): list<dict<string>>
|
||||
atypename: string,
|
||||
items: list<string>,
|
||||
all: bool): list<dict<string>>
|
||||
|
||||
# Search for members of structure "typename" in tags files.
|
||||
# Return a list with resulting matches.
|
||||
@@ -641,10 +637,9 @@ def StructMembers( # {{{1
|
||||
enddef
|
||||
|
||||
def SearchMembers( # {{{1
|
||||
matches: list<dict<any>>,
|
||||
items: list<string>,
|
||||
all: bool
|
||||
): list<dict<string>>
|
||||
matches: list<dict<any>>,
|
||||
items: list<string>,
|
||||
all: bool): list<dict<string>>
|
||||
|
||||
# For matching members, find matches for following items.
|
||||
# When "all" is true find all, otherwise just return 1 if there is any member.
|
||||
@@ -674,7 +669,7 @@ def SearchMembers( # {{{1
|
||||
endif
|
||||
|
||||
if typename != ''
|
||||
res = extendnew(res, StructMembers(typename, items, all))
|
||||
res = res->extend(StructMembers(typename, items, all))
|
||||
else
|
||||
# Use the search command (the declaration itself).
|
||||
var sb: number = line->match('\t\zs/^')
|
||||
@@ -683,7 +678,7 @@ def SearchMembers( # {{{1
|
||||
var e: number = line
|
||||
->charidx(match(line, '\<' .. matches[i]['match'] .. '\>', sb))
|
||||
if e > 0
|
||||
res = extendnew(res, line[s : e - 1]->Nextitem(items, 0, all))
|
||||
res = res->extend(line[s : e - 1]->Nextitem(items, 0, all))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
61
runtime/autoload/dist/ft.vim
vendored
61
runtime/autoload/dist/ft.vim
vendored
@@ -1,7 +1,7 @@
|
||||
" Vim functions for file type detection
|
||||
"
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2021 Dec 17
|
||||
" Last Change: 2022 Jan 31
|
||||
|
||||
" These functions are moved here from runtime/filetype.vim to make startup
|
||||
" faster.
|
||||
@@ -67,13 +67,32 @@ func dist#ft#FTasmsyntax()
|
||||
endif
|
||||
endfunc
|
||||
|
||||
" Check if one of the first five lines contains "VB_Name". In that case it is
|
||||
" probably a Visual Basic file. Otherwise it's assumed to be "alt" filetype.
|
||||
func dist#ft#FTVB(alt)
|
||||
if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
|
||||
let s:ft_visual_basic_content = '\cVB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
|
||||
|
||||
" See FTfrm() for Visual Basic form file detection
|
||||
func dist#ft#FTbas()
|
||||
if exists("g:filetype_bas")
|
||||
exe "setf " . g:filetype_bas
|
||||
return
|
||||
endif
|
||||
|
||||
" most frequent FreeBASIC-specific keywords in distro files
|
||||
let fb_keywords = '\c^\s*\%(extern\|var\|enum\|private\|scope\|union\|byref\|operator\|constructor\|delete\|namespace\|public\|property\|with\|destructor\|using\)\>\%(\s*[:=(]\)\@!'
|
||||
let fb_preproc = '\c^\s*\%(#\a\+\|option\s\+\%(byval\|dynamic\|escape\|\%(no\)\=gosub\|nokeyword\|private\|static\)\>\)'
|
||||
let fb_comment = "^\\s*/'"
|
||||
" OPTION EXPLICIT, without the leading underscore, is common to many dialects
|
||||
let qb64_preproc = '\c^\s*\%($\a\+\|option\s\+\%(_explicit\|_\=explicitarray\)\>\)'
|
||||
|
||||
let lines = getline(1, min([line("$"), 100]))
|
||||
|
||||
if match(lines, fb_preproc) > -1 || match(lines, fb_comment) > -1 || match(lines, fb_keywords) > -1
|
||||
setf freebasic
|
||||
elseif match(lines, qb64_preproc) > -1
|
||||
setf qb64
|
||||
elseif match(lines, s:ft_visual_basic_content) > -1
|
||||
setf vb
|
||||
else
|
||||
exe "setf " . a:alt
|
||||
setf basic
|
||||
endif
|
||||
endfunc
|
||||
|
||||
@@ -219,6 +238,21 @@ func dist#ft#FTe()
|
||||
endif
|
||||
endfunc
|
||||
|
||||
func dist#ft#FTfrm()
|
||||
if exists("g:filetype_frm")
|
||||
exe "setf " . g:filetype_frm
|
||||
return
|
||||
endif
|
||||
|
||||
let lines = getline(1, min([line("$"), 5]))
|
||||
|
||||
if match(lines, s:ft_visual_basic_content) > -1
|
||||
setf vb
|
||||
else
|
||||
setf form
|
||||
endif
|
||||
endfunc
|
||||
|
||||
" Distinguish between Forth and F#.
|
||||
" Provided by Doug Kearns.
|
||||
func dist#ft#FTfs()
|
||||
@@ -846,6 +880,21 @@ func dist#ft#FTfoam()
|
||||
endwhile
|
||||
endfunc
|
||||
|
||||
" Determine if a *.tf file is TF mud client or terraform
|
||||
func dist#ft#FTtf()
|
||||
let numberOfLines = line('$')
|
||||
for i in range(1, numberOfLines)
|
||||
let currentLine = trim(getline(i))
|
||||
let firstCharacter = currentLine[0]
|
||||
if firstCharacter !=? ";" && firstCharacter !=? "/" && firstCharacter !=? ""
|
||||
setf terraform
|
||||
return
|
||||
endif
|
||||
endfor
|
||||
setf tf
|
||||
endfunc
|
||||
|
||||
|
||||
" Restore 'cpoptions'
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
41
runtime/autoload/freebasic.vim
Normal file
41
runtime/autoload/freebasic.vim
Normal file
@@ -0,0 +1,41 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: FreeBASIC
|
||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||
" Last Change: 2021 Mar 16
|
||||
|
||||
" Dialects can be one of fb, qb, fblite, or deprecated
|
||||
" Precedence is forcelang > #lang > lang
|
||||
function! freebasic#GetDialect() abort
|
||||
if exists("g:freebasic_forcelang")
|
||||
return g:freebasic_forcelang
|
||||
endif
|
||||
|
||||
if exists("g:freebasic_lang")
|
||||
let dialect = g:freebasic_lang
|
||||
else
|
||||
let dialect = "fb"
|
||||
endif
|
||||
|
||||
" override with #lang directive or metacommand
|
||||
|
||||
let skip = "has('syntax_items') && synIDattr(synID(line('.'), col('.'), 1), 'name') =~ 'Comment$'"
|
||||
let pat = '\c^\s*\%(#\s*lang\s\+\|''\s*$lang\s*:\s*\)"\([^"]*\)"'
|
||||
|
||||
let save_cursor = getcurpos()
|
||||
call cursor(1, 1)
|
||||
let lnum = search(pat, 'n', '', '', skip)
|
||||
call setpos('.', save_cursor)
|
||||
|
||||
if lnum
|
||||
let word = matchlist(getline(lnum), pat)[1]
|
||||
if word =~? '\%(fb\|deprecated\|fblite\|qb\)'
|
||||
let dialect = word
|
||||
else
|
||||
echomsg "freebasic#GetDialect: Invalid lang, found '" .. word .. "' at line " .. lnum .. " " .. getline(lnum)
|
||||
endif
|
||||
endif
|
||||
|
||||
return dialect
|
||||
endfunction
|
||||
|
||||
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|
||||
@@ -1,4 +1,4 @@
|
||||
*autocmd.txt* For Vim version 8.2. Last change: 2021 Nov 20
|
||||
*autocmd.txt* For Vim version 8.2. Last change: 2022 Jan 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -51,10 +51,10 @@ effects. Be careful not to destroy your text.
|
||||
2. Defining autocommands *autocmd-define*
|
||||
|
||||
*:au* *:autocmd*
|
||||
:au[tocmd] [group] {event} {pat} [++once] [++nested] {cmd}
|
||||
:au[tocmd] [group] {event} {aupat} [++once] [++nested] {cmd}
|
||||
Add {cmd} to the list of commands that Vim will
|
||||
execute automatically on {event} for a file matching
|
||||
{pat} |autocmd-patterns|.
|
||||
{aupat} |autocmd-patterns|.
|
||||
Here {event} cannot be "*". *E1155*
|
||||
Note: A quote character is seen as argument to the
|
||||
:autocmd and won't start a comment.
|
||||
@@ -145,19 +145,19 @@ prompt. When one command outputs two messages this can happen anyway.
|
||||
==============================================================================
|
||||
3. Removing autocommands *autocmd-remove*
|
||||
|
||||
:au[tocmd]! [group] {event} {pat} [++once] [++nested] {cmd}
|
||||
:au[tocmd]! [group] {event} {aupat} [++once] [++nested] {cmd}
|
||||
Remove all autocommands associated with {event} and
|
||||
{pat}, and add the command {cmd}.
|
||||
{aupat}, and add the command {cmd}.
|
||||
See |autocmd-once| for [++once].
|
||||
See |autocmd-nested| for [++nested].
|
||||
|
||||
:au[tocmd]! [group] {event} {pat}
|
||||
:au[tocmd]! [group] {event} {aupat}
|
||||
Remove all autocommands associated with {event} and
|
||||
{pat}.
|
||||
{aupat}.
|
||||
|
||||
:au[tocmd]! [group] * {pat}
|
||||
Remove all autocommands associated with {pat} for all
|
||||
events.
|
||||
:au[tocmd]! [group] * {aupat}
|
||||
Remove all autocommands associated with {aupat} for
|
||||
all events.
|
||||
|
||||
:au[tocmd]! [group] {event}
|
||||
Remove ALL autocommands for {event}.
|
||||
@@ -177,12 +177,12 @@ with ":augroup"); otherwise, Vim uses the group defined with [group].
|
||||
==============================================================================
|
||||
4. Listing autocommands *autocmd-list*
|
||||
|
||||
:au[tocmd] [group] {event} {pat}
|
||||
:au[tocmd] [group] {event} {aupat}
|
||||
Show the autocommands associated with {event} and
|
||||
{pat}.
|
||||
{aupat}.
|
||||
|
||||
:au[tocmd] [group] * {pat}
|
||||
Show the autocommands associated with {pat} for all
|
||||
:au[tocmd] [group] * {aupat}
|
||||
Show the autocommands associated with {aupat} for all
|
||||
events.
|
||||
|
||||
:au[tocmd] [group] {event}
|
||||
@@ -1211,7 +1211,7 @@ TextYankPost After text has been yanked or deleted in the
|
||||
Not triggered when |quote_| is used nor when
|
||||
called recursively.
|
||||
It is not allowed to change the buffer text,
|
||||
see |textlock|.
|
||||
see |textlock|. *E1064*
|
||||
{only when compiled with the +eval feature}
|
||||
|
||||
*User*
|
||||
@@ -1311,16 +1311,16 @@ WinNew When a new window was created. Not done for
|
||||
Before a WinEnter event.
|
||||
|
||||
==============================================================================
|
||||
6. Patterns *autocmd-patterns* *{pat}*
|
||||
6. Patterns *autocmd-patterns* *{aupat}*
|
||||
|
||||
The {pat} argument can be a comma separated list. This works as if the
|
||||
command was given with each pattern separately. Thus this command: >
|
||||
The {aupat} argument of `:autocmd` can be a comma separated list. This works as
|
||||
if the command was given with each pattern separately. Thus this command: >
|
||||
:autocmd BufRead *.txt,*.info set et
|
||||
Is equivalent to: >
|
||||
:autocmd BufRead *.txt set et
|
||||
:autocmd BufRead *.info set et
|
||||
|
||||
The file pattern {pat} is tested for a match against the file name in one of
|
||||
The file pattern {aupat} is tested for a match against the file name in one of
|
||||
two ways:
|
||||
1. When there is no '/' in the pattern, Vim checks for a match against only
|
||||
the tail part of the file name (without its leading directory path).
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*builtin.txt* For Vim version 8.2. Last change: 2022 Jan 08
|
||||
*builtin.txt* For Vim version 8.2. Last change: 2022 Jan 28
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -641,10 +641,7 @@ test_feedinput({string}) none add key sequence to input buffer
|
||||
test_garbagecollect_now() none free memory right now for testing
|
||||
test_garbagecollect_soon() none free memory soon for testing
|
||||
test_getvalue({string}) any get value of an internal variable
|
||||
test_gui_drop_files({list}, {row}, {col}, {mods})
|
||||
none drop a list of files in a window
|
||||
test_gui_mouse_event({button}, {row}, {col}, {repeated}, {mods})
|
||||
none add a mouse event to the input buffer
|
||||
test_gui_event({event}, {args}) bool generate a GUI event for testing
|
||||
test_ignore_error({expr}) none ignore a specific error
|
||||
test_null_blob() Blob null value for testing
|
||||
test_null_channel() Channel null value for testing
|
||||
@@ -657,8 +654,6 @@ test_null_string() String null value for testing
|
||||
test_option_not_set({name}) none reset flag indicating option was set
|
||||
test_override({expr}, {val}) none test with Vim internal overrides
|
||||
test_refcount({expr}) Number get the reference count of {expr}
|
||||
test_scrollbar({which}, {value}, {dragging})
|
||||
none scroll in the GUI for testing
|
||||
test_setmouse({row}, {col}) none set the mouse position for testing
|
||||
test_settime({expr}) none set current time for testing
|
||||
test_srand_seed([seed]) none set seed for testing srand()
|
||||
@@ -2082,6 +2077,22 @@ exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined,
|
||||
For checking if a file exists use |filereadable()|.
|
||||
|
||||
The {expr} argument is a string, which contains one of these:
|
||||
varname internal variable (see
|
||||
dict.key |internal-variables|). Also works
|
||||
list[i] for |curly-braces-names|, |Dictionary|
|
||||
import.Func entries, |List| items, imported
|
||||
items,etc.
|
||||
Does not work for local variables in a
|
||||
compiled `:def` function.
|
||||
Beware that evaluating an index may
|
||||
cause an error message for an invalid
|
||||
expression. E.g.: >
|
||||
:let l = [1, 2, 3]
|
||||
:echo exists("l[5]")
|
||||
< 0 >
|
||||
:echo exists("l[xx]")
|
||||
< E121: Undefined variable: xx
|
||||
0
|
||||
&option-name Vim option (only checks if it exists,
|
||||
not if it really works)
|
||||
+option-name Vim option that works.
|
||||
@@ -2096,21 +2107,6 @@ exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined,
|
||||
?funcname built-in function that could be
|
||||
implemented; to be used to check if
|
||||
"funcname" is valid
|
||||
varname internal variable (see
|
||||
|internal-variables|). Also works
|
||||
for |curly-braces-names|, |Dictionary|
|
||||
entries, |List| items, etc.
|
||||
Does not work for local variables in a
|
||||
compiled `:def` function.
|
||||
Beware that evaluating an index may
|
||||
cause an error message for an invalid
|
||||
expression. E.g.: >
|
||||
:let l = [1, 2, 3]
|
||||
:echo exists("l[5]")
|
||||
< 0 >
|
||||
:echo exists("l[xx]")
|
||||
< E121: Undefined variable: xx
|
||||
0
|
||||
:cmdname Ex command: built-in command, user
|
||||
command or command modifier |:command|.
|
||||
Returns:
|
||||
@@ -2394,6 +2390,9 @@ feedkeys({string} [, {mode}]) *feedkeys()*
|
||||
Note that if you manage to call feedkeys() while
|
||||
executing commands, thus calling it recursively, then
|
||||
all typeahead will be consumed by the last call.
|
||||
'c' Remove any script context when executing, so that
|
||||
legacy script syntax applies, "s:var" does not work,
|
||||
etc.
|
||||
'!' When used with 'x' will not end Insert mode. Can be
|
||||
used in a test when a timer is set to exit Insert mode
|
||||
a little later. Useful for testing CursorHoldI.
|
||||
@@ -2532,7 +2531,7 @@ flatten({list} [, {maxdepth}]) *flatten()*
|
||||
The {list} is changed in place, use |flattennew()| if you do
|
||||
not want that.
|
||||
In Vim9 script flatten() cannot be used, you must always use
|
||||
|flattennew()|.
|
||||
|flattennew()|. *E1158*
|
||||
*E900*
|
||||
{maxdepth} means how deep in nested lists changes are made.
|
||||
{list} is not modified when {maxdepth} is 0.
|
||||
@@ -2879,7 +2878,7 @@ get({dict}, {key} [, {default}])
|
||||
Preferably used as a |method|: >
|
||||
mydict->get(key)
|
||||
get({func}, {what})
|
||||
Get an item with from Funcref {func}. Possible values for
|
||||
Get item {what} from Funcref {func}. Possible values for
|
||||
{what} are:
|
||||
"name" The function name
|
||||
"func" The function
|
||||
@@ -5244,6 +5243,8 @@ maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()*
|
||||
(|mapmode-ic|)
|
||||
"sid" The script local ID, used for <sid> mappings
|
||||
(|<SID>|).
|
||||
"scriptversion" The version of the script. 999999 for
|
||||
|Vim9| script.
|
||||
"lnum" The line number in "sid", zero if unknown.
|
||||
"nowait" Do not wait for other, longer mappings.
|
||||
(|:map-<nowait>|).
|
||||
@@ -6391,8 +6392,8 @@ readdir({directory} [, {expr} [, {dict}]]) *readdir()*
|
||||
readdir(dirname, {n -> n =~ '.txt$'})
|
||||
< To skip hidden and backup files: >
|
||||
readdir(dirname, {n -> n !~ '^\.\|\~$'})
|
||||
|
||||
< The optional {dict} argument allows for further custom
|
||||
< *E857*
|
||||
The optional {dict} argument allows for further custom
|
||||
values. Currently this is used to specify if and how sorting
|
||||
should be performed. The dict can have the following members:
|
||||
|
||||
@@ -6526,7 +6527,7 @@ reduce({object}, {func} [, {initial}]) *reduce()* *E998*
|
||||
{func} is called for every item in {object}, which can be a
|
||||
|String|, |List| or a |Blob|. {func} is called with two
|
||||
arguments: the result so far and current item. After
|
||||
processing all items the result is returned.
|
||||
processing all items the result is returned. *E1132*
|
||||
|
||||
{initial} is the initial result. When omitted, the first item
|
||||
in {object} is used and {func} is first called for the second
|
||||
@@ -7385,7 +7386,7 @@ setcellwidths({list}) *setcellwidths()*
|
||||
setcellwidths([[0xad, 0xad, 1],
|
||||
\ [0x2194, 0x2199, 2]])
|
||||
|
||||
< *E1109* *E1110* *E1111* *E1112* *E1113*
|
||||
< *E1109* *E1110* *E1111* *E1112* *E1113* *E1114*
|
||||
The {list} argument is a list of lists with each three
|
||||
numbers. These three numbers are [low, high, width]. "low"
|
||||
and "high" can be the same, in which case this refers to one
|
||||
@@ -9493,7 +9494,6 @@ win_execute({id}, {command} [, {silent}]) *win_execute()*
|
||||
call win_execute(winid, 'set syntax=python')
|
||||
< Doing the same with `setwinvar()` would not trigger
|
||||
autocommands and not actually show syntax highlighting.
|
||||
|
||||
*E994*
|
||||
Not all commands are allowed in popup windows.
|
||||
When window {id} does not exist then no error is given and
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*change.txt* For Vim version 8.2. Last change: 2021 Dec 29
|
||||
*change.txt* For Vim version 8.2. Last change: 2022 Jan 28
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -1176,10 +1176,13 @@ register. With blockwise selection it also depends on the size of the block
|
||||
and whether the corners are on an existing character. (Implementation detail:
|
||||
it actually works by first putting the register after the selection and then
|
||||
deleting the selection.)
|
||||
The previously selected text is put in the unnamed register. If you want to
|
||||
put the same text into a Visual selection several times you need to use
|
||||
With 'p' the previously selected text is put in the unnamed register. This is
|
||||
useful if you want to put that text somewhere else. But you cannot repeat the
|
||||
same change.
|
||||
With 'P' the unnamed register is not changed, you can repeat the same change.
|
||||
But the deleted text cannot be used. If you do need it you can use 'p' with
|
||||
another register. E.g., yank the text to copy, Visually select the text to
|
||||
replace and use "0p . You can repeat this as many times as you like, the
|
||||
replace and use "0p . You can repeat this as many times as you like, and the
|
||||
unnamed register will be changed each time.
|
||||
|
||||
When you use a blockwise Visual mode command and yank only a single line into
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*diff.txt* For Vim version 8.2. Last change: 2021 May 24
|
||||
*diff.txt* For Vim version 8.2. Last change: 2022 Jan 22
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -335,8 +335,9 @@ After setting this variable, reload the syntax script: >
|
||||
|
||||
FINDING THE DIFFERENCES *diff-diffexpr*
|
||||
|
||||
The 'diffexpr' option can be set to use something else than the standard
|
||||
"diff" program to compare two files and find the differences. *E959*
|
||||
The 'diffexpr' option can be set to use something else than the internal diff
|
||||
support or the standard "diff" program to compare two files and find the
|
||||
differences. *E959*
|
||||
|
||||
When 'diffexpr' is empty, Vim uses this command to find the differences
|
||||
between file1 and file2: >
|
||||
@@ -369,7 +370,7 @@ format mentioned. These variables are set to the file names used:
|
||||
|
||||
v:fname_in original file
|
||||
v:fname_new new version of the same file
|
||||
v:fname_out resulting diff file
|
||||
v:fname_out where to write the resulting diff file
|
||||
|
||||
Additionally, 'diffexpr' should take care of "icase" and "iwhite" in the
|
||||
'diffopt' option. 'diffexpr' cannot change the value of 'lines' and
|
||||
@@ -402,7 +403,9 @@ If the 'diffexpr' expression starts with s: or |<SID>|, then it is replaced
|
||||
with the script ID (|local-function|). Example: >
|
||||
set diffexpr=s:MyDiffExpr()
|
||||
set diffexpr=<SID>SomeDiffExpr()
|
||||
<
|
||||
Otherwise, the expression is evaluated in the context of the script where the
|
||||
option was set, thus script-local items are available.
|
||||
|
||||
*E810* *E97*
|
||||
Vim will do a test if the diff output looks alright. If it doesn't, you will
|
||||
get an error message. Possible causes:
|
||||
@@ -458,5 +461,8 @@ If the 'patchexpr' expression starts with s: or |<SID>|, then it is replaced
|
||||
with the script ID (|local-function|). Example: >
|
||||
set patchexpr=s:MyPatchExpr()
|
||||
set patchexpr=<SID>SomePatchExpr()
|
||||
<
|
||||
Otherwise, the expression is evaluated in the context of the script where the
|
||||
option was set, thus script-local items are available.
|
||||
|
||||
|
||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*editing.txt* For Vim version 8.2. Last change: 2021 Dec 27
|
||||
*editing.txt* For Vim version 8.2. Last change: 2022 Jan 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -433,7 +433,7 @@ This also works for most other systems, with the restriction that the
|
||||
backticks must be around the whole item. It is not possible to have text
|
||||
directly before the first or just after the last backtick.
|
||||
|
||||
*`=*
|
||||
*`=* *E1083*
|
||||
You can have the backticks expanded as a Vim expression, instead of as an
|
||||
external command, by putting an equal sign right after the first backtick,
|
||||
e.g.: >
|
||||
@@ -890,7 +890,7 @@ Note: When the 'write' option is off, you are not able to write any file.
|
||||
|
||||
*:w* *:write*
|
||||
*E502* *E503* *E504* *E505*
|
||||
*E512* *E514* *E667* *E796* *E949*
|
||||
*E512* *E514* *E667* *E949*
|
||||
:w[rite] [++opt] Write the whole buffer to the current file. This is
|
||||
the normal way to save changes to a file. It fails
|
||||
when the 'readonly' option is set or when there is
|
||||
@@ -1388,7 +1388,8 @@ becomes the current directory for that window. Windows where the |:lcd|
|
||||
command has not been used stick to the global or tab-local current directory.
|
||||
When jumping to another window the current directory is changed to the last
|
||||
specified local current directory. If none was specified, the global or
|
||||
tab-local current directory is used.
|
||||
tab-local current directory is used. When creating a new window it inherits
|
||||
the local directory of the current window.
|
||||
|
||||
When a |:tcd| command has been used for a tab page, the specified directory
|
||||
becomes the current directory for the current tab page and the current window.
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
*eval.txt* For Vim version 8.2. Last change: 2022 Jan 08
|
||||
*eval.txt* For Vim version 8.2. Last change: 2022 Jan 24
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
|
||||
|
||||
Expression evaluation *expression* *expr* *E15* *eval*
|
||||
|
||||
*E1002*
|
||||
Using expressions is introduced in chapter 41 of the user manual |usr_41.txt|.
|
||||
|
||||
Note: Expression evaluation can be disabled at compile time. If this has been
|
||||
@@ -44,7 +44,8 @@ Profiling is documented at |profiling|.
|
||||
1. Variables *variables*
|
||||
|
||||
1.1 Variable types ~
|
||||
*E712* *E896* *E897* *E899*
|
||||
*E712* *E896* *E897* *E899* *E1098*
|
||||
*E1107* *E1135* *E1138*
|
||||
There are ten types of variables:
|
||||
|
||||
*Number* *Integer*
|
||||
@@ -53,7 +54,7 @@ Number A 32 or 64 bit signed number. |expr-number|
|
||||
Examples: -123 0x10 0177 0o177 0b1011
|
||||
|
||||
Float A floating point number. |floating-point-format| *Float*
|
||||
{only when compiled with the |+float| feature}
|
||||
{only when compiled with the |+float| feature} *E1076*
|
||||
Examples: 123.456 1.15e-6 -1.1e3
|
||||
|
||||
String A NUL terminated string of 8-bit unsigned characters (bytes).
|
||||
@@ -180,7 +181,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* *E1086*
|
||||
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
|
||||
@@ -835,7 +836,7 @@ In legacy script it is possible to form a variable name with curly braces, see
|
||||
|
||||
==============================================================================
|
||||
2. Expression syntax *expression-syntax*
|
||||
|
||||
*E1143*
|
||||
Expression syntax summary, from least to most significant:
|
||||
|
||||
|expr1| expr2
|
||||
@@ -916,6 +917,9 @@ Example: >
|
||||
|
||||
All expressions within one level are parsed from left to right.
|
||||
|
||||
Expression nesting is limited to 1000 levels deep (300 when build with MSVC)
|
||||
to avoid running out of stack and crashing. *E1169*
|
||||
|
||||
|
||||
expr1 *expr1* *trinary* *falsy-operator* *??* *E109*
|
||||
-----
|
||||
@@ -1030,7 +1034,7 @@ is |true| or |false|.
|
||||
*expr-==?* *expr-!=?* *expr->?* *expr->=?*
|
||||
*expr-<?* *expr-<=?* *expr-=~?* *expr-!~?*
|
||||
*expr-is* *expr-isnot* *expr-is#* *expr-isnot#*
|
||||
*expr-is?* *expr-isnot?*
|
||||
*expr-is?* *expr-isnot?* *E1072*
|
||||
use 'ignorecase' match case ignore case ~
|
||||
equal == ==# ==?
|
||||
not equal != !=# !=?
|
||||
@@ -1071,7 +1075,7 @@ To compare Funcrefs to see if they refer to the same function, ignoring bound
|
||||
Dictionary and arguments, use |get()| to get the function name: >
|
||||
if get(Part1, 'name') == get(Part2, 'name')
|
||||
" Part1 and Part2 refer to the same function
|
||||
|
||||
< *E1037*
|
||||
Using "is" or "isnot" with a |List|, |Dictionary| or |Blob| checks whether
|
||||
the expressions are referring to the same |List|, |Dictionary| or |Blob|
|
||||
instance. A copy of a |List| is different from the original |List|. When
|
||||
@@ -1123,7 +1127,7 @@ can be matched like an ordinary character. Examples:
|
||||
"foo\nbar" =~ "\\n" evaluates to 0
|
||||
|
||||
|
||||
expr5 and expr6 *expr5* *expr6*
|
||||
expr5 and expr6 *expr5* *expr6* *E1036* *E1051*
|
||||
---------------
|
||||
expr6 + expr6 Number addition, |List| or |Blob| concatenation *expr-+*
|
||||
expr6 - expr6 Number subtraction *expr--*
|
||||
@@ -1182,7 +1186,7 @@ When the righthand side of '%' is zero, the result is 0.
|
||||
|
||||
None of these work for |Funcref|s.
|
||||
|
||||
".", ".." and "%" do not work for Float. *E804*
|
||||
".", ".." and "%" do not work for Float. *E804* *E1035*
|
||||
|
||||
|
||||
expr7 *expr7*
|
||||
@@ -1229,7 +1233,7 @@ in any order. E.g., these are all possible:
|
||||
Evaluation is always from left to right.
|
||||
|
||||
expr9[expr1] item of String or |List| *expr-[]* *E111*
|
||||
*E909* *subscript*
|
||||
*E909* *subscript* *E1062*
|
||||
In legacy Vim script:
|
||||
If expr9 is a Number or String this results in a String that contains the
|
||||
expr1'th single byte from expr9. expr9 is used as a String (a number is
|
||||
@@ -1339,7 +1343,7 @@ Note that the dot is also used for String concatenation. To avoid confusion
|
||||
always put spaces around the dot for String concatenation.
|
||||
|
||||
|
||||
expr9(expr1, ...) |Funcref| function call
|
||||
expr9(expr1, ...) |Funcref| function call *E1085*
|
||||
|
||||
When expr9 is a |Funcref| type variable, invoke the function it refers to.
|
||||
|
||||
@@ -1364,7 +1368,16 @@ Is equivalent to: >
|
||||
(-1.234)->string()
|
||||
And NOT: >
|
||||
-(1.234->string())
|
||||
<
|
||||
|
||||
What comes after "->" can be a name, a simple expression (not containing any
|
||||
parenthesis), or any expression in parenthesis: >
|
||||
base->name(args)
|
||||
base->some.name(args)
|
||||
base->alist[idx](args)
|
||||
base->(getFuncRef())(args)
|
||||
Note that in the last call the base is passed to the function resulting from
|
||||
"(getFuncRef())", inserted before "args".
|
||||
|
||||
*E274*
|
||||
"->name(" must not contain white space. There can be white space before the
|
||||
"->" and after the "(", thus you can split the lines like this: >
|
||||
@@ -1568,7 +1581,7 @@ The first one probably doesn't echo anything, the second echoes the $shell
|
||||
variable (if your shell supports it).
|
||||
|
||||
|
||||
internal variable *expr-variable*
|
||||
internal variable *expr-variable* *E1015* *E1089*
|
||||
-----------------
|
||||
variable internal variable
|
||||
See below |internal-variables|.
|
||||
@@ -1656,7 +1669,7 @@ for a lambda expression, you can find what it is with the following command: >
|
||||
See also: |numbered-function|
|
||||
|
||||
==============================================================================
|
||||
3. Internal variable *internal-variables* *E461*
|
||||
3. Internal variable *internal-variables* *E461* *E1001*
|
||||
|
||||
An internal variable name can be made up of letters, digits and '_'. But it
|
||||
cannot start with a digit. In legacy script it is also possible to use curly
|
||||
@@ -1814,7 +1827,7 @@ variables for each buffer. Use local buffer variables instead |b:var|.
|
||||
|
||||
|
||||
PREDEFINED VIM VARIABLES *vim-variable* *v:var* *v:*
|
||||
*E963*
|
||||
*E963* *E1063*
|
||||
Some variables can be set by the user, but the type cannot be changed.
|
||||
|
||||
*v:argv* *argv-variable*
|
||||
@@ -2700,7 +2713,7 @@ See |:verbose-cmd| for more information.
|
||||
command, use line breaks instead of |:bar|: >
|
||||
:exe "func Foo()\necho 'foo'\nendfunc"
|
||||
<
|
||||
*:delf* *:delfunction* *E131* *E933*
|
||||
*:delf* *:delfunction* *E131* *E933* *E1084*
|
||||
:delf[unction][!] {name}
|
||||
Delete function {name}.
|
||||
{name} can also be a |Dictionary| entry that is a
|
||||
@@ -2717,8 +2730,11 @@ See |:verbose-cmd| for more information.
|
||||
If "[expr]" is not given, the number 0 is returned.
|
||||
When a function ends without an explicit ":return",
|
||||
the number 0 is returned.
|
||||
Note that there is no check for unreachable lines,
|
||||
thus there is no warning if commands follow ":return".
|
||||
In a :def function *E1095* is given if unreachable
|
||||
code follows after the `:return`.
|
||||
In legacy script there is no check for unreachable
|
||||
lines, thus there is no warning if commands follow
|
||||
`:return`.
|
||||
|
||||
If the ":return" is used after a |:try| but before the
|
||||
matching |:finally| (if present), the commands
|
||||
@@ -2737,7 +2753,7 @@ may optionally be following. In the function the extra arguments can be used
|
||||
as "a:1", "a:2", etc. "a:0" is set to the number of extra arguments (which
|
||||
can be 0). "a:000" is set to a |List| that contains these arguments. Note
|
||||
that "a:1" is the same as "a:000[0]".
|
||||
*E742*
|
||||
*E742* *E1090*
|
||||
The a: scope and the variables in it cannot be changed, they are fixed.
|
||||
However, if a composite type is used, such as |List| or |Dictionary| , you can
|
||||
change their contents. Thus you can pass a |List| to a function and have the
|
||||
@@ -2830,7 +2846,7 @@ This function can then be called with: >
|
||||
: echo div
|
||||
:endif
|
||||
<
|
||||
*:cal* *:call* *E107* *E117*
|
||||
*:cal* *:call* *E107*
|
||||
:[range]cal[l] {name}([arguments])
|
||||
Call a function. The name of the function and its arguments
|
||||
are as specified with `:function`. Up to 20 arguments can be
|
||||
@@ -2874,6 +2890,12 @@ This function can then be called with: >
|
||||
:4,8call GetDict().method()
|
||||
< Here GetDict() gets the range but method() does not.
|
||||
|
||||
*E117*
|
||||
When a function cannot be found the error "E117: Unknown function" will be
|
||||
given. If the function was using an autoload path or an autoload import and
|
||||
the script is a |Vim9| script, this may also be caused by the function not
|
||||
being exported.
|
||||
|
||||
*E132*
|
||||
The recursiveness of user functions is restricted with the |'maxfuncdepth'|
|
||||
option.
|
||||
@@ -2973,6 +2995,9 @@ Also note that if you have two script files, and one calls a function in the
|
||||
other and vice versa, before the used function is defined, it won't work.
|
||||
Avoid using the autoload functionality at the toplevel.
|
||||
|
||||
In |Vim9| script you will get error *E1263* if you use a function name with a
|
||||
"#" character when not in an autoload script.
|
||||
|
||||
Hint: If you distribute a bunch of scripts you can pack them together with the
|
||||
|vimball| utility. Also read the user manual |distribute-script|.
|
||||
|
||||
@@ -3036,7 +3061,7 @@ declarations and assignments do not use a command. |vim9-declaration|
|
||||
from the {expr}. If {var-name} didn't exist yet, it
|
||||
is created.
|
||||
|
||||
:let {var-name}[{idx}] = {expr1} *E689*
|
||||
:let {var-name}[{idx}] = {expr1} *E689* *E1141*
|
||||
Set a list item to the result of the expression
|
||||
{expr1}. {var-name} must refer to a list and {idx}
|
||||
must be a valid index in that list. For nested list
|
||||
@@ -3059,8 +3084,8 @@ declarations and assignments do not use a command. |vim9-declaration|
|
||||
When the selected range of items is partly past the
|
||||
end of the list, items will be added.
|
||||
|
||||
*:let+=* *:let-=* *:letstar=*
|
||||
*:let/=* *:let%=* *:let.=* *:let..=* *E734* *E985*
|
||||
*:let+=* *:let-=* *:letstar=* *:let/=* *:let%=*
|
||||
*:let.=* *:let..=* *E734* *E985* *E1019*
|
||||
:let {var} += {expr1} Like ":let {var} = {var} + {expr1}".
|
||||
:let {var} -= {expr1} Like ":let {var} = {var} - {expr1}".
|
||||
:let {var} *= {expr1} Like ":let {var} = {var} * {expr1}".
|
||||
@@ -3143,7 +3168,7 @@ declarations and assignments do not use a command. |vim9-declaration|
|
||||
:let &g:{option-name} -= {expr1}
|
||||
Like above, but only set the global value of an option
|
||||
(if there is one). Works like |:setglobal|.
|
||||
|
||||
*E1093*
|
||||
:let [{name1}, {name2}, ...] = {expr1} *:let-unpack* *E687* *E688*
|
||||
{expr1} must evaluate to a |List|. The first item in
|
||||
the list is assigned to {name1}, the second item to
|
||||
@@ -3184,7 +3209,7 @@ declarations and assignments do not use a command. |vim9-declaration|
|
||||
|List| item.
|
||||
|
||||
*:let=<<* *:let-heredoc*
|
||||
*E990* *E991* *E172* *E221*
|
||||
*E990* *E991* *E172* *E221* *E1145*
|
||||
:let {var-name} =<< [trim] {endmarker}
|
||||
text...
|
||||
text...
|
||||
@@ -3263,7 +3288,7 @@ text...
|
||||
* Funcref
|
||||
This does not work in Vim9 script. |vim9-declaration|
|
||||
|
||||
:unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795*
|
||||
:unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795* *E1081*
|
||||
Remove the internal variable {name}. Several variable
|
||||
names can be given, they are all removed. The name
|
||||
may also be a |List| or |Dictionary| item.
|
||||
@@ -3289,7 +3314,7 @@ text...
|
||||
If the system does not support deleting an environment
|
||||
variable, it is made empty.
|
||||
|
||||
*:cons* *:const*
|
||||
*:cons* *:const* *E1018*
|
||||
:cons[t] {var-name} = {expr1}
|
||||
:cons[t] [{name1}, {name2}, ...] = {expr1}
|
||||
:cons[t] [{name}, ..., ; {lastname}] = {expr1}
|
||||
@@ -3337,7 +3362,7 @@ text...
|
||||
:lockvar v
|
||||
:let v = 'asdf' " fails!
|
||||
:unlet v " works
|
||||
< *E741* *E940*
|
||||
< *E741* *E940* *E1118* *E1119* *E1120* *E1121* *E1122*
|
||||
If you try to change a locked variable you get an
|
||||
error message: "E741: Value is locked: {name}".
|
||||
If you try to lock or unlock a built-in variable you
|
||||
@@ -3480,7 +3505,7 @@ text...
|
||||
|Blob| does not affect the iteration.
|
||||
|
||||
:for [{var1}, {var2}, ...] in {listlist}
|
||||
:endfo[r]
|
||||
:endfo[r] *E1140*
|
||||
Like ":for" above, but each item in {listlist} must be
|
||||
a list, of which each item is assigned to {var1},
|
||||
{var2}, etc. Example: >
|
||||
@@ -3509,7 +3534,8 @@ text...
|
||||
all nested ":try"s inside the loop. The outermost
|
||||
":endtry" then jumps to the command after the loop.
|
||||
|
||||
:try *:try* *:endt* *:endtry* *E600* *E601* *E602*
|
||||
:try *:try* *:endt* *:endtry*
|
||||
*E600* *E601* *E602* *E1032*
|
||||
:endt[ry] Change the error handling for the commands between
|
||||
":try" and ":endtry" including everything being
|
||||
executed across ":source" commands, function calls,
|
||||
@@ -3545,7 +3571,8 @@ text...
|
||||
try | sleep 100 | catch /^Vim:Interrupt$/ | endtry
|
||||
try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry
|
||||
<
|
||||
*:cat* *:catch* *E603* *E604* *E605*
|
||||
*:cat* *:catch*
|
||||
*E603* *E604* *E605* *E654* *E1033*
|
||||
:cat[ch] /{pattern}/ The following commands until the next |:catch|,
|
||||
|:finally|, or |:endtry| that belongs to the same
|
||||
|:try| as the ":catch" are executed when an exception
|
||||
@@ -3566,7 +3593,7 @@ text...
|
||||
Another character can be used instead of / around the
|
||||
{pattern}, so long as it does not have a special
|
||||
meaning (e.g., '|' or '"') and doesn't occur inside
|
||||
{pattern}.
|
||||
{pattern}. *E1067*
|
||||
Information about the exception is available in
|
||||
|v:exception|. Also see |throw-variables|.
|
||||
NOTE: It is not reliable to ":catch" the TEXT of
|
||||
@@ -3581,7 +3608,7 @@ text...
|
||||
|:break|, |:finish|, or |:return|, or by an error or
|
||||
interrupt or exception (see |:throw|).
|
||||
|
||||
*:th* *:throw* *E608*
|
||||
*:th* *:throw* *E608* *E1129*
|
||||
:th[row] {expr1} The {expr1} is evaluated and thrown as an exception.
|
||||
If the ":throw" is used after a |:try| but before the
|
||||
first corresponding |:catch|, commands are skipped
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*filetype.txt* For Vim version 8.2. Last change: 2021 Dec 30
|
||||
*filetype.txt* For Vim version 8.2. Last change: 2022 Jan 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -133,14 +133,15 @@ shell script: "#!/bin/csh".
|
||||
argument was used.
|
||||
|
||||
*filetype-overrule*
|
||||
When the same extension is used for two filetypes, Vim tries to guess what
|
||||
kind of file it is. This doesn't always work. A number of global variables
|
||||
can be used to overrule the filetype used for certain extensions:
|
||||
When the same extension is used for multiple filetypes, Vim tries to guess
|
||||
what kind of file it is. This doesn't always work. A number of global
|
||||
variables can be used to overrule the filetype used for certain extensions:
|
||||
|
||||
file name variable ~
|
||||
*.asa g:filetype_asa |ft-aspvbs-syntax| |ft-aspperl-syntax|
|
||||
*.asm g:asmsyntax |ft-asm-syntax|
|
||||
*.asp g:filetype_asp |ft-aspvbs-syntax| |ft-aspperl-syntax|
|
||||
*.bas g:filetype_bas |ft-basic-syntax|
|
||||
*.fs g:filetype_fs |ft-forth-syntax|
|
||||
*.i g:filetype_i |ft-progress-syntax|
|
||||
*.inc g:filetype_inc
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*fold.txt* For Vim version 8.2. Last change: 2021 Jul 13
|
||||
*fold.txt* For Vim version 8.2. Last change: 2022 Jan 22
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -511,7 +511,10 @@ Note the use of backslashes to avoid some characters to be interpreted by the
|
||||
:endfunction
|
||||
|
||||
Evaluating 'foldtext' is done in the |sandbox|. The current window is set to
|
||||
the window that displays the line. Errors are ignored.
|
||||
the window that displays the line. The context is set to the script where the
|
||||
option was last set.
|
||||
|
||||
Errors are ignored. For debugging set the 'debug' option to "throw".
|
||||
|
||||
The default value is |foldtext()|. This returns a reasonable text for most
|
||||
types of folding. If you don't like it, you can specify your own 'foldtext'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*if_perl.txt* For Vim version 8.2. Last change: 2022 Jan 08
|
||||
*if_perl.txt* For Vim version 8.2. Last change: 2022 Jan 28
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Sven Verdoolaege
|
||||
@@ -103,7 +103,7 @@ Here are some things you can try: >
|
||||
:perldo $_ = reverse($_);1
|
||||
:perl VIM::Msg("hello")
|
||||
:perl $line = $curbuf->Get(42)
|
||||
<
|
||||
< *E299*
|
||||
Executing Perl commands in the |sandbox| is limited. ":perldo" will not be
|
||||
possible at all. ":perl" will be evaluated in the Safe environment, if
|
||||
possible.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*indent.txt* For Vim version 8.2. Last change: 2019 Dec 07
|
||||
*indent.txt* For Vim version 8.2. Last change: 2022 Jan 31
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -778,6 +778,15 @@ You can set the indent for the first line after <script> and <style>
|
||||
"auto" auto indent (same indent as the blocktag)
|
||||
"inc" auto indent + one indent step
|
||||
|
||||
You can set the indent for attributes after an open <tag line: >
|
||||
|
||||
:let g:html_indent_attribute = 1
|
||||
<
|
||||
VALUE MEANING ~
|
||||
1 auto indent, one indent step more than <tag
|
||||
2 auto indent, two indent steps (default)
|
||||
> 2 auto indent, more indent steps
|
||||
|
||||
Many tags increase the indent for what follows per default (see "Add Indent
|
||||
Tags" in the script). You can add further tags with: >
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*index.txt* For Vim version 8.2. Last change: 2021 Aug 31
|
||||
*index.txt* For Vim version 8.2. Last change: 2022 Jan 28
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -937,7 +937,9 @@ tag command note action in Visual mode ~
|
||||
before the highlighted area
|
||||
|v_J| J 2 join the highlighted lines
|
||||
|v_K| K run 'keywordprg' on the highlighted area
|
||||
|v_O| O Move horizontally to other corner of area.
|
||||
|v_O| O move horizontally to other corner of area
|
||||
|v_P| P replace highlighted area with register
|
||||
contents; unnamed register is unchanged
|
||||
Q does not start Ex mode
|
||||
|v_R| R 2 delete the highlighted lines and start
|
||||
insert
|
||||
@@ -1000,6 +1002,8 @@ tag command note action in Visual mode ~
|
||||
|v_i{| i{ same as iB
|
||||
|v_i}| i} same as iB
|
||||
|v_o| o move cursor to other corner of area
|
||||
|v_p| p replace highlighted area with register
|
||||
contents; deleted text in unnamed register
|
||||
|v_r| r 2 replace highlighted area with a character
|
||||
|v_s| s 2 delete highlighted area and start insert
|
||||
|v_u| u 2 make highlighted area lowercase
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*map.txt* For Vim version 8.2. Last change: 2022 Jan 03
|
||||
*map.txt* For Vim version 8.2. Last change: 2022 Jan 23
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -270,7 +270,7 @@ input. Example: >
|
||||
endfunc
|
||||
nnoremap <expr> <F3> <SID>OpenPopup()
|
||||
|
||||
Also, keep in mind that the expression may be evaluated when looking for
|
||||
Keep in mind that the expression may be evaluated when looking for
|
||||
typeahead, before the previous command has been executed. For example: >
|
||||
func StoreColumn()
|
||||
let g:column = col('.')
|
||||
@@ -284,6 +284,10 @@ This can be solved by inserting <Ignore> before the character that is
|
||||
expression-mapped: >
|
||||
nmap ! f!<Ignore>x
|
||||
|
||||
When defining a mapping in a |Vim9| script, the expression will be evaluated
|
||||
in the context of that script. This means that script-local items can be
|
||||
accessed in the expression.
|
||||
|
||||
Be very careful about side effects! The expression is evaluated while
|
||||
obtaining characters, you may very well make the command dysfunctional.
|
||||
For this reason the following is blocked:
|
||||
@@ -342,9 +346,24 @@ Example of using <Cmd> halfway Insert mode: >
|
||||
Unlike <expr> mappings, there are no special restrictions on the <Cmd>
|
||||
command: it is executed as if an (unrestricted) |autocommand| was invoked.
|
||||
|
||||
*<ScriptCmd>*
|
||||
<ScriptCmd> is like <Cmd> but sets the context to the script the mapping was
|
||||
defined in, for the duration of the command execution. This is especially
|
||||
useful for |Vim9| script. It also works to access an import, which is useful
|
||||
in a plugin using an autoload script: >
|
||||
vim9script
|
||||
import autoload 'implementation.vim' as impl
|
||||
nnoremap <F4> <ScriptCmd>impl.DoTheWork()<CR>
|
||||
|
||||
No matter where <F4> is typed, the "impl" import will be found in the script
|
||||
context of where the mapping was defined. And since it's an autoload import,
|
||||
the "implementation.vim" script will only be loaded once <F4> is typed, not
|
||||
when the mapping is defined.
|
||||
|
||||
Note:
|
||||
- Because <Cmd> avoids mode-changes it does not trigger |CmdlineEnter| and
|
||||
|CmdlineLeave| events, because no user interaction is expected.
|
||||
- Because <Cmd> and <ScriptCmd> avoid mode-changes it does not trigger
|
||||
|CmdlineEnter| and |CmdlineLeave| events, because no user interaction is
|
||||
expected.
|
||||
- For the same reason, |keycodes| like <C-R><C-W> are interpreted as plain,
|
||||
unmapped keys.
|
||||
- The command is not echo'ed, no need for <silent>.
|
||||
@@ -356,12 +375,13 @@ Note:
|
||||
Visual mode. Use |:smap| to handle Select mode differently.
|
||||
|
||||
*E1255* *E1136*
|
||||
<Cmd> commands must terminate, that is, they must be followed by <CR> in the
|
||||
{rhs} of the mapping definition. |Command-line| mode is never entered.
|
||||
<Cmd> and <ScriptCmd> commands must terminate, that is, they must be followed
|
||||
by <CR> in the {rhs} of the mapping definition. |Command-line| mode is never
|
||||
entered.
|
||||
|
||||
*E1137*
|
||||
<Cmd> commands can have only normal characters and cannot contain special
|
||||
characters like function keys.
|
||||
<Cmd> and <ScriptCmd> commands can have only normal characters and cannot
|
||||
contain special characters like function keys.
|
||||
|
||||
|
||||
1.3 MAPPING AND MODES *:map-modes*
|
||||
@@ -1391,7 +1411,7 @@ scripts.
|
||||
|
||||
*:command-verbose*
|
||||
When 'verbose' is non-zero, listing a command will also display where it was
|
||||
last defined. Example: >
|
||||
last defined and any completion argument. Example: >
|
||||
|
||||
:verbose command TOhtml
|
||||
< Name Args Range Complete Definition ~
|
||||
@@ -1510,6 +1530,8 @@ completion can be enabled:
|
||||
-complete=custom,{func} custom completion, defined via {func}
|
||||
-complete=customlist,{func} custom completion, defined via {func}
|
||||
|
||||
If you specify completion while there is nothing to complete (-nargs=0, the
|
||||
default) then you get error *E1208* .
|
||||
Note: That some completion methods might expand environment variables.
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*mbyte.txt* For Vim version 8.2. Last change: 2022 Jan 08
|
||||
*mbyte.txt* For Vim version 8.2. Last change: 2022 Jan 20
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar et al.
|
||||
@@ -955,32 +955,11 @@ replace mode.
|
||||
The options 'iminsert', 'imsearch' and 'imcmdline' can be used to choose
|
||||
the different input methods or disable them temporarily.
|
||||
|
||||
WHAT IS IME
|
||||
IME is a part of East asian version Windows. That helps you to input
|
||||
multibyte character. English and other language version Windows does not
|
||||
have any IME. (Also there is no need usually.) But there is one that
|
||||
called Microsoft Global IME. Global IME is a part of Internet Explorer
|
||||
4.0 or above. You can get more information about Global IME, at below
|
||||
URL.
|
||||
|
||||
WHAT IS GLOBAL IME *global-ime*
|
||||
Global IME makes capability to input Chinese, Japanese, and Korean text
|
||||
into Vim buffer on any language version of Windows 98, Windows 95, and
|
||||
Windows NT 4.0.
|
||||
On Windows 2000 and XP it should work as well (without downloading). On
|
||||
Windows 2000 Professional, Global IME is built in, and the Input Locales
|
||||
can be added through Control Panel/Regional Options/Input Locales.
|
||||
Please see below URL for detail of Global IME. You can also find various
|
||||
language version of Global IME at same place.
|
||||
|
||||
- Global IME detailed information.
|
||||
http://search.microsoft.com/results.aspx?q=global+ime
|
||||
|
||||
- Active Input Method Manager (Global IME)
|
||||
On Windows 9x and Windows NT 4.0 there was *global-ime* , but this is no
|
||||
longer supported. You can still find documentation for Active Input Method
|
||||
Manager (Global IME) here:
|
||||
http://msdn.microsoft.com/en-us/library/aa741221(v=VS.85).aspx
|
||||
|
||||
Support for Global IME is an experimental feature.
|
||||
|
||||
NOTE: For IME to work you must make sure the input locales of your language
|
||||
are added to your system. The exact location of this depends on the version
|
||||
of Windows you use. For example, on my Windows 2000 box:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*message.txt* For Vim version 8.2. Last change: 2022 Jan 08
|
||||
*message.txt* For Vim version 8.2. Last change: 2022 Jan 26
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -46,13 +46,13 @@ maintains the messages or the translations. You can use this to contact the
|
||||
maintainer when you spot a mistake.
|
||||
|
||||
If you want to find help on a specific (error) message, use the ID at the
|
||||
start of the message. For example, to get help on the message: >
|
||||
start of the message. For example, to get help on the message:
|
||||
|
||||
E72: Close error on swap file
|
||||
E72: Close error on swap file ~
|
||||
|
||||
or (translated): >
|
||||
or (translated):
|
||||
|
||||
E72: Errore durante chiusura swap file
|
||||
E72: Errore durante chiusura swap file ~
|
||||
|
||||
Use: >
|
||||
|
||||
@@ -62,6 +62,8 @@ If you are lazy, it also works without the shift key: >
|
||||
|
||||
:help e72
|
||||
|
||||
The number in this ID has no meaning.
|
||||
|
||||
==============================================================================
|
||||
2. Error messages *error-messages* *errors*
|
||||
|
||||
@@ -76,117 +78,116 @@ See `:messages` above.
|
||||
LIST OF MESSAGES
|
||||
*E222* *E228* *E232* *E293* *E298* *E304* *E317*
|
||||
*E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322*
|
||||
*E323* *E341* *E473* *E570* *E685* *E292* >
|
||||
Add to read buffer
|
||||
makemap: Illegal mode
|
||||
Cannot create BalloonEval with both message and callback
|
||||
Hangul automata ERROR
|
||||
block was not locked
|
||||
Didn't get block nr {N}?
|
||||
ml_upd_block0(): Didn't get block 0??
|
||||
pointer block id wrong {N}
|
||||
Updated too many blocks?
|
||||
get_varp ERROR
|
||||
u_undo: line numbers wrong
|
||||
undo list corrupt
|
||||
undo line missing
|
||||
ml_get: cannot find line {N}
|
||||
cannot find line {N}
|
||||
line number out of range: {N} past the end
|
||||
line count wrong in block {N}
|
||||
Internal error
|
||||
Internal error: {function}
|
||||
fatal error in cs_manage_matches
|
||||
Invalid count for del_bytes(): {N}
|
||||
*E323* *E341* *E473* *E570* *E685* *E292*
|
||||
Add to read buffer ~
|
||||
makemap: Illegal mode ~
|
||||
Cannot create BalloonEval with both message and callback ~
|
||||
block was not locked ~
|
||||
Didn't get block nr {N}? ~
|
||||
ml_upd_block0(): Didn't get block 0?? ~
|
||||
pointer block id wrong {N} ~
|
||||
Updated too many blocks? ~
|
||||
get_varp ERROR ~
|
||||
u_undo: line numbers wrong ~
|
||||
undo list corrupt ~
|
||||
undo line missing ~
|
||||
ml_get: cannot find line {N} in buffer {nr} {name} ~
|
||||
line number out of range: {N} past the end ~
|
||||
line count wrong in block {N} ~
|
||||
Internal error: lalloc(0, ) ~
|
||||
Internal error: {function} ~
|
||||
Internal error in regexp ~
|
||||
fatal error in cs_manage_matches ~
|
||||
Invalid count for del_bytes(): {N} ~
|
||||
|
||||
This is an internal error. If you can reproduce it, please send in a bug
|
||||
report. |bugs|
|
||||
|
||||
>
|
||||
ATTENTION
|
||||
Found a swap file by the name ...
|
||||
|
||||
ATTENTION ~
|
||||
Found a swap file by the name ... ~
|
||||
|
||||
See |ATTENTION|.
|
||||
|
||||
*E92* >
|
||||
Buffer {N} not found
|
||||
*E92*
|
||||
Buffer {N} not found ~
|
||||
|
||||
The buffer you requested does not exist. This can also happen when you have
|
||||
wiped out a buffer which contains a mark or is referenced in another way.
|
||||
|:bwipeout|
|
||||
|
||||
*E95* >
|
||||
Buffer with this name already exists
|
||||
*E95*
|
||||
Buffer with this name already exists ~
|
||||
|
||||
You cannot have two buffers with exactly the same name. This includes the
|
||||
path leading to the file.
|
||||
|
||||
*E72* >
|
||||
Close error on swap file
|
||||
*E72*
|
||||
Close error on swap file ~
|
||||
|
||||
The |swap-file|, that is used to keep a copy of the edited text, could not be
|
||||
closed properly. Mostly harmless.
|
||||
|
||||
*E169* >
|
||||
Command too recursive
|
||||
*E169*
|
||||
Command too recursive ~
|
||||
|
||||
This happens when an Ex command executes an Ex command that executes an Ex
|
||||
command, etc. The limit is 200 or the value of 'maxfuncdepth', whatever is
|
||||
larger. When it's more there probably is an endless loop. Probably a
|
||||
|:execute| or |:source| command is involved.
|
||||
|
||||
*E254* >
|
||||
Cannot allocate color {name}
|
||||
*E254*
|
||||
Cannot allocate color {name} ~
|
||||
|
||||
The color name {name} is unknown. See |gui-colors| for a list of colors that
|
||||
are available on most systems.
|
||||
|
||||
*E1244* >
|
||||
Bad color string: {str}
|
||||
*E1244*
|
||||
Bad color string: {str} ~
|
||||
|
||||
The provided color did not conform to the pattern #rrggbb
|
||||
|
||||
*E458* >
|
||||
Cannot allocate colormap entry, some colors may be incorrect
|
||||
*E458*
|
||||
Cannot allocate colormap entry, some colors may be incorrect ~
|
||||
|
||||
This means that there are not enough colors available for Vim. It will still
|
||||
run, but some of the colors will not appear in the specified color. Try
|
||||
stopping other applications that use many colors, or start them after starting
|
||||
gvim.
|
||||
Browsers are known to consume a lot of colors. You can avoid this with
|
||||
netscape by telling it to use its own colormap: >
|
||||
netscape -install
|
||||
Or tell it to limit to a certain number of colors (64 should work well): >
|
||||
netscape -ncols 64
|
||||
This can also be done with a line in your Xdefaults file: >
|
||||
Netscape*installColormap: Yes
|
||||
or >
|
||||
Netscape*maxImageColors: 64
|
||||
<
|
||||
*E79* >
|
||||
Cannot expand wildcards
|
||||
netscape by telling it to use its own colormap:
|
||||
netscape -install ~
|
||||
Or tell it to limit to a certain number of colors (64 should work well):
|
||||
netscape -ncols 64 ~
|
||||
This can also be done with a line in your Xdefaults file:
|
||||
Netscape*installColormap: Yes ~
|
||||
or
|
||||
Netscape*maxImageColors: 64 ~
|
||||
|
||||
*E79*
|
||||
Cannot expand wildcards ~
|
||||
|
||||
A filename contains a strange combination of characters, which causes Vim to
|
||||
attempt expanding wildcards but this fails. This does NOT mean that no
|
||||
matching file names could be found, but that the pattern was illegal.
|
||||
|
||||
*E459* >
|
||||
Cannot go back to previous directory
|
||||
*E459*
|
||||
Cannot go back to previous directory ~
|
||||
|
||||
While expanding a file name, Vim failed to go back to the previously used
|
||||
directory. All file names being used may be invalid now! You need to have
|
||||
execute permission on the current directory.
|
||||
|
||||
*E190* *E212* >
|
||||
Cannot open "{filename}" for writing
|
||||
Can't open file for writing
|
||||
*E190* *E212*
|
||||
Cannot open "{filename}" for writing ~
|
||||
Can't open file for writing ~
|
||||
|
||||
For some reason the file you are writing to cannot be created or overwritten.
|
||||
The reason could be that you do not have permission to write in the directory
|
||||
or the file name is not valid.
|
||||
|
||||
*E166* >
|
||||
Can't open linked file for writing
|
||||
*E166*
|
||||
Can't open linked file for writing ~
|
||||
|
||||
You are trying to write to a file which can't be overwritten, and the file is
|
||||
a link (either a hard link or a symbolic link). Writing might still be
|
||||
@@ -197,20 +198,20 @@ place. If you really want to write the file under this name, you have to
|
||||
manually delete the link or the file, or change the permissions so that Vim
|
||||
can overwrite.
|
||||
|
||||
*E46* >
|
||||
Cannot change read-only variable "{name}"
|
||||
*E46*
|
||||
Cannot change read-only variable "{name}" ~
|
||||
|
||||
You are trying to assign a value to an argument of a function |a:var| or a Vim
|
||||
internal variable |v:var| which is read-only.
|
||||
|
||||
*E90* >
|
||||
Cannot unload last buffer
|
||||
*E90*
|
||||
Cannot unload last buffer ~
|
||||
|
||||
Vim always requires one buffer to be loaded, otherwise there would be nothing
|
||||
to display in the window.
|
||||
|
||||
*E40* >
|
||||
Can't open errorfile <filename>
|
||||
*E40*
|
||||
Can't open errorfile <filename> ~
|
||||
|
||||
When using the ":make" or ":grep" commands: The file used to save the error
|
||||
messages or grep output cannot be opened. This can have several causes:
|
||||
@@ -222,8 +223,8 @@ messages or grep output cannot be opened. This can have several causes:
|
||||
- The 'grepprg' or 'makeprg' could not be executed. This cannot always be
|
||||
detected (especially on MS-Windows). Check your $PATH.
|
||||
|
||||
>
|
||||
Can't open file C:\TEMP\VIoD243.TMP
|
||||
|
||||
Can't open file C:\TEMP\VIoD243.TMP ~
|
||||
|
||||
On MS-Windows, this message appears when the output of an external command was
|
||||
to be read, but the command didn't run successfully. This can be caused by
|
||||
@@ -231,21 +232,21 @@ many things. Check the 'shell', 'shellquote', 'shellxquote', 'shellslash' and
|
||||
related options. It might also be that the external command was not found,
|
||||
there is no different error message for that.
|
||||
|
||||
*E12* >
|
||||
Command not allowed from exrc/vimrc in current dir or tag search
|
||||
*E12*
|
||||
Command not allowed from exrc/vimrc in current dir or tag search ~
|
||||
|
||||
Some commands are not allowed for security reasons. These commands mostly
|
||||
come from a .exrc or .vimrc file in the current directory, or from a tags
|
||||
file. Also see 'secure'.
|
||||
|
||||
*E74* >
|
||||
Command too complex
|
||||
*E74*
|
||||
Command too complex ~
|
||||
|
||||
A mapping resulted in a very long command string. Could be caused by a
|
||||
mapping that indirectly calls itself.
|
||||
|
||||
>
|
||||
CONVERSION ERROR
|
||||
|
||||
CONVERSION ERROR ~
|
||||
|
||||
When writing a file and the text "CONVERSION ERROR" appears, this means that
|
||||
some bits were lost when converting text from the internally used UTF-8 to the
|
||||
@@ -257,51 +258,51 @@ If there is a backup file, when 'writebackup' or 'backup' is set, it will not
|
||||
be deleted, so you can move it back into place if you want to discard the
|
||||
changes.
|
||||
|
||||
*E302* >
|
||||
Could not rename swap file
|
||||
*E302*
|
||||
Could not rename swap file ~
|
||||
|
||||
When the file name changes, Vim tries to rename the |swap-file| as well.
|
||||
This failed and the old swap file is now still used. Mostly harmless.
|
||||
|
||||
*E43* *E44* >
|
||||
Damaged match string
|
||||
Corrupted regexp program
|
||||
*E43* *E44*
|
||||
Damaged match string ~
|
||||
Corrupted regexp program ~
|
||||
|
||||
Something inside Vim went wrong and resulted in a corrupted regexp. If you
|
||||
know how to reproduce this problem, please report it. |bugs|
|
||||
|
||||
*E208* *E209* *E210* >
|
||||
Error writing to "{filename}"
|
||||
Error closing "{filename}"
|
||||
Error reading "{filename}"
|
||||
*E208* *E209* *E210*
|
||||
Error writing to "{filename}" ~
|
||||
Error closing "{filename}" ~
|
||||
Error reading "{filename}" ~
|
||||
|
||||
This occurs when Vim is trying to rename a file, but a simple change of file
|
||||
name doesn't work. Then the file will be copied, but somehow this failed.
|
||||
The result may be that both the original file and the destination file exist
|
||||
and the destination file may be incomplete.
|
||||
|
||||
>
|
||||
Vim: Error reading input, exiting...
|
||||
|
||||
Vim: Error reading input, exiting... ~
|
||||
|
||||
This occurs when Vim cannot read typed characters while input is required.
|
||||
Vim got stuck, the only thing it can do is exit. This can happen when both
|
||||
stdin and stderr are redirected and executing a script that doesn't exit Vim.
|
||||
|
||||
*E47* >
|
||||
Error while reading errorfile
|
||||
*E47*
|
||||
Error while reading errorfile ~
|
||||
|
||||
Reading the error file was not possible. This is NOT caused by an error
|
||||
message that was not recognized.
|
||||
|
||||
*E80* >
|
||||
Error while writing
|
||||
*E80*
|
||||
Error while writing ~
|
||||
|
||||
Writing a file was not completed successfully. The file is probably
|
||||
incomplete.
|
||||
|
||||
*E13* *E189* >
|
||||
File exists (add ! to override)
|
||||
"{filename}" exists (add ! to override)
|
||||
*E13* *E189*
|
||||
File exists (add ! to override) ~
|
||||
"{filename}" exists (add ! to override) ~
|
||||
|
||||
You are protected from accidentally overwriting a file. When you want to
|
||||
write anyway, use the same command, but add a "!" just after the command.
|
||||
@@ -310,8 +311,8 @@ Example: >
|
||||
changes to: >
|
||||
:w! /tmp/test
|
||||
<
|
||||
*E768* >
|
||||
Swap file exists: {filename} (:silent! overrides)
|
||||
*E768*
|
||||
Swap file exists: {filename} (:silent! overrides) ~
|
||||
|
||||
You are protected from overwriting a file that is being edited by Vim. This
|
||||
happens when you use ":w! filename" and a swapfile is found.
|
||||
@@ -323,115 +324,115 @@ happens when you use ":w! filename" and a swapfile is found.
|
||||
< The special command is needed, since you already added the ! for overwriting
|
||||
an existing file.
|
||||
|
||||
*E139* >
|
||||
File is loaded in another buffer
|
||||
*E139*
|
||||
File is loaded in another buffer ~
|
||||
|
||||
You are trying to write a file under a name which is also used in another
|
||||
buffer. This would result in two versions of the same file.
|
||||
|
||||
*E142* >
|
||||
File not written: Writing is disabled by 'write' option
|
||||
*E142*
|
||||
File not written: Writing is disabled by 'write' option ~
|
||||
|
||||
The 'write' option is off. This makes all commands that try to write a file
|
||||
generate this message. This could be caused by a |-m| commandline argument.
|
||||
You can switch the 'write' option on with ":set write".
|
||||
|
||||
*E25* >
|
||||
GUI cannot be used: Not enabled at compile time
|
||||
*E25*
|
||||
GUI cannot be used: Not enabled at compile time ~
|
||||
|
||||
You are running a version of Vim that doesn't include the GUI code. Therefore
|
||||
"gvim" and ":gui" don't work.
|
||||
|
||||
*E49* >
|
||||
Invalid scroll size
|
||||
*E49*
|
||||
Invalid scroll size ~
|
||||
|
||||
This is caused by setting an invalid value for the 'scroll', 'scrolljump' or
|
||||
'scrolloff' options.
|
||||
|
||||
*E17* >
|
||||
"{filename}" is a directory
|
||||
*E17*
|
||||
"{filename}" is a directory ~
|
||||
|
||||
You tried to write a file with the name of a directory. This is not possible.
|
||||
You probably need to append a file name.
|
||||
|
||||
*E19* >
|
||||
Mark has invalid line number
|
||||
*E19*
|
||||
Mark has invalid line number ~
|
||||
|
||||
You are using a mark that has a line number that doesn't exist. This can
|
||||
happen when you have a mark in another file, and some other program has
|
||||
deleted lines from it.
|
||||
|
||||
*E219* *E220* >
|
||||
Missing {.
|
||||
Missing }.
|
||||
*E219* *E220*
|
||||
Missing {. ~
|
||||
Missing }. ~
|
||||
|
||||
Using a {} construct in a file name, but there is a { without a matching } or
|
||||
the other way around. It should be used like this: {foo,bar}. This matches
|
||||
"foo" and "bar".
|
||||
|
||||
*E315* >
|
||||
ml_get: invalid lnum: {number}
|
||||
*E315*
|
||||
ml_get: invalid lnum: {number} ~
|
||||
|
||||
This is an internal Vim error. Please try to find out how it can be
|
||||
reproduced, and submit a bug report |bugreport.vim|.
|
||||
|
||||
*E173* >
|
||||
{number} more files to edit
|
||||
*E173*
|
||||
{number} more files to edit ~
|
||||
|
||||
You are trying to exit, while the last item in the argument list has not been
|
||||
edited. This protects you from accidentally exiting when you still have more
|
||||
files to work on. See |argument-list|. If you do want to exit, just do it
|
||||
again and it will work.
|
||||
|
||||
*E23* *E194* >
|
||||
No alternate file
|
||||
No alternate file name to substitute for '#'
|
||||
*E23* *E194*
|
||||
No alternate file ~
|
||||
No alternate file name to substitute for '#' ~
|
||||
|
||||
The alternate file is not defined yet. See |alternate-file|.
|
||||
|
||||
*E32* >
|
||||
No file name
|
||||
*E32*
|
||||
No file name ~
|
||||
|
||||
The current buffer has no name. To write it, use ":w fname". Or give the
|
||||
buffer a name with ":file fname".
|
||||
|
||||
*E141* >
|
||||
No file name for buffer {number}
|
||||
*E141*
|
||||
No file name for buffer {number} ~
|
||||
|
||||
One of the buffers that was changed does not have a file name. Therefore it
|
||||
cannot be written. You need to give the buffer a file name: >
|
||||
:buffer {number}
|
||||
:file {filename}
|
||||
<
|
||||
*E33* >
|
||||
No previous substitute regular expression
|
||||
*E33*
|
||||
No previous substitute regular expression ~
|
||||
|
||||
When using the '~' character in a pattern, it is replaced with the previously
|
||||
used pattern in a ":substitute" command. This fails when no such command has
|
||||
been used yet. See |/~|. This also happens when using ":s/pat/%/", where the
|
||||
"%" stands for the previous substitute string.
|
||||
|
||||
*E35* >
|
||||
No previous regular expression
|
||||
*E35*
|
||||
No previous regular expression ~
|
||||
|
||||
When using an empty search pattern, the previous search pattern is used. But
|
||||
that is not possible if there was no previous search.
|
||||
|
||||
*E24* >
|
||||
No such abbreviation
|
||||
*E24*
|
||||
No such abbreviation ~
|
||||
|
||||
You have used an ":unabbreviate" command with an argument which is not an
|
||||
existing abbreviation. All variations of this command give the same message:
|
||||
":cunabbrev", ":iunabbrev", etc. Check for trailing white space.
|
||||
|
||||
>
|
||||
/dev/dsp: No such file or directory
|
||||
|
||||
/dev/dsp: No such file or directory ~
|
||||
|
||||
Only given for GTK GUI with Gnome support. Gnome tries to use the audio
|
||||
device and it isn't present. You can ignore this error.
|
||||
|
||||
*E31* >
|
||||
No such mapping
|
||||
*E31*
|
||||
No such mapping ~
|
||||
|
||||
You have used an ":unmap" command with an argument which is not an existing
|
||||
mapping. All variations of this command give the same message: ":cunmap",
|
||||
@@ -440,9 +441,9 @@ mapping. All variations of this command give the same message: ":cunmap",
|
||||
- If the mapping is buffer-local you need to use ":unmap <buffer>".
|
||||
|:map-<buffer>|
|
||||
|
||||
*E37* *E89* >
|
||||
No write since last change (add ! to override)
|
||||
No write since last change for buffer {N} (add ! to override)
|
||||
*E37* *E89*
|
||||
No write since last change (add ! to override) ~
|
||||
No write since last change for buffer {N} (add ! to override) ~
|
||||
|
||||
You are trying to |abandon| a file that has changes. Vim protects you from
|
||||
losing your work. You can either write the changed file with ":w", or, if you
|
||||
@@ -452,8 +453,8 @@ adding a '!' character just after the command you used. Example: >
|
||||
changes to: >
|
||||
:e! other_file
|
||||
<
|
||||
*E162* >
|
||||
No write since last change for buffer "{name}"
|
||||
*E162*
|
||||
No write since last change for buffer "{name}" ~
|
||||
|
||||
This appears when you try to exit Vim while some buffers are changed. You
|
||||
will either have to write the changed buffer (with |:w|), or use a command to
|
||||
@@ -461,23 +462,23 @@ abandon the buffer forcefully, e.g., with ":qa!". Careful, make sure you
|
||||
don't throw away changes you really want to keep. You might have forgotten
|
||||
about a buffer, especially when 'hidden' is set.
|
||||
|
||||
>
|
||||
[No write since last change]
|
||||
|
||||
[No write since last change] ~
|
||||
|
||||
This appears when executing a shell command while at least one buffer was
|
||||
changed. To avoid the message reset the 'warn' option.
|
||||
|
||||
*E38* >
|
||||
Null argument
|
||||
*E38*
|
||||
Null argument ~
|
||||
|
||||
Something inside Vim went wrong and resulted in a NULL pointer. If you know
|
||||
how to reproduce this problem, please report it. |bugs|
|
||||
|
||||
*E41* *E82* *E83* *E342* >
|
||||
Out of memory!
|
||||
Out of memory! (allocating {number} bytes)
|
||||
Cannot allocate any buffer, exiting...
|
||||
Cannot allocate buffer, using other one...
|
||||
*E41* *E82* *E83* *E342*
|
||||
Out of memory! ~
|
||||
Out of memory! (allocating {number} bytes) ~
|
||||
Cannot allocate any buffer, exiting... ~
|
||||
Cannot allocate buffer, using other one... ~
|
||||
|
||||
Oh, oh. You must have been doing something complicated, or some other program
|
||||
is consuming your memory. Be careful! Vim is not completely prepared for an
|
||||
@@ -495,16 +496,16 @@ in memory, you can reduce that with these options:
|
||||
helps for a change that affects all lines.
|
||||
- 'undoreload' Set to zero to disable.
|
||||
|
||||
*E339* >
|
||||
Pattern too long
|
||||
*E339*
|
||||
Pattern too long ~
|
||||
|
||||
This happens on systems with 16 bit ints: The compiled regexp pattern is
|
||||
longer than about 65000 characters. Try using a shorter pattern.
|
||||
It also happens when the offset of a rule doesn't fit in the space available.
|
||||
Try simplifying the pattern.
|
||||
|
||||
*E45* >
|
||||
'readonly' option is set (add ! to override)
|
||||
*E45*
|
||||
'readonly' option is set (add ! to override) ~
|
||||
|
||||
You are trying to write a file that was marked as read-only. To write the
|
||||
file anyway, either reset the 'readonly' option, or add a '!' character just
|
||||
@@ -513,18 +514,18 @@ after the command you used. Example: >
|
||||
changes to: >
|
||||
:w!
|
||||
<
|
||||
*E294* *E295* *E301* >
|
||||
Read error in swap file
|
||||
Seek error in swap file read
|
||||
Oops, lost the swap file!!!
|
||||
*E294* *E295* *E301*
|
||||
Read error in swap file ~
|
||||
Seek error in swap file read ~
|
||||
Oops, lost the swap file!!! ~
|
||||
|
||||
Vim tried to read text from the |swap-file|, but something went wrong. The
|
||||
text in the related buffer may now be corrupted! Check carefully before you
|
||||
write a buffer. You may want to write it in another file and check for
|
||||
differences.
|
||||
|
||||
*E192* >
|
||||
Recursive use of :normal too deep
|
||||
*E192*
|
||||
Recursive use of :normal too deep ~
|
||||
|
||||
You are using a ":normal" command, whose argument again uses a ":normal"
|
||||
command in a recursive way. This is restricted to 'maxmapdepth' levels. This
|
||||
@@ -532,16 +533,16 @@ example illustrates how to get this message: >
|
||||
:map gq :normal gq<CR>
|
||||
If you type "gq", it will execute this mapping, which will call "gq" again.
|
||||
|
||||
*E22* >
|
||||
Scripts nested too deep
|
||||
*E22*
|
||||
Scripts nested too deep ~
|
||||
|
||||
Scripts can be read with the "-s" command-line argument and with the
|
||||
`:source!` command. The script can then again read another script. This can
|
||||
continue for about 14 levels. When more nesting is done, Vim assumes that
|
||||
there is a recursive loop and stops with this error message.
|
||||
|
||||
*E319* >
|
||||
Sorry, the command is not available in this version
|
||||
*E319*
|
||||
Sorry, the command is not available in this version ~
|
||||
|
||||
You have used a command that is not present in the version of Vim you are
|
||||
using. When compiling Vim, many different features can be enabled or
|
||||
@@ -549,8 +550,8 @@ disabled. This depends on how big Vim has chosen to be and the operating
|
||||
system. See |+feature-list| for when which feature is available. The
|
||||
|:version| command shows which feature Vim was compiled with.
|
||||
|
||||
*E300* >
|
||||
Swap file already exists (symlink attack?)
|
||||
*E300*
|
||||
Swap file already exists (symlink attack?) ~
|
||||
|
||||
This message appears when Vim is trying to open a swap file and finds it
|
||||
already exists or finds a symbolic link in its place. This shouldn't happen,
|
||||
@@ -559,8 +560,8 @@ opened the same file at exactly the same moment (very unlikely) or someone is
|
||||
attempting a symlink attack (could happen when editing a file in /tmp or when
|
||||
'directory' starts with "/tmp", which is a bad choice).
|
||||
|
||||
*E432* >
|
||||
Tags file not sorted: {file name}
|
||||
*E432*
|
||||
Tags file not sorted: {file name} ~
|
||||
|
||||
Vim (and Vi) expect tags files to be sorted in ASCII order. Binary searching
|
||||
can then be used, which is a lot faster than a linear search. If your tags
|
||||
@@ -569,21 +570,21 @@ This message is only given when Vim detects a problem when searching for a
|
||||
tag. Sometimes this message is not given, even though the tags file is not
|
||||
properly sorted.
|
||||
|
||||
*E424* >
|
||||
Too many different highlighting attributes in use
|
||||
*E424*
|
||||
Too many different highlighting attributes in use ~
|
||||
|
||||
Vim can only handle about 223 different kinds of highlighting. If you run
|
||||
into this limit, you have used too many |:highlight| commands with different
|
||||
arguments. A ":highlight link" is not counted.
|
||||
|
||||
*E77* >
|
||||
Too many file names
|
||||
*E77*
|
||||
Too many file names ~
|
||||
|
||||
When expanding file names, more than one match was found. Only one match is
|
||||
allowed for the command that was used.
|
||||
|
||||
*E303* >
|
||||
Unable to open swap file for "{filename}", recovery impossible
|
||||
*E303*
|
||||
Unable to open swap file for "{filename}", recovery impossible ~
|
||||
|
||||
Vim was not able to create a swap file. You can still edit the file, but if
|
||||
Vim unexpectedly exits the changes will be lost. And Vim may consume a lot of
|
||||
@@ -591,25 +592,25 @@ memory when editing a big file. You may want to change the 'directory' option
|
||||
to avoid this error. This error is not given when 'directory' is empty. See
|
||||
|swap-file|.
|
||||
|
||||
*E140* >
|
||||
Use ! to write partial buffer
|
||||
*E140*
|
||||
Use ! to write partial buffer ~
|
||||
|
||||
When using a range to write part of a buffer, it is unusual to overwrite the
|
||||
original file. It is probably a mistake (e.g., when Visual mode was active
|
||||
when using ":w"), therefore Vim requires using a ! after the command, e.g.:
|
||||
":3,10w!".
|
||||
>
|
||||
|
||||
Warning: Cannot convert string "<Key>Escape,_Key_Cancel" to type
|
||||
VirtualBinding
|
||||
|
||||
Warning: Cannot convert string "<Key>Escape,_Key_Cancel" to type ~
|
||||
VirtualBinding ~
|
||||
|
||||
Messages like this appear when starting up. This is not a Vim problem, your
|
||||
X11 configuration is wrong. You can find a hint on how to solve this here:
|
||||
http://groups.yahoo.com/group/solarisonintel/message/12179.
|
||||
[this URL is no longer valid]
|
||||
|
||||
*W10* >
|
||||
Warning: Changing a readonly file
|
||||
*W10*
|
||||
Warning: Changing a readonly file ~
|
||||
|
||||
The file is read-only and you are making a change to it anyway. You can use
|
||||
the |FileChangedRO| autocommand event to avoid this message (the autocommand
|
||||
@@ -617,15 +618,15 @@ must reset the 'readonly' option). See 'modifiable' to completely disallow
|
||||
making changes to a file.
|
||||
This message is only given for the first change after 'readonly' has been set.
|
||||
|
||||
*W13* >
|
||||
Warning: File "{filename}" has been created after editing started
|
||||
*W13*
|
||||
Warning: File "{filename}" has been created after editing started ~
|
||||
|
||||
You are editing a file in Vim when it didn't exist, but it does exist now.
|
||||
You will have to decide if you want to keep the version in Vim or the newly
|
||||
created file. This message is not given when 'buftype' is not empty.
|
||||
|
||||
*W11* >
|
||||
Warning: File "{filename}" has changed since editing started
|
||||
*W11*
|
||||
Warning: File "{filename}" has changed since editing started ~
|
||||
|
||||
The file which you have started editing has got another timestamp and the
|
||||
contents changed (more precisely: When reading the file again with the current
|
||||
@@ -648,15 +649,15 @@ starts. It can be fixed in one of these ways:
|
||||
If you get W11 all the time, you may need to disable "Acronis Active
|
||||
Protection" or register Vim as a trusted service/application.
|
||||
|
||||
*W12* >
|
||||
Warning: File "{filename}" has changed and the buffer was changed in Vim as well
|
||||
*W12*
|
||||
Warning: File "{filename}" has changed and the buffer was changed in Vim as well ~
|
||||
|
||||
Like the above, and the buffer for the file was changed in this Vim as well.
|
||||
You will have to decide if you want to keep the version in this Vim or the one
|
||||
on disk. This message is not given when 'buftype' is not empty.
|
||||
|
||||
*W16* >
|
||||
Warning: Mode of file "{filename}" has changed since editing started
|
||||
*W16*
|
||||
Warning: Mode of file "{filename}" has changed since editing started ~
|
||||
|
||||
When the timestamp for a buffer was changed and the contents are still the
|
||||
same but the mode (permissions) have changed. This usually occurs when
|
||||
@@ -664,37 +665,37 @@ checking out a file from a version control system, which causes the read-only
|
||||
bit to be reset. It should be safe to reload the file. Set 'autoread' to
|
||||
automatically reload the file.
|
||||
|
||||
*E211* >
|
||||
File "{filename}" no longer available
|
||||
*E211*
|
||||
File "{filename}" no longer available ~
|
||||
|
||||
The file which you have started editing has disappeared, or is no longer
|
||||
accessible. Make sure you write the buffer somewhere to avoid losing
|
||||
changes. This message is not given when 'buftype' is not empty.
|
||||
|
||||
*W14* >
|
||||
Warning: List of file names overflow
|
||||
*W14*
|
||||
Warning: List of file names overflow ~
|
||||
|
||||
You must be using an awful lot of buffers. It's now possible that two buffers
|
||||
have the same number, which causes various problems. You might want to exit
|
||||
Vim and restart it.
|
||||
|
||||
*E931* >
|
||||
Buffer cannot be registered
|
||||
*E931*
|
||||
Buffer cannot be registered ~
|
||||
|
||||
Out of memory or a duplicate buffer number. May happen after W14. Looking up
|
||||
a buffer will not always work, better restart Vim.
|
||||
|
||||
*E296* *E297* >
|
||||
Seek error in swap file write
|
||||
Write error in swap file
|
||||
*E296* *E297*
|
||||
Seek error in swap file write ~
|
||||
Write error in swap file ~
|
||||
|
||||
This mostly happens when the disk is full. Vim could not write text into the
|
||||
|swap-file|. It's not directly harmful, but when Vim unexpectedly exits some
|
||||
text may be lost without recovery being possible. Vim might run out of memory
|
||||
when this problem persists.
|
||||
|
||||
*connection-refused* >
|
||||
Xlib: connection to "<machine-name:0.0" refused by server
|
||||
*connection-refused*
|
||||
Xlib: connection to "<machine-name:0.0" refused by server ~
|
||||
|
||||
This happens when Vim tries to connect to the X server, but the X server does
|
||||
not allow a connection. The connection to the X server is needed to be able
|
||||
@@ -702,55 +703,56 @@ to restore the title and for the xterm clipboard support. Unfortunately this
|
||||
error message cannot be avoided, except by disabling the |+xterm_clipboard|
|
||||
and |+X11| features.
|
||||
|
||||
*E10* >
|
||||
\\ should be followed by /, ? or &
|
||||
*E10*
|
||||
\\ should be followed by /, ? or & ~
|
||||
|
||||
A command line started with a backslash or the range of a command contained a
|
||||
backslash in a wrong place. This is often caused by command-line continuation
|
||||
being disabled. Remove the 'C' flag from the 'cpoptions' option to enable it.
|
||||
Or use ":set nocp".
|
||||
|
||||
*E471* >
|
||||
Argument required
|
||||
*E471*
|
||||
Argument required ~
|
||||
|
||||
This happens when an Ex command with mandatory argument(s) was executed, but
|
||||
no argument has been specified.
|
||||
|
||||
*E474* *E475* *E983* >
|
||||
Invalid argument
|
||||
Invalid argument: {arg}
|
||||
Duplicate argument: {arg}
|
||||
*E474* *E475* *E983*
|
||||
Invalid argument ~
|
||||
Invalid argument: {arg} ~
|
||||
Duplicate argument: {arg} ~
|
||||
|
||||
An Ex command or function has been executed, but an invalid argument has been
|
||||
specified.
|
||||
|
||||
*E488* >
|
||||
Trailing characters
|
||||
*E488*
|
||||
Trailing characters ~
|
||||
Trailing characters: {text} ~
|
||||
|
||||
An argument has been added to an Ex command that does not permit one.
|
||||
Or the argument has invalid characters and has not been recognized.
|
||||
|
||||
*E477* *E478* >
|
||||
No ! allowed
|
||||
Don't panic!
|
||||
*E477* *E478*
|
||||
No ! allowed ~
|
||||
Don't panic! ~
|
||||
|
||||
You have added a "!" after an Ex command that doesn't permit one.
|
||||
|
||||
*E481* >
|
||||
No range allowed
|
||||
*E481*
|
||||
No range allowed ~
|
||||
|
||||
A range was specified for an Ex command that doesn't permit one. See
|
||||
|cmdline-ranges|.
|
||||
|
||||
*E482* *E483* >
|
||||
Can't create file {filename}
|
||||
Can't get temp file name
|
||||
*E482* *E483*
|
||||
Can't create file {filename} ~
|
||||
Can't get temp file name ~
|
||||
|
||||
Vim cannot create a temporary file.
|
||||
|
||||
*E484* *E485* >
|
||||
Can't open file {filename}
|
||||
Can't read file {filename}
|
||||
*E484* *E485*
|
||||
Can't open file {filename} ~
|
||||
Can't read file {filename} ~
|
||||
|
||||
Vim cannot read a temporary file. Especially on Windows, this can be caused
|
||||
by wrong escaping of special characters for cmd.exe; the approach was
|
||||
@@ -758,8 +760,8 @@ changed with patch 7.3.443. Try using |shellescape()| for all shell arguments
|
||||
given to |system()|, or explicitly add escaping with ^. Also see
|
||||
'shellxquote' and 'shellxescape'.
|
||||
|
||||
*E464* >
|
||||
Ambiguous use of user-defined command
|
||||
*E464*
|
||||
Ambiguous use of user-defined command ~
|
||||
|
||||
There are two user-defined commands with a common name prefix, and you used
|
||||
Command-line completion to execute one of them. |user-cmd-ambiguous|
|
||||
@@ -768,23 +770,22 @@ Example: >
|
||||
:command MyCommand2 echo "two"
|
||||
:MyCommand
|
||||
<
|
||||
*E492* >
|
||||
Not an editor command
|
||||
*E492*
|
||||
Not an editor command ~
|
||||
|
||||
You tried to execute a command that is neither an Ex command nor
|
||||
a user-defined command.
|
||||
|
||||
*E943* >
|
||||
Command table needs to be updated, run 'make cmdidxs'
|
||||
*E943*
|
||||
Command table needs to be updated, run 'make cmdidxs' ~
|
||||
|
||||
This can only happen when changing the source code, when adding a command in
|
||||
src/ex_cmds.h. The lookup table then needs to be updated, by running: >
|
||||
make cmdidxs
|
||||
<
|
||||
*E928* *E889* *E839* >
|
||||
E928: String required
|
||||
E889: Number required
|
||||
E839: Bool required
|
||||
*E928* *E889*
|
||||
E928: String required ~
|
||||
E889: Number required ~
|
||||
|
||||
These happen when a value or expression is used that does not have the
|
||||
expected type.
|
||||
@@ -797,7 +798,7 @@ This is an (incomplete) overview of various messages that Vim gives:
|
||||
*hit-enter* *press-enter* *hit-return*
|
||||
*press-return* *hit-enter-prompt*
|
||||
|
||||
Press ENTER or type command to continue
|
||||
Press ENTER or type command to continue ~
|
||||
|
||||
This message is given when there is something on the screen for you to read,
|
||||
and the screen is about to be redrawn:
|
||||
@@ -841,9 +842,9 @@ Also see 'mouse'. The hit-enter message is highlighted with the |hl-Question|
|
||||
group.
|
||||
|
||||
|
||||
*more-prompt* *pager* >
|
||||
-- More --
|
||||
-- More -- SPACE/d/j: screen/page/line down, b/u/k: up, q: quit
|
||||
*more-prompt* *pager*
|
||||
-- More -- ~
|
||||
-- More -- SPACE/d/j: screen/page/line down, b/u/k: up, q: quit ~
|
||||
|
||||
This message is given when the screen is filled with messages. It is only
|
||||
given when the 'more' option is on. It is highlighted with the |hl-MoreMsg|
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*options.txt* For Vim version 8.2. Last change: 2022 Jan 02
|
||||
*options.txt* For Vim version 8.2. Last change: 2022 Jan 29
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -170,7 +170,7 @@ When a key code is not set, it's like it does not exist. Trying to get its
|
||||
value will result in an error: >
|
||||
:set t_kb=
|
||||
:set t_kb
|
||||
E846: Key code not set: t_kb
|
||||
< E846: Key code not set: t_kb ~
|
||||
|
||||
The t_xx options cannot be set from a |modeline| or in the |sandbox|, for
|
||||
security reasons.
|
||||
@@ -1229,7 +1229,9 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
the script ID (|local-function|). Example: >
|
||||
set bexpr=s:MyBalloonExpr()
|
||||
set bexpr=<SID>SomeBalloonExpr()
|
||||
<
|
||||
< Otherwise, the expression is evaluated in the context of the script
|
||||
where the option was set, thus script-local items are available.
|
||||
|
||||
The expression will be evaluated in the |sandbox| when set from a
|
||||
modeline, see |sandbox-option|.
|
||||
This option cannot be set in a modeline when 'modelineexpr' is off.
|
||||
@@ -1370,6 +1372,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
text should normally be narrower. This prevents
|
||||
text indented almost to the right window border
|
||||
occupying lot of vertical space when broken.
|
||||
(default: 20)
|
||||
shift:{n} After applying 'breakindent', the wrapped line's
|
||||
beginning will be shifted by the given number of
|
||||
characters. It permits dynamic French paragraph
|
||||
@@ -1555,8 +1558,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
preferred, because it is much faster.
|
||||
'charconvert' is not used when reading stdin |--|, because there is no
|
||||
file to convert from. You will have to save the text in a file first.
|
||||
The expression must return zero or an empty string for success,
|
||||
non-zero for failure.
|
||||
The expression must return zero, false or an empty string for success,
|
||||
non-zero or true for failure.
|
||||
The possible encoding names encountered are in 'encoding'.
|
||||
Additionally, names given in 'fileencodings' and 'fileencoding' are
|
||||
used.
|
||||
@@ -1580,9 +1583,18 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
Note that v:fname_in and v:fname_out will never be the same.
|
||||
Note that v:charconvert_from and v:charconvert_to may be different
|
||||
from 'encoding'. Vim internally uses UTF-8 instead of UCS-2 or UCS-4.
|
||||
|
||||
Encryption is not done by Vim when using 'charconvert'. If you want
|
||||
to encrypt the file after conversion, 'charconvert' should take care
|
||||
of this.
|
||||
|
||||
If the 'charconvert' expression starts with s: or |<SID>|, then it is
|
||||
replaced with the script ID (|local-function|). Example: >
|
||||
set charconvert=s:MyConvert()
|
||||
set charconvert=<SID>SomeConvert()
|
||||
< Otherwise the expression is evaluated in the context of the script
|
||||
where the option was set, thus script-local items are available.
|
||||
|
||||
This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||
security reasons.
|
||||
|
||||
@@ -3438,7 +3450,9 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
{not available when compiled without the |+folding|
|
||||
or |+eval| features}
|
||||
The expression used for when 'foldmethod' is "expr". It is evaluated
|
||||
for each line to obtain its fold level. See |fold-expr|.
|
||||
for each line to obtain its fold level. The context is set to the
|
||||
script where 'foldexpr' was set, script-local items can be accessed.
|
||||
See |fold-expr| for the usage.
|
||||
|
||||
The expression will be evaluated in the |sandbox| if set from a
|
||||
modeline, see |sandbox-option|.
|
||||
@@ -3572,7 +3586,9 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
{not available when compiled without the |+folding|
|
||||
feature}
|
||||
An expression which is used to specify the text displayed for a closed
|
||||
fold. See |fold-foldtext|.
|
||||
fold. The context is set to the script where 'foldexpr' was set,
|
||||
script-local items can be accessed. See |fold-foldtext| for the
|
||||
usage.
|
||||
|
||||
The expression will be evaluated in the |sandbox| if set from a
|
||||
modeline, see |sandbox-option|.
|
||||
@@ -3615,7 +3631,9 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
the script ID (|local-function|). Example: >
|
||||
set formatexpr=s:MyFormatExpr()
|
||||
set formatexpr=<SID>SomeFormatExpr()
|
||||
<
|
||||
< Otherwise, the expression is evaluated in the context of the script
|
||||
where the option was set, thus script-local items are available.
|
||||
|
||||
The expression will be evaluated in the |sandbox| when set from a
|
||||
modeline, see |sandbox-option|. That stops the option from working,
|
||||
since changing the buffer text is not allowed.
|
||||
@@ -4462,7 +4480,9 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
the script ID (|local-function|). Example: >
|
||||
set includeexpr=s:MyIncludeExpr(v:fname)
|
||||
set includeexpr=<SID>SomeIncludeExpr(v:fname)
|
||||
<
|
||||
< Otherwise, the expression is evaluated in the context of the script
|
||||
where the option was set, thus script-local items are available.
|
||||
|
||||
The expression will be evaluated in the |sandbox| when set from a
|
||||
modeline, see |sandbox-option|.
|
||||
This option cannot be set in a modeline when 'modelineexpr' is off.
|
||||
@@ -4536,11 +4556,14 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
The expression is evaluated with |v:lnum| set to the line number for
|
||||
which the indent is to be computed. The cursor is also in this line
|
||||
when the expression is evaluated (but it may be moved around).
|
||||
|
||||
If the expression starts with s: or |<SID>|, then it is replaced with
|
||||
the script ID (|local-function|). Example: >
|
||||
set indentexpr=s:MyIndentExpr()
|
||||
set indentexpr=<SID>SomeIndentExpr()
|
||||
<
|
||||
< Otherwise, the expression is evaluated in the context of the script
|
||||
where the option was set, thus script-local items are available.
|
||||
|
||||
The expression must return the number of spaces worth of indent. It
|
||||
can return "-1" to keep the current indent (this means 'autoindent' is
|
||||
used for the indent).
|
||||
@@ -5684,7 +5707,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
*'opendevice'* *'odev'* *'noopendevice'* *'noodev'*
|
||||
'opendevice' 'odev' boolean (default off)
|
||||
global
|
||||
{only for MS-Windows}
|
||||
{only for MS-Windows} *E796*
|
||||
Enable reading and writing from devices. This may get Vim stuck on a
|
||||
device that can be opened but doesn't actually do the I/O. Therefore
|
||||
it is off by default.
|
||||
@@ -7349,6 +7372,12 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
suggestions is never more than the value of 'lines'
|
||||
minus two.
|
||||
|
||||
timeout:{millisec} Limit the time searching for suggestions to
|
||||
{millisec} milli seconds. Applies to the following
|
||||
methods. When omitted the limit is 5000. When
|
||||
negative there is no limit. {only works when built
|
||||
with the +reltime feature}
|
||||
|
||||
file:{filename} Read file {filename}, which must have two columns,
|
||||
separated by a slash. The first column contains the
|
||||
bad word, the second column the suggested good word.
|
||||
@@ -7757,10 +7786,11 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
'tabstop' 'ts' number (default 8)
|
||||
local to buffer
|
||||
Number of spaces that a <Tab> in the file counts for. Also see
|
||||
|:retab| command, and 'softtabstop' option.
|
||||
the |:retab| command, and the 'softtabstop' option.
|
||||
|
||||
Note: Setting 'tabstop' to any other value than 8 can make your file
|
||||
appear wrong in many places (e.g., when printing it).
|
||||
appear wrong in many places, e.g., when printing it.
|
||||
The value must be more than 0 and less than 10000.
|
||||
|
||||
There are four main ways to use tabs in Vim:
|
||||
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*print.txt* For Vim version 8.2. Last change: 2021 Oct 04
|
||||
*print.txt* For Vim version 8.2. Last change: 2022 Jan 23
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -178,7 +178,9 @@ If the expression starts with s: or |<SID>|, then it is replaced with the
|
||||
script ID (|local-function|). Example: >
|
||||
set printexpr=s:MyPrintFile()
|
||||
set printexpr=<SID>SomePrintFile()
|
||||
<
|
||||
Otherwise, the expression is evaluated in the context of the script where the
|
||||
option was set, thus script-local items are available.
|
||||
|
||||
This option cannot be set from a |modeline| or in the |sandbox|, for security
|
||||
reasons.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*repeat.txt* For Vim version 8.2. Last change: 2021 Dec 27
|
||||
*repeat.txt* For Vim version 8.2. Last change: 2022 Jan 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -354,7 +354,7 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
|
||||
<
|
||||
|
||||
:scriptv[ersion] {version} *:scriptv* *:scriptversion*
|
||||
*E999* *E984*
|
||||
*E999* *E984* *E1040*
|
||||
Specify the version of Vim for the lines that follow
|
||||
in the same file. Only applies at the toplevel of
|
||||
sourced scripts, not inside functions.
|
||||
@@ -365,12 +365,11 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
|
||||
Vim version, or update Vim to a newer version. See
|
||||
|vimscript-version| for what changed between versions.
|
||||
|
||||
:vim9s[cript] [noclear] [autoload] *:vim9s* *:vim9script*
|
||||
:vim9s[cript] [noclear] *:vim9s* *:vim9script*
|
||||
Marks a script file as containing |Vim9-script|
|
||||
commands. Also see |vim9-namespace|.
|
||||
Must be the first command in the file.
|
||||
commands. Also see |vim9-namespace|. *E1038*
|
||||
Must be the first command in the file. *E1039*
|
||||
For [noclear] see |vim9-reload|.
|
||||
For [autoload] see |vim9-autoload|.
|
||||
Without the |+eval| feature this changes the syntax
|
||||
for some commands.
|
||||
See |:vim9cmd| for executing one command with Vim9
|
||||
@@ -378,8 +377,11 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
|
||||
|
||||
*:scr* *:scriptnames*
|
||||
:scr[iptnames] List all sourced script names, in the order they were
|
||||
first sourced. The number is used for the script ID
|
||||
|<SID>|.
|
||||
first encountered. The number is used for the script
|
||||
ID |<SID>|.
|
||||
For a script that was used with `import autoload` but
|
||||
was not actually sourced yet an "A" is shown after the
|
||||
script ID.
|
||||
{not available when compiled without the |+eval|
|
||||
feature}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*starting.txt* For Vim version 8.2. Last change: 2022 Jan 03
|
||||
*starting.txt* For Vim version 8.2. Last change: 2022 Jan 20
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -256,6 +256,8 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
|
||||
Interfaces, such as Python, Ruby and Lua, are also disabled,
|
||||
since they could be used to execute shell commands. Perl uses
|
||||
the Safe module.
|
||||
For Unix restricted mode is used when the last part of $SHELL
|
||||
is "nologin" or "false".
|
||||
Note that the user may still find a loophole to execute a
|
||||
shell command, it has only been made difficult.
|
||||
|
||||
@@ -268,8 +270,8 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
|
||||
started if possible.
|
||||
|
||||
*-e*
|
||||
-e Start Vim in Ex mode |Q|. Only makes a difference when the
|
||||
executable is not called "ex".
|
||||
-e Start Vim in Ex mode, see |Ex-mode|. Only makes a difference
|
||||
when the executable is not called "ex".
|
||||
|
||||
*-E*
|
||||
-E Start Vim in improved Ex mode |gQ|. Only makes a difference
|
||||
|
||||
@@ -956,12 +956,16 @@ the options 'foldminlines' and 'foldnestmax' in |.vimrc| or use |:setlocal| in
|
||||
|
||||
BASIC *basic.vim* *vb.vim* *ft-basic-syntax* *ft-vb-syntax*
|
||||
|
||||
Both Visual Basic and "normal" basic use the extension ".bas". To detect
|
||||
Both Visual Basic and "normal" BASIC use the extension ".bas". To detect
|
||||
which one should be used, Vim checks for the string "VB_Name" in the first
|
||||
five lines of the file. If it is not found, filetype will be "basic",
|
||||
otherwise "vb". Files with the ".frm" extension will always be seen as Visual
|
||||
Basic.
|
||||
|
||||
If the automatic detection doesn't work for you or you only edit, for
|
||||
example, FreeBASIC files, use this in your startup vimrc: >
|
||||
:let filetype_bas = "freebasic"
|
||||
|
||||
|
||||
C *c.vim* *ft-c-syntax*
|
||||
|
||||
|
||||
143
runtime/doc/tags
143
runtime/doc/tags
@@ -2569,6 +2569,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
|
||||
:imenu gui.txt /*:imenu*
|
||||
:imp vim9.txt /*:imp*
|
||||
:import vim9.txt /*:import*
|
||||
:import-as vim9.txt /*:import-as*
|
||||
:import-cycle vim9.txt /*:import-cycle*
|
||||
:in insert.txt /*:in*
|
||||
:index index.txt /*:index*
|
||||
@@ -3649,6 +3650,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX*
|
||||
<S-xF4> term.txt /*<S-xF4>*
|
||||
<SID> map.txt /*<SID>*
|
||||
<SNR> map.txt /*<SNR>*
|
||||
<ScriptCmd> map.txt /*<ScriptCmd>*
|
||||
<ScrollWheelDown> scroll.txt /*<ScrollWheelDown>*
|
||||
<ScrollWheelLeft> scroll.txt /*<ScrollWheelLeft>*
|
||||
<ScrollWheelRight> scroll.txt /*<ScrollWheelRight>*
|
||||
@@ -3949,36 +3951,159 @@ DirChanged autocmd.txt /*DirChanged*
|
||||
E motion.txt /*E*
|
||||
E10 message.txt /*E10*
|
||||
E100 diff.txt /*E100*
|
||||
E1001 eval.txt /*E1001*
|
||||
E1002 eval.txt /*E1002*
|
||||
E1003 vim9.txt /*E1003*
|
||||
E1004 vim9.txt /*E1004*
|
||||
E1005 vim9.txt /*E1005*
|
||||
E1006 vim9.txt /*E1006*
|
||||
E1007 vim9.txt /*E1007*
|
||||
E1008 vim9.txt /*E1008*
|
||||
E1009 vim9.txt /*E1009*
|
||||
E101 diff.txt /*E101*
|
||||
E1010 vim9.txt /*E1010*
|
||||
E1011 vim9.txt /*E1011*
|
||||
E1012 vim9.txt /*E1012*
|
||||
E1013 vim9.txt /*E1013*
|
||||
E1014 vim9.txt /*E1014*
|
||||
E1015 eval.txt /*E1015*
|
||||
E1016 vim9.txt /*E1016*
|
||||
E1017 vim9.txt /*E1017*
|
||||
E1018 eval.txt /*E1018*
|
||||
E1019 eval.txt /*E1019*
|
||||
E102 diff.txt /*E102*
|
||||
E1020 vim9.txt /*E1020*
|
||||
E1021 vim9.txt /*E1021*
|
||||
E1022 vim9.txt /*E1022*
|
||||
E1023 vim9.txt /*E1023*
|
||||
E1024 vim9.txt /*E1024*
|
||||
E1025 vim9.txt /*E1025*
|
||||
E1026 vim9.txt /*E1026*
|
||||
E1027 vim9.txt /*E1027*
|
||||
E1028 vim9.txt /*E1028*
|
||||
E1029 vim9.txt /*E1029*
|
||||
E103 diff.txt /*E103*
|
||||
E1030 vim9.txt /*E1030*
|
||||
E1031 vim9.txt /*E1031*
|
||||
E1032 eval.txt /*E1032*
|
||||
E1033 eval.txt /*E1033*
|
||||
E1034 vim9.txt /*E1034*
|
||||
E1035 eval.txt /*E1035*
|
||||
E1036 eval.txt /*E1036*
|
||||
E1037 eval.txt /*E1037*
|
||||
E1038 repeat.txt /*E1038*
|
||||
E1039 repeat.txt /*E1039*
|
||||
E104 digraph.txt /*E104*
|
||||
E1040 repeat.txt /*E1040*
|
||||
E1041 vim9.txt /*E1041*
|
||||
E1042 vim9.txt /*E1042*
|
||||
E1043 vim9.txt /*E1043*
|
||||
E1044 vim9.txt /*E1044*
|
||||
E1047 vim9.txt /*E1047*
|
||||
E1048 vim9.txt /*E1048*
|
||||
E1049 vim9.txt /*E1049*
|
||||
E105 mbyte.txt /*E105*
|
||||
E1050 vim9.txt /*E1050*
|
||||
E1051 eval.txt /*E1051*
|
||||
E1052 vim9.txt /*E1052*
|
||||
E1053 vim9.txt /*E1053*
|
||||
E1054 vim9.txt /*E1054*
|
||||
E1055 vim9.txt /*E1055*
|
||||
E1056 vim9.txt /*E1056*
|
||||
E1057 vim9.txt /*E1057*
|
||||
E1058 vim9.txt /*E1058*
|
||||
E1059 vim9.txt /*E1059*
|
||||
E1060 vim9.txt /*E1060*
|
||||
E1061 vim9.txt /*E1061*
|
||||
E1062 eval.txt /*E1062*
|
||||
E1063 eval.txt /*E1063*
|
||||
E1064 autocmd.txt /*E1064*
|
||||
E1066 vim9.txt /*E1066*
|
||||
E1067 eval.txt /*E1067*
|
||||
E1068 vim9.txt /*E1068*
|
||||
E1069 vim9.txt /*E1069*
|
||||
E107 eval.txt /*E107*
|
||||
E1071 vim9.txt /*E1071*
|
||||
E1072 eval.txt /*E1072*
|
||||
E1073 vim9.txt /*E1073*
|
||||
E1074 vim9.txt /*E1074*
|
||||
E1075 vim9.txt /*E1075*
|
||||
E1076 eval.txt /*E1076*
|
||||
E1077 vim9.txt /*E1077*
|
||||
E108 eval.txt /*E108*
|
||||
E1081 eval.txt /*E1081*
|
||||
E1083 editing.txt /*E1083*
|
||||
E1084 eval.txt /*E1084*
|
||||
E1085 eval.txt /*E1085*
|
||||
E1086 eval.txt /*E1086*
|
||||
E1087 vim9.txt /*E1087*
|
||||
E1089 eval.txt /*E1089*
|
||||
E109 eval.txt /*E109*
|
||||
E1090 eval.txt /*E1090*
|
||||
E1091 vim9.txt /*E1091*
|
||||
E1093 eval.txt /*E1093*
|
||||
E1094 vim9.txt /*E1094*
|
||||
E1095 eval.txt /*E1095*
|
||||
E1096 vim9.txt /*E1096*
|
||||
E1097 vim9.txt /*E1097*
|
||||
E1098 eval.txt /*E1098*
|
||||
E1099 vim9.txt /*E1099*
|
||||
E11 cmdline.txt /*E11*
|
||||
E110 eval.txt /*E110*
|
||||
E1100 vim9.txt /*E1100*
|
||||
E1101 vim9.txt /*E1101*
|
||||
E1102 vim9.txt /*E1102*
|
||||
E1103 vim9.txt /*E1103*
|
||||
E1104 vim9.txt /*E1104*
|
||||
E1105 vim9.txt /*E1105*
|
||||
E1106 vim9.txt /*E1106*
|
||||
E1107 eval.txt /*E1107*
|
||||
E1108 vim9.txt /*E1108*
|
||||
E1109 builtin.txt /*E1109*
|
||||
E111 eval.txt /*E111*
|
||||
E1110 builtin.txt /*E1110*
|
||||
E1111 builtin.txt /*E1111*
|
||||
E1112 builtin.txt /*E1112*
|
||||
E1113 builtin.txt /*E1113*
|
||||
E1114 builtin.txt /*E1114*
|
||||
E1115 testing.txt /*E1115*
|
||||
E1116 testing.txt /*E1116*
|
||||
E1117 vim9.txt /*E1117*
|
||||
E1118 eval.txt /*E1118*
|
||||
E1119 eval.txt /*E1119*
|
||||
E112 eval.txt /*E112*
|
||||
E1120 eval.txt /*E1120*
|
||||
E1121 eval.txt /*E1121*
|
||||
E1122 eval.txt /*E1122*
|
||||
E1123 vim9.txt /*E1123*
|
||||
E1124 vim9.txt /*E1124*
|
||||
E1125 vim9.txt /*E1125*
|
||||
E1126 vim9.txt /*E1126*
|
||||
E1127 vim9.txt /*E1127*
|
||||
E1128 vim9.txt /*E1128*
|
||||
E1129 eval.txt /*E1129*
|
||||
E113 eval.txt /*E113*
|
||||
E1130 vim9.txt /*E1130*
|
||||
E1131 vim9.txt /*E1131*
|
||||
E1132 builtin.txt /*E1132*
|
||||
E1133 vim9.txt /*E1133*
|
||||
E1134 vim9.txt /*E1134*
|
||||
E1135 eval.txt /*E1135*
|
||||
E1136 map.txt /*E1136*
|
||||
E1137 map.txt /*E1137*
|
||||
E1138 eval.txt /*E1138*
|
||||
E1139 vim9.txt /*E1139*
|
||||
E114 eval.txt /*E114*
|
||||
E1140 eval.txt /*E1140*
|
||||
E1141 eval.txt /*E1141*
|
||||
E1143 eval.txt /*E1143*
|
||||
E1144 vim9.txt /*E1144*
|
||||
E1145 eval.txt /*E1145*
|
||||
E115 eval.txt /*E115*
|
||||
E1155 autocmd.txt /*E1155*
|
||||
E1158 builtin.txt /*E1158*
|
||||
E116 eval.txt /*E116*
|
||||
E1169 eval.txt /*E1169*
|
||||
E117 eval.txt /*E117*
|
||||
E118 eval.txt /*E118*
|
||||
E1187 starting.txt /*E1187*
|
||||
@@ -3996,6 +4121,7 @@ E120 eval.txt /*E120*
|
||||
E1200 options.txt /*E1200*
|
||||
E1201 options.txt /*E1201*
|
||||
E1205 builtin.txt /*E1205*
|
||||
E1208 map.txt /*E1208*
|
||||
E121 eval.txt /*E121*
|
||||
E1214 builtin.txt /*E1214*
|
||||
E122 eval.txt /*E122*
|
||||
@@ -4012,6 +4138,7 @@ E1245 cmdline.txt /*E1245*
|
||||
E125 eval.txt /*E125*
|
||||
E1255 map.txt /*E1255*
|
||||
E126 eval.txt /*E126*
|
||||
E1263 eval.txt /*E1263*
|
||||
E127 eval.txt /*E127*
|
||||
E128 eval.txt /*E128*
|
||||
E129 eval.txt /*E129*
|
||||
@@ -4194,6 +4321,7 @@ E295 message.txt /*E295*
|
||||
E296 message.txt /*E296*
|
||||
E297 message.txt /*E297*
|
||||
E298 message.txt /*E298*
|
||||
E299 if_perl.txt /*E299*
|
||||
E30 change.txt /*E30*
|
||||
E300 message.txt /*E300*
|
||||
E301 message.txt /*E301*
|
||||
@@ -4575,6 +4703,7 @@ E65 pattern.txt /*E65*
|
||||
E650 netbeans.txt /*E650*
|
||||
E651 netbeans.txt /*E651*
|
||||
E652 netbeans.txt /*E652*
|
||||
E654 eval.txt /*E654*
|
||||
E655 builtin.txt /*E655*
|
||||
E656 netbeans.txt /*E656*
|
||||
E657 netbeans.txt /*E657*
|
||||
@@ -4728,7 +4857,7 @@ E792 gui.txt /*E792*
|
||||
E793 diff.txt /*E793*
|
||||
E794 eval.txt /*E794*
|
||||
E795 eval.txt /*E795*
|
||||
E796 editing.txt /*E796*
|
||||
E796 options.txt /*E796*
|
||||
E797 spell.txt /*E797*
|
||||
E798 builtin.txt /*E798*
|
||||
E799 builtin.txt /*E799*
|
||||
@@ -4775,7 +4904,6 @@ E835 options.txt /*E835*
|
||||
E836 if_pyth.txt /*E836*
|
||||
E837 if_pyth.txt /*E837*
|
||||
E838 netbeans.txt /*E838*
|
||||
E839 message.txt /*E839*
|
||||
E84 windows.txt /*E84*
|
||||
E840 insert.txt /*E840*
|
||||
E841 map.txt /*E841*
|
||||
@@ -4794,6 +4922,8 @@ E852 gui_x11.txt /*E852*
|
||||
E853 eval.txt /*E853*
|
||||
E854 options.txt /*E854*
|
||||
E855 autocmd.txt /*E855*
|
||||
E856 testing.txt /*E856*
|
||||
E857 builtin.txt /*E857*
|
||||
E858 builtin.txt /*E858*
|
||||
E859 builtin.txt /*E859*
|
||||
E86 windows.txt /*E86*
|
||||
@@ -9788,8 +9918,7 @@ test_feedinput() testing.txt /*test_feedinput()*
|
||||
test_garbagecollect_now() testing.txt /*test_garbagecollect_now()*
|
||||
test_garbagecollect_soon() testing.txt /*test_garbagecollect_soon()*
|
||||
test_getvalue() testing.txt /*test_getvalue()*
|
||||
test_gui_drop_files() testing.txt /*test_gui_drop_files()*
|
||||
test_gui_mouse_event() testing.txt /*test_gui_mouse_event()*
|
||||
test_gui_event() testing.txt /*test_gui_event()*
|
||||
test_ignore_error() testing.txt /*test_ignore_error()*
|
||||
test_null_blob() testing.txt /*test_null_blob()*
|
||||
test_null_channel() testing.txt /*test_null_channel()*
|
||||
@@ -10096,6 +10225,7 @@ v_CTRL-C visual.txt /*v_CTRL-C*
|
||||
v_CTRL-G visual.txt /*v_CTRL-G*
|
||||
v_CTRL-H change.txt /*v_CTRL-H*
|
||||
v_CTRL-O visual.txt /*v_CTRL-O*
|
||||
v_CTRL-R visual.txt /*v_CTRL-R*
|
||||
v_CTRL-V visual.txt /*v_CTRL-V*
|
||||
v_CTRL-X change.txt /*v_CTRL-X*
|
||||
v_CTRL-Z starting.txt /*v_CTRL-Z*
|
||||
@@ -10278,6 +10408,7 @@ vim.w if_lua.txt /*vim.w*
|
||||
vim7 version7.txt /*vim7*
|
||||
vim8 version8.txt /*vim8*
|
||||
vim9 vim9.txt /*vim9*
|
||||
vim9-autoload vim9.txt /*vim9-autoload*
|
||||
vim9-boolean vim9.txt /*vim9-boolean*
|
||||
vim9-classes vim9.txt /*vim9-classes*
|
||||
vim9-const vim9.txt /*vim9-const*
|
||||
@@ -10435,6 +10566,8 @@ win_gettype() builtin.txt /*win_gettype()*
|
||||
win_gotoid() builtin.txt /*win_gotoid()*
|
||||
win_id2tabwin() builtin.txt /*win_id2tabwin()*
|
||||
win_id2win() builtin.txt /*win_id2win()*
|
||||
win_move_separator() builtin.txt /*win_move_separator()*
|
||||
win_move_statusline() builtin.txt /*win_move_statusline()*
|
||||
win_screenpos() builtin.txt /*win_screenpos()*
|
||||
win_splitmove() builtin.txt /*win_splitmove()*
|
||||
winbufnr() builtin.txt /*winbufnr()*
|
||||
@@ -10617,6 +10750,7 @@ zz scroll.txt /*zz*
|
||||
{Visual} intro.txt /*{Visual}*
|
||||
{address} cmdline.txt /*{address}*
|
||||
{arglist} editing.txt /*{arglist}*
|
||||
{aupat} autocmd.txt /*{aupat}*
|
||||
{bufname} windows.txt /*{bufname}*
|
||||
{char1-char2} intro.txt /*{char1-char2}*
|
||||
{event} autocmd.txt /*{event}*
|
||||
@@ -10626,7 +10760,6 @@ zz scroll.txt /*zz*
|
||||
{motion} intro.txt /*{motion}*
|
||||
{move-around} visual.txt /*{move-around}*
|
||||
{offset} pattern.txt /*{offset}*
|
||||
{pat} autocmd.txt /*{pat}*
|
||||
{register} change.txt /*{register}*
|
||||
{rhs} map.txt /*{rhs}*
|
||||
{subject} helphelp.txt /*{subject}*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*terminal.txt* For Vim version 8.2. Last change: 2021 Dec 21
|
||||
*terminal.txt* For Vim version 8.2. Last change: 2022 Jan 21
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -1178,7 +1178,7 @@ gdb window A terminal window in which "gdb vim" is executed. Here you
|
||||
program window A terminal window for the executed program. When "run" is
|
||||
used in gdb the program I/O will happen in this window, so
|
||||
that it does not interfere with controlling gdb. The buffer
|
||||
name is "gdb program".
|
||||
name is "debugged program".
|
||||
|
||||
The current window is used to show the source code. When gdb pauses the
|
||||
source file location will be displayed, if possible. A sign is used to
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*testing.txt* For Vim version 8.2. Last change: 2021 Dec 11
|
||||
*testing.txt* For Vim version 8.2. Last change: 2022 Jan 23
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -82,46 +82,95 @@ test_getvalue({name}) *test_getvalue()*
|
||||
Can also be used as a |method|: >
|
||||
GetName()->test_getvalue()
|
||||
<
|
||||
*test_gui_drop_files()*
|
||||
test_gui_drop_files({list}, {row}, {col}, {mods})
|
||||
Drop one or more files in {list} in the window at {row}, {col}.
|
||||
This function only works when the GUI is running and the
|
||||
|drop_file| feature is present.
|
||||
*test_gui_event()*
|
||||
test_gui_event({event}, {args})
|
||||
Generate a GUI {event} with arguments {args} for testing Vim
|
||||
functionality. This function works only when the GUI is
|
||||
running.
|
||||
|
||||
The supported values for {mods} are:
|
||||
0x4 Shift
|
||||
0x8 Alt
|
||||
0x10 Ctrl
|
||||
The files are added to the |argument-list| and the first file
|
||||
in {list} is edited in the window. See |drag-n-drop| for more
|
||||
information.
|
||||
{event} is a String and the supported values are:
|
||||
"dropfiles" drop one or more files in a window.
|
||||
"findrepl" search and replace text
|
||||
"mouse" mouse button click event.
|
||||
"tabline" select a tab page by mouse click.
|
||||
"tabmenu" select a tabline menu entry.
|
||||
|
||||
*test_gui_mouse_event()*
|
||||
test_gui_mouse_event({button}, {row}, {col}, {multiclick}, {modifiers})
|
||||
Inject a mouse button click event. This function only works
|
||||
when the GUI is running.
|
||||
The supported values for {button} are:
|
||||
0 right mouse button
|
||||
1 middle mouse button
|
||||
2 left mouse button
|
||||
3 mouse button release
|
||||
4 scroll wheel down
|
||||
5 scroll wheel up
|
||||
6 scroll wheel left
|
||||
7 scroll wheel right
|
||||
{row} and {col} specify the location of the mouse click. The
|
||||
first row of the Vim window is 1 and the last row is 'lines'.
|
||||
The maximum value of {col} is 'columns'.
|
||||
To inject a multiclick event, set {multiclick} to 1.
|
||||
The supported values for {modifiers} are:
|
||||
4 shift is pressed
|
||||
8 alt is pressed
|
||||
16 ctrl is pressed
|
||||
After injecting the mouse event you probably should call
|
||||
{args} is a Dict and contains the arguments for the event.
|
||||
|
||||
"dropfiles":
|
||||
Drop one or more files in a specified window. The supported
|
||||
items in {args} are:
|
||||
files: List of file names
|
||||
row: window row number
|
||||
col: window column number
|
||||
modifiers: key modifiers. The supported values are:
|
||||
0x4 Shift
|
||||
0x8 Alt
|
||||
0x10 Ctrl
|
||||
The files are added to the |argument-list| and the first
|
||||
file in {files} is edited in the window. See |drag-n-drop|
|
||||
for more information. This event works only when the
|
||||
|drop_file| feature is present.
|
||||
|
||||
"findrepl":
|
||||
Perform a search and replace of text. The supported items
|
||||
in {args} are:
|
||||
find_text: string to find.
|
||||
repl_text: replacement string
|
||||
flags: flags controlling the find/replace. Supported
|
||||
values are:
|
||||
1 search next string (find dialog)
|
||||
2 search next string (replace dialog)
|
||||
3 replace string once
|
||||
4 replace all matches
|
||||
8 match whole words only
|
||||
16 match case
|
||||
forward: set to 1 for forward search.
|
||||
|
||||
"mouse":
|
||||
Inject a mouse button click event. The supported items in
|
||||
{args} are:
|
||||
button: mouse button. The supported values are:
|
||||
0 right mouse button
|
||||
1 middle mouse button
|
||||
2 left mouse button
|
||||
3 mouse button release
|
||||
4 scroll wheel down
|
||||
5 scroll wheel up
|
||||
6 scroll wheel left
|
||||
7 scroll wheel right
|
||||
row: mouse click row number. The first row of the
|
||||
Vim window is 1 and the last row is 'lines'.
|
||||
col: mouse click column number. The maximum value
|
||||
of {col} is 'columns'.
|
||||
multiclick: set to 1 to inject a multiclick mouse event.
|
||||
modifiers: key modifiers. The supported values are:
|
||||
4 shift is pressed
|
||||
8 alt is pressed
|
||||
16 ctrl is pressed
|
||||
|
||||
"tabline":
|
||||
Inject a mouse click event on the tabline to select a
|
||||
tabpage. The supported items in {args} are:
|
||||
tabnr: tab page number
|
||||
|
||||
"tabmenu":
|
||||
Inject an event to select a tabline menu entry. The
|
||||
supported items in {args} are:
|
||||
tabnr: tab page number
|
||||
item: tab page menu item number. 1 for the first
|
||||
menu item, 2 for the second item and so on.
|
||||
|
||||
After injecting the GUI events you probably should call
|
||||
|feedkeys()| to have them processed, e.g.: >
|
||||
call feedkeys("y", 'Lx!')
|
||||
<
|
||||
Returns TRUE if the event is successfully added, FALSE if
|
||||
there is a failure.
|
||||
|
||||
|
||||
Can also be used as a |method|: >
|
||||
GetEvent()->test_gui_event({args})
|
||||
<
|
||||
test_ignore_error({expr}) *test_ignore_error()*
|
||||
Ignore any error containing {expr}. A normal message is given
|
||||
instead.
|
||||
@@ -188,24 +237,28 @@ test_override({name}, {val}) *test_override()*
|
||||
to run tests. Only to be used for testing Vim!
|
||||
The override is enabled when {val} is non-zero and removed
|
||||
when {val} is zero.
|
||||
Current supported values for name are:
|
||||
Current supported values for {name} are:
|
||||
|
||||
name effect when {val} is non-zero ~
|
||||
redraw disable the redrawing() function
|
||||
redraw_flag ignore the RedrawingDisabled flag
|
||||
{name} effect when {val} is non-zero ~
|
||||
autoload `import autoload` will load the script right
|
||||
away, not postponed until an item is used
|
||||
char_avail disable the char_avail() function
|
||||
starting reset the "starting" variable, see below
|
||||
nfa_fail makes the NFA regexp engine fail to force a
|
||||
fallback to the old engine
|
||||
no_query_mouse do not query the mouse position for "dec"
|
||||
terminals
|
||||
no_wait_return set the "no_wait_return" flag. Not restored
|
||||
with "ALL".
|
||||
ui_delay time in msec to use in ui_delay(); overrules a
|
||||
wait time of up to 3 seconds for messages
|
||||
redraw disable the redrawing() function
|
||||
redraw_flag ignore the RedrawingDisabled flag
|
||||
starting reset the "starting" variable, see below
|
||||
term_props reset all terminal properties when the version
|
||||
string is detected
|
||||
ui_delay time in msec to use in ui_delay(); overrules a
|
||||
wait time of up to 3 seconds for messages
|
||||
uptime overrules sysinfo.uptime
|
||||
vterm_title setting the window title by a job running in a
|
||||
terminal window
|
||||
ALL clear all overrides ({val} is not used)
|
||||
|
||||
"starting" is to be used when a test should behave like
|
||||
@@ -348,7 +401,7 @@ assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
|
||||
Run {cmd} and add an error message to |v:errors| if it does
|
||||
NOT produce an error or when {error} is not found in the
|
||||
error message. Also see |assert-return|.
|
||||
|
||||
*E856*
|
||||
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:". >
|
||||
@@ -368,12 +421,12 @@ assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
|
||||
<
|
||||
If {msg} is empty then it is not used. Do this to get the
|
||||
default message when passing the {lnum} argument.
|
||||
|
||||
*E1115*
|
||||
When {lnum} is present and not negative, and the {error}
|
||||
argument is present and matches, then this is compared with
|
||||
the line number at which the error was reported. That can be
|
||||
the line number in a function or in a script.
|
||||
|
||||
*E1116*
|
||||
When {context} is present it is used as a pattern and matched
|
||||
against the context (script name or function name) where
|
||||
{lnum} is located in.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*todo.txt* For Vim version 8.2. Last change: 2022 Jan 08
|
||||
*todo.txt* For Vim version 8.2. Last change: 2022 Jan 31
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -38,19 +38,20 @@ browser use: https://github.com/vim/vim/issues/1234
|
||||
*known-bugs*
|
||||
-------------------- Known bugs and current work -----------------------
|
||||
|
||||
Autoload import syntax:
|
||||
import autoload "filename"
|
||||
import autoload "filename" as name
|
||||
doesn't load the script yet
|
||||
autoload items can be used without the "#dir#file#" prefix, but file.item
|
||||
Add a test_override() item to load the script and compile functions the
|
||||
moment it is encountered, so that types are checked.
|
||||
"vim9script autoload" in an autoload script, using "export" will prefix
|
||||
"dir#file#" to the exported item.
|
||||
Cannot use command modifier for "import 'name.vim' as vim9"
|
||||
|
||||
range() returns list<number>, but it's OK if map() changes the type.
|
||||
#9665 Change internal_func_ret_type() to return current and declared type?
|
||||
|
||||
When making a copy of a list or dict, do not keep the type? #9644
|
||||
With deepcopy() all, with copy() this still fails:
|
||||
var l: list<list<number>> = [[1], [2]]
|
||||
l->copy()[0][0] = 'x'
|
||||
|
||||
Once Vim9 is stable:
|
||||
- Add all the error numbers in a good place in documentation.
|
||||
done until E653
|
||||
done until E1145
|
||||
- Check code coverage, add more tests if needed.
|
||||
- Use Vim9 for runtime files.
|
||||
|
||||
Further Vim9 improvements, possibly after launch:
|
||||
@@ -67,8 +68,10 @@ Further Vim9 improvements, possibly after launch:
|
||||
evaluation.
|
||||
Use the location where the option was set for deciding whether it's to be
|
||||
evaluated in Vim9 script context.
|
||||
- implement :type, "import type"
|
||||
- implement :enum, "import enum".
|
||||
- Implement "import lazy" - like autoload but with a relative or absolute
|
||||
path. #9595
|
||||
- implement :type
|
||||
- implement :enum
|
||||
- implement :class and :interface: See |vim9-classes|
|
||||
- For range: make table of first ASCII character with flag to quickly check if
|
||||
it can be a Vim9 command. E.g. "+" can, but "." can't.
|
||||
@@ -83,6 +86,7 @@ Further Vim9 improvements, possibly after launch:
|
||||
Update list of features to vote on:
|
||||
- multiple cursors
|
||||
- built-in LSP support
|
||||
- start first line halfway
|
||||
|
||||
Popup windows:
|
||||
- Preview popup not properly updated when it overlaps with completion menu.
|
||||
@@ -207,6 +211,11 @@ Terminal emulator window:
|
||||
When using 'cryptmethod' xchaha20 the undo file is not encrypted.
|
||||
Need to handle extra bytes.
|
||||
|
||||
In Select mode the deleted text always goes into the unnamed register.
|
||||
Use CTRL-R to specify the register to use. (#9531)
|
||||
|
||||
Some prompts are not translated: #9495
|
||||
|
||||
Test_communicate_ipv6(): is flaky on many systems
|
||||
Fails in line 64 of Ch_communicate, no exception is thrown.
|
||||
|
||||
@@ -235,6 +244,8 @@ Memory leak in test_alot with pyeval() (allocating partial)
|
||||
Memory leak in test_alot with expand()
|
||||
Memory leaks in test_channel? (or is it because of fork())
|
||||
|
||||
PR to support %e and %k in 'errorformat'. #9624
|
||||
|
||||
Idea: when typing ":e /some/dir/" and "dir" does not exist, highlight in red.
|
||||
|
||||
":set &shellpipe" and ":set &shellredir" should use the logic from
|
||||
@@ -243,6 +254,8 @@ this.
|
||||
|
||||
MS-Windows: did path modifier :p:8 stop working? #8600
|
||||
|
||||
Add support for "underdouble", "underdot" and "underdash". #9553
|
||||
|
||||
test_arglist func Test_all_not_allowed_from_cmdwin() hangs on MS-Windows.
|
||||
|
||||
Mapping with partial match not executed properly in GTK. (Ingo Karkat, #7082)
|
||||
@@ -904,9 +917,6 @@ With 'foldmethod' "indent" and appending an empty line, what follows isn't
|
||||
included in the existing fold. Deleting the empty line and undo fixes it.
|
||||
(Oleg Koshovetc, 2018 Jul 15, #3214)
|
||||
|
||||
Patch to support "xxd -ps". (Erik Auerswald, 2018 May 1)
|
||||
Lacks a test.
|
||||
|
||||
Column number is wrong when using 'linebreak' and 'wrap'. (Keith Smiley, 2018
|
||||
Jan 15, #2555)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*usr_41.txt* For Vim version 8.2. Last change: 2022 Jan 01
|
||||
*usr_41.txt* For Vim version 8.2. Last change: 2022 Jan 28
|
||||
|
||||
VIM USER MANUAL - by Bram Moolenaar
|
||||
|
||||
@@ -1116,8 +1116,7 @@ Testing: *test-functions*
|
||||
test_garbagecollect_now() free memory right now
|
||||
test_garbagecollect_soon() set a flag to free memory soon
|
||||
test_getvalue() get value of an internal variable
|
||||
test_gui_drop_files() drop file(s) in a window
|
||||
test_gui_mouse_event() add a GUI mouse event to the input buffer
|
||||
test_gui_event() generate a GUI event for testing
|
||||
test_ignore_error() ignore a specific error message
|
||||
test_null_blob() return a null Blob
|
||||
test_null_channel() return a null Channel
|
||||
@@ -1131,7 +1130,6 @@ Testing: *test-functions*
|
||||
test_setmouse() set the mouse position
|
||||
test_feedinput() add key sequence to input buffer
|
||||
test_option_not_set() reset flag indicating option was set
|
||||
test_scrollbar() simulate scrollbar movement in the GUI
|
||||
test_refcount() return an expression's reference count
|
||||
test_srand_seed() set the seed value for srand()
|
||||
test_unknown() return a value with unknown type
|
||||
@@ -2502,7 +2500,7 @@ When the user does ":setfiletype xyz" the effect of the previous filetype
|
||||
should be undone. Set the b:undo_ftplugin variable to the commands that will
|
||||
undo the settings in your filetype plugin. Example: >
|
||||
|
||||
b:undo_ftplugin = "setlocal fo< com< tw< commentstring<"
|
||||
let b:undo_ftplugin = "setlocal fo< com< tw< commentstring<"
|
||||
\ .. "| unlet b:match_ignorecase b:match_words b:match_skip"
|
||||
|
||||
Using ":setlocal" with "<" after the option name resets the option to its
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*various.txt* For Vim version 8.2. Last change: 2022 Jan 08
|
||||
*various.txt* For Vim version 8.2. Last change: 2022 Jan 15
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -570,19 +570,19 @@ N *+X11* Unix only: can restore window title |X11|
|
||||
:redi[r] END End redirecting messages.
|
||||
|
||||
*:filt* *:filter*
|
||||
:filt[er][!] {pat} {command}
|
||||
:filt[er][!] /{pat}/ {command}
|
||||
:filt[er][!] {pattern} {command}
|
||||
:filt[er][!] /{pattern}/ {command}
|
||||
Restrict the output of {command} to lines matching
|
||||
with {pat}. For example, to list only xml files: >
|
||||
with {pattern}. For example, to list only xml files: >
|
||||
:filter /\.xml$/ oldfiles
|
||||
< If the [!] is given, restrict the output of {command}
|
||||
to lines that do NOT match {pat}.
|
||||
to lines that do NOT match {pattern}.
|
||||
|
||||
{pat} is a Vim search pattern. Instead of enclosing
|
||||
{pattern} is a Vim search pattern. Instead of enclosing
|
||||
it in / any non-ID character (see |'isident'|) can be
|
||||
used, so long as it does not appear in {pat}. Without
|
||||
the enclosing character the pattern cannot include the
|
||||
bar character. 'ignorecase' is not used.
|
||||
used, so long as it does not appear in {pattern}.
|
||||
Without the enclosing character the pattern cannot
|
||||
include the bar character. 'ignorecase' is not used.
|
||||
|
||||
The pattern is matched against the relevant part of
|
||||
the output, not necessarily the whole line. Only some
|
||||
|
||||
@@ -166,7 +166,7 @@ Note: "+" と "\-c" は合わせて 10 個まで指定できます。
|
||||
.TP
|
||||
\-d
|
||||
差分モードで起動します。
|
||||
二つか三つの四つのファイルを引数に指定してください。
|
||||
2 個から 8 個のファイルを引数に指定してください。
|
||||
指定されたファイルが開かれ、それらのファイルの差分が表示されます。
|
||||
vimdiff(1) と同様の動作です。
|
||||
.TP
|
||||
@@ -217,8 +217,7 @@ GUI がサポートされている場合は、GUI で起動します。
|
||||
サポートされていない場合はエラーメッセージを表示して終了します。
|
||||
.TP
|
||||
\-i {viminfo}
|
||||
viminfo ファイルを使う設定になっている場合は、初期設定の "~/.viminfo"
|
||||
の代わりに、指定されたファイルを設定します。
|
||||
初期設定の "~/.viminfo" の代わりに、viminfo ファイルを読み書きする際に使うファイル名を指定します。
|
||||
"NONE" を指定すると、.viminfo ファイルを使わないように設定できます。
|
||||
.TP
|
||||
\-L
|
||||
@@ -356,6 +355,10 @@ X サーバーと通信しません。端末での起動時間を短くできま
|
||||
これ以降の引数はすべてファイル名として扱われます。
|
||||
ファイル名が '\-' で始まっているファイルを開くときに使ってください。
|
||||
.TP
|
||||
\-\-clean
|
||||
一切の個人設定 (vimrc、プラグイン、その他) を使用しません。
|
||||
ある問題がクリーンな Vim セットアップで再現するかを確認するのに有用です。
|
||||
.TP
|
||||
\-\-echo\-wid
|
||||
GTK GUI のみ: Window ID を標準出力に出力します。
|
||||
.TP
|
||||
@@ -398,6 +401,9 @@ Vim サーバーの一覧を表示します。
|
||||
\-\-socketid {id}
|
||||
GTK GUI のみ: GtkPlug メカニズムを使って gvim を別のウィンドウの中で実行します。
|
||||
.TP
|
||||
\-\-startuptime {file}
|
||||
起動処理の間、経過時間のメッセージをファイル {fname} に書き出します。
|
||||
.TP
|
||||
\-\-version
|
||||
バージョン情報を表示して終了します。
|
||||
.SH オンラインヘルプ
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.TH VIM 1 "2006 Apr 11"
|
||||
.TH VIM 1 "2021 Jun 13"
|
||||
.SH NAME
|
||||
vim \- Vi IMproved, a programmer's text editor
|
||||
.SH SYNOPSIS
|
||||
|
||||
@@ -432,4 +432,4 @@ BUGS
|
||||
|
||||
|
||||
|
||||
2006 Apr 11 VIM(1)
|
||||
2021 Jun 13 VIM(1)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*vim9.txt* For Vim version 8.2. Last change: 2022 Jan 07
|
||||
*vim9.txt* For Vim version 8.2. Last change: 2022 Jan 30
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -82,7 +82,7 @@ script and `:def` functions; details are below:
|
||||
.. yourName
|
||||
.. ", how are you?"
|
||||
- White space is required in many places to improve readability.
|
||||
- Assign values without `:let`, declare variables with `:var`: >
|
||||
- Assign values without `:let` *E1126* , declare variables with `:var`: >
|
||||
var count = 0
|
||||
count += 3
|
||||
- Constants can be declared with `:final` and `:const`: >
|
||||
@@ -103,6 +103,8 @@ script and `:def` functions; details are below:
|
||||
`:exe`: >
|
||||
:exe @a
|
||||
- Unless mentioned specifically, the highest |scriptversion| is used.
|
||||
- When defining an expression mapping, the expression will be evaluated in the
|
||||
context of the script where it was defined.
|
||||
|
||||
|
||||
Comments starting with # ~
|
||||
@@ -137,7 +139,7 @@ arguments).
|
||||
|
||||
|
||||
Vim9 functions ~
|
||||
|
||||
*E1099*
|
||||
A function defined with `:def` is compiled. Execution is many times faster,
|
||||
often 10 to 100 times.
|
||||
|
||||
@@ -181,14 +183,14 @@ You can call a legacy dict function though: >
|
||||
var d = {func: Legacy, value: 'text'}
|
||||
d.func()
|
||||
enddef
|
||||
|
||||
< *E1096*
|
||||
The argument types and return type need to be specified. The "any" type can
|
||||
be used, type checking will then be done at runtime, like with legacy
|
||||
functions.
|
||||
|
||||
*E1106*
|
||||
Arguments are accessed by name, without "a:", just like any other language.
|
||||
There is no "a:" dictionary or "a:000" list.
|
||||
*vim9-variable-arguments*
|
||||
*vim9-variable-arguments* *E1055*
|
||||
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: >
|
||||
def MyFunc(...itemlist: list<number>)
|
||||
@@ -225,7 +227,7 @@ the "name#" prefix is sufficient. >
|
||||
def s:ThisFunction() # script-local
|
||||
def g:ThatFunction() # global
|
||||
def scriptname#function() # autoload
|
||||
|
||||
< *E1058* *E1075*
|
||||
When using `:function` or `:def` to specify a nested function inside a `:def`
|
||||
function and no namespace was given, this nested function is local to the code
|
||||
block it is defined in. In a `:def` function it is not possible to define a
|
||||
@@ -236,9 +238,6 @@ When referring to a function and no "s:" or "g:" prefix is used, Vim will
|
||||
search for the function:
|
||||
- in the function scope, in block scopes
|
||||
- in the script scope, possibly imported
|
||||
- in the list of global functions
|
||||
However, it is recommended to always use "g:" to refer to a global function
|
||||
for clarity.
|
||||
|
||||
Since a script-local function reference can be used without "s:" the name must
|
||||
start with an upper case letter even when using the "s:" prefix. In legacy
|
||||
@@ -253,7 +252,7 @@ it is being compiled (to figure out the return type).
|
||||
The result is that functions and variables without a namespace can usually be
|
||||
found in the script, either defined there or imported. Global functions and
|
||||
variables could be defined anywhere (good luck finding out where!).
|
||||
|
||||
*E1102*
|
||||
Global functions can still be defined and deleted at nearly any time. In
|
||||
Vim9 script script-local functions are defined once when the script is sourced
|
||||
and cannot be deleted or replaced.
|
||||
@@ -287,7 +286,8 @@ some point when loaded again. E.g. when a buffer local option is set: >
|
||||
|
||||
|
||||
Variable declarations with :var, :final and :const ~
|
||||
*vim9-declaration* *:var*
|
||||
*vim9-declaration* *:var*
|
||||
*E1017* *E1020* *E1054* *E1087* *E1108* *E1124*
|
||||
Local variables need to be declared with `:var`. Local constants need to be
|
||||
declared with `:final` or `:const`. We refer to both as "variables" in this
|
||||
section.
|
||||
@@ -318,7 +318,7 @@ The declaration must be done earlier: >
|
||||
inner = 0
|
||||
endif
|
||||
echo inner
|
||||
|
||||
< *E1025* *E1128*
|
||||
To intentionally hide a variable from code that follows, a block can be
|
||||
used: >
|
||||
{
|
||||
@@ -345,12 +345,12 @@ And with autocommands: >
|
||||
}
|
||||
|
||||
Although using a :def function probably works better.
|
||||
|
||||
*E1022* *E1103* *E1130* *E1131* *E1133* *E1134*
|
||||
Declaring a variable with a type but without an initializer will initialize to
|
||||
false (for bool), empty (for string, list, dict, etc.) or zero (for number,
|
||||
any, etc.). This matters especially when using the "any" type, the value will
|
||||
default to the number zero.
|
||||
|
||||
*E1016* *E1052* *E1066*
|
||||
In Vim9 script `:let` cannot be used. An existing variable is assigned to
|
||||
without any command. The same for global, window, tab, buffer and Vim
|
||||
variables, because they are not really declared. Those can also be deleted
|
||||
@@ -361,7 +361,7 @@ instead.
|
||||
|
||||
The `exists()` and `exists_compiled()` functions do not work on local variables
|
||||
or arguments.
|
||||
|
||||
*E1006* *E1041*
|
||||
Variables, functions and function arguments cannot shadow previously defined
|
||||
or imported variables and functions in the same script file.
|
||||
Variables may shadow Ex commands, rename the variable if needed.
|
||||
@@ -372,13 +372,12 @@ Global variables must be prefixed with "g:", also at the script level. >
|
||||
g:global = 'value'
|
||||
var Funcref = g:ThatFunction
|
||||
|
||||
Global functions must be prefixed with "g:" when defining them, but can be
|
||||
called without "g:". >
|
||||
Global functions must be prefixed with "g:": >
|
||||
vim9script
|
||||
def g:GlobalFunc(): string
|
||||
return 'text'
|
||||
enddef
|
||||
echo GlobalFunc()
|
||||
echo g:GlobalFunc()
|
||||
The "g:" prefix is not needed for auto-load functions.
|
||||
|
||||
*vim9-function-defined-later*
|
||||
@@ -429,7 +428,7 @@ How constants work varies between languages. Some consider a variable that
|
||||
can't be assigned another value a constant. JavaScript is an example. Others
|
||||
also make the value immutable, thus when a constant uses a list, the list
|
||||
cannot be changed. In Vim9 we can use both.
|
||||
|
||||
*E1021*
|
||||
`:const` is used for making both the variable and the value a constant. Use
|
||||
this for composite structures that you want to make sure will not be modified.
|
||||
Example: >
|
||||
@@ -437,7 +436,7 @@ Example: >
|
||||
myList = [3, 4] # Error!
|
||||
myList[0] = 9 # Error!
|
||||
myList->add(3) # Error!
|
||||
< *:final*
|
||||
< *:final* *E1125*
|
||||
`:final` is used for making only the variable a constant, the value can be
|
||||
changed. This is well known from Java. Example: >
|
||||
final myList = [1, 2]
|
||||
@@ -562,7 +561,7 @@ characters, e.g.: >
|
||||
})
|
||||
No command can follow the "{", only a comment can be used there.
|
||||
|
||||
*command-block*
|
||||
*command-block* *E1026*
|
||||
The block can also be used for defining a user command. Inside the block Vim9
|
||||
syntax will be used.
|
||||
|
||||
@@ -597,7 +596,7 @@ Also when confused with the start of a command block: >
|
||||
|
||||
|
||||
Automatic line continuation ~
|
||||
*vim9-line-continuation*
|
||||
*vim9-line-continuation* *E1097*
|
||||
In many cases it is obvious that an expression continues on the next line. In
|
||||
those cases there is no need to prefix the line with a backslash (see
|
||||
|line-continuation|). For example, when a list spans multiple lines: >
|
||||
@@ -682,6 +681,11 @@ This will assign "start" and print a line: >
|
||||
var result = start
|
||||
:+ print
|
||||
|
||||
After the range an Ex command must follow. Without the colon you can call a
|
||||
function without `:call`, but after a range you do need it: >
|
||||
MyFunc()
|
||||
:% call MyFunc()
|
||||
|
||||
Note that the colon is not required for the |+cmd| argument: >
|
||||
edit +6 fname
|
||||
|
||||
@@ -700,6 +704,7 @@ second line is seen as a separate command: >
|
||||
Now "exit_cb: Func})" is actually a valid command: save any changes to the
|
||||
file "_cb: Func})" and exit. To avoid this kind of mistake in Vim9 script
|
||||
there must be white space between most command names and the argument.
|
||||
*E1144*
|
||||
|
||||
However, the argument of a command that is a command won't be recognized. For
|
||||
example, after "windo echo expr" a line break inside "expr" will not be seen.
|
||||
@@ -730,7 +735,7 @@ Notes:
|
||||
|
||||
|
||||
White space ~
|
||||
|
||||
*E1004* *E1068* *E1069* *E1074* *E1127*
|
||||
Vim9 script enforces proper use of white space. This is no longer allowed: >
|
||||
var name=234 # Error!
|
||||
var name= 234 # Error!
|
||||
@@ -775,7 +780,7 @@ No curly braces expansion ~
|
||||
|
||||
|
||||
Dictionary literals ~
|
||||
*vim9-literal-dict*
|
||||
*vim9-literal-dict* *E1014*
|
||||
Traditionally Vim has supported dictionary literals with a {} syntax: >
|
||||
let dict = {'key': value}
|
||||
|
||||
@@ -795,7 +800,7 @@ use another character, use a single or double quoted string: >
|
||||
var dict = {'key with space': value}
|
||||
var dict = {"key\twith\ttabs": value}
|
||||
var dict = {'': value} # empty key
|
||||
|
||||
< *E1139*
|
||||
In case the key needs to be an expression, square brackets can be used, just
|
||||
like in JavaScript: >
|
||||
var dict = {["key" .. nr]: value}
|
||||
@@ -808,7 +813,7 @@ error. A number can be given with and without the []: >
|
||||
|
||||
|
||||
No :xit, :t, :k, :append, :change or :insert ~
|
||||
|
||||
*E1100*
|
||||
These commands are too easily confused with local variable names.
|
||||
Instead of `:x` or `:xit` you can use `:exit`.
|
||||
Instead of `:t` you can use `:copy`.
|
||||
@@ -865,7 +870,7 @@ first if needed.
|
||||
|
||||
|
||||
Conditions and expressions ~
|
||||
*vim9-boolean*
|
||||
*vim9-boolean*
|
||||
Conditions and expressions are mostly working like they do in other languages.
|
||||
Some values are different from legacy Vim script:
|
||||
value legacy Vim script Vim9 script ~
|
||||
@@ -919,7 +924,7 @@ always converted to string: >
|
||||
|
||||
Simple types are Number, Float, Special and Bool. For other types |string()|
|
||||
should be used.
|
||||
*false* *true* *null*
|
||||
*false* *true* *null* *E1034*
|
||||
In Vim9 script one can use "true" for v:true, "false" for v:false and "null"
|
||||
for v:null. When converting a boolean to a string "false" and "true" are
|
||||
used, not "v:false" and "v:true" like in legacy script. "v:none" is not
|
||||
@@ -1062,15 +1067,19 @@ Using ++var or --var in an expression is not supported yet.
|
||||
|
||||
3. New style functions *fast-functions*
|
||||
|
||||
*:def*
|
||||
*:def* *E1028*
|
||||
:def[!] {name}([arguments])[: {return-type}]
|
||||
Define a new function by the name {name}. The body of
|
||||
the function follows in the next lines, until the
|
||||
matching `:enddef`.
|
||||
|
||||
When {return-type} is omitted or is "void" the
|
||||
function is not expected to return anything.
|
||||
|
||||
matching `:enddef`. *E1073*
|
||||
*E1011*
|
||||
The {name} must be less than 100 bytes long.
|
||||
*E1003* *E1027* *E1056* *E1059*
|
||||
The type of value used with `:return` must match
|
||||
{return-type}. When {return-type} is omitted or is
|
||||
"void" the function is not expected to return
|
||||
anything.
|
||||
*E1077* *E1123*
|
||||
{arguments} is a sequence of zero or more argument
|
||||
declarations. There are three forms:
|
||||
{name}: {type}
|
||||
@@ -1088,13 +1097,13 @@ Using ++var or --var in an expression is not supported yet.
|
||||
|
||||
It is possible to nest `:def` inside another `:def` or
|
||||
`:function` up to about 50 levels deep.
|
||||
|
||||
*E1117*
|
||||
[!] is used as with `:function`. Note that
|
||||
script-local functions cannot be deleted or redefined
|
||||
later in Vim9 script. They can only be removed by
|
||||
reloading the same script.
|
||||
|
||||
*:enddef*
|
||||
*:enddef* *E1057*
|
||||
:enddef End of a function defined with `:def`. It should be on
|
||||
a line by its own.
|
||||
|
||||
@@ -1114,7 +1123,7 @@ prefix if they do not exist at the time of compiling.
|
||||
|
||||
*:disa* *:disassemble*
|
||||
:disa[ssemble] {func} Show the instructions generated for {func}.
|
||||
This is for debugging and testing.
|
||||
This is for debugging and testing. *E1061*
|
||||
Note that for command line completion of {func} you
|
||||
can prepend "s:" to find script-local functions.
|
||||
|
||||
@@ -1176,7 +1185,8 @@ for each closure call a function to define it: >
|
||||
==============================================================================
|
||||
|
||||
4. Types *vim9-types*
|
||||
|
||||
*E1008* *E1009* *E1010* *E1012*
|
||||
*E1013* *E1029* *E1030*
|
||||
The following builtin types are supported:
|
||||
bool
|
||||
number
|
||||
@@ -1191,17 +1201,19 @@ The following builtin types are supported:
|
||||
func: {type}
|
||||
func({type}, ...)
|
||||
func({type}, ...): {type}
|
||||
void
|
||||
|
||||
Not supported yet:
|
||||
tuple<a: {type}, b: {type}, ...>
|
||||
|
||||
These types can be used in declarations, but no simple value will actually
|
||||
have the "void" type.
|
||||
have the "void" type. Trying to use a void (e.g. a function without a
|
||||
return value) results in error *E1031* .
|
||||
|
||||
There is no array type, use list<{type}> instead. For a list constant an
|
||||
efficient implementation is used that avoids allocating lot of small pieces of
|
||||
memory.
|
||||
|
||||
*E1005* *E1007*
|
||||
A partial and function can be declared in more or less specific ways:
|
||||
func any kind of function reference, no type
|
||||
checking for arguments or return value
|
||||
@@ -1273,7 +1285,7 @@ expected to always be the same. For example, when declaring a list: >
|
||||
At compile time Vim doesn't know the type of "g:two" and the expression type
|
||||
becomes list<any>. An instruction is generated to check the list type before
|
||||
doing the assignment, which is a bit inefficient.
|
||||
*type-casting*
|
||||
*type-casting* *E1104*
|
||||
To avoid this, use a type cast: >
|
||||
var l: list<number> = [1, <number>g:two]
|
||||
The compiled code will then only check that "g:two" is a number and give an
|
||||
@@ -1318,6 +1330,14 @@ Results in:
|
||||
For script-local variables in Vim9 script the type is checked, also when the
|
||||
variable was declared in a legacy function.
|
||||
|
||||
When a type has been declared this is attached to a list or string. When
|
||||
later some expression attempts to change the type an error will be given: >
|
||||
var ll: list<number> = [1, 2, 3]
|
||||
ll->extend(['x']) # Error, 'x' is not a number
|
||||
|
||||
If the type is inferred then the type is allowed to change: >
|
||||
[1, 2, 3]->extend(['x']) # result: [1, 2, 3, 'x']
|
||||
|
||||
|
||||
Stricter type checking ~
|
||||
*type-checking*
|
||||
@@ -1332,7 +1352,7 @@ before, if the value used matches the expected type. There will sometimes be
|
||||
an error, thus breaking backwards compatibility. For example:
|
||||
- Using a number other than 0 or 1 where a boolean is expected. *E1023*
|
||||
- Using a string value when setting a number option.
|
||||
- Using a number where a string is expected. *E1024*
|
||||
- Using a number where a string is expected. *E1024* *E1105*
|
||||
|
||||
One consequence is that the item type of a list or dict given to |map()| must
|
||||
not change. This will give an error in Vim9 script: >
|
||||
@@ -1357,9 +1377,11 @@ Same for |extend()|, use |extendnew()| instead, and for |flatten()|, use
|
||||
5. Namespace, Import and Export
|
||||
*vim9script* *vim9-export* *vim9-import*
|
||||
|
||||
A Vim9 script can be written to be imported. This means that everything in
|
||||
the script is local, except for items that are exported. Those exported
|
||||
items, and only those items, can then be imported in another script.
|
||||
A Vim9 script can be written to be imported. This means that some items are
|
||||
intentionally exported, made available to other scripts. When the exporting
|
||||
script is imported in another script, these exported items can then be used in
|
||||
that script. All the other items remain script-local in the exporting script
|
||||
and cannot be accessed by the importing script.
|
||||
|
||||
This mechanism exists for writing a script that can be sourced (imported) by
|
||||
other scripts, while making sure these other scripts only have access to what
|
||||
@@ -1367,8 +1389,8 @@ you want them to. This also avoids using the global namespace, which has a
|
||||
risc of name collisions. For example when you have two plugins with similar
|
||||
functionality.
|
||||
|
||||
You can cheat by using the global namespace explicitly. We will assume here
|
||||
that you don't do that.
|
||||
You can cheat by using the global namespace explicitly. That should be done
|
||||
only for things that really are global.
|
||||
|
||||
|
||||
Namespace ~
|
||||
@@ -1381,7 +1403,7 @@ global namespace. If a file starts with: >
|
||||
var myvar = 'yes'
|
||||
Then "myvar" will only exist in this file. While without `vim9script` it would
|
||||
be available as `g:myvar` from any other script and function.
|
||||
|
||||
*E1101*
|
||||
The variables at the file level are very much like the script-local "s:"
|
||||
variables in legacy Vim script, but the "s:" is omitted. And they cannot be
|
||||
deleted.
|
||||
@@ -1428,7 +1450,7 @@ Exporting an item can be written as: >
|
||||
export def MyFunc() ...
|
||||
export class MyClass ...
|
||||
export interface MyClass ...
|
||||
|
||||
< *E1043* *E1044*
|
||||
As this suggests, only constants, variables, `:def` functions and classes can
|
||||
be exported. {not implemented yet: class, interface}
|
||||
|
||||
@@ -1437,19 +1459,23 @@ be exported. {not implemented yet: class, interface}
|
||||
|
||||
|
||||
Import ~
|
||||
*:import* *:imp* *E1094*
|
||||
*:import* *:imp* *E1094* *E1047*
|
||||
*E1048* *E1049* *E1053* *E1071*
|
||||
The exported items can be imported in another Vim9 script: >
|
||||
import "myscript.vim"
|
||||
|
||||
This makes each item available as "myscript.item".
|
||||
|
||||
*:import-as*
|
||||
In case the name is long or ambiguous, another name can be specified: >
|
||||
import "thatscript.vim" as that
|
||||
|
||||
< *E1060*
|
||||
Then you can use "that.EXPORTED_CONST", "that.someValue", etc. You are free
|
||||
to choose the name "that". Use something that will be recognized as referring
|
||||
to the imported script. Avoid command names and builtin function names,
|
||||
because the name will shadow them.
|
||||
to the imported script. Avoid command names, command modifiers and builtin
|
||||
function names, because the name will shadow them.
|
||||
If the name starts with a capital letter it can also shadow global user
|
||||
commands and functions. Also, you cannot use the name for something else in
|
||||
the script, such as a function or variable name.
|
||||
|
||||
In case the dot in the name is undesired, a local reference can be made for a
|
||||
function: >
|
||||
@@ -1462,6 +1488,12 @@ This does not work for variables, since the value would be copied once and
|
||||
when changing the variable the copy will change, not the original variable.
|
||||
You will need to use the full name, with the dot.
|
||||
|
||||
The full syntax of the command is:
|
||||
import {filename} [as {name}]
|
||||
Where {filename} is an expression that must evaluate to a string. Without the
|
||||
"as {name}" part it must end in ".vim". {name} must consist of letters,
|
||||
digits and '_', like |internal-variables|.
|
||||
|
||||
`:import` can also be used in legacy Vim script. The imported items still
|
||||
become script-local, even when the "s:" prefix is not given.
|
||||
|
||||
@@ -1500,7 +1532,7 @@ or indirectly) imports the current script, then items defined after the
|
||||
result in undefined items.
|
||||
|
||||
|
||||
Import in an autoload script ~
|
||||
Importing an autoload script ~
|
||||
*vim9-autoload*
|
||||
For optimal startup speed, loading scripts should be postponed until they are
|
||||
actually needed. Using the autoload mechanism is recommended:
|
||||
@@ -1519,31 +1551,46 @@ actually needed. Using the autoload mechanism is recommended:
|
||||
directory.
|
||||
|
||||
2. In the autoload script put the bulk of the code. >
|
||||
vim9script autoload
|
||||
vim9script
|
||||
export def Stuff(arg: string)
|
||||
...
|
||||
|
||||
< This goes in .../autoload/for/search.vim.
|
||||
|
||||
Adding "autoload" to `:vim9script` has the effect that "for#search#" will
|
||||
be prefixed to every exported item. The prefix is obtained from the file
|
||||
name, as you would to manually in a legacy autoload script. Thus the
|
||||
exported function can be found with "for#search#Stuff", but you would
|
||||
normally use `import autoload` and not need to specify the prefix.
|
||||
Putting the "search.vim" script under the "/autoload/for/" directory has
|
||||
the effect that "for#search#" will be prefixed to every exported item. The
|
||||
prefix is obtained from the file name, as you would to manually in a
|
||||
legacy autoload script. Thus the exported function can be found with
|
||||
"for#search#Stuff", but you would normally use `import autoload` and not
|
||||
use the prefix.
|
||||
|
||||
You can split up the functionality and import other scripts from the
|
||||
autoload script as you like. This way you can share code between plugins.
|
||||
|
||||
For defining a mapping that uses the imported autoload script the special key
|
||||
|<ScriptCmd>| is useful. It allows for a command in a mapping to use the
|
||||
script context of where the mapping was defined.
|
||||
|
||||
When compiling a `:def` function and a function in an autoload script is
|
||||
encountered, the script is not loaded until the `:def` function is called.
|
||||
This also means you get any errors only at runtime, since the argument and
|
||||
return types are not known yet.
|
||||
|
||||
For testing the |test_override()| function can be used to have the
|
||||
`import autoload` load the script right away, so that the items and types can
|
||||
be checked without waiting for them to be actually used: >
|
||||
test_override('autoload', 1)
|
||||
Reset it later with: >
|
||||
test_override('autoload', 0)
|
||||
Or: >
|
||||
test_override('ALL', 0)
|
||||
|
||||
|
||||
Import in legacy Vim script ~
|
||||
|
||||
If an `import` statement is used in legacy Vim script, the script-local "s:"
|
||||
namespace will be used for the imported item, even when "s:" is not specified.
|
||||
namespace will be used for the imported items, even when "s:" is not
|
||||
specified.
|
||||
|
||||
|
||||
==============================================================================
|
||||
@@ -1705,6 +1752,9 @@ Specific items from TypeScript we avoid:
|
||||
- TypeScript has various "Readonly" types, which have limited usefulness,
|
||||
since a type cast can remove the immutable nature. Vim locks the value,
|
||||
which is more flexible, but is only checked at runtime.
|
||||
- TypeScript has a complicated "import" statement that does not match how the
|
||||
Vim import mechanism works. A much simpler mechanism is used instead, which
|
||||
matches that the imported script is only sourced once.
|
||||
|
||||
|
||||
Declarations ~
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
.TH VIMDIFF 1 "2001 March 30"
|
||||
.SH 名前
|
||||
vimdiff \- 二つか三つか四つのファイルを Vim で開いて、その差分を表示する
|
||||
vimdiff \- 2 個から 8 個のファイルを Vim で開いて、その差分を表示する
|
||||
.SH 書式
|
||||
.br
|
||||
.B vimdiff
|
||||
[options] file1 file2 [file3 [file4]]
|
||||
[options] file1 file2 [file3 [file4 [file5 [file6 [file7 [file8]]]]]]
|
||||
.PP
|
||||
.B gvimdiff
|
||||
.SH 説明
|
||||
.B Vimdiff
|
||||
は、二つ (か三つか四つ) のファイルを
|
||||
は、2 個から 8 個のファイルを
|
||||
.B Vim
|
||||
で開きます。
|
||||
ファイルは個別のウィンドウで開かれ、差分が強調表示されます。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*visual.txt* For Vim version 8.2. Last change: 2021 Nov 21
|
||||
*visual.txt* For Vim version 8.2. Last change: 2022 Jan 20
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -265,6 +265,7 @@ Additionally the following commands can be used:
|
||||
X delete (2) |v_X|
|
||||
Y yank (2) |v_Y|
|
||||
p put |v_p|
|
||||
P put without unnamed register overwrite |v_P|
|
||||
J join (1) |v_J|
|
||||
U make uppercase |v_U|
|
||||
u make lowercase |v_u|
|
||||
@@ -488,6 +489,11 @@ Commands in Select mode:
|
||||
- ESC stops Select mode.
|
||||
- CTRL-O switches to Visual mode for the duration of one command. *v_CTRL-O*
|
||||
- CTRL-G switches to Visual mode.
|
||||
- CTRL-R {register} selects the register to be used for the text that is
|
||||
deleted when typing text. *v_CTRL-R*
|
||||
Unless you specify the "_" (black hole) register, the unnamed register is
|
||||
also overwritten.
|
||||
|
||||
|
||||
Otherwise, typed characters are handled as in Visual mode.
|
||||
|
||||
|
||||
@@ -74,6 +74,7 @@
|
||||
一行
|
||||
.RI < cols >
|
||||
オクテットで出力する。標準設定は 16 (\-i: 12, \-ps: 30, \-b: 6)。最大 256。
|
||||
\-ps には最大値がありません。 \-ps 付きの場合、0 を指定すると単一の長い行で出力されます。
|
||||
.TP
|
||||
.IR \-C " | " \-capitalize
|
||||
\-i を使用した際に、C インクルードファイル形式の変数名を大文字にする。
|
||||
|
||||
@@ -70,6 +70,7 @@ followed by an ascii (or ebcdic) representation. The command line switches
|
||||
Format
|
||||
.RI < cols >
|
||||
octets per line. Default 16 (\-i: 12, \-ps: 30, \-b: 6). Max 256.
|
||||
No maxmimum for \-ps. With \-ps, 0 results in one long line of output.
|
||||
.TP
|
||||
.IR \-C " | " \-capitalize
|
||||
Capitalize variable names in C include file style, when using \-i.
|
||||
|
||||
@@ -42,7 +42,8 @@ OPTIONS
|
||||
|
||||
-c cols | -cols cols
|
||||
Format <cols> octets per line. Default 16 (-i: 12, -ps: 30, -b:
|
||||
6). Max 256.
|
||||
6). Max 256. No maxmimum for -ps. With -ps, 0 results in one
|
||||
long line of output.
|
||||
|
||||
-C | -capitalize
|
||||
Capitalize variable names in C include file style, when using
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim support file to detect file types
|
||||
"
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2022 Jan 05
|
||||
" Last Change: 2022 Jan 31
|
||||
|
||||
" Listen very carefully, I will say this only once
|
||||
if exists("did_load_filetypes")
|
||||
@@ -193,7 +193,8 @@ au BufNewFile,BufRead *.awk,*.gawk setf awk
|
||||
au BufNewFile,BufRead *.mch,*.ref,*.imp setf b
|
||||
|
||||
" BASIC or Visual Basic
|
||||
au BufNewFile,BufRead *.bas call dist#ft#FTVB("basic")
|
||||
au BufNewFile,BufRead *.bas call dist#ft#FTbas()
|
||||
au BufNewFile,BufRead *.bi,*.bm call dist#ft#FTbas()
|
||||
|
||||
" Visual Basic Script (close to Visual Basic) or Visual Basic .NET
|
||||
au BufNewFile,BufRead *.vb,*.vbs,*.dsm,*.ctl setf vb
|
||||
@@ -202,7 +203,7 @@ au BufNewFile,BufRead *.vb,*.vbs,*.dsm,*.ctl setf vb
|
||||
au BufNewFile,BufRead *.iba,*.ibi setf ibasic
|
||||
|
||||
" FreeBasic file (similar to QBasic)
|
||||
au BufNewFile,BufRead *.fb,*.bi setf freebasic
|
||||
au BufNewFile,BufRead *.fb setf freebasic
|
||||
|
||||
" Batch file for MSDOS.
|
||||
au BufNewFile,BufRead *.bat,*.sys setf dosbatch
|
||||
@@ -653,6 +654,9 @@ au BufNewFile,BufRead *.fsl setf framescript
|
||||
" FStab
|
||||
au BufNewFile,BufRead fstab,mtab setf fstab
|
||||
|
||||
" Fusion
|
||||
au BufRead,BufNewFile *.fusion setf fusion
|
||||
|
||||
" F# or Forth
|
||||
au BufNewFile,BufRead *.fs call dist#ft#FTfs()
|
||||
|
||||
@@ -665,6 +669,12 @@ au BufNewFile,BufRead .gdbinit,gdbinit setf gdb
|
||||
" GDMO
|
||||
au BufNewFile,BufRead *.mo,*.gdmo setf gdmo
|
||||
|
||||
" GDscript
|
||||
au BufNewFile,BufRead *.gd setf gdscript
|
||||
|
||||
" Godot resource
|
||||
au BufRead,BufNewFile *.tscn,*.tres setf gdresource
|
||||
|
||||
" Gedcom
|
||||
au BufNewFile,BufRead *.ged,lltxxxxx.txt setf gedcom
|
||||
|
||||
@@ -677,8 +687,10 @@ autocmd BufRead,BufNewFile *.gift setf gift
|
||||
" Git
|
||||
au BufNewFile,BufRead COMMIT_EDITMSG,MERGE_MSG,TAG_EDITMSG setf gitcommit
|
||||
au BufNewFile,BufRead NOTES_EDITMSG,EDIT_DESCRIPTION setf gitcommit
|
||||
au BufNewFile,BufRead *.git/config,.gitconfig,/etc/gitconfig setf gitconfig
|
||||
au BufNewFile,BufRead *.git/config,.gitconfig,*/etc/gitconfig setf gitconfig
|
||||
au BufNewFile,BufRead */.config/git/config setf gitconfig
|
||||
au BufNewFile,BufRead *.git/config.worktree setf gitconfig
|
||||
au BufNewFile,BufRead *.git/worktrees/*/config.worktree setf gitconfig
|
||||
au BufNewFile,BufRead .gitmodules,*.git/modules/*/config setf gitconfig
|
||||
if !empty($XDG_CONFIG_HOME)
|
||||
au BufNewFile,BufRead $XDG_CONFIG_HOME/git/config setf gitconfig
|
||||
@@ -693,6 +705,9 @@ au BufNewFile,BufRead *.git/*
|
||||
" Gkrellmrc
|
||||
au BufNewFile,BufRead gkrellmrc,gkrellmrc_? setf gkrellmrc
|
||||
|
||||
" GLSL
|
||||
au BufNewFile,BufRead *.glsl setf glsl
|
||||
|
||||
" GP scripts (2.0 and onward)
|
||||
au BufNewFile,BufRead *.gp,.gprc setf gp
|
||||
|
||||
@@ -713,15 +728,19 @@ au BufNewFile,BufRead gitolite.conf setf gitolite
|
||||
au BufNewFile,BufRead {,.}gitolite.rc,example.gitolite.rc setf perl
|
||||
|
||||
" Gnuplot scripts
|
||||
au BufNewFile,BufRead *.gpi setf gnuplot
|
||||
au BufNewFile,BufRead *.gpi,.gnuplot setf gnuplot
|
||||
|
||||
" Go (Google)
|
||||
au BufNewFile,BufRead *.go setf go
|
||||
au BufNewFile,BufRead Gopkg.lock setf toml
|
||||
au BufRead,BufNewFile go.work setf gowork
|
||||
|
||||
" GrADS scripts
|
||||
au BufNewFile,BufRead *.gs setf grads
|
||||
|
||||
" GraphQL
|
||||
au BufNewFile,BufRead *.graphql,*.graphqls,*.gql setf graphql
|
||||
|
||||
" Gretl
|
||||
au BufNewFile,BufRead *.gretl setf gretl
|
||||
|
||||
@@ -737,12 +756,18 @@ au BufNewFile,BufRead */etc/group,*/etc/group-,*/etc/group.edit,*/etc/gshadow,*/
|
||||
" GTK RC
|
||||
au BufNewFile,BufRead .gtkrc,gtkrc setf gtkrc
|
||||
|
||||
" Hack
|
||||
au BufRead,BufNewFile *.hack,*.hackpartial setf hack
|
||||
|
||||
" Haml
|
||||
au BufNewFile,BufRead *.haml setf haml
|
||||
|
||||
" Hamster Classic | Playground files
|
||||
au BufNewFile,BufRead *.hsm setf hamster
|
||||
|
||||
" Handlebars
|
||||
au BufNewFile,BufRead *.hbs setf handlebars
|
||||
|
||||
" Haskell
|
||||
au BufNewFile,BufRead *.hs,*.hsc,*.hs-boot,*.hsig setf haskell
|
||||
au BufNewFile,BufRead *.lhs setf lhaskell
|
||||
@@ -755,12 +780,21 @@ au BufNewFile,BufRead cabal.config setf cabalconfig
|
||||
au BufNewFile,BufRead *.ht setf haste
|
||||
au BufNewFile,BufRead *.htpp setf hastepreproc
|
||||
|
||||
" HCL
|
||||
au BufRead,BufNewFile *.hcl setf hcl
|
||||
|
||||
" Hercules
|
||||
au BufNewFile,BufRead *.vc,*.ev,*.sum,*.errsum setf hercules
|
||||
|
||||
" HEEx
|
||||
au BufRead,BufNewFile *.heex setf heex
|
||||
|
||||
" HEX (Intel)
|
||||
au BufNewFile,BufRead *.hex,*.h32 setf hex
|
||||
|
||||
" Hjson
|
||||
au BufNewFile,BufRead *.hjson setf hjson
|
||||
|
||||
" Hollywood
|
||||
au BufRead,BufNewFile *.hws setf hollywood
|
||||
|
||||
@@ -885,6 +919,9 @@ au BufNewFile,BufRead *.jov,*.j73,*.jovial setf jovial
|
||||
" JSON
|
||||
au BufNewFile,BufRead *.json,*.jsonp,*.webmanifest setf json
|
||||
|
||||
" JSON5
|
||||
au BufNewFile,BufRead *.json5 setf json5
|
||||
|
||||
" JSON Patch (RFC 6902)
|
||||
au BufNewFile,BufRead *.json-patch setf json
|
||||
|
||||
@@ -936,6 +973,9 @@ au BufNewFile,BufRead *.ldif setf ldif
|
||||
" Ld loader
|
||||
au BufNewFile,BufRead *.ld setf ld
|
||||
|
||||
" Ledger
|
||||
au BufRead,BufNewFile *.ldg,*.ledger,*.journal setf ledger
|
||||
|
||||
" Less
|
||||
au BufNewFile,BufRead *.less setf less
|
||||
|
||||
@@ -1173,6 +1213,9 @@ au BufNewFile,BufRead *.nginx,nginx*.conf,*nginx.conf,*/etc/nginx/*,*/usr/local/
|
||||
" Ninja file
|
||||
au BufNewFile,BufRead *.ninja setf ninja
|
||||
|
||||
" Nix
|
||||
au BufRead,BufNewFile *.nix setf nix
|
||||
|
||||
" NPM RC file
|
||||
au BufNewFile,BufRead npmrc,.npmrc setf dosini
|
||||
|
||||
@@ -1358,6 +1401,9 @@ au BufNewFile,BufRead *printcap
|
||||
au BufNewFile,BufRead *termcap
|
||||
\ let b:ptcap_type = "term" | setf ptcap
|
||||
|
||||
" Prisma
|
||||
au BufRead,BufNewFile *.prisma setf prisma
|
||||
|
||||
" PCCTS / ANTLR
|
||||
"au BufNewFile,BufRead *.g setf antlr
|
||||
au BufNewFile,BufRead *.g setf pccts
|
||||
@@ -1365,6 +1411,9 @@ au BufNewFile,BufRead *.g setf pccts
|
||||
" PPWizard
|
||||
au BufNewFile,BufRead *.it,*.ih setf ppwiz
|
||||
|
||||
" Pug
|
||||
au BufRead,BufNewFile *.pug setf pug
|
||||
|
||||
" Puppet
|
||||
au BufNewFile,BufRead Puppetfile setf ruby
|
||||
|
||||
@@ -1430,6 +1479,9 @@ au BufNewFile,BufRead *.pyx,*.pxd setf pyrex
|
||||
au BufNewFile,BufRead *.py,*.pyw,.pythonstartup,.pythonrc setf python
|
||||
au BufNewFile,BufRead *.ptl,*.pyi,SConstruct setf python
|
||||
|
||||
" QL
|
||||
au BufRead,BufNewFile *.ql,*.qll setf ql
|
||||
|
||||
" Radiance
|
||||
au BufNewFile,BufRead *.rad,*.mat setf radiance
|
||||
|
||||
@@ -1834,6 +1886,9 @@ au BufNewFile,BufRead */etc/sudoers,sudoers.tmp setf sudoers
|
||||
" SVG (Scalable Vector Graphics)
|
||||
au BufNewFile,BufRead *.svg setf svg
|
||||
|
||||
" Surface
|
||||
au BufRead,BufNewFile *.sface setf surface
|
||||
|
||||
" Tads (or Nroff or Perl test file)
|
||||
au BufNewFile,BufRead *.t
|
||||
\ if !dist#ft#FTnroff() && !dist#ft#FTperl() | setf tads | endif
|
||||
@@ -1851,6 +1906,9 @@ au BufRead,BufNewFile *.task setf taskedit
|
||||
" Tcl (JACL too)
|
||||
au BufNewFile,BufRead *.tcl,*.tm,*.tk,*.itcl,*.itk,*.jacl,.tclshrc,.wishrc setf tcl
|
||||
|
||||
" Teal
|
||||
au BufRead,BufNewFile *.tl setf teal
|
||||
|
||||
" TealInfo
|
||||
au BufNewFile,BufRead *.tli setf tli
|
||||
|
||||
@@ -1868,6 +1926,9 @@ au BufRead,BufNewFile *.ttl
|
||||
" Terminfo
|
||||
au BufNewFile,BufRead *.ti setf terminfo
|
||||
|
||||
" Terraform
|
||||
au BufRead,BufNewFile *.tfvars setf terraform
|
||||
|
||||
" TeX
|
||||
au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex
|
||||
au BufNewFile,BufRead *.tex call dist#ft#FTtex()
|
||||
@@ -1885,7 +1946,13 @@ au BufNewFile,BufRead texmf.cnf setf texmf
|
||||
au BufNewFile,BufRead .tidyrc,tidyrc,tidy.conf setf tidy
|
||||
|
||||
" TF mud client
|
||||
au BufNewFile,BufRead *.tf,.tfrc,tfrc setf tf
|
||||
au BufNewFile,BufRead .tfrc,tfrc setf tf
|
||||
|
||||
" TF mud client or terraform
|
||||
au BufNewFile,BufRead *.tf call dist#ft#FTtf()
|
||||
|
||||
" TLA+
|
||||
au BufNewFile,BufRead *.tla setf tla
|
||||
|
||||
" tmux configuration
|
||||
au BufNewFile,BufRead {.,}tmux*.conf setf tmux
|
||||
@@ -1894,7 +1961,7 @@ au BufNewFile,BufRead {.,}tmux*.conf setf tmux
|
||||
au BufNewFile,BufRead *.toml setf toml
|
||||
|
||||
" TPP - Text Presentation Program
|
||||
au BufNewFile,BufReadPost *.tpp setf tpp
|
||||
au BufNewFile,BufRead *.tpp setf tpp
|
||||
|
||||
" Treetop
|
||||
au BufRead,BufNewFile *.treetop setf treetop
|
||||
@@ -1951,6 +2018,9 @@ au BufNewFile,BufRead */.init/*.conf,*/.init/*.override setf upstart
|
||||
au BufNewFile,BufRead */.config/upstart/*.conf setf upstart
|
||||
au BufNewFile,BufRead */.config/upstart/*.override setf upstart
|
||||
|
||||
" Vala
|
||||
au BufNewFile,BufRead *.vala setf vala
|
||||
|
||||
" Vera
|
||||
au BufNewFile,BufRead *.vr,*.vri,*.vrh setf vera
|
||||
|
||||
@@ -1981,7 +2051,7 @@ au BufRead,BufNewFile *.hw,*.module,*.pkg
|
||||
\ endif
|
||||
|
||||
" Visual Basic (also uses *.bas) or FORM
|
||||
au BufNewFile,BufRead *.frm call dist#ft#FTVB("form")
|
||||
au BufNewFile,BufRead *.frm call dist#ft#FTfrm()
|
||||
|
||||
" SaxBasic is close to Visual Basic
|
||||
au BufNewFile,BufRead *.sba setf vb
|
||||
@@ -2145,6 +2215,9 @@ au BufNewFile,BufRead *.raml setf raml
|
||||
" yum conf (close enough to dosini)
|
||||
au BufNewFile,BufRead */etc/yum.conf setf dosini
|
||||
|
||||
" YANG
|
||||
au BufRead,BufNewFile *.yang setf yang
|
||||
|
||||
" Zimbu
|
||||
au BufNewFile,BufRead *.zu setf zimbu
|
||||
" Zimbu Templates
|
||||
@@ -2286,6 +2359,9 @@ au BufNewFile,BufRead Kconfig.* call s:StarSetf('kconfig')
|
||||
" Lilo: Linux loader
|
||||
au BufNewFile,BufRead lilo.conf* call s:StarSetf('lilo')
|
||||
|
||||
" Libsensors
|
||||
au BufNewFile,BufRead */etc/sensors.d/[^.]* call s:StarSetf('sensors')
|
||||
|
||||
" Logcheck
|
||||
au BufNewFile,BufRead */etc/logcheck/*.d*/* call s:StarSetf('logcheck')
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: BASIC
|
||||
" Language: BASIC (QuickBASIC 4.5)
|
||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||
" Last Change: 2015 Jan 10
|
||||
" Last Change: 2021 Mar 16
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
@@ -11,17 +11,46 @@ let b:did_ftplugin = 1
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
setlocal comments=:REM,:'
|
||||
setlocal comments=:REM\ ,:Rem\ ,:rem\ ,:'
|
||||
setlocal commentstring='\ %s
|
||||
setlocal formatoptions-=t formatoptions+=croql
|
||||
|
||||
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
|
||||
let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" .
|
||||
\ "All Files (*.*)\t*.*\n"
|
||||
" TODO: support exit ... as middle matches?
|
||||
if exists("loaded_matchit") && !exists("b:match_words")
|
||||
let s:line_start = '\%(^\s*\)\@<='
|
||||
let s:not_end = '\%(end\s\+\)\@<!'
|
||||
let s:not_end_or_exit = '\%(\%(end\|exit\)\s\+\)\@<!'
|
||||
|
||||
let b:match_ignorecase = 1
|
||||
let b:match_words =
|
||||
\ s:not_end_or_exit .. '\<def\s\+fn:\<end\s\+def\>,' ..
|
||||
\ s:not_end_or_exit .. '\<function\>:\<end\s\+function\>,' ..
|
||||
\ s:not_end_or_exit .. '\<sub\>:\<end\s\+sub\>,' ..
|
||||
\ s:not_end .. '\<type\>:\<end\s\+type\>,' ..
|
||||
\ s:not_end .. '\<select\>:\%(select\s\+\)\@<!\<case\%(\s\+\%(else\|is\)\)\=\>:\<end\s\+select\>,' ..
|
||||
\ '\<do\>:\<loop\>,' ..
|
||||
\ '\<for\>\%(\s\+\%(input\|output\|random\|append\|binary\)\)\@!:\<next\>,' ..
|
||||
\ '\<while\>:\<wend\>,' ..
|
||||
\ s:line_start .. 'if\%(.*\<then\s*\%($\|''\)\)\@=:\<\%(' .. s:line_start .. 'else\|elseif\)\>:\<end\s\+if\>,' ..
|
||||
\ '\<lock\>:\<unlock\>'
|
||||
|
||||
let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name") =~? "comment\\|string" || ' ..
|
||||
\ 'strpart(getline("."), 0, col(".") ) =~? "\\<exit\\s\\+"'
|
||||
|
||||
unlet s:line_start s:not_end s:not_end_or_exit
|
||||
endif
|
||||
|
||||
let b:undo_ftplugin = "setl fo< com< cms< sua<" .
|
||||
\ " | unlet! b:browsefilter"
|
||||
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
|
||||
let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" ..
|
||||
\ "BASIC Include Files (*.bi, *.bm)\t*.bi;*.bm\n" ..
|
||||
\ "All Files (*.*)\t*.*\n"
|
||||
endif
|
||||
|
||||
let b:undo_ftplugin = "setl fo< com< cms<" ..
|
||||
\ " | unlet! b:match_ignorecase b:match_skip b:match_words" ..
|
||||
\ " | unlet! b:browsefilter"
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|
||||
|
||||
@@ -1,13 +1,65 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: FreeBasic
|
||||
" Language: FreeBASIC
|
||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||
" Last Change: 2015 Jan 10
|
||||
" Last Change: 2021 Mar 16
|
||||
|
||||
" Setup {{{1
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
let b:did_ftplugin = 1
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
runtime! ftplugin/basic.vim
|
||||
|
||||
" vim: ts=8
|
||||
let s:dialect = freebasic#GetDialect()
|
||||
|
||||
" Comments {{{1
|
||||
" add ''comments before 'comments
|
||||
let &l:comments = "sO:*\ -,mO:*\ \ ,exO:*/,s1:/',mb:',ex:'/,:''," .. &l:comments
|
||||
|
||||
" Match words {{{1
|
||||
if exists("loaded_matchit")
|
||||
let s:not_end = '\%(end\s\+\)\@<!'
|
||||
|
||||
let b:match_words ..= ','
|
||||
|
||||
if s:dialect == 'fb'
|
||||
let b:match_words ..= s:not_end .. '\<constructor\>:\<end\s\+constructor\>,' ..
|
||||
\ s:not_end .. '\<destructor\>:\<end\s\+destructor\>,' ..
|
||||
\ s:not_end .. '\<property\>:\<end\s\+property\>,' ..
|
||||
\ s:not_end .. '\<operator\>:\<end\s\+operator\>,' ..
|
||||
\ s:not_end .. '\<extern\%(\s\+"\)\@=:\<end\s\+extern\>,'
|
||||
endif
|
||||
|
||||
if s:dialect == 'fb' || s:dialect == 'deprecated'
|
||||
let b:match_words ..= s:not_end .. '\<scope\>:\<end\s\+scope\>,'
|
||||
endif
|
||||
|
||||
if s:dialect == 'qb'
|
||||
let b:match_words ..= s:not_end .. '\<__asm\>:\<end\s\+__asm\>,' ..
|
||||
\ s:not_end .. '\<__union\>:\<end\s\+__union\>,' ..
|
||||
\ s:not_end .. '\<__with\>:\<end\s\+__with\>,'
|
||||
else
|
||||
let b:match_words ..= s:not_end .. '\<asm\>:\<end\s\+asm\>,' ..
|
||||
\ s:not_end .. '\<namespace\>:\<end\s\+namespace\>,' ..
|
||||
\ s:not_end .. '\<union\>:\<end\s\+union\>,' ..
|
||||
\ s:not_end .. '\<with\>:\<end\s\+with\>,'
|
||||
endif
|
||||
|
||||
let b:match_words ..= s:not_end .. '\<enum\>:\<end\s\+enum\>,' ..
|
||||
\ '^#\s*\%(if\|ifdef\|ifndef\)\>:^#\s*\%(else\|elseif\)\>:^#\s*endif\>,' ..
|
||||
\ '^#\s*macro\>:^#\s*endmacro\>'
|
||||
|
||||
" skip "function = <retval>"
|
||||
let b:match_skip ..= '|| strpart(getline("."), col(".") - 1) =~? "^\\<function\\s\\+="'
|
||||
|
||||
unlet s:not_end
|
||||
endif
|
||||
|
||||
" Cleanup {{{1
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|
||||
|
||||
26
runtime/ftplugin/qb64.vim
Normal file
26
runtime/ftplugin/qb64.vim
Normal file
@@ -0,0 +1,26 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: QB64
|
||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
runtime! ftplugin/basic.vim
|
||||
|
||||
let s:not_end = '\%(end\s\+\)\@<!'
|
||||
|
||||
let b:match_words ..= ',' ..
|
||||
\ s:not_end .. '\<declare\>:\<end\s\+declare\>,' ..
|
||||
\ '\<select\s\+everycase\>:\%(select\s\+\)\@<!\<case\%(\s\+\%(else\|is\)\)\=\>:\<end\s\+select\>,' ..
|
||||
\ '$IF\>:$\%(ELSEIF\|ELSE\)\>:$END\s*IF\>'
|
||||
|
||||
unlet s:not_end
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|
||||
@@ -4,6 +4,7 @@
|
||||
# Translators: This is the Application Name used in the GVim desktop file
|
||||
Name[de]=GVim
|
||||
Name[eo]=GVim
|
||||
Name[fi]=GVim
|
||||
Name[fr]=GVim
|
||||
Name[it]=GVim
|
||||
Name[ru]=GVim
|
||||
@@ -13,6 +14,7 @@ Name=GVim
|
||||
# Translators: This is the Generic Application Name used in the Vim desktop file
|
||||
GenericName[de]=Texteditor
|
||||
GenericName[eo]=Tekstoredaktilo
|
||||
GenericName[fi]=Tekstinmuokkain
|
||||
GenericName[fr]=Éditeur de texte
|
||||
GenericName[it]=Editor di testi
|
||||
GenericName[ja]=テキストエディタ
|
||||
@@ -23,6 +25,7 @@ GenericName=Text Editor
|
||||
# Translators: This is the comment used in the Vim desktop file
|
||||
Comment[de]=Textdateien bearbeiten
|
||||
Comment[eo]=Redakti tekstajn dosierojn
|
||||
Comment[fi]=Muokkaa tekstitiedostoja
|
||||
Comment[fr]=Éditer des fichiers texte
|
||||
Comment[it]=Edita file di testo
|
||||
Comment[ja]=テキストファイルを編集します
|
||||
@@ -54,7 +57,6 @@ Comment[es]=Edita archivos de texto
|
||||
Comment[et]=Redigeeri tekstifaile
|
||||
Comment[eu]=Editatu testu-fitxategiak
|
||||
Comment[fa]=ویرایش پروندههای متنی
|
||||
Comment[fi]=Muokkaa tekstitiedostoja
|
||||
Comment[ga]=Eagar comhad Téacs
|
||||
Comment[gu]=લખાણ ફાઇલોમાં ફેરફાર કરો
|
||||
Comment[he]=ערוך קבצי טקסט
|
||||
@@ -103,6 +105,7 @@ Type=Application
|
||||
# Translators: Search terms to find this application. Do NOT change the semicolons! The list MUST also end with a semicolon!
|
||||
Keywords[de]=Text;Editor;
|
||||
Keywords[eo]=Teksto;redaktilo;
|
||||
Keywords[fi]=Teksti;muokkain;editori;
|
||||
Keywords[fr]=Texte;éditeur;
|
||||
Keywords[it]=Testo;editor;
|
||||
Keywords[ja]=テキスト;エディタ;
|
||||
|
||||
11
runtime/indent/basic.vim
Normal file
11
runtime/indent/basic.vim
Normal file
@@ -0,0 +1,11 @@
|
||||
" Vim indent file
|
||||
" Language: BASIC (QuickBASIC 4.5)
|
||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||
" Last Change: 2022 Jan 24
|
||||
|
||||
" Only load this indent file when no other was loaded.
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
endif
|
||||
|
||||
runtime! indent/vb.vim
|
||||
11
runtime/indent/freebasic.vim
Normal file
11
runtime/indent/freebasic.vim
Normal file
@@ -0,0 +1,11 @@
|
||||
" Vim indent file
|
||||
" Language: FreeBASIC
|
||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||
" Last Change: 2022 Jan 24
|
||||
|
||||
" Only load this indent file when no other was loaded.
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
endif
|
||||
|
||||
runtime! indent/vb.vim
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim indent script for HTML
|
||||
" Maintainer: Bram Moolenaar
|
||||
" Original Author: Andy Wokula <anwoku@yahoo.de>
|
||||
" Last Change: 2021 Jun 13
|
||||
" Last Change: 2022 Jan 31
|
||||
" Version: 1.0 "{{{
|
||||
" Description: HTML indent script with cached state for faster indenting on a
|
||||
" range of lines.
|
||||
@@ -149,6 +149,15 @@ func HtmlIndent_CheckUserSettings()
|
||||
let b:html_indent_line_limit = 200
|
||||
endif
|
||||
endif
|
||||
|
||||
if exists('b:html_indent_attribute')
|
||||
let b:hi_attr_indent = b:html_indent_attribute
|
||||
elseif exists('g:html_indent_attribute')
|
||||
let b:hi_attr_indent = g:html_indent_attribute
|
||||
else
|
||||
let b:hi_attr_indent = 2
|
||||
endif
|
||||
|
||||
endfunc "}}}
|
||||
|
||||
" Init Script Vars
|
||||
@@ -946,11 +955,11 @@ func s:InsideTag(foundHtmlString)
|
||||
let idx = match(text, '<' . s:tagname . '\s\+\zs\w')
|
||||
endif
|
||||
if idx == -1
|
||||
" after just "<tag" indent two levels more
|
||||
" after just "<tag" indent two levels more by default
|
||||
let idx = match(text, '<' . s:tagname . '$')
|
||||
if idx >= 0
|
||||
call cursor(lnum, idx + 1)
|
||||
return virtcol('.') - 1 + shiftwidth() * 2
|
||||
return virtcol('.') - 1 + shiftwidth() * b:hi_attr_indent
|
||||
endif
|
||||
endif
|
||||
if idx > 0
|
||||
|
||||
11
runtime/indent/qb64.vim
Normal file
11
runtime/indent/qb64.vim
Normal file
@@ -0,0 +1,11 @@
|
||||
" Vim indent file
|
||||
" Language: QB64
|
||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||
" Last Change: 2022 Jan 24
|
||||
|
||||
" Only load this indent file when no other was loaded.
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
endif
|
||||
|
||||
runtime! indent/vb.vim
|
||||
@@ -1,4 +1,4 @@
|
||||
" vim: set ft=html sw=4 :
|
||||
" vim: set ft=html sw=4 ts=8 :
|
||||
|
||||
|
||||
" START_INDENT
|
||||
@@ -41,6 +41,11 @@ dd text
|
||||
dt text
|
||||
</dt>
|
||||
</dl>
|
||||
<div
|
||||
class="test"
|
||||
style="color: yellow">
|
||||
text
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -50,6 +55,7 @@ dt text
|
||||
% START_INDENT
|
||||
% INDENT_EXE let g:html_indent_style1 = "inc"
|
||||
% INDENT_EXE let g:html_indent_script1 = "zero"
|
||||
% INDENT_EXE let g:html_indent_attribute = 1
|
||||
% INDENT_EXE call HtmlIndent_CheckUserSettings()
|
||||
<html>
|
||||
<body>
|
||||
@@ -61,6 +67,11 @@ div#d2 { color: green; }
|
||||
var v1 = "v1";
|
||||
var v2 = "v2";
|
||||
</script>
|
||||
<div
|
||||
class="test"
|
||||
style="color: yellow">
|
||||
text
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
% END_INDENT
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
" vim: set ft=html sw=4 :
|
||||
" vim: set ft=html sw=4 ts=8 :
|
||||
|
||||
|
||||
" START_INDENT
|
||||
@@ -41,6 +41,11 @@ div#d2 { color: green; }
|
||||
dt text
|
||||
</dt>
|
||||
</dl>
|
||||
<div
|
||||
class="test"
|
||||
style="color: yellow">
|
||||
text
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -50,6 +55,7 @@ div#d2 { color: green; }
|
||||
% START_INDENT
|
||||
% INDENT_EXE let g:html_indent_style1 = "inc"
|
||||
% INDENT_EXE let g:html_indent_script1 = "zero"
|
||||
% INDENT_EXE let g:html_indent_attribute = 1
|
||||
% INDENT_EXE call HtmlIndent_CheckUserSettings()
|
||||
<html>
|
||||
<body>
|
||||
@@ -61,6 +67,11 @@ div#d2 { color: green; }
|
||||
var v1 = "v1";
|
||||
var v2 = "v2";
|
||||
</script>
|
||||
<div
|
||||
class="test"
|
||||
style="color: yellow">
|
||||
text
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
% END_INDENT
|
||||
|
||||
@@ -763,9 +763,9 @@ fun! s:ParseSkip(str)
|
||||
let skip = "synIDattr(synID(line('.'),col('.'),1),'name') !~? '" ..
|
||||
\ strpart(skip,2) .. "'"
|
||||
elseif skip[0] == "r"
|
||||
let skip = "strpart(getline('.'),0,col('.'))=~'" . strpart(skip,2). "'"
|
||||
let skip = "strpart(getline('.'),0,col('.'))=~'" .. strpart(skip,2) .. "'"
|
||||
elseif skip[0] == "R"
|
||||
let skip = "strpart(getline('.'),0,col('.'))!~'" . strpart(skip,2). "'"
|
||||
let skip = "strpart(getline('.'),0,col('.'))!~'" .. strpart(skip,2) .. "'"
|
||||
endif
|
||||
endif
|
||||
return skip
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"
|
||||
" Author: Bram Moolenaar
|
||||
" Copyright: Vim license applies, see ":help license"
|
||||
" Last Change: 2021 Dec 16
|
||||
" Last Change: 2022 Jan 17
|
||||
"
|
||||
" WORK IN PROGRESS - Only the basics work
|
||||
" Note: On MS-Windows you need a recent version of gdb. The one included with
|
||||
@@ -1252,8 +1252,18 @@ func s:HandleCursor(msg)
|
||||
if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname)
|
||||
let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '')
|
||||
if lnum =~ '^[0-9]*$'
|
||||
call s:GotoSourcewinOrCreateIt()
|
||||
call s:GotoSourcewinOrCreateIt()
|
||||
if expand('%:p') != fnamemodify(fname, ':p')
|
||||
echomsg 'different fname: "' .. expand('%:p') .. '" vs "' .. fnamemodify(fname, ':p') .. '"'
|
||||
augroup Termdebug
|
||||
" Always open a file read-only instead of showing the ATTENTION
|
||||
" prompt, since we are unlikely to want to edit the file.
|
||||
" The file may be changed but not saved, warn for that.
|
||||
au SwapExists * echohl WarningMsg
|
||||
\ | echo 'Warning: file is being edited elsewhere'
|
||||
\ | echohl None
|
||||
\ | let v:swapchoice = '0'
|
||||
augroup END
|
||||
if &modified
|
||||
" TODO: find existing window
|
||||
exe 'split ' . fnameescape(fname)
|
||||
@@ -1262,6 +1272,9 @@ func s:HandleCursor(msg)
|
||||
else
|
||||
exe 'edit ' . fnameescape(fname)
|
||||
endif
|
||||
augroup Termdebug
|
||||
au! SwapExists
|
||||
augroup END
|
||||
endif
|
||||
exe lnum
|
||||
normal! zv
|
||||
|
||||
@@ -406,6 +406,12 @@ else
|
||||
elseif s:line1 =~# '^#.*by RouterOS.*$'
|
||||
set ft=routeros
|
||||
|
||||
" Sed scripts
|
||||
" #ncomment is allowed but most likely a false positive so require a space
|
||||
" before any trailing comment text
|
||||
elseif s:line1 =~# '^#n\%($\|\s\)'
|
||||
set ft=sed
|
||||
|
||||
" CVS diff
|
||||
else
|
||||
let s:lnum = 1
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
" Vim syntax file
|
||||
" Language: BASIC
|
||||
" Language: BASIC (QuickBASIC 4.5)
|
||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||
" Previous Maintainer: Allan Kelly <allan@fruitloaf.co.uk>
|
||||
" Contributors: Thilo Six
|
||||
" Last Change: 2015 Jan 10
|
||||
" Last Change: 2021 Aug 08
|
||||
|
||||
" First version based on Micro$soft QBASIC circa 1989, as documented in
|
||||
" 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
|
||||
" This syntax file not a complete implementation yet. Send suggestions to the
|
||||
" maintainer.
|
||||
"
|
||||
" Second version attempts to match Microsoft QuickBASIC 4.5 while keeping FreeBASIC
|
||||
" (-lang qb) and QB64 (excluding extensions) in mind. -- DJK
|
||||
|
||||
" Prelude {{{1
|
||||
if exists("b:current_syntax")
|
||||
@@ -18,154 +19,357 @@ endif
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
" Keywords {{{1
|
||||
syn keyword basicStatement BEEP beep Beep BLOAD bload Bload BSAVE bsave Bsave
|
||||
syn keyword basicStatement CALL call Call ABSOLUTE absolute Absolute
|
||||
syn keyword basicStatement CHAIN chain Chain CHDIR chdir Chdir
|
||||
syn keyword basicStatement CIRCLE circle Circle CLEAR clear Clear
|
||||
syn keyword basicStatement CLOSE close Close CLS cls Cls COLOR color Color
|
||||
syn keyword basicStatement COM com Com COMMON common Common
|
||||
syn keyword basicStatement CONST const Const DATA data Data
|
||||
syn keyword basicStatement DECLARE declare Declare DEF def Def
|
||||
syn keyword basicStatement DEFDBL defdbl Defdbl DEFINT defint Defint
|
||||
syn keyword basicStatement DEFLNG deflng Deflng DEFSNG defsng Defsng
|
||||
syn keyword basicStatement DEFSTR defstr Defstr DIM dim Dim
|
||||
syn keyword basicStatement DO do Do LOOP loop Loop
|
||||
syn keyword basicStatement DRAW draw Draw END end End
|
||||
syn keyword basicStatement ENVIRON environ Environ ERASE erase Erase
|
||||
syn keyword basicStatement ERROR error Error EXIT exit Exit
|
||||
syn keyword basicStatement FIELD field Field FILES files Files
|
||||
syn keyword basicStatement FOR for For NEXT next Next
|
||||
syn keyword basicStatement FUNCTION function Function GET get Get
|
||||
syn keyword basicStatement GOSUB gosub Gosub GOTO goto Goto
|
||||
syn keyword basicStatement IF if If THEN then Then ELSE else Else
|
||||
syn keyword basicStatement INPUT input Input INPUT# input# Input#
|
||||
syn keyword basicStatement IOCTL ioctl Ioctl KEY key Key
|
||||
syn keyword basicStatement KILL kill Kill LET let Let
|
||||
syn keyword basicStatement LINE line Line LOCATE locate Locate
|
||||
syn keyword basicStatement LOCK lock Lock UNLOCK unlock Unlock
|
||||
syn keyword basicStatement LPRINT lprint Lprint USING using Using
|
||||
syn keyword basicStatement LSET lset Lset MKDIR mkdir Mkdir
|
||||
syn keyword basicStatement NAME name Name ON on On
|
||||
syn keyword basicStatement ERROR error Error OPEN open Open
|
||||
syn keyword basicStatement OPTION option Option BASE base Base
|
||||
syn keyword basicStatement OUT out Out PAINT paint Paint
|
||||
syn keyword basicStatement PALETTE palette Palette PCOPY pcopy Pcopy
|
||||
syn keyword basicStatement PEN pen Pen PLAY play Play
|
||||
syn keyword basicStatement PMAP pmap Pmap POKE poke Poke
|
||||
syn keyword basicStatement PRESET preset Preset PRINT print Print
|
||||
syn keyword basicStatement PRINT# print# Print# USING using Using
|
||||
syn keyword basicStatement PSET pset Pset PUT put Put
|
||||
syn keyword basicStatement RANDOMIZE randomize Randomize READ read Read
|
||||
syn keyword basicStatement REDIM redim Redim RESET reset Reset
|
||||
syn keyword basicStatement RESTORE restore Restore RESUME resume Resume
|
||||
syn keyword basicStatement RETURN return Return RMDIR rmdir Rmdir
|
||||
syn keyword basicStatement RSET rset Rset RUN run Run
|
||||
syn keyword basicStatement SEEK seek Seek SELECT select Select
|
||||
syn keyword basicStatement CASE case Case SHARED shared Shared
|
||||
syn keyword basicStatement SHELL shell Shell SLEEP sleep Sleep
|
||||
syn keyword basicStatement SOUND sound Sound STATIC static Static
|
||||
syn keyword basicStatement STOP stop Stop STRIG strig Strig
|
||||
syn keyword basicStatement SUB sub Sub SWAP swap Swap
|
||||
syn keyword basicStatement SYSTEM system System TIMER timer Timer
|
||||
syn keyword basicStatement TROFF troff Troff TRON tron Tron
|
||||
syn keyword basicStatement TYPE type Type UNLOCK unlock Unlock
|
||||
syn keyword basicStatement VIEW view View WAIT wait Wait
|
||||
syn keyword basicStatement WHILE while While WEND wend Wend
|
||||
syn keyword basicStatement WIDTH width Width WINDOW window Window
|
||||
syn keyword basicStatement WRITE write Write DATE$ date$ Date$
|
||||
syn keyword basicStatement MID$ mid$ Mid$ TIME$ time$ Time$
|
||||
syn iskeyword @,48-57,.,!,#,%,&,$
|
||||
syn case ignore
|
||||
|
||||
syn keyword basicFunction ABS abs Abs ASC asc Asc
|
||||
syn keyword basicFunction ATN atn Atn CDBL cdbl Cdbl
|
||||
syn keyword basicFunction CINT cint Cint CLNG clng Clng
|
||||
syn keyword basicFunction COS cos Cos CSNG csng Csng
|
||||
syn keyword basicFunction CSRLIN csrlin Csrlin CVD cvd Cvd
|
||||
syn keyword basicFunction CVDMBF cvdmbf Cvdmbf CVI cvi Cvi
|
||||
syn keyword basicFunction CVL cvl Cvl CVS cvs Cvs
|
||||
syn keyword basicFunction CVSMBF cvsmbf Cvsmbf EOF eof Eof
|
||||
syn keyword basicFunction ERDEV erdev Erdev ERL erl Erl
|
||||
syn keyword basicFunction ERR err Err EXP exp Exp
|
||||
syn keyword basicFunction FILEATTR fileattr Fileattr FIX fix Fix
|
||||
syn keyword basicFunction FRE fre Fre FREEFILE freefile Freefile
|
||||
syn keyword basicFunction INP inp Inp INSTR instr Instr
|
||||
syn keyword basicFunction INT int Int LBOUND lbound Lbound
|
||||
syn keyword basicFunction LEN len Len LOC loc Loc
|
||||
syn keyword basicFunction LOF lof Lof LOG log Log
|
||||
syn keyword basicFunction LPOS lpos Lpos PEEK peek Peek
|
||||
syn keyword basicFunction PEN pen Pen POINT point Point
|
||||
syn keyword basicFunction POS pos Pos RND rnd Rnd
|
||||
syn keyword basicFunction SADD sadd Sadd SCREEN screen Screen
|
||||
syn keyword basicFunction SEEK seek Seek SETMEM setmem Setmem
|
||||
syn keyword basicFunction SGN sgn Sgn SIN sin Sin
|
||||
syn keyword basicFunction SPC spc Spc SQR sqr Sqr
|
||||
syn keyword basicFunction STICK stick Stick STRIG strig Strig
|
||||
syn keyword basicFunction TAB tab Tab TAN tan Tan
|
||||
syn keyword basicFunction UBOUND ubound Ubound VAL val Val
|
||||
syn keyword basicFunction VALPTR valptr Valptr VALSEG valseg Valseg
|
||||
syn keyword basicFunction VARPTR varptr Varptr VARSEG varseg Varseg
|
||||
syn keyword basicFunction CHR$ Chr$ chr$ COMMAND$ command$ Command$
|
||||
syn keyword basicFunction DATE$ date$ Date$ ENVIRON$ environ$ Environ$
|
||||
syn keyword basicFunction ERDEV$ erdev$ Erdev$ HEX$ hex$ Hex$
|
||||
syn keyword basicFunction INKEY$ inkey$ Inkey$ INPUT$ input$ Input$
|
||||
syn keyword basicFunction IOCTL$ ioctl$ Ioctl$ LCASES$ lcases$ Lcases$
|
||||
syn keyword basicFunction LAFT$ laft$ Laft$ LTRIM$ ltrim$ Ltrim$
|
||||
syn keyword basicFunction MID$ mid$ Mid$ MKDMBF$ mkdmbf$ Mkdmbf$
|
||||
syn keyword basicFunction MKD$ mkd$ Mkd$ MKI$ mki$ Mki$
|
||||
syn keyword basicFunction MKL$ mkl$ Mkl$ MKSMBF$ mksmbf$ Mksmbf$
|
||||
syn keyword basicFunction MKS$ mks$ Mks$ OCT$ oct$ Oct$
|
||||
syn keyword basicFunction RIGHT$ right$ Right$ RTRIM$ rtrim$ Rtrim$
|
||||
syn keyword basicFunction SPACE$ space$ Space$ STR$ str$ Str$
|
||||
syn keyword basicFunction STRING$ string$ String$ TIME$ time$ Time$
|
||||
syn keyword basicFunction UCASE$ ucase$ Ucase$ VARPTR$ varptr$ Varptr$
|
||||
" Whitespace Errors {{{1
|
||||
if exists("basic_space_errors")
|
||||
if !exists("basic_no_trail_space_error")
|
||||
syn match basicSpaceError display excludenl "\s\+$"
|
||||
endif
|
||||
if !exists("basic_no_tab_space_error")
|
||||
syn match basicSpaceError display " \+\t"me=e-1
|
||||
endif
|
||||
endif
|
||||
|
||||
" Comment Errors {{{1
|
||||
if !exists("basic_no_comment_errors")
|
||||
syn match basicCommentError "\<REM\>.*"
|
||||
endif
|
||||
|
||||
" Not Top Cluster {{{1
|
||||
syn cluster basicNotTop contains=@basicLineIdentifier,basicDataString,basicDataSeparator,basicTodo
|
||||
|
||||
" Statements {{{1
|
||||
|
||||
syn cluster basicStatements contains=basicStatement,basicDataStatement,basicMetaRemStatement,basicPutStatement,basicRemStatement
|
||||
|
||||
let s:statements =<< trim EOL " {{{2
|
||||
beep
|
||||
bload
|
||||
bsave
|
||||
call
|
||||
calls
|
||||
case
|
||||
chain
|
||||
chdir
|
||||
circle
|
||||
clear
|
||||
close
|
||||
cls
|
||||
color
|
||||
com
|
||||
common
|
||||
const
|
||||
declare
|
||||
def
|
||||
def\s\+seg
|
||||
defdbl
|
||||
defint
|
||||
deflng
|
||||
defsng
|
||||
defstr
|
||||
dim
|
||||
do
|
||||
draw
|
||||
elseif
|
||||
end
|
||||
end\s\+\%(def\|function\|if\|select\|sub\|type\)
|
||||
environ
|
||||
erase
|
||||
error
|
||||
exit\s\+\%(def\|do\|for\|function\|sub\)
|
||||
field
|
||||
files
|
||||
for
|
||||
function
|
||||
get
|
||||
gosub
|
||||
goto
|
||||
if
|
||||
input
|
||||
ioctl
|
||||
key
|
||||
kill
|
||||
let
|
||||
line
|
||||
line\s\+input
|
||||
locate
|
||||
lock
|
||||
loop
|
||||
lprint
|
||||
lset
|
||||
mkdir
|
||||
name
|
||||
next
|
||||
on
|
||||
on\s\+error
|
||||
on\s\+uevent
|
||||
open
|
||||
open\s\+com
|
||||
option
|
||||
out
|
||||
paint
|
||||
palette
|
||||
palette\s\+using
|
||||
pcopy
|
||||
pen
|
||||
pmap
|
||||
poke
|
||||
preset
|
||||
print
|
||||
pset
|
||||
randomize
|
||||
read
|
||||
redim
|
||||
reset
|
||||
restore
|
||||
resume
|
||||
return
|
||||
rmdir
|
||||
rset
|
||||
run
|
||||
select\s\+case
|
||||
shared
|
||||
shell
|
||||
sleep
|
||||
sound
|
||||
static
|
||||
stop
|
||||
strig
|
||||
sub
|
||||
swap
|
||||
system
|
||||
troff
|
||||
tron
|
||||
type
|
||||
uevent
|
||||
unlock
|
||||
using
|
||||
view
|
||||
view\s\+print
|
||||
wait
|
||||
wend
|
||||
while
|
||||
width
|
||||
window
|
||||
write
|
||||
EOL
|
||||
" }}}
|
||||
|
||||
for s in s:statements
|
||||
exe 'syn match basicStatement "\<' .. s .. '\>" contained'
|
||||
endfor
|
||||
|
||||
syn match basicStatement "\<\%(then\|else\)\>" nextgroup=@basicStatements skipwhite
|
||||
|
||||
" DATA Statement
|
||||
syn match basicDataSeparator "," contained
|
||||
syn region basicDataStatement matchgroup=basicStatement start="\<data\>" matchgroup=basicStatementSeparator end=":\|$" contained contains=basicDataSeparator,basicDataString,basicNumber,basicFloat,basicString
|
||||
|
||||
if !exists("basic_no_data_fold")
|
||||
syn region basicMultilineData start="^\s*\<data\>.*\n\%(^\s*\<data\>\)\@=" end="^\s*\<data\>.*\n\%(^\s*\<data\>\)\@!" contains=basicDataStatement transparent fold keepend
|
||||
endif
|
||||
|
||||
" PUT File I/O and Graphics statements - needs special handling for graphics
|
||||
" action verbs
|
||||
syn match basicPutAction "\<\%(pset\|preset\|and\|or\|xor\)\>" contained
|
||||
syn region basicPutStatement matchgroup=basicStatement start="\<put\>" matchgroup=basicStatementSeparator end=":\|$" contained contains=basicKeyword,basicPutAction,basicFilenumber
|
||||
|
||||
" Keywords {{{1
|
||||
let s:keywords =<< trim EOL " {{{2
|
||||
absolute
|
||||
access
|
||||
alias
|
||||
append
|
||||
as
|
||||
base
|
||||
binary
|
||||
byval
|
||||
cdecl
|
||||
com
|
||||
def
|
||||
do
|
||||
for
|
||||
function
|
||||
gosub
|
||||
goto
|
||||
input
|
||||
int86old
|
||||
int86xold
|
||||
interrupt
|
||||
interruptx
|
||||
is
|
||||
key
|
||||
len
|
||||
list
|
||||
local
|
||||
lock
|
||||
lprint
|
||||
next
|
||||
off
|
||||
on
|
||||
output
|
||||
pen
|
||||
play
|
||||
random
|
||||
read
|
||||
resume
|
||||
screen
|
||||
seg
|
||||
shared
|
||||
signal
|
||||
static
|
||||
step
|
||||
stop
|
||||
strig
|
||||
sub
|
||||
timer
|
||||
to
|
||||
until
|
||||
using
|
||||
while
|
||||
write
|
||||
EOL
|
||||
" }}}
|
||||
|
||||
for k in s:keywords
|
||||
exe 'syn match basicKeyword "\<' .. k .. '\>"'
|
||||
endfor
|
||||
|
||||
" Functions {{{1
|
||||
syn keyword basicFunction abs asc atn cdbl chr$ cint clng command$ cos csng
|
||||
syn keyword basicFunction csrlin cvd cvdmbf cvi cvl cvs cvsmbf environ$ eof
|
||||
syn keyword basicFunction erdev erdev$ erl err exp fileattr fix fre freefile
|
||||
syn keyword basicFunction hex$ inkey$ inp input$ instr int ioctl$ left$ lbound
|
||||
syn keyword basicFunction lcase$ len loc lof log lpos ltrim$ mkd$ mkdmbf$ mki$
|
||||
syn keyword basicFunction mkl$ mks$ mksmbf$ oct$ peek pen point pos right$ rnd
|
||||
syn keyword basicFunction rtrim$ sadd setmem sgn sin space$ spc sqr stick str$
|
||||
syn keyword basicFunction strig string$ tab tan ubound ucase$ val valptr
|
||||
syn keyword basicFunction valseg varptr varptr$ varseg
|
||||
|
||||
" Functions and statements (same name) {{{1
|
||||
syn match basicStatement "\<\%(date\$\|mid\$\|play\|screen\|seek\|time\$\|timer\)\>" contained
|
||||
syn match basicFunction "\<\%(date\$\|mid\$\|play\|screen\|seek\|time\$\|timer\)\>"
|
||||
|
||||
" Types {{{1
|
||||
syn keyword basicType integer long single double string any
|
||||
|
||||
" Strings {{{1
|
||||
|
||||
" Unquoted DATA strings - anything except [:,] and leading or trailing whitespace
|
||||
" Needs lower priority than numbers
|
||||
syn match basicDataString "[^[:space:],:]\+\%(\s\+[^[:space:],:]\+\)*" contained
|
||||
|
||||
syn region basicString start=+"+ end=+"+ oneline
|
||||
|
||||
" Booleans {{{1
|
||||
if exists("basic_booleans")
|
||||
syn keyword basicBoolean true false
|
||||
endif
|
||||
|
||||
" Numbers {{{1
|
||||
" Integer number, or floating point number without a dot.
|
||||
syn match basicNumber "\<\d\+\>"
|
||||
" Floating point number, with dot
|
||||
syn match basicNumber "\<\d\+\.\d*\>"
|
||||
" Floating point number, starting with a dot
|
||||
syn match basicNumber "\.\d\+\>"
|
||||
|
||||
" String and Character constants {{{1
|
||||
syn match basicSpecial "\\\d\d\d\|\\." contained
|
||||
syn region basicString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=basicSpecial
|
||||
" Integers
|
||||
syn match basicNumber "-\=&o\=\o\+[%&]\=\>"
|
||||
syn match basicNumber "-\=&h\x\+[%&]\=\>"
|
||||
syn match basicNumber "-\=\<\d\+[%&]\=\>"
|
||||
|
||||
" Line numbers {{{1
|
||||
syn region basicLineNumber start="^\d" end="\s"
|
||||
" Floats
|
||||
syn match basicFloat "-\=\<\d\+\.\=\d*\%(\%([ed][+-]\=\d*\)\|[!#]\)\=\>"
|
||||
syn match basicFloat "-\=\<\.\d\+\%(\%([ed][+-]\=\d*\)\|[!#]\)\=\>"
|
||||
|
||||
" Data-type suffixes {{{1
|
||||
syn match basicTypeSpecifier "[a-zA-Z0-9][$%&!#]"ms=s+1
|
||||
" Used with OPEN statement
|
||||
syn match basicFilenumber "#\d\+"
|
||||
" Statement anchors {{{1
|
||||
syn match basicLineStart "^" nextgroup=@basicStatements,@basicLineIdentifier skipwhite
|
||||
syn match basicStatementSeparator ":" nextgroup=@basicStatements skipwhite
|
||||
|
||||
" Mathematical operators {{{1
|
||||
" syn match basicMathsOperator "[<>+\*^/\\=-]"
|
||||
syn match basicMathsOperator "-\|=\|[:<>+\*^/\\]\|AND\|OR"
|
||||
" Line numbers and labels {{{1
|
||||
|
||||
" QuickBASIC limits these to 65,529 and 40 chars respectively
|
||||
syn match basicLineNumber "\d\+" nextgroup=@basicStatements skipwhite contained
|
||||
syn match basicLineLabel "\a[[:alnum:]]*\ze\s*:" nextgroup=@basicStatements skipwhite contained
|
||||
|
||||
syn cluster basicLineIdentifier contains=basicLineNumber,basicLineLabel
|
||||
|
||||
" Line Continuation {{{1
|
||||
syn match basicLineContinuation "\s*\zs_\ze\s*$"
|
||||
|
||||
" Type suffixes {{{1
|
||||
if exists("basic_type_suffixes")
|
||||
syn match basicTypeSuffix "\a[[:alnum:].]*\zs[$%&!#]"
|
||||
endif
|
||||
|
||||
" File numbers {{{1
|
||||
syn match basicFilenumber "#\d\+"
|
||||
syn match basicFilenumber "#\a[[:alnum:].]*[%&!#]\="
|
||||
|
||||
" Operators {{{1
|
||||
if exists("basic_operators")
|
||||
syn match basicArithmeticOperator "[-+*/\\^]"
|
||||
syn match basicRelationalOperator "<>\|<=\|>=\|[><=]"
|
||||
endif
|
||||
syn match basicLogicalOperator "\<\%(not\|and\|or\|xor\|eqv\|imp\)\>"
|
||||
syn match basicArithmeticOperator "\<mod\>"
|
||||
|
||||
" Metacommands {{{1
|
||||
" Note: No trailing word boundaries. Text may be freely mixed however there
|
||||
" must be only leading whitespace prior to the first metacommand
|
||||
syn match basicMetacommand "$INCLUDE\s*:\s*'[^']\+'" contained containedin=@basicMetaComments
|
||||
syn match basicMetacommand "$\%(DYNAMIC\|STATIC\)" contained containedin=@basicMetaComments
|
||||
|
||||
" Comments {{{1
|
||||
syn keyword basicTodo TODO FIXME XXX NOTE contained
|
||||
syn region basicComment start="^\s*\zsREM\>" start="\%(:\s*\)\@<=REM\>" end="$" contains=basicTodo
|
||||
syn region basicComment start="'" end="$" contains=basicTodo
|
||||
syn keyword basicTodo TODO FIXME XXX NOTE contained
|
||||
|
||||
syn region basicRemStatement matchgroup=basicStatement start="REM\>" end="$" contains=basicTodo,@Spell contained
|
||||
syn region basicComment start="'" end="$" contains=basicTodo,@Spell
|
||||
|
||||
if !exists("basic_no_comment_fold")
|
||||
syn region basicMultilineComment start="^\s*'.*\n\%(\s*'\)\@=" end="^\s*'.*\n\%(\s*'\)\@!" contains=@basicComments transparent fold keepend
|
||||
endif
|
||||
|
||||
" Metacommands
|
||||
syn region basicMetaRemStatement matchgroup=basicStatement start="REM\>\s*\$\@=" end="$" contains=basicTodo contained
|
||||
syn region basicMetaComment start="'\s*\$\@=" end="$" contains=basicTodo
|
||||
|
||||
syn cluster basicMetaComments contains=basicMetaComment,basicMetaRemStatement
|
||||
syn cluster basicComments contains=basicComment,basicMetaComment
|
||||
|
||||
"syn sync ccomment basicComment
|
||||
|
||||
" Default Highlighting {{{1
|
||||
hi def link basicLabel Label
|
||||
hi def link basicConditional Conditional
|
||||
hi def link basicRepeat Repeat
|
||||
hi def link basicLineNumber Comment
|
||||
hi def link basicNumber Number
|
||||
hi def link basicError Error
|
||||
hi def link basicStatement Statement
|
||||
hi def link basicString String
|
||||
hi def link basicComment Comment
|
||||
hi def link basicSpecial Special
|
||||
hi def link basicTodo Todo
|
||||
hi def link basicFunction Identifier
|
||||
hi def link basicTypeSpecifier Type
|
||||
hi def link basicFilenumber basicTypeSpecifier
|
||||
"hi basicMathsOperator term=bold cterm=bold gui=bold
|
||||
hi def link basicArithmeticOperator basicOperator
|
||||
hi def link basicBoolean Boolean
|
||||
hi def link basicComment Comment
|
||||
hi def link basicCommentError Error
|
||||
hi def link basicDataString basicString
|
||||
hi def link basicFilenumber basicTypeSuffix " TODO: better group
|
||||
hi def link basicFloat Float
|
||||
hi def link basicFunction Identifier
|
||||
hi def link basicKeyword Keyword
|
||||
hi def link basicLineIdentifier LineNr
|
||||
hi def link basicLineContinuation Special
|
||||
hi def link basicLineLabel basicLineIdentifier
|
||||
hi def link basicLineNumber basicLineIdentifier
|
||||
hi def link basicLogicalOperator basicOperator
|
||||
hi def link basicMetacommand SpecialComment
|
||||
hi def link basicMetaComment Comment
|
||||
hi def link basicMetaRemStatement Comment
|
||||
hi def link basicNumber Number
|
||||
hi def link basicOperator Operator
|
||||
hi def link basicPutAction Keyword
|
||||
hi def link basicRelationalOperator basicOperator
|
||||
hi def link basicRemStatement Comment
|
||||
hi def link basicSpaceError Error
|
||||
hi def link basicStatementSeparator Special
|
||||
hi def link basicStatement Statement
|
||||
hi def link basicString String
|
||||
hi def link basicTodo Todo
|
||||
hi def link basicType Type
|
||||
hi def link basicTypeSuffix Special
|
||||
if exists("basic_legacy_syntax_groups")
|
||||
hi def link basicTypeSpecifier Type
|
||||
hi def link basicTypeSuffix basicTypeSpecifier
|
||||
endif
|
||||
|
||||
" Postscript {{{1
|
||||
let b:current_syntax = "basic"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
" Original Author: Mohamed Boughaba <mohamed dot bgb at gmail dot com>
|
||||
" Maintainer: Quentin Hibon (github user hiqua)
|
||||
" Version: 0.4
|
||||
" Last Change: 2022 Jan 04
|
||||
" Last Change: 2022 Jan 15
|
||||
|
||||
" References:
|
||||
" http://i3wm.org/docs/userguide.html#configuring
|
||||
@@ -175,7 +175,7 @@ syn keyword i3ConfigDrawingMarksKeyword show_marks contained
|
||||
syn match i3ConfigDrawingMarks /^\s*show_marks\s\+\(yes\|no\)\s\?$/ contains=i3ConfigFocusWrappingType,i3ConfigDrawingMarksKeyword
|
||||
|
||||
" Group mode/bar
|
||||
syn keyword i3ConfigBlockKeyword mode bar colors i3bar_command status_command position exec mode hidden_state modifier id position output background statusline tray_output tray_padding separator separator_symbol workspace_buttons strip_workspace_numbers binding_mode_indicator focused_workspace active_workspace inactive_workspace urgent_workspace binding_mode contained
|
||||
syn keyword i3ConfigBlockKeyword mode bar colors i3bar_command status_command position exec mode hidden_state modifier id position output background statusline tray_output tray_padding separator separator_symbol workspace_min_width workspace_buttons strip_workspace_numbers binding_mode_indicator focused_workspace active_workspace inactive_workspace urgent_workspace binding_mode contained
|
||||
syn region i3ConfigBlock start=+.*s\?{$+ end=+^}$+ contains=i3ConfigBlockKeyword,i3ConfigString,i3ConfigBind,i3ConfigComment,i3ConfigFont,i3ConfigFocusWrappingType,i3ConfigColor,i3ConfigVariable transparent keepend extend
|
||||
|
||||
" Line continuation
|
||||
|
||||
409
runtime/syntax/qb64.vim
Normal file
409
runtime/syntax/qb64.vim
Normal file
@@ -0,0 +1,409 @@
|
||||
" Vim syntax file
|
||||
" Language: QB64
|
||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||
" Last Change: 2022 Jan 21
|
||||
|
||||
" Prelude {{{1
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
" syn iskeyword set after sourcing of basic.vim
|
||||
|
||||
syn case ignore
|
||||
|
||||
let s:prefix = search('\c^\s*$NOPREFIX\>', 'n') ? '_\=' : '_'
|
||||
|
||||
" Statements {{{1
|
||||
|
||||
let s:statements =<< trim EOL " {{{2
|
||||
acceptfiledrop
|
||||
allowfullscreen
|
||||
assert
|
||||
console
|
||||
consolecursor
|
||||
consolefont
|
||||
consoletitle
|
||||
continue
|
||||
copypalette
|
||||
define
|
||||
delay
|
||||
depthbuffer
|
||||
displayorder
|
||||
dontblend
|
||||
echo
|
||||
exit\s\+\%(select\|case\)
|
||||
finishdrop
|
||||
freefont
|
||||
freeimage
|
||||
icon
|
||||
keyclear
|
||||
limit
|
||||
maptriangle
|
||||
memcopy
|
||||
memfill
|
||||
memfree
|
||||
memput
|
||||
mousehide
|
||||
mousemove
|
||||
mouseshow
|
||||
printimage
|
||||
printstring
|
||||
putimage
|
||||
screenclick
|
||||
screenhide
|
||||
screenmove
|
||||
screenprint
|
||||
screenshow
|
||||
setalpha
|
||||
sndbal
|
||||
sndclose
|
||||
sndlimit
|
||||
sndloop
|
||||
sndpause
|
||||
sndplay
|
||||
sndplaycopy
|
||||
sndplayfile
|
||||
sndraw
|
||||
sndrawdone
|
||||
sndsetpos
|
||||
sndstop
|
||||
sndvol
|
||||
title
|
||||
EOL
|
||||
" }}}
|
||||
|
||||
for s in s:statements
|
||||
exe 'syn match qb64Statement "\<' .. s:prefix .. s .. '\>" contained contains=qb64Underscore'
|
||||
endfor
|
||||
|
||||
" Functions {{{1
|
||||
|
||||
let s:functions =<< trim EOL " {{{2
|
||||
acos
|
||||
acosh
|
||||
alpha
|
||||
alpha32
|
||||
arccot
|
||||
arccsc
|
||||
arcsec
|
||||
asin
|
||||
asinh
|
||||
atan2
|
||||
atanh
|
||||
axis
|
||||
backgroundcolor
|
||||
blue
|
||||
blue32
|
||||
button
|
||||
buttonchange
|
||||
ceil
|
||||
cinp
|
||||
commandcount
|
||||
connected
|
||||
connectionaddress
|
||||
connectionaddress$
|
||||
consoleinput
|
||||
copyimage
|
||||
cot
|
||||
coth
|
||||
cosh
|
||||
csc
|
||||
csch
|
||||
cv
|
||||
cwd$
|
||||
d2g
|
||||
d2r
|
||||
defaultcolor
|
||||
deflate$
|
||||
desktopheight
|
||||
desktopwidth
|
||||
device$
|
||||
deviceinput
|
||||
devices
|
||||
dir$
|
||||
direxists
|
||||
droppedfile
|
||||
droppedfile$
|
||||
errorline
|
||||
errormessage$
|
||||
exit
|
||||
fileexists
|
||||
fontheight
|
||||
fontwidth
|
||||
freetimer
|
||||
g2d
|
||||
g2r
|
||||
green
|
||||
green32
|
||||
height
|
||||
hypot
|
||||
inclerrorfile$
|
||||
inclerrorline
|
||||
inflate$
|
||||
instrrev
|
||||
keyhit
|
||||
keydown
|
||||
lastaxis
|
||||
lastbutton
|
||||
lastwheel
|
||||
loadfont
|
||||
loadimage
|
||||
mem
|
||||
memelement
|
||||
memexists
|
||||
memimage
|
||||
memnew
|
||||
memsound
|
||||
mk$
|
||||
mousebutton
|
||||
mouseinput
|
||||
mousemovementx
|
||||
mousemovementy
|
||||
mousepipeopen
|
||||
mousewheel
|
||||
mousex
|
||||
mousey
|
||||
newimage
|
||||
offset
|
||||
openclient
|
||||
os$
|
||||
pi
|
||||
pixelsize
|
||||
printwidth
|
||||
r2d
|
||||
r2g
|
||||
red
|
||||
red32
|
||||
readbit
|
||||
resetbit
|
||||
resizeheight
|
||||
resizewidth
|
||||
rgb
|
||||
rgb32
|
||||
rgba
|
||||
rgba32
|
||||
round
|
||||
sec
|
||||
sech
|
||||
screenexists
|
||||
screenimage
|
||||
screenx
|
||||
screeny
|
||||
setbit
|
||||
shellhide
|
||||
shl
|
||||
shr
|
||||
sinh
|
||||
sndcopy
|
||||
sndgetpos
|
||||
sndlen
|
||||
sndopen
|
||||
sndopenraw
|
||||
sndpaused
|
||||
sndplaying
|
||||
sndrate
|
||||
sndrawlen
|
||||
startdir$
|
||||
strcmp
|
||||
stricmp
|
||||
tanh
|
||||
title$
|
||||
togglebit
|
||||
totaldroppedfiles
|
||||
trim$
|
||||
wheel
|
||||
width
|
||||
windowhandle
|
||||
windowhasfocus
|
||||
EOL
|
||||
" }}}
|
||||
|
||||
for f in s:functions
|
||||
exe 'syn match qb64Function "\<' .. s:prefix .. f .. '\>" contains=qb64Underscore'
|
||||
endfor
|
||||
|
||||
" Functions and statements (same name) {{{1
|
||||
|
||||
let s:common =<< trim EOL " {{{2
|
||||
autodisplay
|
||||
blend
|
||||
blink
|
||||
capslock
|
||||
clearcolor
|
||||
clipboard$
|
||||
clipboardimage
|
||||
controlchr
|
||||
dest
|
||||
display
|
||||
font
|
||||
fullscreen
|
||||
mapunicode
|
||||
memget
|
||||
numlock
|
||||
palettecolor
|
||||
printmode
|
||||
resize
|
||||
screenicon
|
||||
scrolllock
|
||||
source
|
||||
EOL
|
||||
" }}}
|
||||
|
||||
for c in s:common
|
||||
exe 'syn match qb64Statement "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore contained'
|
||||
exe 'syn match qb64Function "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore'
|
||||
endfor
|
||||
|
||||
" Keywords {{{1
|
||||
|
||||
" Non-prefixed keywords {{{2
|
||||
" TIMER FREE
|
||||
" _DEPTH_BUFFER LOCK
|
||||
syn keyword qb64Keyword free lock
|
||||
|
||||
let s:keywords =<< trim EOL " {{{2
|
||||
all
|
||||
anticlockwise
|
||||
behind
|
||||
clear
|
||||
clip
|
||||
console
|
||||
dontwait
|
||||
explicit
|
||||
explicitarray
|
||||
fillbackground
|
||||
hardware
|
||||
hardware1
|
||||
hide
|
||||
keepbackground
|
||||
middle
|
||||
none
|
||||
off
|
||||
only
|
||||
onlybackground
|
||||
ontop
|
||||
openconnection
|
||||
openhost
|
||||
preserve
|
||||
seamless
|
||||
smooth
|
||||
smoothshrunk
|
||||
smoothstretched
|
||||
software
|
||||
squarepixels
|
||||
stretch
|
||||
toggle
|
||||
EOL
|
||||
" }}}
|
||||
|
||||
for k in s:keywords
|
||||
exe 'syn match qb64Keyword "\<' .. s:prefix .. k .. '\>" contains=qb64Underscore'
|
||||
endfor
|
||||
|
||||
syn match qb64Underscore "\<_" contained conceal transparent
|
||||
|
||||
" Source QuickBASIC syntax {{{1
|
||||
runtime! syntax/basic.vim
|
||||
|
||||
" add after the BASIC syntax file is sourced so cluster already exists
|
||||
syn cluster basicStatements add=qb64Statement,qb64Metacommand,qb64IfMetacommand
|
||||
syn cluster basicLineIdentifier add=qb64LineLabel
|
||||
syn cluster qb64NotTop contains=@basicNotTop,qb64Metavariable
|
||||
|
||||
syn iskeyword @,48-57,.,_,!,#,$,%,&,`
|
||||
|
||||
" Unsupported QuickBASIC features {{{1
|
||||
" TODO: add linux only missing features
|
||||
syn keyword qb64Unsupported alias any byval calls cdecl erdev erdev$ fileattr
|
||||
syn keyword qb64Unsupported fre ioctl ioctl$ pen play setmem signal uevent
|
||||
syn keyword qb64Unsupported tron troff
|
||||
syn match qb64Unsupported "\<declare\%(\s\+\%(sub\|function\)\>\)\@="
|
||||
syn match qb64Unsupported "\<\%(date\|time\)$\ze\s*=" " statements only
|
||||
syn match qb64Unsupported "\<def\zs\s\+FN"
|
||||
syn match qb64Unsupported "\<\%(exit\|end\)\s\+def\>"
|
||||
syn match qb64Unsupported "\<width\s\+lprint\>"
|
||||
|
||||
" Types {{{1
|
||||
syn keyword qb64Type _BIT _BYTE _FLOAT _INTEGER64 _MEM _OFFSET _UNSIGNED
|
||||
|
||||
" Type suffixes {{{1
|
||||
if exists("basic_type_suffixes")
|
||||
" TODO: handle leading word boundary and __+ prefix
|
||||
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=`\%(\d\+\)\="
|
||||
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=\%(%\|%%\|&\|&&\|%&\)"
|
||||
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\%(!\|##\|#\)"
|
||||
syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=$\%(\d\+\)\="
|
||||
endif
|
||||
|
||||
" Numbers {{{1
|
||||
|
||||
" Integers
|
||||
syn match qb64Number "-\=&b[01]\+&\>\="
|
||||
|
||||
syn match qb64Number "-\=\<[01]\~\=`\>"
|
||||
syn match qb64Number "-\=\<\d\+`\d\+\>"
|
||||
|
||||
syn match qb64Number "-\=\<\d\+\%(%%\|&&\|%&\)\>"
|
||||
syn match qb64Number "\<\d\+\~\%(%%\|&&\|%&\)\>"
|
||||
|
||||
syn match qb64Number "-\=\<&b[01]\+\%(%%\|&&\|%&\)\>"
|
||||
syn match qb64Number "\<&b[01]\+\~\%(%%\|&&\|%&\)\>"
|
||||
|
||||
syn match qb64Number "-\=\<&o\=\o\+\%(%%\|&&\|%&\)\>"
|
||||
syn match qb64Number "\<&o\=\o\+\~\%(%%\|&&\|%&\)\>"
|
||||
|
||||
syn match qb64Number "-\=\<&h\x\+\%(%%\|&&\|%&\)\>"
|
||||
syn match qb64Number "\<&h\x\+\~\%(%%\|&&\|%&\)\>"
|
||||
|
||||
" Floats
|
||||
syn match qb64Float "-\=\<\d\+\.\=\d*##\>"
|
||||
syn match qb64Float "-\=\<\.\d\+##\>"
|
||||
|
||||
" Line numbers and labels {{{1
|
||||
syn match qb64LineLabel "\%(_\{2,}\)\=\a[[:alnum:]._]*[[:alnum:]]\ze\s*:" nextgroup=@basicStatements skipwhite contained
|
||||
|
||||
" Metacommands {{{1
|
||||
syn match qb64Metacommand contained "$NOPREFIX\>"
|
||||
syn match qb64Metacommand contained "$ASSERTS\%(:CONSOLE\)\=\>"
|
||||
syn match qb64Metacommand contained "$CHECKING:\%(ON\|OFF\)\>"
|
||||
syn match qb64Metacommand contained "$COLOR:\%(0\|32\)\>"
|
||||
syn match qb64Metacommand contained "$CONSOLE\%(:ONLY\)\=\>"
|
||||
syn match qb64Metacommand contained "$EXEICON\s*:\s*'[^']\+'"
|
||||
syn match qb64Metacommand contained "$ERROR\>"
|
||||
syn match qb64Metacommand contained "$LET\>"
|
||||
syn match qb64Metacommand contained "$RESIZE:\%(ON\|OFF\|STRETCH\|SMOOTH\)\>"
|
||||
syn match qb64Metacommand contained "$SCREEN\%(HIDE\|SHOW\)\>"
|
||||
syn match qb64Metacommand contained "$VERSIONINFO\s*:.*"
|
||||
syn match qb64Metacommand contained "$VIRTUALKEYBOARD:\%(ON\|OFF\)\>"
|
||||
|
||||
syn region qb64IfMetacommand contained matchgroup=qb64Metacommand start="$\%(IF\|ELSEIF\)\>" end="\<THEN\>" oneline transparent contains=qb64Metavariable
|
||||
syn match qb64Metacommand contained "$\%(ELSE\|END\s*IF\)\>"
|
||||
|
||||
syn keyword qb64Metavariable contained defined undefined
|
||||
syn keyword qb64Metavariable contained windows win linux mac maxosx
|
||||
syn keyword qb64Metavariable contained 32bit 64bit version
|
||||
|
||||
" Default Highlighting {{{1
|
||||
hi def link qb64Float basicFloat
|
||||
hi def link qb64Function Function
|
||||
hi def link qb64Keyword Keyword
|
||||
hi def link qb64LineLabel basicLineLabel
|
||||
hi def link qb64Metacommand PreProc
|
||||
hi def link qb64Metavariable Identifier
|
||||
hi def link qb64Number basicNumber
|
||||
hi def link qb64Statement Statement
|
||||
hi def link qb64TypeSuffix basicTypeSuffix
|
||||
hi def link qb64Type Type
|
||||
hi def link qb64Unsupported Error
|
||||
|
||||
" Postscript {{{1
|
||||
let b:current_syntax = "qb64"
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim syntax file
|
||||
" Language: M$ Resource files (*.rc)
|
||||
" Maintainer: Christian Brabandt
|
||||
" Last Change: 2015-05-29
|
||||
" Last Change: 20220116
|
||||
" Repository: https://github.com/chrisbra/vim-rc-syntax
|
||||
" License: Vim (see :h license)
|
||||
" Previous Maintainer: Heiko Erhardt <Heiko.Erhardt@munich.netsurf.de>
|
||||
@@ -173,16 +173,17 @@ hi def link rcAttribute rcCommonAttribute
|
||||
hi def link rcStdId rcStatement
|
||||
hi def link rcStatement Statement
|
||||
|
||||
" Default color overrides
|
||||
hi def rcLanguage term=reverse ctermbg=Red ctermfg=Yellow guibg=Red guifg=Yellow
|
||||
hi def rcMainObject term=underline ctermfg=Blue guifg=Blue
|
||||
hi def rcSubObject ctermfg=Green guifg=Green
|
||||
hi def rcCaptionParam term=underline ctermfg=DarkGreen guifg=Green
|
||||
hi def rcParam ctermfg=DarkGreen guifg=DarkGreen
|
||||
hi def rcStatement ctermfg=DarkGreen guifg=DarkGreen
|
||||
hi def rcCommonAttribute ctermfg=Brown guifg=Brown
|
||||
hi def link rcLanguage Constant
|
||||
hi def link rcCaptionParam Constant
|
||||
hi def link rcCommonAttribute Constant
|
||||
|
||||
hi def link rcMainObject Identifier
|
||||
hi def link rcSubObject Define
|
||||
hi def link rcParam Constant
|
||||
hi def link rcStatement Statement
|
||||
"
|
||||
"hi def link rcIdentifier Identifier
|
||||
|
||||
"hi def link rcIdentifier Identifier
|
||||
|
||||
|
||||
let b:current_syntax = "rc"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
" Maintainer: Derek Wyatt
|
||||
" URL: https://github.com/derekwyatt/vim-scala
|
||||
" License: Same as Vim
|
||||
" Last Change: 23 August 2021
|
||||
" Last Change: 23 January 2022
|
||||
" ----------------------------------------------------------------------------
|
||||
|
||||
if !exists('main_syntax')
|
||||
@@ -43,55 +43,55 @@ syn keyword scalaKeyword class trait object extends with nextgroup=scalaInstance
|
||||
syn keyword scalaKeyword case nextgroup=scalaKeyword,scalaCaseFollowing skipwhite
|
||||
syn keyword scalaKeyword val nextgroup=scalaNameDefinition,scalaQuasiQuotes skipwhite
|
||||
syn keyword scalaKeyword def var nextgroup=scalaNameDefinition skipwhite
|
||||
hi link scalaKeyword Keyword
|
||||
hi def link scalaKeyword Keyword
|
||||
|
||||
exe 'syn region scalaBlock start=/{/ end=/}/ contains=' . s:ContainedGroup() . ' fold'
|
||||
|
||||
syn keyword scalaAkkaSpecialWord when goto using startWith initialize onTransition stay become unbecome
|
||||
hi link scalaAkkaSpecialWord PreProc
|
||||
hi def link scalaAkkaSpecialWord PreProc
|
||||
|
||||
syn keyword scalatestSpecialWord shouldBe
|
||||
syn match scalatestShouldDSLA /^\s\+\zsit should/
|
||||
syn match scalatestShouldDSLB /\<should\>/
|
||||
hi link scalatestSpecialWord PreProc
|
||||
hi link scalatestShouldDSLA PreProc
|
||||
hi link scalatestShouldDSLB PreProc
|
||||
hi def link scalatestSpecialWord PreProc
|
||||
hi def link scalatestShouldDSLA PreProc
|
||||
hi def link scalatestShouldDSLB PreProc
|
||||
|
||||
syn match scalaSymbol /'[_A-Za-z0-9$]\+/
|
||||
hi link scalaSymbol Number
|
||||
hi def link scalaSymbol Number
|
||||
|
||||
syn match scalaChar /'.'/
|
||||
syn match scalaChar /'\\[\\"'ntbrf]'/ contains=scalaEscapedChar
|
||||
syn match scalaChar /'\\u[A-Fa-f0-9]\{4}'/ contains=scalaUnicodeChar
|
||||
syn match scalaEscapedChar /\\[\\"'ntbrf]/
|
||||
syn match scalaUnicodeChar /\\u[A-Fa-f0-9]\{4}/
|
||||
hi link scalaChar Character
|
||||
hi link scalaEscapedChar Special
|
||||
hi link scalaUnicodeChar Special
|
||||
hi def link scalaChar Character
|
||||
hi def link scalaEscapedChar Special
|
||||
hi def link scalaUnicodeChar Special
|
||||
|
||||
syn match scalaOperator "||"
|
||||
syn match scalaOperator "&&"
|
||||
syn match scalaOperator "|"
|
||||
syn match scalaOperator "&"
|
||||
hi link scalaOperator Special
|
||||
hi def link scalaOperator Special
|
||||
|
||||
syn match scalaNameDefinition /\<[_A-Za-z0-9$]\+\>/ contained nextgroup=scalaPostNameDefinition,scalaVariableDeclarationList
|
||||
syn match scalaNameDefinition /`[^`]\+`/ contained nextgroup=scalaPostNameDefinition
|
||||
syn match scalaVariableDeclarationList /\s*,\s*/ contained nextgroup=scalaNameDefinition
|
||||
syn match scalaPostNameDefinition /\_s*:\_s*/ contained nextgroup=scalaTypeDeclaration
|
||||
hi link scalaNameDefinition Function
|
||||
hi def link scalaNameDefinition Function
|
||||
|
||||
syn match scalaInstanceDeclaration /\<[_\.A-Za-z0-9$]\+\>/ contained nextgroup=scalaInstanceHash
|
||||
syn match scalaInstanceDeclaration /`[^`]\+`/ contained
|
||||
syn match scalaInstanceHash /#/ contained nextgroup=scalaInstanceDeclaration
|
||||
hi link scalaInstanceDeclaration Special
|
||||
hi link scalaInstanceHash Type
|
||||
hi def link scalaInstanceDeclaration Special
|
||||
hi def link scalaInstanceHash Type
|
||||
|
||||
syn match scalaUnimplemented /???/
|
||||
hi link scalaUnimplemented ERROR
|
||||
hi def link scalaUnimplemented ERROR
|
||||
|
||||
syn match scalaCapitalWord /\<[A-Z][A-Za-z0-9$]*\>/
|
||||
hi link scalaCapitalWord Special
|
||||
hi def link scalaCapitalWord Special
|
||||
|
||||
" Handle type declarations specially
|
||||
syn region scalaTypeStatement matchgroup=Keyword start=/\<type\_s\+\ze/ end=/$/ contains=scalaTypeTypeDeclaration,scalaSquareBrackets,scalaTypeTypeEquals,scalaTypeStatement
|
||||
@@ -105,18 +105,18 @@ syn match scalaTypeTypeEquals /=\ze[^>]/ contained nextgroup=scalaTypeTypePostDe
|
||||
syn match scalaTypeTypeExtension /)\?\_s*\zs\%(⇒\|=>\|<:\|:>\|=:=\|::\|#\)/ contained contains=scalaTypeOperator nextgroup=scalaTypeTypeDeclaration skipwhite
|
||||
syn match scalaTypeTypePostDeclaration /\<[_\.A-Za-z0-9$]\+\>/ contained nextgroup=scalaTypeTypePostExtension skipwhite
|
||||
syn match scalaTypeTypePostExtension /\%(⇒\|=>\|<:\|:>\|=:=\|::\)/ contained contains=scalaTypeOperator nextgroup=scalaTypeTypePostDeclaration skipwhite
|
||||
hi link scalaTypeTypeDeclaration Type
|
||||
hi link scalaTypeTypeExtension Keyword
|
||||
hi link scalaTypeTypePostDeclaration Special
|
||||
hi link scalaTypeTypePostExtension Keyword
|
||||
hi def link scalaTypeTypeDeclaration Type
|
||||
hi def link scalaTypeTypeExtension Keyword
|
||||
hi def link scalaTypeTypePostDeclaration Special
|
||||
hi def link scalaTypeTypePostExtension Keyword
|
||||
|
||||
syn match scalaTypeDeclaration /(/ contained nextgroup=scalaTypeExtension contains=scalaRoundBrackets skipwhite
|
||||
syn match scalaTypeDeclaration /\%(⇒\|=>\)\ze/ contained nextgroup=scalaTypeDeclaration contains=scalaTypeExtension skipwhite
|
||||
syn match scalaTypeDeclaration /\<[_\.A-Za-z0-9$]\+\>/ contained nextgroup=scalaTypeExtension skipwhite
|
||||
syn match scalaTypeExtension /)\?\_s*\zs\%(⇒\|=>\|<:\|:>\|=:=\|::\|#\)/ contained contains=scalaTypeOperator nextgroup=scalaTypeDeclaration skipwhite
|
||||
hi link scalaTypeDeclaration Type
|
||||
hi link scalaTypeExtension Keyword
|
||||
hi link scalaTypePostExtension Keyword
|
||||
hi def link scalaTypeDeclaration Type
|
||||
hi def link scalaTypeExtension Keyword
|
||||
hi def link scalaTypePostExtension Keyword
|
||||
|
||||
syn match scalaTypeAnnotation /\%([_a-zA-Z0-9$\s]:\_s*\)\ze[_=(\.A-Za-z0-9$]\+/ skipwhite nextgroup=scalaTypeDeclaration contains=scalaRoundBrackets
|
||||
syn match scalaTypeAnnotation /)\_s*:\_s*\ze[_=(\.A-Za-z0-9$]\+/ skipwhite nextgroup=scalaTypeDeclaration
|
||||
@@ -124,51 +124,51 @@ hi clear scalaTypeAnnotation
|
||||
|
||||
syn match scalaCaseFollowing /\<[_\.A-Za-z0-9$]\+\>/ contained contains=scalaCapitalWord
|
||||
syn match scalaCaseFollowing /`[^`]\+`/ contained contains=scalaCapitalWord
|
||||
hi link scalaCaseFollowing Special
|
||||
hi def link scalaCaseFollowing Special
|
||||
|
||||
syn keyword scalaKeywordModifier abstract override final lazy implicit private protected sealed null super
|
||||
syn keyword scalaSpecialFunction implicitly require
|
||||
hi link scalaKeywordModifier Function
|
||||
hi link scalaSpecialFunction Function
|
||||
hi def link scalaKeywordModifier Function
|
||||
hi def link scalaSpecialFunction Function
|
||||
|
||||
syn keyword scalaSpecial this true false ne eq
|
||||
syn keyword scalaSpecial new nextgroup=scalaInstanceDeclaration skipwhite
|
||||
syn match scalaSpecial "\%(=>\|⇒\|<-\|←\|->\|→\)"
|
||||
syn match scalaSpecial /`[^`]\+`/ " Backtick literals
|
||||
hi link scalaSpecial PreProc
|
||||
hi def link scalaSpecial PreProc
|
||||
|
||||
syn keyword scalaExternal package import
|
||||
hi link scalaExternal Include
|
||||
hi def link scalaExternal Include
|
||||
|
||||
syn match scalaStringEmbeddedQuote /\\"/ contained
|
||||
syn region scalaString start=/"/ end=/"/ contains=scalaStringEmbeddedQuote,scalaEscapedChar,scalaUnicodeChar
|
||||
hi link scalaString String
|
||||
hi link scalaStringEmbeddedQuote String
|
||||
hi def link scalaString String
|
||||
hi def link scalaStringEmbeddedQuote String
|
||||
|
||||
syn region scalaIString matchgroup=scalaInterpolationBrackets start=/\<[a-zA-Z][a-zA-Z0-9_]*"/ skip=/\\"/ end=/"/ contains=scalaInterpolation,scalaInterpolationB,scalaEscapedChar,scalaUnicodeChar
|
||||
syn region scalaTripleIString matchgroup=scalaInterpolationBrackets start=/\<[a-zA-Z][a-zA-Z0-9_]*"""/ end=/"""\ze\%([^"]\|$\)/ contains=scalaInterpolation,scalaInterpolationB,scalaEscapedChar,scalaUnicodeChar
|
||||
hi link scalaIString String
|
||||
hi link scalaTripleIString String
|
||||
hi def link scalaIString String
|
||||
hi def link scalaTripleIString String
|
||||
|
||||
syn match scalaInterpolation /\$[a-zA-Z0-9_$]\+/ contained
|
||||
exe 'syn region scalaInterpolationB matchgroup=scalaInterpolationBoundary start=/\${/ end=/}/ contained contains=' . s:ContainedGroup()
|
||||
hi link scalaInterpolation Function
|
||||
hi def link scalaInterpolation Function
|
||||
hi clear scalaInterpolationB
|
||||
|
||||
syn region scalaFString matchgroup=scalaInterpolationBrackets start=/f"/ skip=/\\"/ end=/"/ contains=scalaFInterpolation,scalaFInterpolationB,scalaEscapedChar,scalaUnicodeChar
|
||||
syn match scalaFInterpolation /\$[a-zA-Z0-9_$]\+\(%[-A-Za-z0-9\.]\+\)\?/ contained
|
||||
exe 'syn region scalaFInterpolationB matchgroup=scalaInterpolationBoundary start=/${/ end=/}\(%[-A-Za-z0-9\.]\+\)\?/ contained contains=' . s:ContainedGroup()
|
||||
hi link scalaFString String
|
||||
hi link scalaFInterpolation Function
|
||||
hi def link scalaFString String
|
||||
hi def link scalaFInterpolation Function
|
||||
hi clear scalaFInterpolationB
|
||||
|
||||
syn region scalaTripleString start=/"""/ end=/"""\%([^"]\|$\)/ contains=scalaEscapedChar,scalaUnicodeChar
|
||||
syn region scalaTripleFString matchgroup=scalaInterpolationBrackets start=/f"""/ end=/"""\%([^"]\|$\)/ contains=scalaFInterpolation,scalaFInterpolationB,scalaEscapedChar,scalaUnicodeChar
|
||||
hi link scalaTripleString String
|
||||
hi link scalaTripleFString String
|
||||
hi def link scalaTripleString String
|
||||
hi def link scalaTripleFString String
|
||||
|
||||
hi link scalaInterpolationBrackets Special
|
||||
hi link scalaInterpolationBoundary Function
|
||||
hi def link scalaInterpolationBrackets Special
|
||||
hi def link scalaInterpolationBoundary Function
|
||||
|
||||
syn match scalaNumber /\<0[dDfFlL]\?\>/ " Just a bare 0
|
||||
syn match scalaNumber /\<[1-9]\d*[dDfFlL]\?\>/ " A multi-digit number - octal numbers with leading 0's are deprecated in Scala
|
||||
@@ -176,16 +176,16 @@ syn match scalaNumber /\<0[xX][0-9a-fA-F]\+[dDfFlL]\?\>/ " Hex number
|
||||
syn match scalaNumber /\%(\<\d\+\.\d*\|\.\d\+\)\%([eE][-+]\=\d\+\)\=[fFdD]\=/ " exponential notation 1
|
||||
syn match scalaNumber /\<\d\+[eE][-+]\=\d\+[fFdD]\=\>/ " exponential notation 2
|
||||
syn match scalaNumber /\<\d\+\%([eE][-+]\=\d\+\)\=[fFdD]\>/ " exponential notation 3
|
||||
hi link scalaNumber Number
|
||||
hi def link scalaNumber Number
|
||||
|
||||
syn region scalaRoundBrackets start="(" end=")" skipwhite contained contains=scalaTypeDeclaration,scalaSquareBrackets,scalaRoundBrackets
|
||||
|
||||
syn region scalaSquareBrackets matchgroup=scalaSquareBracketsBrackets start="\[" end="\]" skipwhite nextgroup=scalaTypeExtension contains=scalaTypeDeclaration,scalaSquareBrackets,scalaTypeOperator,scalaTypeAnnotationParameter
|
||||
syn match scalaTypeOperator /[-+=:<>]\+/ contained
|
||||
syn match scalaTypeAnnotationParameter /@\<[`_A-Za-z0-9$]\+\>/ contained
|
||||
hi link scalaSquareBracketsBrackets Type
|
||||
hi link scalaTypeOperator Keyword
|
||||
hi link scalaTypeAnnotationParameter Function
|
||||
hi def link scalaSquareBracketsBrackets Type
|
||||
hi def link scalaTypeOperator Keyword
|
||||
hi def link scalaTypeAnnotationParameter Function
|
||||
|
||||
syn match scalaShebang "\%^#!.*" display
|
||||
syn region scalaMultilineComment start="/\*" end="\*/" contains=scalaMultilineComment,scalaDocLinks,scalaParameterAnnotation,scalaCommentAnnotation,scalaTodo,scalaCommentCodeBlock,@Spell keepend fold
|
||||
@@ -195,20 +195,20 @@ syn match scalaParamAnnotationValue /[.`_A-Za-z0-9$]\+/ contained
|
||||
syn region scalaDocLinks start="\[\[" end="\]\]" contained
|
||||
syn region scalaCommentCodeBlock matchgroup=Keyword start="{{{" end="}}}" contained
|
||||
syn match scalaTodo "\vTODO|FIXME|XXX" contained
|
||||
hi link scalaShebang Comment
|
||||
hi link scalaMultilineComment Comment
|
||||
hi link scalaDocLinks Function
|
||||
hi link scalaParameterAnnotation Function
|
||||
hi link scalaParamAnnotationValue Keyword
|
||||
hi link scalaCommentAnnotation Function
|
||||
hi link scalaCommentCodeBlock String
|
||||
hi link scalaTodo Todo
|
||||
hi def link scalaShebang Comment
|
||||
hi def link scalaMultilineComment Comment
|
||||
hi def link scalaDocLinks Function
|
||||
hi def link scalaParameterAnnotation Function
|
||||
hi def link scalaParamAnnotationValue Keyword
|
||||
hi def link scalaCommentAnnotation Function
|
||||
hi def link scalaCommentCodeBlock String
|
||||
hi def link scalaTodo Todo
|
||||
|
||||
syn match scalaAnnotation /@\<[`_A-Za-z0-9$]\+\>/
|
||||
hi link scalaAnnotation PreProc
|
||||
hi def link scalaAnnotation PreProc
|
||||
|
||||
syn match scalaTrailingComment "//.*$" contains=scalaTodo,@Spell
|
||||
hi link scalaTrailingComment Comment
|
||||
hi def link scalaTrailingComment Comment
|
||||
|
||||
syn match scalaAkkaFSM /goto([^)]*)\_s\+\<using\>/ contains=scalaAkkaFSMGotoUsing
|
||||
syn match scalaAkkaFSM /stay\_s\+using/
|
||||
@@ -221,8 +221,8 @@ syn match scalaAkkaFSM /onTermination/
|
||||
syn match scalaAkkaFSM /whenUnhandled/
|
||||
syn match scalaAkkaFSMGotoUsing /\<using\>/
|
||||
syn match scalaAkkaFSMGotoUsing /\<goto\>/
|
||||
hi link scalaAkkaFSM PreProc
|
||||
hi link scalaAkkaFSMGotoUsing PreProc
|
||||
hi def link scalaAkkaFSM PreProc
|
||||
hi def link scalaAkkaFSMGotoUsing PreProc
|
||||
|
||||
let b:current_syntax = 'scala'
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
" Vim syntax file
|
||||
" This is a GENERATED FILE. Please always refer to source file at the URI below.
|
||||
" Language: strace output
|
||||
" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
|
||||
" Last Change: 2015-01-16
|
||||
" Last Change: 2022 Jan 29
|
||||
|
||||
" Setup
|
||||
" quit when a syntax file was already loaded
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
" Vim syntax file
|
||||
" Language: Vim 8.2 script
|
||||
" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
|
||||
" Last Change: December 29, 2021
|
||||
" Version: 8.2-23
|
||||
" Last Change: January 30, 2022
|
||||
" Version: 8.2-26
|
||||
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
|
||||
" Automatically generated keyword lists: {{{1
|
||||
|
||||
@@ -78,12 +78,12 @@ syn match vimHLGroup contained "Conceal"
|
||||
syn case match
|
||||
|
||||
" Function Names {{{2
|
||||
syn keyword vimFuncName contained abs argc assert_equal assert_match atan browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filter floor foldlevel function getchangelist getcmdline getcursorcharpos getftime getmarklist getreg gettabwinvar getwinposx globpath histadd hlget indent inputrestore invert items job_status json_decode libcallnr list2str log mapcheck matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_ignore_error test_null_job test_override test_srand_seed timer_start tr undofile visualmode win_execute winheight winnr win_splitmove
|
||||
syn keyword vimFuncName contained acos argidx assert_equalfile assert_nobeep atan2 browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath extend finddir fmod foldtext garbagecollect getchar getcmdpos getcwd getftype getmatches getreginfo gettagstack getwinposy has histdel hlID index inputsave isdirectory job_getchannel job_stop json_encode line listener_add log10 mapnew matcharg matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setinterrupt prop_find prop_type_delete py3eval readblob reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_blob test_null_list test_refcount test_unknown timer_stop trim undotree wildmenumode win_findbuf win_id2tabwin winrestcmd winwidth
|
||||
syn keyword vimFuncName contained add arglistid assert_exception assert_notequal balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extendnew findfile fnameescape foldtextresult get getcharmod getcmdtype getenv getimstatus getmousepos getregtype gettext getwinvar has_key histget hlset input inputsecret isinf job_info join keys line2byte listener_flush luaeval mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_channel test_null_partial test_scrollbar test_void timer_stopall trunc uniq winbufnr win_getid win_id2win winrestview wordcount
|
||||
syn keyword vimFuncName contained and argv assert_fails assert_notmatch balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled feedkeys flatten fnamemodify foreground getbufinfo getcharpos getcmdwintype getfontname getjumplist getpid gettabinfo getwininfo glob haslocaldir histnr hostname inputdialog insert islocked job_setoptions js_decode len lispindent listener_remove map match matchend matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_add prop_remove prop_type_list pyxeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcharsearch setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_drop_files test_null_dict test_null_string test_setmouse timer_info tolower type values wincol win_gettype winlayout winsaveview writefile
|
||||
syn keyword vimFuncName contained append asin assert_false assert_report balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp filereadable flattennew foldclosed fullcommand getbufline getcharsearch getcompletion getfperm getline getpos gettabvar getwinpos glob2regpat hasmapto hlexists iconv inputlist interrupt isnan job_start js_encode libcall list2blob localtime maparg matchadd matchfuzzy max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_getprompt prop_add_list prop_type_add pum_getpos rand readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_gui_mouse_event test_null_function test_option_not_set test_settime timer_pause toupper typename virtcol windowsversion win_gotoid winline win_screenpos xor
|
||||
syn keyword vimFuncName contained appendbufline assert_beeps assert_inrange assert_true blob2list bufload byte2line char2nr ch_close_in ch_info ch_readraw clearmatches confirm cursor diff_filler echoraw executable expand filewritable float2nr foldclosedend funcref getbufvar getcharstr getcurpos getfsize getloclist getqflist
|
||||
syn keyword vimFuncName contained abs argc assert_equal assert_match atan browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filter floor foldlevel function getchangelist getcmdline getcursorcharpos getftime getmarklist getreg gettagstack getwinvar has_key histget hlset input inputsecret isdirectory job_getchannel job_stop json_encode line listener_add log10 mapnew matcharg matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setinterrupt prop_find prop_type_delete py3eval readblob reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_channel test_null_partial test_scrollbar test_void timer_stopall trunc uniq winbufnr win_getid win_id2win winnr win_splitmove
|
||||
syn keyword vimFuncName contained acos argidx assert_equalfile assert_nobeep atan2 browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath extend finddir fmod foldtext garbagecollect getchar getcmdpos getcwd getftype getmatches getreginfo gettext glob haslocaldir histnr hostname inputdialog insert isinf job_info join keys line2byte listener_flush luaeval mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_dict test_null_string test_setmouse timer_info tolower type values wincol win_gettype winlayout winrestcmd winwidth
|
||||
syn keyword vimFuncName contained add arglistid assert_exception assert_notequal balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extendnew findfile fnameescape foldtextresult get getcharmod getcmdtype getenv getimstatus getmousepos getregtype getwininfo glob2regpat hasmapto hlexists iconv inputlist internal_get_nv_cmdchar islocked job_setoptions js_decode len lispindent listener_remove map match matchend matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_add prop_remove prop_type_list pyxeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcharsearch setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_event test_null_function test_option_not_set test_settime timer_pause toupper typename virtcol windowsversion win_gotoid winline winrestview wordcount
|
||||
syn keyword vimFuncName contained and argv assert_fails assert_notmatch balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled feedkeys flatten fnamemodify foreground getbufinfo getcharpos getcmdwintype getfontname getjumplist getpid gettabinfo getwinpos globpath histadd hlget indent inputrestore interrupt isnan job_start js_encode libcall list2blob localtime maparg matchadd matchfuzzy max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_getprompt prop_add_list prop_type_add pum_getpos rand readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_ignore_error test_null_job test_override test_srand_seed timer_start tr undofile visualmode win_execute winheight win_move_separator winsaveview writefile
|
||||
syn keyword vimFuncName contained append asin assert_false assert_report balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp filereadable flattennew foldclosed fullcommand getbufline getcharsearch getcompletion getfperm getline getpos gettabvar getwinposx has histdel hlID index inputsave invert items job_status json_decode libcallnr list2str log mapcheck matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_null_blob test_null_list test_refcount test_unknown timer_stop trim undotree wildmenumode win_findbuf win_id2tabwin win_move_statusline win_screenpos xor
|
||||
syn keyword vimFuncName contained appendbufline assert_beeps assert_inrange assert_true blob2list bufload byte2line char2nr ch_close_in ch_info ch_readraw clearmatches confirm cursor diff_filler echoraw executable expand filewritable float2nr foldclosedend funcref getbufvar getcharstr getcurpos getfsize getloclist getqflist gettabwinvar getwinposy
|
||||
|
||||
"--- syntax here and above generated by mkvimvim ---
|
||||
" Special Vim Highlighting (not automatic) {{{1
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
になっています。
|
||||
|
||||
チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ
|
||||
け時間を使うのかにもよりますが、およそ25から30分です。
|
||||
け時間を使うのかにもよりますが、およそ30分です。
|
||||
|
||||
ATTENTION:
|
||||
以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前
|
||||
@@ -24,7 +24,7 @@
|
||||
レッスン 1.1: カーソルの移動
|
||||
|
||||
|
||||
** カーソルを移動するには、示される様に h,j,k,l を押します **
|
||||
** カーソルを移動するには、示される様に h,j,k,l を押します。 **
|
||||
^
|
||||
k ヒント: h キーは左方向に移動します。
|
||||
< h l > l キーは右方向に移動します。
|
||||
@@ -65,11 +65,12 @@ NOTE: :q! <ENTER>
|
||||
|
||||
5. 1.3までカーソルを移動させましょう。
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 1.3: テキスト編集 - 削除
|
||||
|
||||
|
||||
** ノーマルモードにてカーソルの下の文字を削除するには x を押します **
|
||||
** ノーマルモードにてカーソルの下の文字を削除するには x を押します。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -87,12 +88,11 @@ NOTE:
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 1.4: テキスト編集 - 挿入
|
||||
|
||||
|
||||
** ノーマルモードにてテキストを挿入するには i を押します **
|
||||
** ノーマルモードにてテキストを挿入するには i を押します。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
@@ -115,10 +115,10 @@ NOTE:
|
||||
レッスン 1.5: テキスト編集 - 追加
|
||||
|
||||
|
||||
** テキストを追加するには A を押しましょう **
|
||||
** テキストを追加するには A を押しましょう。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
カーソルがその文字上にあってもかまいません。
|
||||
カーソルがその行のどの文字上にあってもかまいません。
|
||||
|
||||
2. 追加が必要な場所で A をタイプしましょう。
|
||||
|
||||
@@ -137,18 +137,17 @@ NOTE:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 1.6: ファイルの編集
|
||||
|
||||
|
||||
** ファイルを保存して終了するには :wq とタイプします **
|
||||
** ファイルを保存して終了するには :wq とタイプします。 **
|
||||
|
||||
!! NOTE: 以下のステップを実行する前に、まず全体を読んでください!!
|
||||
|
||||
1. レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
|
||||
します。あるいは、別の端末がある場合はそこで以下の内容を行ってもかまい
|
||||
ません。
|
||||
1. 別の端末がある場合はそこで以下の内容を行ってください。そうでなければ、
|
||||
レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
|
||||
します。
|
||||
|
||||
2. シェルプロンプトでこのコマンドをタイプします: vim tutor <ENTER>
|
||||
'vim' が Vim エディタを起動するコマンド、'tutor' は編集したいファイルの
|
||||
名前です。変更してもよいファイルを使いましょう。
|
||||
2. シェルプロンプトでこのコマンドをタイプします: vim file.txt <ENTER>
|
||||
'vim' が Vim エディタを起動するコマンド、'file.txt' は編集したいファイル
|
||||
の名前です。変更できるファイルの名前を使いましょう。
|
||||
|
||||
3. 前のレッスンで学んだように、テキストを挿入、削除します。
|
||||
|
||||
@@ -186,9 +185,9 @@ NOTE: <ESC>
|
||||
レッスン 2.1: 削除コマンド
|
||||
|
||||
|
||||
** 単語の末尾までを削除するには dw とタイプしましょう **
|
||||
** 単語の末尾までを削除するには dw とタイプしましょう。 **
|
||||
|
||||
1. ノーマルモードであることを確認するために <ESC> を押しましょう。
|
||||
1. 確実にノーマルモードにするため <ESC> を押しましょう。
|
||||
|
||||
2. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -196,22 +195,22 @@ NOTE: <ESC>
|
||||
|
||||
4. 単語を削除するために dw とタイプしましょう。
|
||||
|
||||
NOTE: タイプすると、dw という文字がスクリーンの最下行に現われます。
|
||||
タイプを間違ってしまった時には <ESC> を押してやり直しましょう。
|
||||
NOTE: d をタイプすると、その文字がスクリーンの最下行に現われます。Vim は
|
||||
あなたが w をタイプするのを待っています。もし d 以外の文字が表示された
|
||||
時は何か間違っています。 <ESC> を押してやり直しましょう。
|
||||
|
||||
---> この 文 紙 には いくつかの たのしい 必要のない 単語 が 含まれて います。
|
||||
|
||||
5. 3 から 4 までを文が正しくなるまで繰り返し、レッスン 2.2 へ進みましょう。
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 2.2: その他の削除コマンド
|
||||
|
||||
|
||||
** 行の末尾までを削除するには d$ とタイプしましょう **
|
||||
** 行の末尾までを削除するには d$ とタイプしましょう。 **
|
||||
|
||||
1. ノーマルモードであることを確認するのに <ESC> を押しましょう。
|
||||
1. 確実にノーマルモードにするため <ESC> を押しましょう。
|
||||
|
||||
2. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -232,7 +231,7 @@ NOTE: <ESC>
|
||||
レッスン 2.3: オペレータとモーション
|
||||
|
||||
|
||||
多くのコマンドはオペレータとモーションからテキストに変更を加えます。
|
||||
テキストに変更を加える多くのコマンドはオペレータとモーションからなります。
|
||||
削除コマンド d のオペレータは次の様になっています:
|
||||
|
||||
d モーション
|
||||
@@ -248,7 +247,7 @@ NOTE: <ESC>
|
||||
|
||||
つまり de とタイプすると、カーソル位置から単語の終わりまでを削除します。
|
||||
|
||||
NOTE: 冒険したい人は、ノーマルモードにてコマンドなしにモーションを押して
|
||||
NOTE: 冒険したい人は、ノーマルモードにてオペレータなしにモーションを押して
|
||||
みましょう。カーソルが目的語一覧で示される位置に移動するはずです。
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -259,7 +258,7 @@ NOTE:
|
||||
|
||||
1. 以下の ---> と示された行の先頭にカーソルを移動します。
|
||||
|
||||
2. 2w をタイプして単語2つ分前に移動します。
|
||||
2. 2w をタイプして単語2つ分先に移動します。
|
||||
|
||||
3. 3e をタイプして3つ目の単語の終端に移動します。
|
||||
|
||||
@@ -284,24 +283,24 @@ NOTE:
|
||||
より多くの削除が行えます:
|
||||
d 数値 モーション
|
||||
|
||||
1. ---> と示された行の行頭部分にカーソルを移動しましょう。
|
||||
1. ---> と示された行の最初の大文字の単語にカーソルを移動しましょう。
|
||||
|
||||
2. UPPER CASE の単語2つを d2w とタイプして削除します。
|
||||
2. 大文字の単語2つを d2w とタイプして削除します。
|
||||
|
||||
3. UPPER CASE という連続した単語を、1つのコマンドと異なるカウントを指定し、
|
||||
3. 連続した大文字の単語を、異なるカウントを指定した1つのコマンドで削除し、
|
||||
ステップ 1 と 2 を繰り返します。
|
||||
|
||||
---> このABC DE行のFGHI JK LMN OP単語はQ RS TUV綺麗になった。
|
||||
|
||||
NOTE: オペレータ d とモーションの間にカウントを使った場合、オペレータのない
|
||||
場合のモーションのように動作します。
|
||||
例: 3dw と d3w は同等で、3w を削除します。
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 2.6: 行の操作
|
||||
|
||||
|
||||
** 行全体を削除するには dd とタイプします **
|
||||
** 行全体を削除するには dd とタイプします。 **
|
||||
|
||||
行全体を削除する頻度が多いので、Viのデザイナーは行の削除を d の2回タイプと
|
||||
いう簡単なものに決めました。
|
||||
@@ -319,24 +318,25 @@ NOTE:
|
||||
---> 6) 砂糖は甘い
|
||||
---> 7) オマエモナー
|
||||
|
||||
2回タイプで1行に対して作用させる方法は以下で述べるオペレータでも動作します。
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 2.7: やり直しコマンド
|
||||
|
||||
|
||||
** 最後のコマンドを取り消すには u を押します。U は行全体の取消です。 **
|
||||
** 最後のコマンドを取り消すには u を押します。U は行全体の取り消しです。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動し、最初の間違いにカーソル
|
||||
を移動しましょう。
|
||||
2. x をタイプしていらない先頭の文字を削除しましょう。
|
||||
2. x をタイプして最初のいらない文字を削除しましょう。
|
||||
3. さぁ、u をタイプして最後に実行したコマンドを取り消しましょう。
|
||||
4. 今度は、x を使用して誤りを全て修正しましょう。
|
||||
4. 今度は、x を使用して行内の誤りを全て修正しましょう。
|
||||
5. 大文字の U をタイプして、行を元の状態に戻しましょう。
|
||||
6. u をタイプして直前の U コマンドを取消しましょう。
|
||||
6. u をタイプして直前の U コマンドを取り消しましょう。
|
||||
7. ではコマンドを再実行するのに CTRL-R (CTRL を押したまま R を打つ)を数回
|
||||
タイプしてみましょう(取消の取消)。
|
||||
タイプしてみましょう(取り消しの取り消し)。
|
||||
|
||||
---> このの行のの間違いを修正々し、後でそれらの修正をを取消しまますす。
|
||||
---> このの行のの間違いを修正々し、後でそれらの修正をを取り消しまますす。
|
||||
|
||||
8. これはとても便利なコマンドです。さぁレッスン 2 要約へ進みましょう。
|
||||
|
||||
@@ -347,45 +347,47 @@ NOTE:
|
||||
レッスン 2 要約
|
||||
|
||||
|
||||
1. カーソル位置から単語の末尾までを削除するには dw とタイプします。
|
||||
2. カーソル位置から行の末尾までを削除するには d$ とタイプします。
|
||||
3. 行全体を削除するには dd とタイプします。
|
||||
1. カーソル位置から次の単語までを削除するには dw とタイプします。
|
||||
2. カーソル位置から単語の末尾までを削除するには de とタイプします。
|
||||
3. カーソル位置から行の末尾までを削除するには d$ とタイプします。
|
||||
4. 行全体を削除するには dd とタイプします。
|
||||
|
||||
4. モーションを繰り返すには数値を付与します: 2w
|
||||
5. 変更に用いるコマンドの形式は
|
||||
5. モーションを繰り返すには数値を付与します: 2w
|
||||
6. 変更に用いるコマンドの形式は
|
||||
オペレータ [数値] モーション
|
||||
|
||||
それぞれ:
|
||||
オペレータ - 削除 d の類で何をするか。
|
||||
数値 - そのコマンドを何回繰り返すか。
|
||||
モーション - w (単語)や $ (行末)などの類で、テキストの何に対して働きか
|
||||
けるか。
|
||||
[数値] - そのコマンドを何回繰り返すか。
|
||||
モーション - w (単語)や e (単語末尾)、$ (行末)などの類で、テキストの
|
||||
何に対して働きかけるか。
|
||||
|
||||
6. 行の先頭に移動するにはゼロを使用します: 0
|
||||
7. 行の先頭に移動するにはゼロを使用します: 0
|
||||
|
||||
8. 前回の動作を取り消す: u (小文字 u)
|
||||
行全体の変更を取り消す: U (大文字 U)
|
||||
取り消しの取り消し: CTRL-R
|
||||
|
||||
7. 前回の動作を取消す: u (小文字 u)
|
||||
行全体の変更を取消す: U (大文字 U)
|
||||
取消しの取消し: CTRL-R
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 3.1: 貼り付けコマンド
|
||||
|
||||
|
||||
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします **
|
||||
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします。 **
|
||||
|
||||
1. 以下の段落の最初の行にカーソルを移動しましょう。
|
||||
1. ---> と示された以下の最初の行にカーソルを移動しましょう。
|
||||
|
||||
2. dd とタイプして行を削除し、Vim のバッファに格納しましょう。
|
||||
2. dd とタイプして行を削除し、Vim のレジスタに格納しましょう。
|
||||
|
||||
3. 削除した行が本来あるべき位置の上の行まで、カーソルを移動させましょう。
|
||||
3. 削除した行が本来あるべき位置の上の行である c) 行まで、カーソルを移動させ
|
||||
ましょう。
|
||||
|
||||
4. ノーマルモードで p をタイプして格納した行を画面に戻します。
|
||||
4. ノーマルモードで p をタイプして格納した行をカーソルの下に戻します。
|
||||
|
||||
5. 順番が正しくなる様にステップ 2 から 4 を繰り返しましょう。
|
||||
|
||||
d) 貴方も学ぶことができる?
|
||||
b) スミレは青い、
|
||||
c) 知恵とは学ぶもの、
|
||||
a) バラは赤い、
|
||||
---> d) 貴方も学ぶことができる?
|
||||
---> b) スミレは青い、
|
||||
---> c) 知恵とは学ぶもの、
|
||||
---> a) バラは赤い、
|
||||
|
||||
|
||||
|
||||
@@ -393,7 +395,7 @@ NOTE:
|
||||
レッスン 3.2: 置き換えコマンド
|
||||
|
||||
|
||||
** カーソルの下の文字を置き換えるには r をタイプします **
|
||||
** カーソルの下の文字を x に置き換えるには rx をタイプします。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
@@ -416,38 +418,38 @@ NOTE:
|
||||
レッスン 3.3: 変更コマンド
|
||||
|
||||
|
||||
** 単語の一部、もしくは全体を変更するには cw とタイプします **
|
||||
** 単語の末尾までを変更するには ce とタイプします。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
2. lubw の u の位置にカーソルを移動しましょう。
|
||||
|
||||
3. cw とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
|
||||
3. ce とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
|
||||
|
||||
4. 次の間違い(変更すべき文字の先頭)に移動するために <ESC> をタイプします。
|
||||
4. <ESC> をタイプしてから次の間違い(変更すべき文字の先頭)に移動します。
|
||||
|
||||
5. 最初の行が次の行の様になるまでステップ 3 と 4 を繰り返します。
|
||||
|
||||
---> This lubw has a few wptfd that mrrf changing usf the change operator.
|
||||
---> This line has a few words that need changing using the change operator.
|
||||
|
||||
cw は単語を変更するだけでなく、挿入も行えることに注意しましょう。
|
||||
|
||||
ce は単語を削除した後、挿入モードに入ることに注意しましょう。
|
||||
cc は同じことを行全体に対して行います。
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 3.4: c を使用したその他の変更
|
||||
|
||||
|
||||
** 変更コマンドは、削除コマンドと同じ様にオブジェクトを使用します **
|
||||
** 変更オペレータは、削除と同じ様にモーションを使用します。 **
|
||||
|
||||
1. 変更コマンドは、削除コマンドと同じような動作をします。その形式は
|
||||
1. 変更オペレータは、削除と同じような動作をします。その形式は
|
||||
|
||||
c [数値] モーション
|
||||
|
||||
2. オブジェクトも同じで、w は単語、 $ は行末などといったものです。
|
||||
2. モーションも同じで、w は単語、 $ は行末などといったものです。
|
||||
|
||||
3. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
3. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
4. 最初の間違いへカーソルを移動しましょう。
|
||||
|
||||
@@ -470,7 +472,7 @@ NOTE:
|
||||
文字をタイプします。
|
||||
|
||||
3. 変更コマンドではカーソル位置から特定のモーションで指定される終端までを変
|
||||
更することが可能です。例えば cw ならばカーソル位置から単語の終わりまで、
|
||||
更することが可能です。例えば ce ならばカーソル位置から単語の終わりまで、
|
||||
c$ ならば行の終わりまでを変更します。
|
||||
|
||||
4. 変更コマンドの形式は
|
||||
@@ -485,7 +487,7 @@ NOTE:
|
||||
レッスン 4.1: 位置とファイルの情報
|
||||
|
||||
** ファイル内での位置とファイルの状態を表示するには CTRL-G をタイプします。
|
||||
ファイル内のある行に移動するには G をタイプします **
|
||||
ファイル内のある行に移動するには G をタイプします。 **
|
||||
|
||||
NOTE: ステップを実行する前に、このレッスン全てに目を通しましょう!!
|
||||
|
||||
@@ -496,7 +498,7 @@ NOTE:
|
||||
NOTE: 画面の右下隅にカーソルの位置が表示されているかもしれません。これは
|
||||
'ruler' オプション(:help 'ruler' を参照)を設定することで表示されます。
|
||||
|
||||
2. 最下行に移動するために G をタイプしましょう。
|
||||
2. ファイルの最下行に移動するために G をタイプしましょう。
|
||||
ファイルの先頭に移動するには gg とタイプしましょう。
|
||||
|
||||
3. 先ほどの行の番号をタイプし G をタイプしましょう。最初に CTRL-G を押した行
|
||||
@@ -508,19 +510,19 @@ NOTE:
|
||||
レッスン 4.2: 検索コマンド
|
||||
|
||||
|
||||
** 語句を検索するには / と、前方検索する語句をタイプします。**
|
||||
** 語句を検索するには / と、前方検索する語句をタイプします。 **
|
||||
|
||||
1. ノーマルモードで / という文字をタイプします。画面一番下に : コマンドと
|
||||
同じ様に / が現れることに気づくでしょう。
|
||||
|
||||
2. では、'errroor' <ENTER> とタイプしましょう。これが検索したい単語です。
|
||||
|
||||
3. 同じ語をもう一度検索するときは 単に n をタイプします。
|
||||
3. 同じ語句をもう一度検索するときは 単に n をタイプします。
|
||||
逆方向に語句を検索するときは N をタイプします。
|
||||
|
||||
4. 逆方向に語句を検索する場合は、/ の代わりに ? コマンドを使用します。
|
||||
|
||||
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら o 文字タイプ)をタイプし
|
||||
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら文字 o をタイプ)をタイプし
|
||||
ます。さらに戻るにはこれを繰り返します。CTRL-I は前方向です。
|
||||
|
||||
---> "errroor" は error とスペルが違います; errroor はいわゆる error です。
|
||||
@@ -531,7 +533,7 @@ NOTE:
|
||||
レッスン 4.3: 対応する括弧を検索
|
||||
|
||||
|
||||
** 対応する ),] や } を検索するには % をタイプします **
|
||||
** 対応する ),] や } を検索するには % をタイプします。 **
|
||||
|
||||
1. 下の ---> で示された行で (,[ か { のどれかにカーソルを移動しましょう。
|
||||
|
||||
@@ -554,7 +556,7 @@ NOTE:
|
||||
レッスン 4.4: 間違いを変更する方法
|
||||
|
||||
|
||||
** 'old' を 'new' に置換するには :s/old/new/g とタイプします **
|
||||
** 'old' を 'new' に置換するには :s/old/new/g とタイプします。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -567,9 +569,8 @@ NOTE:
|
||||
|
||||
---> thee best time to see thee flowers is in thee spring.
|
||||
|
||||
4. 複数行から見つかる文字を変更するには
|
||||
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定しま
|
||||
す。
|
||||
4. 複数行から見つかる文字の全ての箇所を変更するには
|
||||
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定する。
|
||||
:%s/old/new/g ファイル全体で見つかるものに対して変更する。
|
||||
:%s/old/new/gc ファイル全体で見つかるものに対して、1つ1つ確認をとりな
|
||||
がら変更する。
|
||||
@@ -593,7 +594,7 @@ NOTE:
|
||||
|
||||
4. 現在行の最初の old を new に置換する。 :s/old/new
|
||||
現在行の全ての old を new に置換する。 :s/old/new/g
|
||||
2つの # 間で語句を置換する。 :#,#s/old/new/g
|
||||
2つの # 行の間で語句を置換する。 :#,#s/old/new/g
|
||||
ファイルの中の全ての検索語句を置換する。 :%s/old/new/g
|
||||
'c' を加えると置換の度に確認を求める。 :%s/old/new/gc
|
||||
|
||||
@@ -601,10 +602,10 @@ NOTE:
|
||||
レッスン 5.1: 外部コマンドを実行する方法
|
||||
|
||||
|
||||
** :! の後に実行する外部コマンドをタイプします **
|
||||
** :! の後に実行する外部コマンドをタイプします。 **
|
||||
|
||||
1. 画面の最下部にカーソルが移動するよう、慣れ親しんだ : をタイプしましょう。
|
||||
これでコマンドがタイプできる様になります。
|
||||
これでコマンドライン命令がタイプできる様になります。
|
||||
|
||||
2. ここで ! という文字(感嘆符)をタイプしましょう。
|
||||
これで外部シェルコマンドが実行できる様になります。
|
||||
@@ -624,7 +625,7 @@ NOTE:
|
||||
レッスン 5.2: その他のファイルへ書き込み
|
||||
|
||||
|
||||
** ファイルへ変更を保存するには :w ファイル名 とタイプします **
|
||||
** ファイルへ変更を保存するには :w ファイル名 とタイプします。 **
|
||||
|
||||
1. ディレクトリの一覧を得るために :!dir もしくは :!ls とタイプしましょう。
|
||||
このあと <ENTER> を押すのは既にご存知ですね。
|
||||
@@ -634,7 +635,7 @@ NOTE:
|
||||
3. では :w TEST とタイプしましょう (TEST は、選んだファイル名です)。
|
||||
|
||||
4. これによりファイル全体が TEST という名前で保存されます。
|
||||
もう一度 :!dir もしくは :!ls とタイプして確認してみましょう。
|
||||
もう一度 :!dir もしくは :!ls とタイプしてディレクトリを確認してみましょう。
|
||||
|
||||
NOTE: ここで Vim を終了し、ファイル名 TEST と共に起動すると、保存した時の
|
||||
チュートリアルの複製ができ上がるはずです。
|
||||
@@ -647,7 +648,7 @@ NOTE:
|
||||
レッスン 5.3: 選択した書き込み
|
||||
|
||||
|
||||
** ファイルの位置を保存するには、v モーションと :w FILENAME をタイプします。 **
|
||||
** ファイルの一部を保存するには、v モーションと :w FILENAME をタイプします。 **
|
||||
|
||||
1. この行にカーソルを移動します。
|
||||
|
||||
@@ -660,20 +661,20 @@ NOTE:
|
||||
<ENTER> を押す前に :'<,'>w TEST となっていることを確認して下さい。
|
||||
|
||||
5. Vim は TEST というファイルに選択された行を書き込むでしょう。
|
||||
!dir もしくは !ls でそれを確認します。
|
||||
:!dir もしくは :!ls でそれを確認します。
|
||||
それは削除しないでおいて下さい。次のレッスンで使用します。
|
||||
|
||||
NOTE: v を押すと、Visual 選択が始まります。カーソルを動かすことで、選択範囲を
|
||||
大きくも小さくもできます。さらに、その選択範囲に対してオペレータを適用
|
||||
きます。例えば d はテキストを削除します。
|
||||
できます。例えば d はテキストを削除します。
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 5.4: ファイルの取込と合併
|
||||
|
||||
|
||||
** ファイルの中身を挿入するには :r ファイル名 とタイプします **
|
||||
** ファイルの中身を挿入するには :r ファイル名 とタイプします。 **
|
||||
|
||||
1. カーソルを以下の行に合わせます。
|
||||
1. カーソルをこの行のすぐ上に合わせます。
|
||||
|
||||
NOTE: ステップ 2 の実行後、レッスン 5.3 のテキストが現れます。下に下がってこ
|
||||
のレッスンに移動しましょう。
|
||||
@@ -682,19 +683,18 @@ NOTE:
|
||||
ここでいう TEST は使うファイルの名前のことです。
|
||||
読み込まれたファイルは、カーソル行の下にあります。
|
||||
|
||||
3. 取込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
|
||||
3. 取り込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
|
||||
オリジナルとファイルによるものの2つがあることがわかります。
|
||||
|
||||
NOTE: 外部コマンドの出力を読み込むことも出来ます。例えば、
|
||||
NOTE: 外部コマンドの出力を読み込むこともできます。例えば、
|
||||
:r !ls は ls コマンドの出力をカーソル以下に読み込みます。
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 5 要約
|
||||
|
||||
|
||||
1. :!command によって 外部コマンドを実行します。
|
||||
1. :!command によって 外部コマンドを実行する。
|
||||
|
||||
よく使う例:
|
||||
(Windows) (Unix)
|
||||
@@ -717,13 +717,14 @@ NOTE:
|
||||
レッスン 6.1: オープンコマンド
|
||||
|
||||
|
||||
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります **
|
||||
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
2. o (小文字) をタイプして、カーソルの下の行を開き、挿入モードに入ります。
|
||||
|
||||
3. さらに挿入モードを終了する為に <ESC> をタイプします。
|
||||
3. いくつか文字をタイプしてから、挿入モードを終了する為に <ESC> を
|
||||
タイプします。
|
||||
|
||||
---> o をタイプするとカーソルは開いた行へ移動し挿入モードに入ります。
|
||||
|
||||
@@ -735,12 +736,11 @@ NOTE:
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6.2: 追加コマンド
|
||||
|
||||
|
||||
** カーソルの次の位置からテキストを追加するには a とタイプします **
|
||||
** カーソルの次の位置からテキストを追加するには a とタイプします。 **
|
||||
|
||||
1. カーソルを ---> で示された最初の行へ移動しましょう。
|
||||
|
||||
@@ -763,7 +763,7 @@ NOTE: a, i
|
||||
レッスン 6.3: その他の置換方法
|
||||
|
||||
|
||||
** 1文字以上を置き換えるには大文字の R とタイプしましょう **
|
||||
** 1文字以上を置き換えるには大文字の R とタイプしましょう。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動します。最初の xxx の先頭に移動し
|
||||
ます。
|
||||
@@ -781,12 +781,11 @@ NOTE: a, i
|
||||
NOTE: 置換モードは挿入モードに似ていますが、全てのタイプされた文字は既存の文字
|
||||
を削除します。
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6.4: テキストのコピーとペースト
|
||||
|
||||
|
||||
** テキストのコピーにはオペレータ y を、ペーストには p を使います **
|
||||
** テキストのコピーにはオペレータ y を、ペーストには p を使います。 **
|
||||
|
||||
1. ---> と示された行へ移動し、カーソルを "a)" の後に置いておきます。
|
||||
|
||||
@@ -804,12 +803,13 @@ NOTE:
|
||||
---> a) this is the first item.
|
||||
b)
|
||||
|
||||
NOTE: 単語を1つ yank するのに y をオペレータとして yw とすることも出来ます。
|
||||
NOTE: y をオペレータとして使うこともできます。yw は単語を1つ yank します。
|
||||
yy は行を1つ yank し、p でその行を put します。
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6.5: オプションの設定
|
||||
|
||||
|
||||
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します **
|
||||
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します。 **
|
||||
|
||||
1. 次の様に入力して 'ignore' を検索しましょう: /ignore <ENTER>
|
||||
n を押して何度か検索を繰り返します。
|
||||
@@ -826,7 +826,7 @@ NOTE:
|
||||
6. 大文字小文字の区別を無効にするには次の様に入力します: :set noic
|
||||
|
||||
NOTE: マッチの強調表示をやめるには次の様に入力します: :nohlsearch
|
||||
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、フレーズに \c
|
||||
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、語句内で \c
|
||||
を使用します: /ignore\c <ENTER>
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6 要約
|
||||
@@ -835,13 +835,13 @@ NOTE: 1
|
||||
O (大文字) をタイプするとカーソルの上の行で挿入モードになる。
|
||||
|
||||
2. カーソル上の文字の次からテキストを追加するには a とタイプする。
|
||||
行末に自動でテキストを挿入するには大文字 A をタイプする。
|
||||
行末にテキストを挿入するには大文字 A をタイプする。
|
||||
|
||||
3. e コマンドは単語の終端部カーソルを移動する。
|
||||
3. e コマンドは単語の終端にカーソルを移動する。
|
||||
|
||||
4. y オペレータはテキストを yank (コピー)し、p はそれを put (ペースト)する。
|
||||
|
||||
5. 大文字の R をタイプすると置換モードに入り、<ESC>を押すと抜ける。
|
||||
5. 大文字の R をタイプすると置換モードに入り、<ESC> を押すと抜ける。
|
||||
|
||||
6. ":set xxx" とタイプするとオプション "xxx" が設定される。
|
||||
'ic' 'ignorecase' 検索時に大文字小文字の区別しない
|
||||
@@ -849,7 +849,7 @@ NOTE: 1
|
||||
'hls' 'hlsearch' マッチするすべてを強調表示する
|
||||
長い方、短い方、どちらのオプション名でも使用できます。
|
||||
|
||||
7. オプションを無効にするには "no" を付与します: :set noic
|
||||
7. オプションを無効にするには "no" を付与する: :set noic
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 7.1: オンラインヘルプコマンド
|
||||
@@ -883,15 +883,15 @@ NOTE: 1
|
||||
使用不可となっています。より多くの特徴を使いはじめるには "vimrc" ファイル
|
||||
を作成します。
|
||||
|
||||
1. "vimrc" ファイルの編集を開始する。これはシステムに依存します。
|
||||
:edit ~/.vimrc UNIX 向け
|
||||
:edit ~/_vimrc Windows 向け
|
||||
1. "vimrc" ファイルの編集を開始します。これはシステムに依存します。
|
||||
:e ~/.vimrc UNIX 向け
|
||||
:e ~/_vimrc Windows 向け
|
||||
|
||||
2. ここでサンプルの "vimrc" を読み込みます。
|
||||
:read $VIMRUNTIME/vimrc_example.vim
|
||||
:r $VIMRUNTIME/vimrc_example.vim
|
||||
|
||||
3. 以下のようにファイルへ書き込みます。
|
||||
:write
|
||||
:w
|
||||
|
||||
次回 Vim を起動すると、色づけ構文が使えるようになるでしょう。
|
||||
この "vimrc" ファイルへ、お好みの設定を追加することができます。
|
||||
@@ -907,7 +907,7 @@ NOTE: 1
|
||||
|
||||
2. 現在のディレクトリに在るファイルを :!ls か :!dir で確認します。
|
||||
|
||||
3. コマンドの開始をタイプします: :e
|
||||
3. コマンドの先頭をタイプします: :e
|
||||
|
||||
4. CTRL-D を押すと Vim は "e" から始まるコマンドの一覧を表示します。
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
になっています。
|
||||
|
||||
チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ
|
||||
け時間を使うのかにもよりますが、およそ25から30分です。
|
||||
け時間を使うのかにもよりますが、およそ30分です。
|
||||
|
||||
ATTENTION:
|
||||
以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前
|
||||
@@ -24,7 +24,7 @@
|
||||
レッスン 1.1: カーソルの移動
|
||||
|
||||
|
||||
** カーソルを移動するには、示される様に h,j,k,l を押します **
|
||||
** カーソルを移動するには、示される様に h,j,k,l を押します。 **
|
||||
^
|
||||
k ヒント: h キーは左方向に移動します。
|
||||
< h l > l キーは右方向に移動します。
|
||||
@@ -65,11 +65,12 @@ NOTE: :q! <ENTER>
|
||||
|
||||
5. 1.3までカーソルを移動させましょう。
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 1.3: テキスト編集 - 削除
|
||||
|
||||
|
||||
** ノーマルモードにてカーソルの下の文字を削除するには x を押します **
|
||||
** ノーマルモードにてカーソルの下の文字を削除するには x を押します。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -87,12 +88,11 @@ NOTE:
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 1.4: テキスト編集 - 挿入
|
||||
|
||||
|
||||
** ノーマルモードにてテキストを挿入するには i を押します **
|
||||
** ノーマルモードにてテキストを挿入するには i を押します。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
@@ -115,10 +115,10 @@ NOTE:
|
||||
レッスン 1.5: テキスト編集 - 追加
|
||||
|
||||
|
||||
** テキストを追加するには A を押しましょう **
|
||||
** テキストを追加するには A を押しましょう。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
カーソルがその文字上にあってもかまいません。
|
||||
カーソルがその行のどの文字上にあってもかまいません。
|
||||
|
||||
2. 追加が必要な場所で A をタイプしましょう。
|
||||
|
||||
@@ -137,18 +137,17 @@ NOTE:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 1.6: ファイルの編集
|
||||
|
||||
|
||||
** ファイルを保存して終了するには :wq とタイプします **
|
||||
** ファイルを保存して終了するには :wq とタイプします。 **
|
||||
|
||||
!! NOTE: 以下のステップを実行する前に、まず全体を読んでください!!
|
||||
|
||||
1. レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
|
||||
します。あるいは、別の端末がある場合はそこで以下の内容を行ってもかまい
|
||||
ません。
|
||||
1. 別の端末がある場合はそこで以下の内容を行ってください。そうでなければ、
|
||||
レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
|
||||
します。
|
||||
|
||||
2. シェルプロンプトでこのコマンドをタイプします: vim tutor <ENTER>
|
||||
'vim' が Vim エディタを起動するコマンド、'tutor' は編集したいファイルの
|
||||
名前です。変更してもよいファイルを使いましょう。
|
||||
2. シェルプロンプトでこのコマンドをタイプします: vim file.txt <ENTER>
|
||||
'vim' が Vim エディタを起動するコマンド、'file.txt' は編集したいファイル
|
||||
の名前です。変更できるファイルの名前を使いましょう。
|
||||
|
||||
3. 前のレッスンで学んだように、テキストを挿入、削除します。
|
||||
|
||||
@@ -186,9 +185,9 @@ NOTE: <ESC>
|
||||
レッスン 2.1: 削除コマンド
|
||||
|
||||
|
||||
** 単語の末尾までを削除するには dw とタイプしましょう **
|
||||
** 単語の末尾までを削除するには dw とタイプしましょう。 **
|
||||
|
||||
1. ノーマルモードであることを確認するために <ESC> を押しましょう。
|
||||
1. 確実にノーマルモードにするため <ESC> を押しましょう。
|
||||
|
||||
2. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -196,22 +195,22 @@ NOTE: <ESC>
|
||||
|
||||
4. 単語を削除するために dw とタイプしましょう。
|
||||
|
||||
NOTE: タイプすると、dw という文字がスクリーンの最下行に現われます。
|
||||
タイプを間違ってしまった時には <ESC> を押してやり直しましょう。
|
||||
NOTE: d をタイプすると、その文字がスクリーンの最下行に現われます。Vim は
|
||||
あなたが w をタイプするのを待っています。もし d 以外の文字が表示された
|
||||
時は何か間違っています。 <ESC> を押してやり直しましょう。
|
||||
|
||||
---> この 文 紙 には いくつかの たのしい 必要のない 単語 が 含まれて います。
|
||||
|
||||
5. 3 から 4 までを文が正しくなるまで繰り返し、レッスン 2.2 へ進みましょう。
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 2.2: その他の削除コマンド
|
||||
|
||||
|
||||
** 行の末尾までを削除するには d$ とタイプしましょう **
|
||||
** 行の末尾までを削除するには d$ とタイプしましょう。 **
|
||||
|
||||
1. ノーマルモードであることを確認するのに <ESC> を押しましょう。
|
||||
1. 確実にノーマルモードにするため <ESC> を押しましょう。
|
||||
|
||||
2. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -232,7 +231,7 @@ NOTE: <ESC>
|
||||
レッスン 2.3: オペレータとモーション
|
||||
|
||||
|
||||
多くのコマンドはオペレータとモーションからテキストに変更を加えます。
|
||||
テキストに変更を加える多くのコマンドはオペレータとモーションからなります。
|
||||
削除コマンド d のオペレータは次の様になっています:
|
||||
|
||||
d モーション
|
||||
@@ -248,7 +247,7 @@ NOTE: <ESC>
|
||||
|
||||
つまり de とタイプすると、カーソル位置から単語の終わりまでを削除します。
|
||||
|
||||
NOTE: 冒険したい人は、ノーマルモードにてコマンドなしにモーションを押して
|
||||
NOTE: 冒険したい人は、ノーマルモードにてオペレータなしにモーションを押して
|
||||
みましょう。カーソルが目的語一覧で示される位置に移動するはずです。
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -259,7 +258,7 @@ NOTE:
|
||||
|
||||
1. 以下の ---> と示された行の先頭にカーソルを移動します。
|
||||
|
||||
2. 2w をタイプして単語2つ分前に移動します。
|
||||
2. 2w をタイプして単語2つ分先に移動します。
|
||||
|
||||
3. 3e をタイプして3つ目の単語の終端に移動します。
|
||||
|
||||
@@ -284,24 +283,24 @@ NOTE:
|
||||
より多くの削除が行えます:
|
||||
d 数値 モーション
|
||||
|
||||
1. ---> と示された行の行頭部分にカーソルを移動しましょう。
|
||||
1. ---> と示された行の最初の大文字の単語にカーソルを移動しましょう。
|
||||
|
||||
2. UPPER CASE の単語2つを d2w とタイプして削除します。
|
||||
2. 大文字の単語2つを d2w とタイプして削除します。
|
||||
|
||||
3. UPPER CASE という連続した単語を、1つのコマンドと異なるカウントを指定し、
|
||||
3. 連続した大文字の単語を、異なるカウントを指定した1つのコマンドで削除し、
|
||||
ステップ 1 と 2 を繰り返します。
|
||||
|
||||
---> このABC DE行のFGHI JK LMN OP単語はQ RS TUV綺麗になった。
|
||||
|
||||
NOTE: オペレータ d とモーションの間にカウントを使った場合、オペレータのない
|
||||
場合のモーションのように動作します。
|
||||
例: 3dw と d3w は同等で、3w を削除します。
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 2.6: 行の操作
|
||||
|
||||
|
||||
** 行全体を削除するには dd とタイプします **
|
||||
** 行全体を削除するには dd とタイプします。 **
|
||||
|
||||
行全体を削除する頻度が多いので、Viのデザイナーは行の削除を d の2回タイプと
|
||||
いう簡単なものに決めました。
|
||||
@@ -319,24 +318,25 @@ NOTE:
|
||||
---> 6) 砂糖は甘い
|
||||
---> 7) オマエモナー
|
||||
|
||||
2回タイプで1行に対して作用させる方法は以下で述べるオペレータでも動作します。
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 2.7: やり直しコマンド
|
||||
|
||||
|
||||
** 最後のコマンドを取り消すには u を押します。U は行全体の取消です。 **
|
||||
** 最後のコマンドを取り消すには u を押します。U は行全体の取り消しです。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動し、最初の間違いにカーソル
|
||||
を移動しましょう。
|
||||
2. x をタイプしていらない先頭の文字を削除しましょう。
|
||||
2. x をタイプして最初のいらない文字を削除しましょう。
|
||||
3. さぁ、u をタイプして最後に実行したコマンドを取り消しましょう。
|
||||
4. 今度は、x を使用して誤りを全て修正しましょう。
|
||||
4. 今度は、x を使用して行内の誤りを全て修正しましょう。
|
||||
5. 大文字の U をタイプして、行を元の状態に戻しましょう。
|
||||
6. u をタイプして直前の U コマンドを取消しましょう。
|
||||
6. u をタイプして直前の U コマンドを取り消しましょう。
|
||||
7. ではコマンドを再実行するのに CTRL-R (CTRL を押したまま R を打つ)を数回
|
||||
タイプしてみましょう(取消の取消)。
|
||||
タイプしてみましょう(取り消しの取り消し)。
|
||||
|
||||
---> このの行のの間違いを修正々し、後でそれらの修正をを取消しまますす。
|
||||
---> このの行のの間違いを修正々し、後でそれらの修正をを取り消しまますす。
|
||||
|
||||
8. これはとても便利なコマンドです。さぁレッスン 2 要約へ進みましょう。
|
||||
|
||||
@@ -347,45 +347,47 @@ NOTE:
|
||||
レッスン 2 要約
|
||||
|
||||
|
||||
1. カーソル位置から単語の末尾までを削除するには dw とタイプします。
|
||||
2. カーソル位置から行の末尾までを削除するには d$ とタイプします。
|
||||
3. 行全体を削除するには dd とタイプします。
|
||||
1. カーソル位置から次の単語までを削除するには dw とタイプします。
|
||||
2. カーソル位置から単語の末尾までを削除するには de とタイプします。
|
||||
3. カーソル位置から行の末尾までを削除するには d$ とタイプします。
|
||||
4. 行全体を削除するには dd とタイプします。
|
||||
|
||||
4. モーションを繰り返すには数値を付与します: 2w
|
||||
5. 変更に用いるコマンドの形式は
|
||||
5. モーションを繰り返すには数値を付与します: 2w
|
||||
6. 変更に用いるコマンドの形式は
|
||||
オペレータ [数値] モーション
|
||||
|
||||
それぞれ:
|
||||
オペレータ - 削除 d の類で何をするか。
|
||||
数値 - そのコマンドを何回繰り返すか。
|
||||
モーション - w (単語)や $ (行末)などの類で、テキストの何に対して働きか
|
||||
けるか。
|
||||
[数値] - そのコマンドを何回繰り返すか。
|
||||
モーション - w (単語)や e (単語末尾)、$ (行末)などの類で、テキストの
|
||||
何に対して働きかけるか。
|
||||
|
||||
6. 行の先頭に移動するにはゼロを使用します: 0
|
||||
7. 行の先頭に移動するにはゼロを使用します: 0
|
||||
|
||||
8. 前回の動作を取り消す: u (小文字 u)
|
||||
行全体の変更を取り消す: U (大文字 U)
|
||||
取り消しの取り消し: CTRL-R
|
||||
|
||||
7. 前回の動作を取消す: u (小文字 u)
|
||||
行全体の変更を取消す: U (大文字 U)
|
||||
取消しの取消し: CTRL-R
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 3.1: 貼り付けコマンド
|
||||
|
||||
|
||||
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします **
|
||||
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします。 **
|
||||
|
||||
1. 以下の段落の最初の行にカーソルを移動しましょう。
|
||||
1. ---> と示された以下の最初の行にカーソルを移動しましょう。
|
||||
|
||||
2. dd とタイプして行を削除し、Vim のバッファに格納しましょう。
|
||||
2. dd とタイプして行を削除し、Vim のレジスタに格納しましょう。
|
||||
|
||||
3. 削除した行が本来あるべき位置の上の行まで、カーソルを移動させましょう。
|
||||
3. 削除した行が本来あるべき位置の上の行である c) 行まで、カーソルを移動させ
|
||||
ましょう。
|
||||
|
||||
4. ノーマルモードで p をタイプして格納した行を画面に戻します。
|
||||
4. ノーマルモードで p をタイプして格納した行をカーソルの下に戻します。
|
||||
|
||||
5. 順番が正しくなる様にステップ 2 から 4 を繰り返しましょう。
|
||||
|
||||
d) 貴方も学ぶことができる?
|
||||
b) スミレは青い、
|
||||
c) 知恵とは学ぶもの、
|
||||
a) バラは赤い、
|
||||
---> d) 貴方も学ぶことができる?
|
||||
---> b) スミレは青い、
|
||||
---> c) 知恵とは学ぶもの、
|
||||
---> a) バラは赤い、
|
||||
|
||||
|
||||
|
||||
@@ -393,7 +395,7 @@ NOTE:
|
||||
レッスン 3.2: 置き換えコマンド
|
||||
|
||||
|
||||
** カーソルの下の文字を置き換えるには r をタイプします **
|
||||
** カーソルの下の文字を x に置き換えるには rx をタイプします。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
@@ -416,38 +418,38 @@ NOTE:
|
||||
レッスン 3.3: 変更コマンド
|
||||
|
||||
|
||||
** 単語の一部、もしくは全体を変更するには cw とタイプします **
|
||||
** 単語の末尾までを変更するには ce とタイプします。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
2. lubw の u の位置にカーソルを移動しましょう。
|
||||
|
||||
3. cw とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
|
||||
3. ce とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
|
||||
|
||||
4. 次の間違い(変更すべき文字の先頭)に移動するために <ESC> をタイプします。
|
||||
4. <ESC> をタイプしてから次の間違い(変更すべき文字の先頭)に移動します。
|
||||
|
||||
5. 最初の行が次の行の様になるまでステップ 3 と 4 を繰り返します。
|
||||
|
||||
---> This lubw has a few wptfd that mrrf changing usf the change operator.
|
||||
---> This line has a few words that need changing using the change operator.
|
||||
|
||||
cw は単語を変更するだけでなく、挿入も行えることに注意しましょう。
|
||||
|
||||
ce は単語を削除した後、挿入モードに入ることに注意しましょう。
|
||||
cc は同じことを行全体に対して行います。
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 3.4: c を使用したその他の変更
|
||||
|
||||
|
||||
** 変更コマンドは、削除コマンドと同じ様にオブジェクトを使用します **
|
||||
** 変更オペレータは、削除と同じ様にモーションを使用します。 **
|
||||
|
||||
1. 変更コマンドは、削除コマンドと同じような動作をします。その形式は
|
||||
1. 変更オペレータは、削除と同じような動作をします。その形式は
|
||||
|
||||
c [数値] モーション
|
||||
|
||||
2. オブジェクトも同じで、w は単語、 $ は行末などといったものです。
|
||||
2. モーションも同じで、w は単語、 $ は行末などといったものです。
|
||||
|
||||
3. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
3. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
4. 最初の間違いへカーソルを移動しましょう。
|
||||
|
||||
@@ -470,7 +472,7 @@ NOTE:
|
||||
文字をタイプします。
|
||||
|
||||
3. 変更コマンドではカーソル位置から特定のモーションで指定される終端までを変
|
||||
更することが可能です。例えば cw ならばカーソル位置から単語の終わりまで、
|
||||
更することが可能です。例えば ce ならばカーソル位置から単語の終わりまで、
|
||||
c$ ならば行の終わりまでを変更します。
|
||||
|
||||
4. 変更コマンドの形式は
|
||||
@@ -485,7 +487,7 @@ NOTE:
|
||||
レッスン 4.1: 位置とファイルの情報
|
||||
|
||||
** ファイル内での位置とファイルの状態を表示するには CTRL-G をタイプします。
|
||||
ファイル内のある行に移動するには G をタイプします **
|
||||
ファイル内のある行に移動するには G をタイプします。 **
|
||||
|
||||
NOTE: ステップを実行する前に、このレッスン全てに目を通しましょう!!
|
||||
|
||||
@@ -496,7 +498,7 @@ NOTE:
|
||||
NOTE: 画面の右下隅にカーソルの位置が表示されているかもしれません。これは
|
||||
'ruler' オプション(:help 'ruler' を参照)を設定することで表示されます。
|
||||
|
||||
2. 最下行に移動するために G をタイプしましょう。
|
||||
2. ファイルの最下行に移動するために G をタイプしましょう。
|
||||
ファイルの先頭に移動するには gg とタイプしましょう。
|
||||
|
||||
3. 先ほどの行の番号をタイプし G をタイプしましょう。最初に CTRL-G を押した行
|
||||
@@ -508,19 +510,19 @@ NOTE:
|
||||
レッスン 4.2: 検索コマンド
|
||||
|
||||
|
||||
** 語句を検索するには / と、前方検索する語句をタイプします。**
|
||||
** 語句を検索するには / と、前方検索する語句をタイプします。 **
|
||||
|
||||
1. ノーマルモードで / という文字をタイプします。画面一番下に : コマンドと
|
||||
同じ様に / が現れることに気づくでしょう。
|
||||
|
||||
2. では、'errroor' <ENTER> とタイプしましょう。これが検索したい単語です。
|
||||
|
||||
3. 同じ語をもう一度検索するときは 単に n をタイプします。
|
||||
3. 同じ語句をもう一度検索するときは 単に n をタイプします。
|
||||
逆方向に語句を検索するときは N をタイプします。
|
||||
|
||||
4. 逆方向に語句を検索する場合は、/ の代わりに ? コマンドを使用します。
|
||||
|
||||
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら o 文字タイプ)をタイプし
|
||||
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら文字 o をタイプ)をタイプし
|
||||
ます。さらに戻るにはこれを繰り返します。CTRL-I は前方向です。
|
||||
|
||||
---> "errroor" は error とスペルが違います; errroor はいわゆる error です。
|
||||
@@ -531,7 +533,7 @@ NOTE:
|
||||
レッスン 4.3: 対応する括弧を検索
|
||||
|
||||
|
||||
** 対応する ),] や } を検索するには % をタイプします **
|
||||
** 対応する ),] や } を検索するには % をタイプします。 **
|
||||
|
||||
1. 下の ---> で示された行で (,[ か { のどれかにカーソルを移動しましょう。
|
||||
|
||||
@@ -554,7 +556,7 @@ NOTE:
|
||||
レッスン 4.4: 間違いを変更する方法
|
||||
|
||||
|
||||
** 'old' を 'new' に置換するには :s/old/new/g とタイプします **
|
||||
** 'old' を 'new' に置換するには :s/old/new/g とタイプします。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -567,9 +569,8 @@ NOTE:
|
||||
|
||||
---> thee best time to see thee flowers is in thee spring.
|
||||
|
||||
4. 複数行から見つかる文字を変更するには
|
||||
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定しま
|
||||
す。
|
||||
4. 複数行から見つかる文字の全ての箇所を変更するには
|
||||
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定する。
|
||||
:%s/old/new/g ファイル全体で見つかるものに対して変更する。
|
||||
:%s/old/new/gc ファイル全体で見つかるものに対して、1つ1つ確認をとりな
|
||||
がら変更する。
|
||||
@@ -593,7 +594,7 @@ NOTE:
|
||||
|
||||
4. 現在行の最初の old を new に置換する。 :s/old/new
|
||||
現在行の全ての old を new に置換する。 :s/old/new/g
|
||||
2つの # 間で語句を置換する。 :#,#s/old/new/g
|
||||
2つの # 行の間で語句を置換する。 :#,#s/old/new/g
|
||||
ファイルの中の全ての検索語句を置換する。 :%s/old/new/g
|
||||
'c' を加えると置換の度に確認を求める。 :%s/old/new/gc
|
||||
|
||||
@@ -601,10 +602,10 @@ NOTE:
|
||||
レッスン 5.1: 外部コマンドを実行する方法
|
||||
|
||||
|
||||
** :! の後に実行する外部コマンドをタイプします **
|
||||
** :! の後に実行する外部コマンドをタイプします。 **
|
||||
|
||||
1. 画面の最下部にカーソルが移動するよう、慣れ親しんだ : をタイプしましょう。
|
||||
これでコマンドがタイプできる様になります。
|
||||
これでコマンドライン命令がタイプできる様になります。
|
||||
|
||||
2. ここで ! という文字(感嘆符)をタイプしましょう。
|
||||
これで外部シェルコマンドが実行できる様になります。
|
||||
@@ -624,7 +625,7 @@ NOTE:
|
||||
レッスン 5.2: その他のファイルへ書き込み
|
||||
|
||||
|
||||
** ファイルへ変更を保存するには :w ファイル名 とタイプします **
|
||||
** ファイルへ変更を保存するには :w ファイル名 とタイプします。 **
|
||||
|
||||
1. ディレクトリの一覧を得るために :!dir もしくは :!ls とタイプしましょう。
|
||||
このあと <ENTER> を押すのは既にご存知ですね。
|
||||
@@ -634,7 +635,7 @@ NOTE:
|
||||
3. では :w TEST とタイプしましょう (TEST は、選んだファイル名です)。
|
||||
|
||||
4. これによりファイル全体が TEST という名前で保存されます。
|
||||
もう一度 :!dir もしくは :!ls とタイプして確認してみましょう。
|
||||
もう一度 :!dir もしくは :!ls とタイプしてディレクトリを確認してみましょう。
|
||||
|
||||
NOTE: ここで Vim を終了し、ファイル名 TEST と共に起動すると、保存した時の
|
||||
チュートリアルの複製ができ上がるはずです。
|
||||
@@ -647,7 +648,7 @@ NOTE:
|
||||
レッスン 5.3: 選択した書き込み
|
||||
|
||||
|
||||
** ファイルの位置を保存するには、v モーションと :w FILENAME をタイプします。 **
|
||||
** ファイルの一部を保存するには、v モーションと :w FILENAME をタイプします。 **
|
||||
|
||||
1. この行にカーソルを移動します。
|
||||
|
||||
@@ -660,20 +661,20 @@ NOTE:
|
||||
<ENTER> を押す前に :'<,'>w TEST となっていることを確認して下さい。
|
||||
|
||||
5. Vim は TEST というファイルに選択された行を書き込むでしょう。
|
||||
!dir もしくは !ls でそれを確認します。
|
||||
:!dir もしくは :!ls でそれを確認します。
|
||||
それは削除しないでおいて下さい。次のレッスンで使用します。
|
||||
|
||||
NOTE: v を押すと、Visual 選択が始まります。カーソルを動かすことで、選択範囲を
|
||||
大きくも小さくもできます。さらに、その選択範囲に対してオペレータを適用
|
||||
きます。例えば d はテキストを削除します。
|
||||
できます。例えば d はテキストを削除します。
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 5.4: ファイルの取込と合併
|
||||
|
||||
|
||||
** ファイルの中身を挿入するには :r ファイル名 とタイプします **
|
||||
** ファイルの中身を挿入するには :r ファイル名 とタイプします。 **
|
||||
|
||||
1. カーソルを以下の行に合わせます。
|
||||
1. カーソルをこの行のすぐ上に合わせます。
|
||||
|
||||
NOTE: ステップ 2 の実行後、レッスン 5.3 のテキストが現れます。下に下がってこ
|
||||
のレッスンに移動しましょう。
|
||||
@@ -682,19 +683,18 @@ NOTE:
|
||||
ここでいう TEST は使うファイルの名前のことです。
|
||||
読み込まれたファイルは、カーソル行の下にあります。
|
||||
|
||||
3. 取込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
|
||||
3. 取り込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
|
||||
オリジナルとファイルによるものの2つがあることがわかります。
|
||||
|
||||
NOTE: 外部コマンドの出力を読み込むことも出来ます。例えば、
|
||||
NOTE: 外部コマンドの出力を読み込むこともできます。例えば、
|
||||
:r !ls は ls コマンドの出力をカーソル以下に読み込みます。
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 5 要約
|
||||
|
||||
|
||||
1. :!command によって 外部コマンドを実行します。
|
||||
1. :!command によって 外部コマンドを実行する。
|
||||
|
||||
よく使う例:
|
||||
(Windows) (Unix)
|
||||
@@ -717,13 +717,14 @@ NOTE:
|
||||
レッスン 6.1: オープンコマンド
|
||||
|
||||
|
||||
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります **
|
||||
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
2. o (小文字) をタイプして、カーソルの下の行を開き、挿入モードに入ります。
|
||||
|
||||
3. さらに挿入モードを終了する為に <ESC> をタイプします。
|
||||
3. いくつか文字をタイプしてから、挿入モードを終了する為に <ESC> を
|
||||
タイプします。
|
||||
|
||||
---> o をタイプするとカーソルは開いた行へ移動し挿入モードに入ります。
|
||||
|
||||
@@ -735,12 +736,11 @@ NOTE:
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6.2: 追加コマンド
|
||||
|
||||
|
||||
** カーソルの次の位置からテキストを追加するには a とタイプします **
|
||||
** カーソルの次の位置からテキストを追加するには a とタイプします。 **
|
||||
|
||||
1. カーソルを ---> で示された最初の行へ移動しましょう。
|
||||
|
||||
@@ -763,7 +763,7 @@ NOTE: a, i
|
||||
レッスン 6.3: その他の置換方法
|
||||
|
||||
|
||||
** 1文字以上を置き換えるには大文字の R とタイプしましょう **
|
||||
** 1文字以上を置き換えるには大文字の R とタイプしましょう。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動します。最初の xxx の先頭に移動し
|
||||
ます。
|
||||
@@ -781,12 +781,11 @@ NOTE: a, i
|
||||
NOTE: 置換モードは挿入モードに似ていますが、全てのタイプされた文字は既存の文字
|
||||
を削除します。
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6.4: テキストのコピーとペースト
|
||||
|
||||
|
||||
** テキストのコピーにはオペレータ y を、ペーストには p を使います **
|
||||
** テキストのコピーにはオペレータ y を、ペーストには p を使います。 **
|
||||
|
||||
1. ---> と示された行へ移動し、カーソルを "a)" の後に置いておきます。
|
||||
|
||||
@@ -804,12 +803,13 @@ NOTE:
|
||||
---> a) this is the first item.
|
||||
b)
|
||||
|
||||
NOTE: 単語を1つ yank するのに y をオペレータとして yw とすることも出来ます。
|
||||
NOTE: y をオペレータとして使うこともできます。yw は単語を1つ yank します。
|
||||
yy は行を1つ yank し、p でその行を put します。
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6.5: オプションの設定
|
||||
|
||||
|
||||
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します **
|
||||
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します。 **
|
||||
|
||||
1. 次の様に入力して 'ignore' を検索しましょう: /ignore <ENTER>
|
||||
n を押して何度か検索を繰り返します。
|
||||
@@ -826,7 +826,7 @@ NOTE:
|
||||
6. 大文字小文字の区別を無効にするには次の様に入力します: :set noic
|
||||
|
||||
NOTE: マッチの強調表示をやめるには次の様に入力します: :nohlsearch
|
||||
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、フレーズに \c
|
||||
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、語句内で \c
|
||||
を使用します: /ignore\c <ENTER>
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6 要約
|
||||
@@ -835,13 +835,13 @@ NOTE: 1
|
||||
O (大文字) をタイプするとカーソルの上の行で挿入モードになる。
|
||||
|
||||
2. カーソル上の文字の次からテキストを追加するには a とタイプする。
|
||||
行末に自動でテキストを挿入するには大文字 A をタイプする。
|
||||
行末にテキストを挿入するには大文字 A をタイプする。
|
||||
|
||||
3. e コマンドは単語の終端部カーソルを移動する。
|
||||
3. e コマンドは単語の終端にカーソルを移動する。
|
||||
|
||||
4. y オペレータはテキストを yank (コピー)し、p はそれを put (ペースト)する。
|
||||
|
||||
5. 大文字の R をタイプすると置換モードに入り、<ESC>を押すと抜ける。
|
||||
5. 大文字の R をタイプすると置換モードに入り、<ESC> を押すと抜ける。
|
||||
|
||||
6. ":set xxx" とタイプするとオプション "xxx" が設定される。
|
||||
'ic' 'ignorecase' 検索時に大文字小文字の区別しない
|
||||
@@ -849,7 +849,7 @@ NOTE: 1
|
||||
'hls' 'hlsearch' マッチするすべてを強調表示する
|
||||
長い方、短い方、どちらのオプション名でも使用できます。
|
||||
|
||||
7. オプションを無効にするには "no" を付与します: :set noic
|
||||
7. オプションを無効にするには "no" を付与する: :set noic
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 7.1: オンラインヘルプコマンド
|
||||
@@ -883,15 +883,15 @@ NOTE: 1
|
||||
使用不可となっています。より多くの特徴を使いはじめるには "vimrc" ファイル
|
||||
を作成します。
|
||||
|
||||
1. "vimrc" ファイルの編集を開始する。これはシステムに依存します。
|
||||
:edit ~/.vimrc UNIX 向け
|
||||
:edit ~/_vimrc Windows 向け
|
||||
1. "vimrc" ファイルの編集を開始します。これはシステムに依存します。
|
||||
:e ~/.vimrc UNIX 向け
|
||||
:e ~/_vimrc Windows 向け
|
||||
|
||||
2. ここでサンプルの "vimrc" を読み込みます。
|
||||
:read $VIMRUNTIME/vimrc_example.vim
|
||||
:r $VIMRUNTIME/vimrc_example.vim
|
||||
|
||||
3. 以下のようにファイルへ書き込みます。
|
||||
:write
|
||||
:w
|
||||
|
||||
次回 Vim を起動すると、色づけ構文が使えるようになるでしょう。
|
||||
この "vimrc" ファイルへ、お好みの設定を追加することができます。
|
||||
@@ -907,7 +907,7 @@ NOTE: 1
|
||||
|
||||
2. 現在のディレクトリに在るファイルを :!ls か :!dir で確認します。
|
||||
|
||||
3. コマンドの開始をタイプします: :e
|
||||
3. コマンドの先頭をタイプします: :e
|
||||
|
||||
4. CTRL-D を押すと Vim は "e" から始まるコマンドの一覧を表示します。
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
になっています。
|
||||
|
||||
チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ
|
||||
け時間を使うのかにもよりますが、およそ25から30分です。
|
||||
け時間を使うのかにもよりますが、およそ30分です。
|
||||
|
||||
ATTENTION:
|
||||
以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前
|
||||
@@ -24,7 +24,7 @@
|
||||
レッスン 1.1: カーソルの移動
|
||||
|
||||
|
||||
** カーソルを移動するには、示される様に h,j,k,l を押します **
|
||||
** カーソルを移動するには、示される様に h,j,k,l を押します。 **
|
||||
^
|
||||
k ヒント: h キーは左方向に移動します。
|
||||
< h l > l キーは右方向に移動します。
|
||||
@@ -65,11 +65,12 @@ NOTE: :q! <ENTER> は全ての変更を破棄します。レッスンにて変
|
||||
|
||||
5. 1.3までカーソルを移動させましょう。
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 1.3: テキスト編集 - 削除
|
||||
|
||||
|
||||
** ノーマルモードにてカーソルの下の文字を削除するには x を押します **
|
||||
** ノーマルモードにてカーソルの下の文字を削除するには x を押します。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -87,12 +88,11 @@ NOTE: 全てのレッスンを通じて、覚えようとするのではなく
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 1.4: テキスト編集 - 挿入
|
||||
|
||||
|
||||
** ノーマルモードにてテキストを挿入するには i を押します **
|
||||
** ノーマルモードにてテキストを挿入するには i を押します。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
@@ -115,10 +115,10 @@ NOTE: 全てのレッスンを通じて、覚えようとするのではなく
|
||||
レッスン 1.5: テキスト編集 - 追加
|
||||
|
||||
|
||||
** テキストを追加するには A を押しましょう **
|
||||
** テキストを追加するには A を押しましょう。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
カーソルがその文字上にあってもかまいません。
|
||||
カーソルがその行のどの文字上にあってもかまいません。
|
||||
|
||||
2. 追加が必要な場所で A をタイプしましょう。
|
||||
|
||||
@@ -137,18 +137,17 @@ NOTE: 全てのレッスンを通じて、覚えようとするのではなく
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 1.6: ファイルの編集
|
||||
|
||||
|
||||
** ファイルを保存して終了するには :wq とタイプします **
|
||||
** ファイルを保存して終了するには :wq とタイプします。 **
|
||||
|
||||
!! NOTE: 以下のステップを実行する前に、まず全体を読んでください!!
|
||||
|
||||
1. レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
|
||||
します。あるいは、別の端末がある場合はそこで以下の内容を行ってもかまい
|
||||
ません。
|
||||
1. 別の端末がある場合はそこで以下の内容を行ってください。そうでなければ、
|
||||
レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
|
||||
します。
|
||||
|
||||
2. シェルプロンプトでこのコマンドをタイプします: vim tutor <ENTER>
|
||||
'vim' が Vim エディタを起動するコマンド、'tutor' は編集したいファイルの
|
||||
名前です。変更してもよいファイルを使いましょう。
|
||||
2. シェルプロンプトでこのコマンドをタイプします: vim file.txt <ENTER>
|
||||
'vim' が Vim エディタを起動するコマンド、'file.txt' は編集したいファイル
|
||||
の名前です。変更できるファイルの名前を使いましょう。
|
||||
|
||||
3. 前のレッスンで学んだように、テキストを挿入、削除します。
|
||||
|
||||
@@ -186,9 +185,9 @@ NOTE: <ESC> キーを押すとノーマルモードに移行します。その
|
||||
レッスン 2.1: 削除コマンド
|
||||
|
||||
|
||||
** 単語の末尾までを削除するには dw とタイプしましょう **
|
||||
** 単語の末尾までを削除するには dw とタイプしましょう。 **
|
||||
|
||||
1. ノーマルモードであることを確認するために <ESC> を押しましょう。
|
||||
1. 確実にノーマルモードにするため <ESC> を押しましょう。
|
||||
|
||||
2. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -196,22 +195,22 @@ NOTE: <ESC> キーを押すとノーマルモードに移行します。その
|
||||
|
||||
4. 単語を削除するために dw とタイプしましょう。
|
||||
|
||||
NOTE: タイプすると、dw という文字がスクリーンの最下行に現われます。
|
||||
タイプを間違ってしまった時には <ESC> を押してやり直しましょう。
|
||||
NOTE: d をタイプすると、その文字がスクリーンの最下行に現われます。Vim は
|
||||
あなたが w をタイプするのを待っています。もし d 以外の文字が表示された
|
||||
時は何か間違っています。 <ESC> を押してやり直しましょう。
|
||||
|
||||
---> この 文 紙 には いくつかの たのしい 必要のない 単語 が 含まれて います。
|
||||
|
||||
5. 3 から 4 までを文が正しくなるまで繰り返し、レッスン 2.2 へ進みましょう。
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 2.2: その他の削除コマンド
|
||||
|
||||
|
||||
** 行の末尾までを削除するには d$ とタイプしましょう **
|
||||
** 行の末尾までを削除するには d$ とタイプしましょう。 **
|
||||
|
||||
1. ノーマルモードであることを確認するのに <ESC> を押しましょう。
|
||||
1. 確実にノーマルモードにするため <ESC> を押しましょう。
|
||||
|
||||
2. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -232,7 +231,7 @@ NOTE: <ESC> キーを押すとノーマルモードに移行します。その
|
||||
レッスン 2.3: オペレータとモーション
|
||||
|
||||
|
||||
多くのコマンドはオペレータとモーションからテキストに変更を加えます。
|
||||
テキストに変更を加える多くのコマンドはオペレータとモーションからなります。
|
||||
削除コマンド d のオペレータは次の様になっています:
|
||||
|
||||
d モーション
|
||||
@@ -248,7 +247,7 @@ NOTE: <ESC> キーを押すとノーマルモードに移行します。その
|
||||
|
||||
つまり de とタイプすると、カーソル位置から単語の終わりまでを削除します。
|
||||
|
||||
NOTE: 冒険したい人は、ノーマルモードにてコマンドなしにモーションを押して
|
||||
NOTE: 冒険したい人は、ノーマルモードにてオペレータなしにモーションを押して
|
||||
みましょう。カーソルが目的語一覧で示される位置に移動するはずです。
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -259,7 +258,7 @@ NOTE: 冒険したい人は、ノーマルモードにてコマンドなしに
|
||||
|
||||
1. 以下の ---> と示された行の先頭にカーソルを移動します。
|
||||
|
||||
2. 2w をタイプして単語2つ分前に移動します。
|
||||
2. 2w をタイプして単語2つ分先に移動します。
|
||||
|
||||
3. 3e をタイプして3つ目の単語の終端に移動します。
|
||||
|
||||
@@ -284,24 +283,24 @@ NOTE: 冒険したい人は、ノーマルモードにてコマンドなしに
|
||||
より多くの削除が行えます:
|
||||
d 数値 モーション
|
||||
|
||||
1. ---> と示された行の行頭部分にカーソルを移動しましょう。
|
||||
1. ---> と示された行の最初の大文字の単語にカーソルを移動しましょう。
|
||||
|
||||
2. UPPER CASE の単語2つを d2w とタイプして削除します。
|
||||
2. 大文字の単語2つを d2w とタイプして削除します。
|
||||
|
||||
3. UPPER CASE という連続した単語を、1つのコマンドと異なるカウントを指定し、
|
||||
3. 連続した大文字の単語を、異なるカウントを指定した1つのコマンドで削除し、
|
||||
ステップ 1 と 2 を繰り返します。
|
||||
|
||||
---> このABC DE行のFGHI JK LMN OP単語はQ RS TUV綺麗になった。
|
||||
|
||||
NOTE: オペレータ d とモーションの間にカウントを使った場合、オペレータのない
|
||||
場合のモーションのように動作します。
|
||||
例: 3dw と d3w は同等で、3w を削除します。
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 2.6: 行の操作
|
||||
|
||||
|
||||
** 行全体を削除するには dd とタイプします **
|
||||
** 行全体を削除するには dd とタイプします。 **
|
||||
|
||||
行全体を削除する頻度が多いので、Viのデザイナーは行の削除を d の2回タイプと
|
||||
いう簡単なものに決めました。
|
||||
@@ -319,24 +318,25 @@ NOTE: オペレータ d とモーションの間にカウントを使った場
|
||||
---> 6) 砂糖は甘い
|
||||
---> 7) オマエモナー
|
||||
|
||||
2回タイプで1行に対して作用させる方法は以下で述べるオペレータでも動作します。
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 2.7: やり直しコマンド
|
||||
|
||||
|
||||
** 最後のコマンドを取り消すには u を押します。U は行全体の取消です。 **
|
||||
** 最後のコマンドを取り消すには u を押します。U は行全体の取り消しです。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動し、最初の間違いにカーソル
|
||||
を移動しましょう。
|
||||
2. x をタイプしていらない先頭の文字を削除しましょう。
|
||||
2. x をタイプして最初のいらない文字を削除しましょう。
|
||||
3. さぁ、u をタイプして最後に実行したコマンドを取り消しましょう。
|
||||
4. 今度は、x を使用して誤りを全て修正しましょう。
|
||||
4. 今度は、x を使用して行内の誤りを全て修正しましょう。
|
||||
5. 大文字の U をタイプして、行を元の状態に戻しましょう。
|
||||
6. u をタイプして直前の U コマンドを取消しましょう。
|
||||
6. u をタイプして直前の U コマンドを取り消しましょう。
|
||||
7. ではコマンドを再実行するのに CTRL-R (CTRL を押したまま R を打つ)を数回
|
||||
タイプしてみましょう(取消の取消)。
|
||||
タイプしてみましょう(取り消しの取り消し)。
|
||||
|
||||
---> このの行のの間違いを修正々し、後でそれらの修正をを取消しまますす。
|
||||
---> このの行のの間違いを修正々し、後でそれらの修正をを取り消しまますす。
|
||||
|
||||
8. これはとても便利なコマンドです。さぁレッスン 2 要約へ進みましょう。
|
||||
|
||||
@@ -347,45 +347,47 @@ NOTE: オペレータ d とモーションの間にカウントを使った場
|
||||
レッスン 2 要約
|
||||
|
||||
|
||||
1. カーソル位置から単語の末尾までを削除するには dw とタイプします。
|
||||
2. カーソル位置から行の末尾までを削除するには d$ とタイプします。
|
||||
3. 行全体を削除するには dd とタイプします。
|
||||
1. カーソル位置から次の単語までを削除するには dw とタイプします。
|
||||
2. カーソル位置から単語の末尾までを削除するには de とタイプします。
|
||||
3. カーソル位置から行の末尾までを削除するには d$ とタイプします。
|
||||
4. 行全体を削除するには dd とタイプします。
|
||||
|
||||
4. モーションを繰り返すには数値を付与します: 2w
|
||||
5. 変更に用いるコマンドの形式は
|
||||
5. モーションを繰り返すには数値を付与します: 2w
|
||||
6. 変更に用いるコマンドの形式は
|
||||
オペレータ [数値] モーション
|
||||
|
||||
それぞれ:
|
||||
オペレータ - 削除 d の類で何をするか。
|
||||
数値 - そのコマンドを何回繰り返すか。
|
||||
モーション - w (単語)や $ (行末)などの類で、テキストの何に対して働きか
|
||||
けるか。
|
||||
[数値] - そのコマンドを何回繰り返すか。
|
||||
モーション - w (単語)や e (単語末尾)、$ (行末)などの類で、テキストの
|
||||
何に対して働きかけるか。
|
||||
|
||||
6. 行の先頭に移動するにはゼロを使用します: 0
|
||||
7. 行の先頭に移動するにはゼロを使用します: 0
|
||||
|
||||
8. 前回の動作を取り消す: u (小文字 u)
|
||||
行全体の変更を取り消す: U (大文字 U)
|
||||
取り消しの取り消し: CTRL-R
|
||||
|
||||
7. 前回の動作を取消す: u (小文字 u)
|
||||
行全体の変更を取消す: U (大文字 U)
|
||||
取消しの取消し: CTRL-R
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 3.1: 貼り付けコマンド
|
||||
|
||||
|
||||
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします **
|
||||
** 最後に削除された行をカーソルの後に貼り付けるには p をタイプします。 **
|
||||
|
||||
1. 以下の段落の最初の行にカーソルを移動しましょう。
|
||||
1. ---> と示された以下の最初の行にカーソルを移動しましょう。
|
||||
|
||||
2. dd とタイプして行を削除し、Vim のバッファに格納しましょう。
|
||||
2. dd とタイプして行を削除し、Vim のレジスタに格納しましょう。
|
||||
|
||||
3. 削除した行が本来あるべき位置の上の行まで、カーソルを移動させましょう。
|
||||
3. 削除した行が本来あるべき位置の上の行である c) 行まで、カーソルを移動させ
|
||||
ましょう。
|
||||
|
||||
4. ノーマルモードで p をタイプして格納した行を画面に戻します。
|
||||
4. ノーマルモードで p をタイプして格納した行をカーソルの下に戻します。
|
||||
|
||||
5. 順番が正しくなる様にステップ 2 から 4 を繰り返しましょう。
|
||||
|
||||
d) 貴方も学ぶことができる?
|
||||
b) スミレは青い、
|
||||
c) 知恵とは学ぶもの、
|
||||
a) バラは赤い、
|
||||
---> d) 貴方も学ぶことができる?
|
||||
---> b) スミレは青い、
|
||||
---> c) 知恵とは学ぶもの、
|
||||
---> a) バラは赤い、
|
||||
|
||||
|
||||
|
||||
@@ -393,7 +395,7 @@ NOTE: オペレータ d とモーションの間にカウントを使った場
|
||||
レッスン 3.2: 置き換えコマンド
|
||||
|
||||
|
||||
** カーソルの下の文字を置き換えるには r をタイプします **
|
||||
** カーソルの下の文字を x に置き換えるには rx をタイプします。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
@@ -416,38 +418,38 @@ NOTE: 実際に試しましょう。決して覚えるだけにはしないこ
|
||||
レッスン 3.3: 変更コマンド
|
||||
|
||||
|
||||
** 単語の一部、もしくは全体を変更するには cw とタイプします **
|
||||
** 単語の末尾までを変更するには ce とタイプします。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
2. lubw の u の位置にカーソルを移動しましょう。
|
||||
|
||||
3. cw とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
|
||||
3. ce とタイプし、正しい単語をタイプしましょう(この場合 'ine' とタイプ)。
|
||||
|
||||
4. 次の間違い(変更すべき文字の先頭)に移動するために <ESC> をタイプします。
|
||||
4. <ESC> をタイプしてから次の間違い(変更すべき文字の先頭)に移動します。
|
||||
|
||||
5. 最初の行が次の行の様になるまでステップ 3 と 4 を繰り返します。
|
||||
|
||||
---> This lubw has a few wptfd that mrrf changing usf the change operator.
|
||||
---> This line has a few words that need changing using the change operator.
|
||||
|
||||
cw は単語を変更するだけでなく、挿入も行えることに注意しましょう。
|
||||
|
||||
ce は単語を削除した後、挿入モードに入ることに注意しましょう。
|
||||
cc は同じことを行全体に対して行います。
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 3.4: c を使用したその他の変更
|
||||
|
||||
|
||||
** 変更コマンドは、削除コマンドと同じ様にオブジェクトを使用します **
|
||||
** 変更オペレータは、削除と同じ様にモーションを使用します。 **
|
||||
|
||||
1. 変更コマンドは、削除コマンドと同じような動作をします。その形式は
|
||||
1. 変更オペレータは、削除と同じような動作をします。その形式は
|
||||
|
||||
c [数値] モーション
|
||||
|
||||
2. オブジェクトも同じで、w は単語、 $ は行末などといったものです。
|
||||
2. モーションも同じで、w は単語、 $ は行末などといったものです。
|
||||
|
||||
3. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
3. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
4. 最初の間違いへカーソルを移動しましょう。
|
||||
|
||||
@@ -470,7 +472,7 @@ NOTE: タイプ中の間違いはバックスペースキーを使って直す
|
||||
文字をタイプします。
|
||||
|
||||
3. 変更コマンドではカーソル位置から特定のモーションで指定される終端までを変
|
||||
更することが可能です。例えば cw ならばカーソル位置から単語の終わりまで、
|
||||
更することが可能です。例えば ce ならばカーソル位置から単語の終わりまで、
|
||||
c$ ならば行の終わりまでを変更します。
|
||||
|
||||
4. 変更コマンドの形式は
|
||||
@@ -485,7 +487,7 @@ NOTE: タイプ中の間違いはバックスペースキーを使って直す
|
||||
レッスン 4.1: 位置とファイルの情報
|
||||
|
||||
** ファイル内での位置とファイルの状態を表示するには CTRL-G をタイプします。
|
||||
ファイル内のある行に移動するには G をタイプします **
|
||||
ファイル内のある行に移動するには G をタイプします。 **
|
||||
|
||||
NOTE: ステップを実行する前に、このレッスン全てに目を通しましょう!!
|
||||
|
||||
@@ -496,7 +498,7 @@ NOTE: タイプ中の間違いはバックスペースキーを使って直す
|
||||
NOTE: 画面の右下隅にカーソルの位置が表示されているかもしれません。これは
|
||||
'ruler' オプション(:help 'ruler' を参照)を設定することで表示されます。
|
||||
|
||||
2. 最下行に移動するために G をタイプしましょう。
|
||||
2. ファイルの最下行に移動するために G をタイプしましょう。
|
||||
ファイルの先頭に移動するには gg とタイプしましょう。
|
||||
|
||||
3. 先ほどの行の番号をタイプし G をタイプしましょう。最初に CTRL-G を押した行
|
||||
@@ -508,19 +510,19 @@ NOTE: 画面の右下隅にカーソルの位置が表示されているかも
|
||||
レッスン 4.2: 検索コマンド
|
||||
|
||||
|
||||
** 語句を検索するには / と、前方検索する語句をタイプします。**
|
||||
** 語句を検索するには / と、前方検索する語句をタイプします。 **
|
||||
|
||||
1. ノーマルモードで / という文字をタイプします。画面一番下に : コマンドと
|
||||
同じ様に / が現れることに気づくでしょう。
|
||||
|
||||
2. では、'errroor' <ENTER> とタイプしましょう。これが検索したい単語です。
|
||||
|
||||
3. 同じ語をもう一度検索するときは 単に n をタイプします。
|
||||
3. 同じ語句をもう一度検索するときは 単に n をタイプします。
|
||||
逆方向に語句を検索するときは N をタイプします。
|
||||
|
||||
4. 逆方向に語句を検索する場合は、/ の代わりに ? コマンドを使用します。
|
||||
|
||||
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら o 文字タイプ)をタイプし
|
||||
5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら文字 o をタイプ)をタイプし
|
||||
ます。さらに戻るにはこれを繰り返します。CTRL-I は前方向です。
|
||||
|
||||
---> "errroor" は error とスペルが違います; errroor はいわゆる error です。
|
||||
@@ -531,7 +533,7 @@ NOTE: 検索がファイルの終わりに達すると、オプション 'wrapsc
|
||||
レッスン 4.3: 対応する括弧を検索
|
||||
|
||||
|
||||
** 対応する ),] や } を検索するには % をタイプします **
|
||||
** 対応する ),] や } を検索するには % をタイプします。 **
|
||||
|
||||
1. 下の ---> で示された行で (,[ か { のどれかにカーソルを移動しましょう。
|
||||
|
||||
@@ -554,7 +556,7 @@ NOTE: この機能は括弧が一致していないプログラムをデバッ
|
||||
レッスン 4.4: 間違いを変更する方法
|
||||
|
||||
|
||||
** 'old' を 'new' に置換するには :s/old/new/g とタイプします **
|
||||
** 'old' を 'new' に置換するには :s/old/new/g とタイプします。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動しましょう。
|
||||
|
||||
@@ -567,9 +569,8 @@ NOTE: この機能は括弧が一致していないプログラムをデバッ
|
||||
|
||||
---> thee best time to see thee flowers is in thee spring.
|
||||
|
||||
4. 複数行から見つかる文字を変更するには
|
||||
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定しま
|
||||
す。
|
||||
4. 複数行から見つかる文字の全ての箇所を変更するには
|
||||
:#,#s/old/new/g #,# には置き換える範囲の開始と終了の行番号を指定する。
|
||||
:%s/old/new/g ファイル全体で見つかるものに対して変更する。
|
||||
:%s/old/new/gc ファイル全体で見つかるものに対して、1つ1つ確認をとりな
|
||||
がら変更する。
|
||||
@@ -593,7 +594,7 @@ NOTE: この機能は括弧が一致していないプログラムをデバッ
|
||||
|
||||
4. 現在行の最初の old を new に置換する。 :s/old/new
|
||||
現在行の全ての old を new に置換する。 :s/old/new/g
|
||||
2つの # 間で語句を置換する。 :#,#s/old/new/g
|
||||
2つの # 行の間で語句を置換する。 :#,#s/old/new/g
|
||||
ファイルの中の全ての検索語句を置換する。 :%s/old/new/g
|
||||
'c' を加えると置換の度に確認を求める。 :%s/old/new/gc
|
||||
|
||||
@@ -601,10 +602,10 @@ NOTE: この機能は括弧が一致していないプログラムをデバッ
|
||||
レッスン 5.1: 外部コマンドを実行する方法
|
||||
|
||||
|
||||
** :! の後に実行する外部コマンドをタイプします **
|
||||
** :! の後に実行する外部コマンドをタイプします。 **
|
||||
|
||||
1. 画面の最下部にカーソルが移動するよう、慣れ親しんだ : をタイプしましょう。
|
||||
これでコマンドがタイプできる様になります。
|
||||
これでコマンドライン命令がタイプできる様になります。
|
||||
|
||||
2. ここで ! という文字(感嘆符)をタイプしましょう。
|
||||
これで外部シェルコマンドが実行できる様になります。
|
||||
@@ -624,7 +625,7 @@ NOTE: 全ての : コマンドは <ENTER> を押して終了しなければな
|
||||
レッスン 5.2: その他のファイルへ書き込み
|
||||
|
||||
|
||||
** ファイルへ変更を保存するには :w ファイル名 とタイプします **
|
||||
** ファイルへ変更を保存するには :w ファイル名 とタイプします。 **
|
||||
|
||||
1. ディレクトリの一覧を得るために :!dir もしくは :!ls とタイプしましょう。
|
||||
このあと <ENTER> を押すのは既にご存知ですね。
|
||||
@@ -634,7 +635,7 @@ NOTE: 全ての : コマンドは <ENTER> を押して終了しなければな
|
||||
3. では :w TEST とタイプしましょう (TEST は、選んだファイル名です)。
|
||||
|
||||
4. これによりファイル全体が TEST という名前で保存されます。
|
||||
もう一度 :!dir もしくは :!ls とタイプして確認してみましょう。
|
||||
もう一度 :!dir もしくは :!ls とタイプしてディレクトリを確認してみましょう。
|
||||
|
||||
NOTE: ここで Vim を終了し、ファイル名 TEST と共に起動すると、保存した時の
|
||||
チュートリアルの複製ができ上がるはずです。
|
||||
@@ -647,7 +648,7 @@ NOTE: ここで Vim を終了し、ファイル名 TEST と共に起動すると
|
||||
レッスン 5.3: 選択した書き込み
|
||||
|
||||
|
||||
** ファイルの位置を保存するには、v モーションと :w FILENAME をタイプします。 **
|
||||
** ファイルの一部を保存するには、v モーションと :w FILENAME をタイプします。 **
|
||||
|
||||
1. この行にカーソルを移動します。
|
||||
|
||||
@@ -660,20 +661,20 @@ NOTE: ここで Vim を終了し、ファイル名 TEST と共に起動すると
|
||||
<ENTER> を押す前に :'<,'>w TEST となっていることを確認して下さい。
|
||||
|
||||
5. Vim は TEST というファイルに選択された行を書き込むでしょう。
|
||||
!dir もしくは !ls でそれを確認します。
|
||||
:!dir もしくは :!ls でそれを確認します。
|
||||
それは削除しないでおいて下さい。次のレッスンで使用します。
|
||||
|
||||
NOTE: v を押すと、Visual 選択が始まります。カーソルを動かすことで、選択範囲を
|
||||
大きくも小さくもできます。さらに、その選択範囲に対してオペレータを適用
|
||||
きます。例えば d はテキストを削除します。
|
||||
できます。例えば d はテキストを削除します。
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 5.4: ファイルの取込と合併
|
||||
|
||||
|
||||
** ファイルの中身を挿入するには :r ファイル名 とタイプします **
|
||||
** ファイルの中身を挿入するには :r ファイル名 とタイプします。 **
|
||||
|
||||
1. カーソルを以下の行に合わせます。
|
||||
1. カーソルをこの行のすぐ上に合わせます。
|
||||
|
||||
NOTE: ステップ 2 の実行後、レッスン 5.3 のテキストが現れます。下に下がってこ
|
||||
のレッスンに移動しましょう。
|
||||
@@ -682,19 +683,18 @@ NOTE: ステップ 2 の実行後、レッスン 5.3 のテキストが現れ
|
||||
ここでいう TEST は使うファイルの名前のことです。
|
||||
読み込まれたファイルは、カーソル行の下にあります。
|
||||
|
||||
3. 取込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
|
||||
3. 取り込んだファイルを確認してみましょう。カーソルを戻すと、レッスン5.3 の
|
||||
オリジナルとファイルによるものの2つがあることがわかります。
|
||||
|
||||
NOTE: 外部コマンドの出力を読み込むことも出来ます。例えば、
|
||||
NOTE: 外部コマンドの出力を読み込むこともできます。例えば、
|
||||
:r !ls は ls コマンドの出力をカーソル以下に読み込みます。
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 5 要約
|
||||
|
||||
|
||||
1. :!command によって 外部コマンドを実行します。
|
||||
1. :!command によって 外部コマンドを実行する。
|
||||
|
||||
よく使う例:
|
||||
(Windows) (Unix)
|
||||
@@ -717,13 +717,14 @@ NOTE: 外部コマンドの出力を読み込むことも出来ます。例え
|
||||
レッスン 6.1: オープンコマンド
|
||||
|
||||
|
||||
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります **
|
||||
** o をタイプすると、カーソルの下の行が開き、挿入モードに入ります。 **
|
||||
|
||||
1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
|
||||
|
||||
2. o (小文字) をタイプして、カーソルの下の行を開き、挿入モードに入ります。
|
||||
|
||||
3. さらに挿入モードを終了する為に <ESC> をタイプします。
|
||||
3. いくつか文字をタイプしてから、挿入モードを終了する為に <ESC> を
|
||||
タイプします。
|
||||
|
||||
---> o をタイプするとカーソルは開いた行へ移動し挿入モードに入ります。
|
||||
|
||||
@@ -735,12 +736,11 @@ NOTE: 外部コマンドの出力を読み込むことも出来ます。例え
|
||||
|
||||
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6.2: 追加コマンド
|
||||
|
||||
|
||||
** カーソルの次の位置からテキストを追加するには a とタイプします **
|
||||
** カーソルの次の位置からテキストを追加するには a とタイプします。 **
|
||||
|
||||
1. カーソルを ---> で示された最初の行へ移動しましょう。
|
||||
|
||||
@@ -763,7 +763,7 @@ NOTE: a, i と A は同じ挿入モードへ移りますが、文字が挿入さ
|
||||
レッスン 6.3: その他の置換方法
|
||||
|
||||
|
||||
** 1文字以上を置き換えるには大文字の R とタイプしましょう **
|
||||
** 1文字以上を置き換えるには大文字の R とタイプしましょう。 **
|
||||
|
||||
1. 以下の ---> と示された行にカーソルを移動します。最初の xxx の先頭に移動し
|
||||
ます。
|
||||
@@ -781,12 +781,11 @@ NOTE: a, i と A は同じ挿入モードへ移りますが、文字が挿入さ
|
||||
NOTE: 置換モードは挿入モードに似ていますが、全てのタイプされた文字は既存の文字
|
||||
を削除します。
|
||||
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6.4: テキストのコピーとペースト
|
||||
|
||||
|
||||
** テキストのコピーにはオペレータ y を、ペーストには p を使います **
|
||||
** テキストのコピーにはオペレータ y を、ペーストには p を使います。 **
|
||||
|
||||
1. ---> と示された行へ移動し、カーソルを "a)" の後に置いておきます。
|
||||
|
||||
@@ -804,12 +803,13 @@ NOTE: 置換モードは挿入モードに似ていますが、全てのタイ
|
||||
---> a) this is the first item.
|
||||
b)
|
||||
|
||||
NOTE: 単語を1つ yank するのに y をオペレータとして yw とすることも出来ます。
|
||||
NOTE: y をオペレータとして使うこともできます。yw は単語を1つ yank します。
|
||||
yy は行を1つ yank し、p でその行を put します。
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6.5: オプションの設定
|
||||
|
||||
|
||||
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します **
|
||||
** 検索や置換の際に大文字/小文字を無視するには、オプションを設定します。 **
|
||||
|
||||
1. 次の様に入力して 'ignore' を検索しましょう: /ignore <ENTER>
|
||||
n を押して何度か検索を繰り返します。
|
||||
@@ -826,7 +826,7 @@ NOTE: 置換モードは挿入モードに似ていますが、全てのタイ
|
||||
6. 大文字小文字の区別を無効にするには次の様に入力します: :set noic
|
||||
|
||||
NOTE: マッチの強調表示をやめるには次の様に入力します: :nohlsearch
|
||||
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、フレーズに \c
|
||||
NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、語句内で \c
|
||||
を使用します: /ignore\c <ENTER>
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 6 要約
|
||||
@@ -835,13 +835,13 @@ NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたい
|
||||
O (大文字) をタイプするとカーソルの上の行で挿入モードになる。
|
||||
|
||||
2. カーソル上の文字の次からテキストを追加するには a とタイプする。
|
||||
行末に自動でテキストを挿入するには大文字 A をタイプする。
|
||||
行末にテキストを挿入するには大文字 A をタイプする。
|
||||
|
||||
3. e コマンドは単語の終端部カーソルを移動する。
|
||||
3. e コマンドは単語の終端にカーソルを移動する。
|
||||
|
||||
4. y オペレータはテキストを yank (コピー)し、p はそれを put (ペースト)する。
|
||||
|
||||
5. 大文字の R をタイプすると置換モードに入り、<ESC>を押すと抜ける。
|
||||
5. 大文字の R をタイプすると置換モードに入り、<ESC> を押すと抜ける。
|
||||
|
||||
6. ":set xxx" とタイプするとオプション "xxx" が設定される。
|
||||
'ic' 'ignorecase' 検索時に大文字小文字の区別しない
|
||||
@@ -849,7 +849,7 @@ NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたい
|
||||
'hls' 'hlsearch' マッチするすべてを強調表示する
|
||||
長い方、短い方、どちらのオプション名でも使用できます。
|
||||
|
||||
7. オプションを無効にするには "no" を付与します: :set noic
|
||||
7. オプションを無効にするには "no" を付与する: :set noic
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
レッスン 7.1: オンラインヘルプコマンド
|
||||
@@ -883,15 +883,15 @@ NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたい
|
||||
使用不可となっています。より多くの特徴を使いはじめるには "vimrc" ファイル
|
||||
を作成します。
|
||||
|
||||
1. "vimrc" ファイルの編集を開始する。これはシステムに依存します。
|
||||
:edit ~/.vimrc UNIX 向け
|
||||
:edit ~/_vimrc Windows 向け
|
||||
1. "vimrc" ファイルの編集を開始します。これはシステムに依存します。
|
||||
:e ~/.vimrc UNIX 向け
|
||||
:e ~/_vimrc Windows 向け
|
||||
|
||||
2. ここでサンプルの "vimrc" を読み込みます。
|
||||
:read $VIMRUNTIME/vimrc_example.vim
|
||||
:r $VIMRUNTIME/vimrc_example.vim
|
||||
|
||||
3. 以下のようにファイルへ書き込みます。
|
||||
:write
|
||||
:w
|
||||
|
||||
次回 Vim を起動すると、色づけ構文が使えるようになるでしょう。
|
||||
この "vimrc" ファイルへ、お好みの設定を追加することができます。
|
||||
@@ -907,7 +907,7 @@ NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたい
|
||||
|
||||
2. 現在のディレクトリに在るファイルを :!ls か :!dir で確認します。
|
||||
|
||||
3. コマンドの開始をタイプします: :e
|
||||
3. コマンドの先頭をタイプします: :e
|
||||
|
||||
4. CTRL-D を押すと Vim は "e" から始まるコマンドの一覧を表示します。
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
# Translators: This is the Application Name used in the Vim desktop file
|
||||
Name[de]=Vim
|
||||
Name[eo]=Vim
|
||||
Name[fi]=Vim
|
||||
Name[fr]=Vim
|
||||
Name[it]=Vim
|
||||
Name[ru]=Vim
|
||||
@@ -13,6 +14,7 @@ Name=Vim
|
||||
# Translators: This is the Generic Application Name used in the Vim desktop file
|
||||
GenericName[de]=Texteditor
|
||||
GenericName[eo]=Tekstoredaktilo
|
||||
GenericName[fi]=Tekstinmuokkain
|
||||
GenericName[fr]=Éditeur de texte
|
||||
GenericName[it]=Editor di testi
|
||||
GenericName[ja]=テキストエディタ
|
||||
@@ -23,6 +25,7 @@ GenericName=Text Editor
|
||||
# Translators: This is the comment used in the Vim desktop file
|
||||
Comment[de]=Textdateien bearbeiten
|
||||
Comment[eo]=Redakti tekstajn dosierojn
|
||||
Comment[fi]=Muokkaa tekstitiedostoja
|
||||
Comment[fr]=Éditer des fichiers texte
|
||||
Comment[it]=Edita file di testo
|
||||
Comment[ja]=テキストファイルを編集します
|
||||
@@ -54,7 +57,6 @@ Comment[es]=Edita archivos de texto
|
||||
Comment[et]=Redigeeri tekstifaile
|
||||
Comment[eu]=Editatu testu-fitxategiak
|
||||
Comment[fa]=ویرایش پروندههای متنی
|
||||
Comment[fi]=Muokkaa tekstitiedostoja
|
||||
Comment[ga]=Eagar comhad Téacs
|
||||
Comment[gu]=લખાણ ફાઇલોમાં ફેરફાર કરો
|
||||
Comment[he]=ערוך קבצי טקסט
|
||||
@@ -103,6 +105,7 @@ Type=Application
|
||||
# Translators: Search terms to find this application. Do NOT change the semicolons! The list MUST also end with a semicolon!
|
||||
Keywords[de]=Text;Editor;
|
||||
Keywords[eo]=Teksto;redaktilo;
|
||||
Keywords[fi]=Teksti;muokkain;editori;
|
||||
Keywords[fr]=Texte;éditeur;
|
||||
Keywords[it]=Testo;editor;
|
||||
Keywords[ja]=テキスト;エディタ;
|
||||
|
||||
@@ -44,12 +44,6 @@
|
||||
#include <shlobj.h>
|
||||
#include <wchar.h>
|
||||
|
||||
/* Accommodate old versions of VC that don't have a modern Platform SDK */
|
||||
#if (defined(_MSC_VER) && _MSC_VER < 1300) || !defined(MAXULONG_PTR)
|
||||
# undef UINT_PTR
|
||||
# define UINT_PTR UINT
|
||||
#endif
|
||||
|
||||
#define ResultFromShort(i) ResultFromScode(MAKE_SCODE(SEVERITY_SUCCESS, 0, (USHORT)(i)))
|
||||
|
||||
// Initialize GUIDs (should be done only and at-least once per DLL/EXE)
|
||||
|
||||
@@ -155,83 +155,8 @@ OLDER VERSIONS
|
||||
The minimal supported version is Windows XP. Building with older compilers
|
||||
might still work, but these instructions might be outdated.
|
||||
|
||||
If you need the executable to run on Windows 98 or ME, use the 2003 one
|
||||
|msvc-2003-toolkit| or |msvc-2005-express|, and use the source code before
|
||||
8.0.0029.
|
||||
|
||||
Visual C++ Toolkit 2003 *msvc-2003-toolkit*
|
||||
-----------------------
|
||||
|
||||
NOTE: this most likely does not work
|
||||
|
||||
You could download the Microsoft Visual C++ Toolkit 2003 from
|
||||
http://msdn.microsoft.com/visualc/vctoolkit2003/
|
||||
Unfortunately this URL is no longer valid. Unofficial downloads appear to be
|
||||
available from links mentioned on these pages (use at your own risk):
|
||||
http://www.filewatcher.com/m/VCToolkitSetup.exe.32952488.0.0.html
|
||||
http://feargame.net/wiki/index.php?title=Building_Source_with_the_VC2003_Toolkit
|
||||
|
||||
This contains the command-line tools (compiler, linker, CRT headers,
|
||||
and libraries) for Visual Studio .NET 2003, but not the Visual Studio IDE.
|
||||
To compile and debug Vim with the VC2003 Toolkit, you will also need
|
||||
|ms-platform-sdk|, |dotnet-1.1-redist|, |dotnet-1.1-sdk|,
|
||||
and |windbg-download|.
|
||||
|
||||
It's easier to download Visual C++ 2008 Express Edition, |msvc-2008-express|,
|
||||
which is freely available in perpetuity.
|
||||
|
||||
The free Code::Blocks IDE works with the VC2003 Toolkit, as described at
|
||||
http://wiki.codeblocks.org/index.php?title=Integrating_Microsoft_Visual_Toolkit_2003_with_Code::Blocks_IDE
|
||||
(This site also takes you through configuring a number of other
|
||||
free C compilers for Win32.)
|
||||
|
||||
To compile Vim using the VC2003 Toolkit and Make_mvc.mak, you must first
|
||||
execute the following commands in a cmd.exe window (the msvcsetup.bat batch
|
||||
file can be used):
|
||||
|
||||
set PATH=%SystemRoot%\Microsoft.NET\Framework\v1.1.4322;%PATH%
|
||||
call "%VCToolkitInstallDir%vcvars32.bat"
|
||||
set MSVCVer=7.1
|
||||
call "%ProgramFiles%\Microsoft Platform SDK\SetEnv.Cmd"
|
||||
set LIB=%ProgramFiles%\Microsoft Visual Studio .NET 2003\Vc7\lib;%LIB%
|
||||
|
||||
Now you can build Vim with Make_mvc.mak.
|
||||
|
||||
|
||||
Getting the Windows Platform SDK *ms-platform-sdk*
|
||||
|
||||
You will also need a copy of the Windows Platform SDK. Specifically, you need
|
||||
the Windows Core SDK subset of the Platform SDK, which contains the Windows
|
||||
headers and libraries. You need to search for it, Microsoft keeps changing
|
||||
the URL.
|
||||
|
||||
|
||||
Getting the .NET Framework 1.1 Runtime *dotnet-1.1-redist*
|
||||
|
||||
You need the .NET Framework 1.1 Redistributable Package from
|
||||
http://www.microsoft.com/downloads/details.aspx?familyid=262d25e3-f589-4842-8157-034d1e7cf3a3
|
||||
or from Windows Update:
|
||||
http://windowsupdate.microsoft.com/
|
||||
This is needed to install |dotnet-1.1-sdk|. It also contains cvtres.exe,
|
||||
which is needed to link Vim.
|
||||
|
||||
|
||||
Getting the .NET Framework 1.1 SDK *dotnet-1.1-sdk*
|
||||
|
||||
You need the .NET Framework 1.1 SDK from
|
||||
http://www.microsoft.com/downloads/details.aspx?familyid=9b3a2ca6-3647-4070-9f41-a333c6b9181d
|
||||
This contains some additional libraries needed to compile Vim,
|
||||
such as msvcrt.lib. You must install |dotnet-1.1-redist| before
|
||||
installing the .NET 1.1 SDK.
|
||||
|
||||
|
||||
Getting the WinDbg debugger *windbg-download*
|
||||
|
||||
The Debugging Tools for Windows can be downloaded from
|
||||
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
|
||||
This includes the WinDbg debugger, which you will want if you ever need
|
||||
to debug Vim itself. An earlier version of the Debugging Tools
|
||||
is also available through the Platform SDK, |ms-platform-sdk|.
|
||||
If you need the executable to run on Windows 98 or ME, use the 2005 one
|
||||
|msvc-2005-express|, and use the source code before 8.0.0029.
|
||||
|
||||
|
||||
Visual C++ 2005 Express Edition *msvc-2005-express*
|
||||
|
||||
@@ -466,6 +466,8 @@ RUBY_PLATFORM = i586-mswin32
|
||||
RUBY_PLATFORM = i386-mingw32
|
||||
else ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_API_VER_LONG)/x64-mingw32),)
|
||||
RUBY_PLATFORM = x64-mingw32
|
||||
else ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_API_VER_LONG)/x64-mingw-ucrt),)
|
||||
RUBY_PLATFORM = x64-mingw-ucrt
|
||||
else
|
||||
RUBY_PLATFORM = i386-mswin32
|
||||
endif
|
||||
@@ -479,7 +481,9 @@ RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
|
||||
# Base name of msvcrXX.dll which is used by ruby's dll.
|
||||
RUBY_MSVCRT_NAME = msvcrt
|
||||
endif
|
||||
ifeq ($(ARCH),x86-64)
|
||||
ifeq ($(RUBY_PLATFORM),x64-mingw-ucrt)
|
||||
RUBY_INSTALL_NAME = x64-ucrt-ruby$(RUBY_API_VER)
|
||||
else ifeq ($(ARCH),x86-64)
|
||||
RUBY_INSTALL_NAME = x64-$(RUBY_MSVCRT_NAME)-ruby$(RUBY_API_VER)
|
||||
else
|
||||
RUBY_INSTALL_NAME = $(RUBY_MSVCRT_NAME)-ruby$(RUBY_API_VER)
|
||||
@@ -668,7 +672,14 @@ DEFINES += -DFEAT_DIRECTX_COLOR_EMOJI
|
||||
endif
|
||||
|
||||
ifeq ($(SODIUM),yes)
|
||||
ifndef DYNAMIC_SODIUM
|
||||
DYNAMIC_SODIUM=yes
|
||||
endif
|
||||
ifeq ($(DYNAMIC_SODIUM),yes)
|
||||
DEFINES += -DDYNAMIC_SODIUM
|
||||
else
|
||||
SODIUMLIB = -lsodium
|
||||
endif
|
||||
endif
|
||||
|
||||
# Only allow XPM for a GUI build.
|
||||
@@ -1138,7 +1149,17 @@ endif
|
||||
# If this fails because you don't have Vim yet, first build and install Vim
|
||||
# without changes.
|
||||
cmdidxs: ex_cmds.h
|
||||
vim --clean -X --not-a-term -u create_cmdidxs.vim
|
||||
vim --clean -N -X --not-a-term -u create_cmdidxs.vim -c quit
|
||||
|
||||
# Run vim script to generate the normal/visual mode command lookup table.
|
||||
# This only needs to be run when a new normal/visual mode command has been
|
||||
# added. If this fails because you don't have Vim yet:
|
||||
# - change nv_cmds[] in nv_cmds.h to add the new normal/visual mode command.
|
||||
# - run "make nvcmdidxs" to generate nv_cmdidxs.h
|
||||
nvcmdidxs: nv_cmds.h
|
||||
$(CC) $(CFLAGS) -o create_nvcmdidxs.exe create_nvcmdidxs.c $(LIB)
|
||||
vim --clean -N -X --not-a-term -u create_nvcmdidxs.vim -c quit
|
||||
-$(DEL) create_nvcmdidxs.exe
|
||||
|
||||
###########################################################################
|
||||
INCL = vim.h alloc.h ascii.h ex_cmds.h feature.h errors.h globals.h \
|
||||
@@ -1202,6 +1223,8 @@ $(OUTDIR)/hardcopy.o: hardcopy.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/misc1.o: misc1.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/normal.o: normal.c $(INCL) nv_cmdidxs.h nv_cmds.h
|
||||
|
||||
$(OUTDIR)/netbeans.o: netbeans.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/version.o: version.c $(INCL) version.h
|
||||
@@ -1237,7 +1260,7 @@ $(OUTDIR)/gui_beval.o: gui_beval.c $(INCL) $(GUI_INCL)
|
||||
$(OUTDIR)/gui_w32.o: gui_w32.c $(INCL) $(GUI_INCL) version.h
|
||||
$(CC) -c $(CFLAGS) gui_w32.c -o $@
|
||||
|
||||
$(OUTDIR)/if_cscope.o: if_cscope.c $(INCL) if_cscope.h
|
||||
$(OUTDIR)/if_cscope.o: if_cscope.c $(INCL)
|
||||
$(CC) -c $(CFLAGS) if_cscope.c -o $@
|
||||
|
||||
$(OUTDIR)/if_mzsch.o: if_mzsch.c $(INCL) $(MZSCHEME_INCL) $(MZ_EXTRA_DEP)
|
||||
|
||||
262
src/Make_mvc.mak
262
src/Make_mvc.mak
@@ -34,7 +34,6 @@
|
||||
# IME support: IME=yes (default is yes)
|
||||
# DYNAMIC_IME=[yes or no] (to load the imm32.dll dynamically, default
|
||||
# is yes)
|
||||
# Global IME support: GIME=yes (requires GUI=yes)
|
||||
#
|
||||
# Terminal support: TERMINAL=yes (default is yes if FEATURES is HUGE)
|
||||
# Will also enable CHANNEL
|
||||
@@ -42,10 +41,10 @@
|
||||
# Sound support: SOUND=yes (default is yes)
|
||||
#
|
||||
# Sodium support: SODIUM=[Path to Sodium directory]
|
||||
# Dynamic built with libsodium
|
||||
# You need to install the msvc package from
|
||||
# https://download.libsodium.org/libsodium/releases/
|
||||
# and package the libsodium.dll with Vim
|
||||
# DYNAMIC_SODIUM=yes (to load the Sodium DLL dynamically)
|
||||
# You need to install the msvc package from
|
||||
# https://download.libsodium.org/libsodium/releases/
|
||||
# and package the libsodium.dll with Vim
|
||||
#
|
||||
#
|
||||
# DLL support (EXPERIMENTAL): VIMDLL=yes (default is no)
|
||||
@@ -253,7 +252,7 @@ NODEBUG = 1
|
||||
MAKEFLAGS_GVIMEXT = DEBUG=yes
|
||||
!endif
|
||||
|
||||
link = link
|
||||
LINK = link
|
||||
|
||||
# Check VC version.
|
||||
!if [echo MSVCVER=_MSC_VER> msvcver.c && $(CC) /EP msvcver.c > msvcver.~ 2> nul]
|
||||
@@ -275,17 +274,15 @@ MSVC_MAJOR = ($(MSVCVER) / 100 - 5)
|
||||
MSVCRT_VER = ($(MSVCVER) / 100 * 10 - 50)
|
||||
!endif
|
||||
|
||||
# Calculate MSVC_FULL for Visual C++ 8 and up.
|
||||
!if $(MSVC_MAJOR) >= 8
|
||||
! if [echo MSVC_FULL=_MSC_FULL_VER> msvcfullver.c && $(CC) /EP msvcfullver.c > msvcfullver.~ 2> nul]
|
||||
! message *** ERROR
|
||||
! message Cannot run Visual C to determine its version. Make sure cl.exe is in your PATH.
|
||||
! message This can usually be done by running "vcvarsall.bat", located in the bin directory where Visual Studio was installed.
|
||||
! error Make aborted.
|
||||
! else
|
||||
! include msvcfullver.~
|
||||
! if [del msvcfullver.c msvcfullver.~]
|
||||
! endif
|
||||
# Calculate MSVC_FULL.
|
||||
!if [echo MSVC_FULL=_MSC_FULL_VER> msvcfullver.c && $(CC) /EP msvcfullver.c > msvcfullver.~ 2> nul]
|
||||
! message *** ERROR
|
||||
! message Cannot run Visual C to determine its version. Make sure cl.exe is in your PATH.
|
||||
! message This can usually be done by running "vcvarsall.bat", located in the bin directory where Visual Studio was installed.
|
||||
! error Make aborted.
|
||||
!else
|
||||
! include msvcfullver.~
|
||||
! if [del msvcfullver.c msvcfullver.~]
|
||||
! endif
|
||||
!endif
|
||||
|
||||
@@ -306,18 +303,11 @@ MSVCRT_NAME = msvcr$(MSVCRT_VER)
|
||||
MSVCRT_NAME = vcruntime$(MSVCRT_VER)
|
||||
!endif
|
||||
|
||||
!if $(MSVC_MAJOR) == 6
|
||||
CPU = ix86
|
||||
!endif
|
||||
|
||||
### Set the default $(WINVER) to make it work with VC++7.0 (VS.NET)
|
||||
!ifndef WINVER
|
||||
WINVER = 0x0501
|
||||
!endif
|
||||
|
||||
# Flag to turn on Win64 compatibility warnings for VC7.x and VC8.
|
||||
WP64CHECK = /Wp64
|
||||
|
||||
# Use multiprocess build
|
||||
USE_MP = yes
|
||||
|
||||
@@ -384,6 +374,9 @@ SOUND = no
|
||||
!ifndef SODIUM
|
||||
SODIUM = no
|
||||
!endif
|
||||
!ifndef DYNAMIC_SODIUM
|
||||
DYNAMIC_SODIUM = yes
|
||||
!endif
|
||||
|
||||
!if "$(SODIUM)" != "no"
|
||||
! if "$(CPU)" == "AMD64"
|
||||
@@ -397,8 +390,13 @@ SODIUM = no
|
||||
|
||||
!if "$(SODIUM)" != "no"
|
||||
SOD_INC = /I "$(SODIUM)\include"
|
||||
! if "$(DYNAMIC_SODIUM)" == "yes"
|
||||
SOD_DEFS = -DHAVE_SODIUM -DDYNAMIC_SODIUM
|
||||
SOD_LIB =
|
||||
! else
|
||||
SOD_DEFS = -DHAVE_SODIUM
|
||||
SOD_LIB = $(SOD_LIB)\libsodium.lib
|
||||
! endif
|
||||
!endif
|
||||
|
||||
!ifndef NETBEANS
|
||||
@@ -492,23 +490,14 @@ CHANNEL_DEFS = $(CHANNEL_DEFS) -DHAVE_INET_NTOP
|
||||
NETBEANS_LIB = WSock32.lib Ws2_32.lib
|
||||
!endif
|
||||
|
||||
# Set which version of the CRT to use
|
||||
!if defined(USE_MSVCRT)
|
||||
# CVARS = $(cvarsdll)
|
||||
# !elseif defined(MULTITHREADED)
|
||||
# CVARS = $(cvarsmt)
|
||||
!else
|
||||
# CVARS = $(cvars)
|
||||
# CVARS = $(cvarsmt)
|
||||
!endif
|
||||
|
||||
# need advapi32.lib for GetUserName()
|
||||
# need shell32.lib for ExtractIcon()
|
||||
# need netapi32.lib for NetUserEnum()
|
||||
# gdi32.lib and comdlg32.lib for printing support
|
||||
# ole32.lib and uuid.lib are needed for FEAT_SHORTCUT
|
||||
CON_LIB = oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib \
|
||||
comdlg32.lib ole32.lib netapi32.lib uuid.lib /machine:$(CPU)
|
||||
comdlg32.lib ole32.lib netapi32.lib uuid.lib user32.lib \
|
||||
/machine:$(CPU)
|
||||
!if "$(DELAYLOAD)" == "yes"
|
||||
CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
|
||||
!endif
|
||||
@@ -518,7 +507,7 @@ CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
|
||||
#VIMRCLOC = somewhere
|
||||
#VIMRUNTIMEDIR = somewhere
|
||||
|
||||
CFLAGS = -c /W3 /GF /nologo $(CVARS) -I. -Iproto -DHAVE_PATHDEF -DWIN32 \
|
||||
CFLAGS = -c /W3 /GF /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 \
|
||||
$(CSCOPE_DEFS) $(TERM_DEFS) $(SOUND_DEFS) $(NETBEANS_DEFS) $(CHANNEL_DEFS) \
|
||||
$(NBDEBUG_DEFS) $(XPM_DEFS) $(SOD_DEFS) $(SOD_INC) \
|
||||
$(DEFINES) -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER)
|
||||
@@ -552,68 +541,50 @@ CPUNR = sse2
|
||||
!endif
|
||||
|
||||
# Convert processor ID to MVC-compatible number
|
||||
!if $(MSVC_MAJOR) < 8
|
||||
! if "$(CPUNR)" == "i586"
|
||||
CPUARG = /G5
|
||||
! elseif "$(CPUNR)" == "i686"
|
||||
CPUARG = /G6
|
||||
! elseif "$(CPUNR)" == "sse"
|
||||
CPUARG = /G6 /arch:SSE
|
||||
! elseif "$(CPUNR)" == "sse2"
|
||||
CPUARG = /G7 /arch:SSE2
|
||||
! elseif "$(CPUNR)" == "avx" || "$(CPUNR)" == "avx2"
|
||||
! message AVX/AVX2 Instruction Sets are not supported by Visual C++ v$(MSVC_MAJOR)
|
||||
! message Falling back to SSE2
|
||||
CPUARG = /G7 /arch:SSE2
|
||||
! elseif "$(CPUNR)" == "any"
|
||||
CPUARG =
|
||||
! endif
|
||||
!else
|
||||
# IA32/SSE/SSE2 are only supported on x86
|
||||
! if "$(ASSEMBLY_ARCHITECTURE)" == "i386" && ("$(CPUNR)" == "i586" || "$(CPUNR)" == "i686" || "$(CPUNR)" == "any")
|
||||
!if "$(ASSEMBLY_ARCHITECTURE)" == "i386" && ("$(CPUNR)" == "i586" || "$(CPUNR)" == "i686" || "$(CPUNR)" == "any")
|
||||
# VC<11 generates fp87 code by default
|
||||
! if $(MSVC_MAJOR) < 11
|
||||
! if $(MSVC_MAJOR) < 11
|
||||
CPUARG =
|
||||
# VC>=11 needs explicit instructions to generate fp87 code
|
||||
! else
|
||||
! else
|
||||
CPUARG = /arch:IA32
|
||||
! endif
|
||||
! elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse"
|
||||
! endif
|
||||
!elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse"
|
||||
CPUARG = /arch:SSE
|
||||
! elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse2"
|
||||
!elseif "$(ASSEMBLY_ARCHITECTURE)" == "i386" && "$(CPUNR)" == "sse2"
|
||||
CPUARG = /arch:SSE2
|
||||
! elseif "$(CPUNR)" == "avx"
|
||||
!elseif "$(CPUNR)" == "avx"
|
||||
# AVX is only supported by VC 10 and up
|
||||
! if $(MSVC_MAJOR) < 10
|
||||
! message AVX Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)
|
||||
! if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
|
||||
! message Falling back to SSE2
|
||||
! if $(MSVC_MAJOR) < 10
|
||||
! message AVX Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)
|
||||
! if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
|
||||
! message Falling back to SSE2
|
||||
CPUARG = /arch:SSE2
|
||||
! else
|
||||
CPUARG =
|
||||
! endif
|
||||
! else
|
||||
CPUARG = /arch:AVX
|
||||
! endif
|
||||
! elseif "$(CPUNR)" == "avx2"
|
||||
# AVX is only supported by VC 10 and up
|
||||
! if $(MSVC_MAJOR) < 10
|
||||
! message AVX2 Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)
|
||||
! if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
|
||||
! message Falling back to SSE2
|
||||
CPUARG = /arch:SSE2
|
||||
! else
|
||||
CPUARG =
|
||||
! endif
|
||||
! endif
|
||||
! else
|
||||
CPUARG = /arch:AVX
|
||||
! endif
|
||||
!elseif "$(CPUNR)" == "avx2"
|
||||
# AVX is only supported by VC 10 and up
|
||||
! if $(MSVC_MAJOR) < 10
|
||||
! message AVX2 Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)
|
||||
! if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
|
||||
! message Falling back to SSE2
|
||||
CPUARG = /arch:SSE2
|
||||
! else
|
||||
CPUARG =
|
||||
! endif
|
||||
# AVX2 is only supported by VC 12U2 and up
|
||||
# 180030501 is the full version number for Visual Studio 2013/VC 12 Update 2
|
||||
! elseif $(MSVC_FULL) < 180030501
|
||||
! message AVX2 Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)-$(MSVC_FULL)
|
||||
! message Falling back to AVX
|
||||
! elseif $(MSVC_FULL) < 180030501
|
||||
! message AVX2 Instruction Set is not supported by Visual C++ v$(MSVC_MAJOR)-$(MSVC_FULL)
|
||||
! message Falling back to AVX
|
||||
CPUARG = /arch:AVX
|
||||
! else
|
||||
! else
|
||||
CPUARG = /arch:AVX2
|
||||
! endif
|
||||
! endif
|
||||
!endif
|
||||
|
||||
@@ -671,6 +642,7 @@ CFLAGS = $(CFLAGS) /fsanitize=address
|
||||
!endif
|
||||
|
||||
!ifdef NODEBUG
|
||||
|
||||
VIM = vim
|
||||
! if "$(OPTIMIZE)" == "SPACE"
|
||||
OPTFLAG = /O1
|
||||
@@ -680,58 +652,48 @@ OPTFLAG = /O2
|
||||
OPTFLAG = /Ox
|
||||
! endif
|
||||
|
||||
! if $(MSVC_MAJOR) >= 8
|
||||
# Use link time code generation if not worried about size
|
||||
! if "$(OPTIMIZE)" != "SPACE"
|
||||
! if "$(OPTIMIZE)" != "SPACE"
|
||||
OPTFLAG = $(OPTFLAG) /GL
|
||||
! endif
|
||||
! endif
|
||||
|
||||
# (/Wp64 is deprecated in VC9 and generates an obnoxious warning.)
|
||||
! if ($(MSVC_MAJOR) == 7) || ($(MSVC_MAJOR) == 8)
|
||||
CFLAGS = $(CFLAGS) $(WP64CHECK)
|
||||
! endif
|
||||
|
||||
CFLAGS = $(CFLAGS) $(OPTFLAG) -DNDEBUG $(CPUARG)
|
||||
RCFLAGS = $(rcflags) $(rcvars) -DNDEBUG
|
||||
RCFLAGS = -DNDEBUG
|
||||
! ifdef USE_MSVCRT
|
||||
CFLAGS = $(CFLAGS) /MD
|
||||
LIBC = msvcrt.lib
|
||||
! else
|
||||
LIBC = libcmt.lib
|
||||
CFLAGS = $(CFLAGS) /Zl /MT
|
||||
LIBC = libcmt.lib
|
||||
! endif
|
||||
|
||||
!else # DEBUG
|
||||
|
||||
VIM = vimd
|
||||
! if ("$(CPU)" == "i386") || ("$(CPU)" == "ix86")
|
||||
DEBUGINFO = /ZI
|
||||
! endif
|
||||
CFLAGS = $(CFLAGS) -D_DEBUG -DDEBUG /Od
|
||||
RCFLAGS = $(rcflags) $(rcvars) -D_DEBUG -DDEBUG
|
||||
# The /fixed:no is needed for Quantify. Assume not 4.? as unsupported in VC4.0.
|
||||
! if $(MSVC_MAJOR) == 4
|
||||
LIBC =
|
||||
! else
|
||||
RCFLAGS = -D_DEBUG -DDEBUG
|
||||
# The /fixed:no is needed for Quantify.
|
||||
LIBC = /fixed:no
|
||||
! endif
|
||||
! ifdef USE_MSVCRT
|
||||
CFLAGS = $(CFLAGS) /MDd
|
||||
LIBC = $(LIBC) msvcrtd.lib
|
||||
! else
|
||||
LIBC = $(LIBC) libcmtd.lib
|
||||
CFLAGS = $(CFLAGS) /Zl /MTd
|
||||
LIBC = $(LIBC) libcmtd.lib
|
||||
! endif
|
||||
|
||||
!endif # DEBUG
|
||||
|
||||
!if "$(CL)" == "/D_USING_V110_SDK71_"
|
||||
RCFLAGS = $(RCFLAGS) /D_USING_V110_SDK71_
|
||||
!endif
|
||||
|
||||
!if $(MSVC_MAJOR) >= 8
|
||||
# Visual Studio 2005 has 'deprecated' many of the standard CRT functions
|
||||
CFLAGS_DEPR = /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE
|
||||
CFLAGS = $(CFLAGS) $(CFLAGS_DEPR)
|
||||
!endif
|
||||
|
||||
!include Make_all.mak
|
||||
!include testdir\Make_all.mak
|
||||
@@ -787,7 +749,7 @@ OBJ = \
|
||||
$(OUTDIR)\hashtab.obj \
|
||||
$(OUTDIR)\help.obj \
|
||||
$(OUTDIR)\highlight.obj \
|
||||
$(OBJDIR)\if_cscope.obj \
|
||||
$(OUTDIR)\if_cscope.obj \
|
||||
$(OUTDIR)\indent.obj \
|
||||
$(OUTDIR)\insexpand.obj \
|
||||
$(OUTDIR)\json.obj \
|
||||
@@ -885,11 +847,6 @@ IME_LIB = imm32.lib
|
||||
! endif
|
||||
!endif
|
||||
|
||||
!if "$(GIME)" == "yes"
|
||||
CFLAGS = $(CFLAGS) -DGLOBAL_IME
|
||||
OBJ = $(OBJ) $(OUTDIR)\dimm_i.obj $(OUTDIR)\glbl_ime.obj
|
||||
!endif
|
||||
|
||||
!if "$(GUI)" == "yes"
|
||||
SUBSYSTEM = windows
|
||||
CFLAGS = $(CFLAGS) -DFEAT_GUI_MSWIN
|
||||
@@ -910,9 +867,7 @@ GUI_OBJ = \
|
||||
$(OUTDIR)\gui_beval.obj \
|
||||
$(OUTDIR)\gui_w32.obj
|
||||
GUI_LIB = \
|
||||
gdi32.lib version.lib $(IME_LIB) \
|
||||
winspool.lib comctl32.lib advapi32.lib shell32.lib netapi32.lib \
|
||||
/machine:$(CPU)
|
||||
version.lib $(IME_LIB) winspool.lib comctl32.lib
|
||||
!else
|
||||
SUBSYSTEM = console
|
||||
CUI_INCL = iscygpty.h
|
||||
@@ -1231,7 +1186,11 @@ RUBY_MSVCRT_NAME = $(MSVCRT_NAME)
|
||||
! if "$(CPU)" == "i386"
|
||||
RUBY_INSTALL_NAME = $(RUBY_MSVCRT_NAME)-ruby$(RUBY_API_VER)
|
||||
! else # CPU
|
||||
! if EXIST($(RUBY)/lib/ruby/$(RUBY_API_VER_LONG)/x64-mingw-ucrt)
|
||||
RUBY_INSTALL_NAME = x64-ucrt-ruby$(RUBY_API_VER)
|
||||
! else
|
||||
RUBY_INSTALL_NAME = x64-$(RUBY_MSVCRT_NAME)-ruby$(RUBY_API_VER)
|
||||
! endif
|
||||
! endif # CPU
|
||||
! endif # RUBY_INSTALL_NAME
|
||||
|
||||
@@ -1305,29 +1264,37 @@ LINK_PDB = /PDB:$(VIM).pdb -debug
|
||||
# CFLAGS with /Fo$(OUTDIR)/
|
||||
CFLAGS_OUTDIR=$(CFLAGS) /Fo$(OUTDIR)/
|
||||
|
||||
# Add /opt:ref to remove unreferenced functions and data even when /DEBUG is
|
||||
# added.
|
||||
conflags = /nologo /opt:ref
|
||||
|
||||
PATHDEF_SRC = $(OUTDIR)\pathdef.c
|
||||
|
||||
!IF "$(MAP)" == "yes"
|
||||
# "/map" is for debugging
|
||||
conflags = $(conflags) /map
|
||||
!ELSEIF "$(MAP)" == "lines"
|
||||
# "/mapinfo:lines" is for debugging, only works for VC6 and later
|
||||
conflags = $(conflags) /map /mapinfo:lines
|
||||
!ENDIF
|
||||
|
||||
LINKARGS1 = $(linkdebug) $(conflags)
|
||||
LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(NODEFAULTLIB) $(LIBC) $(OLE_LIB) user32.lib \
|
||||
LINKARGS1 = /nologo
|
||||
LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(NODEFAULTLIB) $(LIBC) $(OLE_LIB) \
|
||||
$(LUA_LIB) $(MZSCHEME_LIB) $(PERL_LIB) $(PYTHON_LIB) $(PYTHON3_LIB) $(RUBY_LIB) \
|
||||
$(TCL_LIB) $(SOUND_LIB) $(NETBEANS_LIB) $(XPM_LIB) $(SOD_LIB) $(LINK_PDB)
|
||||
|
||||
# Report link time code generation progress if used.
|
||||
!ifdef NODEBUG
|
||||
! if $(MSVC_MAJOR) >= 8
|
||||
! if "$(OPTIMIZE)" != "SPACE"
|
||||
# Add /opt:ref to remove unreferenced functions and data even when /DEBUG is
|
||||
# added.
|
||||
LINKARGS1 = $(LINKARGS1) /opt:ref
|
||||
!else
|
||||
LINKARGS1 = $(LINKARGS1) /opt:noref /opt:noicf
|
||||
!endif
|
||||
|
||||
!if "$(MAP)" == "yes"
|
||||
# "/map" is for debugging
|
||||
LINKARGS1 = $(LINKARGS1) /map
|
||||
!elseif "$(MAP)" == "lines"
|
||||
# "/mapinfo:lines" is for debugging, only works for VC6 and later
|
||||
LINKARGS1 = $(LINKARGS1) /map /mapinfo:lines
|
||||
!endif
|
||||
|
||||
# Enable link time code generation if needed.
|
||||
!ifdef NODEBUG
|
||||
! if "$(OPTIMIZE)" != "SPACE"
|
||||
! if "$(CI)" == "true" || "$(CI)" == "True"
|
||||
# Enable link time code generation, but do not show the progress.
|
||||
LINKARGS1 = $(LINKARGS1) /LTCG
|
||||
! else
|
||||
# Report link time code generation progress.
|
||||
LINKARGS1 = $(LINKARGS1) /LTCG:STATUS
|
||||
! endif
|
||||
! endif
|
||||
@@ -1358,7 +1325,7 @@ all: $(MAIN_TARGET) \
|
||||
GvimExt/gvimext.dll
|
||||
|
||||
# To get around the command line limit: Make use of nmake's response files to
|
||||
# capture the arguments for $(link) in a file using the @<<ARGS<< syntax.
|
||||
# capture the arguments for $(LINK) in a file using the @<<ARGS<< syntax.
|
||||
|
||||
!if "$(VIMDLL)" == "yes"
|
||||
|
||||
@@ -1367,7 +1334,7 @@ $(VIMDLLBASE).dll: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ
|
||||
$(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
|
||||
version.c version.h
|
||||
$(CC) $(CFLAGS_OUTDIR) version.c
|
||||
$(link) @<<
|
||||
$(LINK) @<<
|
||||
$(LINKARGS1) /dll -out:$(VIMDLLBASE).dll $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ)
|
||||
$(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ)
|
||||
$(TCL_OBJ) $(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ)
|
||||
@@ -1375,11 +1342,11 @@ $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
|
||||
<<
|
||||
|
||||
$(GVIM).exe: $(OUTDIR) $(EXEOBJG) $(VIMDLLBASE).dll
|
||||
$(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(GVIM).exe $(EXEOBJG) $(VIMDLLBASE).lib $(LIBC)
|
||||
$(LINK) $(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(GVIM).exe $(EXEOBJG) $(VIMDLLBASE).lib $(LIBC)
|
||||
if exist $(GVIM).exe.manifest mt.exe -nologo -manifest $(GVIM).exe.manifest -updateresource:$(GVIM).exe;1
|
||||
|
||||
$(VIM).exe: $(OUTDIR) $(EXEOBJC) $(VIMDLLBASE).dll
|
||||
$(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM_CON) -out:$(VIM).exe $(EXEOBJC) $(VIMDLLBASE).lib $(LIBC)
|
||||
$(LINK) $(LINKARGS1) /subsystem:$(SUBSYSTEM_CON) -out:$(VIM).exe $(EXEOBJC) $(VIMDLLBASE).lib $(LIBC)
|
||||
if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1
|
||||
|
||||
!else
|
||||
@@ -1389,7 +1356,7 @@ $(VIM).exe: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE
|
||||
$(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
|
||||
version.c version.h
|
||||
$(CC) $(CFLAGS_OUTDIR) version.c
|
||||
$(link) @<<
|
||||
$(LINK) @<<
|
||||
$(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(VIM).exe $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ)
|
||||
$(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ)
|
||||
$(TCL_OBJ) $(TERM_OBJ) $(SOUND_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ)
|
||||
@@ -1454,6 +1421,7 @@ clean: testclean
|
||||
- if exist $(GVIM).exe del $(GVIM).exe
|
||||
- if exist $(GVIM).map del $(GVIM).map
|
||||
- if exist $(VIMDLLBASE).dll del $(VIMDLLBASE).dll
|
||||
- if exist $(VIMDLLBASE).ilk del $(VIMDLLBASE).ilk
|
||||
- if exist $(VIMDLLBASE).lib del $(VIMDLLBASE).lib
|
||||
- if exist $(VIMDLLBASE).exp del $(VIMDLLBASE).exp
|
||||
- if exist $(VIMDLLBASE).pdb del $(VIMDLLBASE).pdb
|
||||
@@ -1464,9 +1432,6 @@ clean: testclean
|
||||
- if exist uninstall.exe del uninstall.exe
|
||||
- if exist if_perl.c del if_perl.c
|
||||
- if exist auto\if_perl.c del auto\if_perl.c
|
||||
- if exist dimm.h del dimm.h
|
||||
- if exist dimm_i.c del dimm_i.c
|
||||
- if exist dimm.tlb del dimm.tlb
|
||||
- if exist dosinst.exe del dosinst.exe
|
||||
cd xxd
|
||||
$(MAKE) /NOLOGO -f Make_mvc.mak clean
|
||||
@@ -1483,7 +1448,17 @@ clean: testclean
|
||||
# If this fails because you don't have Vim yet, first build and install Vim
|
||||
# without changes.
|
||||
cmdidxs: ex_cmds.h
|
||||
vim --clean -X --not-a-term -u create_cmdidxs.vim
|
||||
vim --clean -N -X --not-a-term -u create_cmdidxs.vim -c quit
|
||||
|
||||
# Run vim script to generate the normal/visual mode command lookup table.
|
||||
# This only needs to be run when a new normal/visual mode command has been
|
||||
# added. If this fails because you don't have Vim yet:
|
||||
# - change nv_cmds[] in nv_cmds.h to add the new normal/visual mode command.
|
||||
# - run "make nvcmdidxs" to generate nv_cmdidxs.h
|
||||
nvcmdidxs: nv_cmds.h
|
||||
$(CC) /nologo -I. -Iproto -DNDEBUG create_nvcmdidxs.c -link -subsystem:$(SUBSYSTEM_TOOLS)
|
||||
vim --clean -N -X --not-a-term -u create_nvcmdidxs.vim -c quit
|
||||
-del create_nvcmdidxs.exe
|
||||
|
||||
test:
|
||||
cd testdir
|
||||
@@ -1670,7 +1645,7 @@ $(OUTDIR)/gui_w32.obj: $(OUTDIR) gui_w32.c $(INCL) $(GUI_INCL) version.h
|
||||
|
||||
$(OUTDIR)/gui_dwrite.obj: $(OUTDIR) gui_dwrite.cpp gui_dwrite.h
|
||||
|
||||
$(OUTDIR)/if_cscope.obj: $(OUTDIR) if_cscope.c $(INCL) if_cscope.h
|
||||
$(OUTDIR)/if_cscope.obj: $(OUTDIR) if_cscope.c $(INCL)
|
||||
|
||||
$(OUTDIR)/if_lua.obj: $(OUTDIR) if_lua.c $(INCL)
|
||||
$(CC) $(CFLAGS_OUTDIR) $(LUA_INC) if_lua.c
|
||||
@@ -1748,7 +1723,7 @@ $(OUTDIR)/netbeans.obj: $(OUTDIR) netbeans.c $(NBDEBUG_SRC) $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/channel.obj: $(OUTDIR) channel.c $(INCL)
|
||||
|
||||
$(OUTDIR)/normal.obj: $(OUTDIR) normal.c $(INCL)
|
||||
$(OUTDIR)/normal.obj: $(OUTDIR) normal.c $(INCL) nv_cmdidxs.h nv_cmds.h
|
||||
|
||||
$(OUTDIR)/option.obj: $(OUTDIR) option.c $(INCL) optiondefs.h
|
||||
|
||||
@@ -1882,13 +1857,6 @@ iid_ole.c if_ole.h vim.tlb: if_ole.idl
|
||||
midl /nologo /error none /proxy nul /iid iid_ole.c /tlb vim.tlb \
|
||||
/header if_ole.h if_ole.idl
|
||||
|
||||
dimm.h dimm_i.c: dimm.idl
|
||||
midl /nologo /error none /proxy nul dimm.idl
|
||||
|
||||
$(OUTDIR)/dimm_i.obj: $(OUTDIR) dimm_i.c $(INCL)
|
||||
|
||||
$(OUTDIR)/glbl_ime.obj: $(OUTDIR) glbl_ime.cpp dimm.h $(INCL)
|
||||
|
||||
|
||||
CCCTERM = $(CC) $(CFLAGS) -Ilibvterm/include -DINLINE="" \
|
||||
-DVSNPRINTF=vim_vsnprintf \
|
||||
@@ -1946,7 +1914,7 @@ $(PATHDEF_SRC): Make_mvc.mak
|
||||
@echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC:\=\\)"; >> $(PATHDEF_SRC)
|
||||
@echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR:\=\\)"; >> $(PATHDEF_SRC)
|
||||
@echo char_u *all_cflags = (char_u *)"$(CC:\=\\) $(E_CFLAGS)"; >> $(PATHDEF_SRC)
|
||||
@echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(E_LINKARGS2)"; >> $(PATHDEF_SRC)
|
||||
@echo char_u *all_lflags = (char_u *)"$(LINK:\=\\) $(LINKARGS1:\=\\) $(E_LINKARGS2)"; >> $(PATHDEF_SRC)
|
||||
@echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> $(PATHDEF_SRC)
|
||||
@echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> $(PATHDEF_SRC)
|
||||
|
||||
|
||||
@@ -908,7 +908,7 @@ highlight.obj : highlight.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
if_cscope.obj : if_cscope.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
errors.h globals.h if_cscope.h
|
||||
errors.h globals.h
|
||||
if_xcmdsrv.obj : if_xcmdsrv.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
@@ -977,7 +977,7 @@ mbyte.obj : mbyte.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
normal.obj : normal.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
errors.h globals.h
|
||||
errors.h globals.h nv_cmdidxs.h nv_cmds.h
|
||||
ops.obj : ops.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h gui.h beval.h \
|
||||
[.proto]gui_beval.pro option.h ex_cmds.h proto.h errors.h globals.h
|
||||
|
||||
26
src/Makefile
26
src/Makefile
@@ -2053,9 +2053,6 @@ PRO_AUTO = \
|
||||
$(ALL_GUI_PRO) \
|
||||
$(TCL_PRO)
|
||||
|
||||
# Resources used for the Mac are in one directory.
|
||||
RSRC_DIR = os_mac_rsrc
|
||||
|
||||
PRO_MANUAL = os_amiga.pro os_win32.pro \
|
||||
os_mswin.pro winclip.pro os_vms.pro $(PERL_PRO)
|
||||
|
||||
@@ -2141,9 +2138,21 @@ autoconf:
|
||||
# This only needs to be run when a command name has been added or changed.
|
||||
# If this fails because you don't have Vim yet, first build and install Vim
|
||||
# without changes.
|
||||
# This requires a "vim" executable with the +eval feature.
|
||||
cmdidxs: ex_cmds.h
|
||||
vim --clean -X --not-a-term -u create_cmdidxs.vim
|
||||
vim --clean -N -X --not-a-term -u create_cmdidxs.vim -c quit
|
||||
|
||||
# Run vim script to generate the normal/visual mode command lookup table.
|
||||
# This only needs to be run when a new normal/visual mode command has been
|
||||
# added.
|
||||
# This requires a "vim" executable with the +eval feature.
|
||||
# If this fails because you don't have Vim yet:
|
||||
# - change nv_cmds[] in nv_cmds.h to add the new normal/visual mode command.
|
||||
# - run "make nvcmdidxs" to generate nv_cmdidxs.h
|
||||
nvcmdidxs: auto/config.mk nv_cmds.h
|
||||
$(CC) -I$(srcdir) $(ALL_CFLAGS) create_nvcmdidxs.c -o create_nvcmdidxs
|
||||
vim --clean -N -X --not-a-term -u create_nvcmdidxs.vim -c quit
|
||||
-rm -f create_nvcmdidxs
|
||||
|
||||
# The normal command to compile a .c file to its .o file.
|
||||
# Without or with ALL_CFLAGS.
|
||||
@@ -2987,11 +2996,6 @@ shadow: runtime pixmaps
|
||||
cd $(SHADOWDIR)/xxd; ln -s ../../xxd/*.[ch] ../../xxd/Make* .
|
||||
$(MKDIR_P) $(SHADOWDIR)/xdiff
|
||||
cd $(SHADOWDIR)/xdiff; ln -s ../../xdiff/*.[ch] .
|
||||
if test -d $(RSRC_DIR); then \
|
||||
cd $(SHADOWDIR); \
|
||||
ln -s ../infplist.xml .; \
|
||||
ln -s ../$(RSRC_DIR) ../os_mac.rsr.hqx ../dehqx.py .; \
|
||||
fi
|
||||
$(MKDIR_P) $(SHADOWDIR)/testdir
|
||||
cd $(SHADOWDIR)/testdir; ln -s ../../testdir/Makefile \
|
||||
../../testdir/Make_all.mak \
|
||||
@@ -3922,7 +3926,7 @@ objects/highlight.o: highlight.c vim.h protodef.h auto/config.h feature.h \
|
||||
objects/if_cscope.o: if_cscope.c vim.h protodef.h auto/config.h feature.h \
|
||||
os_unix.h auto/osdef.h ascii.h keymap.h termdefs.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 errors.h if_cscope.h
|
||||
proto.h globals.h errors.h
|
||||
objects/if_xcmdsrv.o: if_xcmdsrv.c vim.h protodef.h auto/config.h feature.h \
|
||||
os_unix.h auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
@@ -4002,7 +4006,7 @@ objects/move.o: move.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||
objects/normal.o: normal.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||
auto/osdef.h ascii.h keymap.h termdefs.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 errors.h
|
||||
proto.h globals.h errors.h nv_cmdidxs.h nv_cmds.h
|
||||
objects/ops.o: ops.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||
auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
|
||||
@@ -705,7 +705,7 @@ ga_init(garray_T *gap)
|
||||
ga_init2(garray_T *gap, size_t itemsize, int growsize)
|
||||
{
|
||||
ga_init(gap);
|
||||
gap->ga_itemsize = itemsize;
|
||||
gap->ga_itemsize = (int)itemsize;
|
||||
gap->ga_growsize = growsize;
|
||||
}
|
||||
|
||||
@@ -737,11 +737,11 @@ ga_grow_inner(garray_T *gap, int n)
|
||||
if (n < gap->ga_len / 2)
|
||||
n = gap->ga_len / 2;
|
||||
|
||||
new_len = gap->ga_itemsize * (gap->ga_len + n);
|
||||
new_len = (size_t)gap->ga_itemsize * (gap->ga_len + n);
|
||||
pp = vim_realloc(gap->ga_data, new_len);
|
||||
if (pp == NULL)
|
||||
return FAIL;
|
||||
old_len = gap->ga_itemsize * gap->ga_maxlen;
|
||||
old_len = (size_t)gap->ga_itemsize * gap->ga_maxlen;
|
||||
vim_memset(pp + old_len, 0, new_len - old_len);
|
||||
gap->ga_maxlen = gap->ga_len + n;
|
||||
gap->ga_data = pp;
|
||||
|
||||
@@ -969,9 +969,9 @@ do_arg_all(
|
||||
old_curwin = curwin;
|
||||
old_curtab = curtab;
|
||||
|
||||
# ifdef FEAT_GUI
|
||||
#ifdef FEAT_GUI
|
||||
need_mouse_correct = TRUE;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
// Try closing all windows that are not in the argument list.
|
||||
// Also close windows that are not full width;
|
||||
|
||||
94
src/ascii.h
94
src/ascii.h
@@ -8,14 +8,8 @@
|
||||
|
||||
/*
|
||||
* Definitions of various common control characters.
|
||||
* For EBCDIC we have to use different values.
|
||||
*/
|
||||
|
||||
#ifndef EBCDIC
|
||||
|
||||
// IF_EB(ASCII_constant, EBCDIC_constant)
|
||||
#define IF_EB(a, b) a
|
||||
|
||||
#define CharOrd(x) ((x) < 'a' ? (x) - 'A' : (x) - 'a')
|
||||
#define CharOrdLow(x) ((x) - 'a')
|
||||
#define CharOrdUp(x) ((x) - 'A')
|
||||
@@ -77,94 +71,6 @@
|
||||
#define Ctrl_HAT 30 // ^
|
||||
#define Ctrl__ 31
|
||||
|
||||
#else
|
||||
|
||||
// EBCDIC
|
||||
|
||||
// IF_EB(ASCII_constant, EBCDIC_constant)
|
||||
#define IF_EB(a, b) b
|
||||
|
||||
/*
|
||||
* Finding the position in the alphabet is not straightforward in EBCDIC.
|
||||
* There are gaps in the code table.
|
||||
* 'a' + 1 == 'b', but: 'i' + 7 == 'j' and 'r' + 8 == 's'
|
||||
*/
|
||||
#define CharOrd__(c) ((c) < ('j' - 'a') ? (c) : ((c) < ('s' - 'a') ? (c) - 7 : (c) - 7 - 8))
|
||||
#define CharOrdLow(x) (CharOrd__((x) - 'a'))
|
||||
#define CharOrdUp(x) (CharOrd__((x) - 'A'))
|
||||
#define CharOrd(x) (isupper(x) ? CharOrdUp(x) : CharOrdLow(x))
|
||||
|
||||
#define EBCDIC_CHAR_ADD_(x) ((x) < 0?'a':(x)>25?'z':"abcdefghijklmnopqrstuvwxyz"[x])
|
||||
#define EBCDIC_CHAR_ADD(c,s) (isupper(c) ? toupper(EBCDIC_CHAR_ADD_(CharOrdUp(c)+(s))) : EBCDIC_CHAR_ADD_(CharOrdLow(c)+(s)))
|
||||
|
||||
#define R13_(c) ("abcdefghijklmnopqrstuvwxyz"[((c) + 13) % 26])
|
||||
#define ROT13(c, a) (isupper(c) ? toupper(R13_(CharOrdUp(c))) : R13_(CharOrdLow(c)))
|
||||
|
||||
#define NUL '\000'
|
||||
#define BELL '\x2f'
|
||||
#define BS '\x16'
|
||||
#define TAB '\x05'
|
||||
#define NL '\x15'
|
||||
#define NL_STR (char_u *)"\x15"
|
||||
#define FF '\x0C'
|
||||
#define CAR '\x0D'
|
||||
#define ESC '\x27'
|
||||
#define ESC_STR (char_u *)"\x27"
|
||||
#define ESC_STR_nc "\x27"
|
||||
#define DEL 0x07
|
||||
#define DEL_STR (char_u *)"\007"
|
||||
|
||||
#define POUND 0xB1
|
||||
|
||||
#define CTRL_F_STR "\056"
|
||||
#define CTRL_H_STR "\026"
|
||||
#define CTRL_V_STR "\062"
|
||||
|
||||
#define Ctrl_AT 0x00 // @
|
||||
#define Ctrl_A 0x01
|
||||
#define Ctrl_B 0x02
|
||||
#define Ctrl_C 0x03
|
||||
#define Ctrl_D 0x37
|
||||
#define Ctrl_E 0x2D
|
||||
#define Ctrl_F 0x2E
|
||||
#define Ctrl_G 0x2F
|
||||
#define Ctrl_H 0x16
|
||||
#define Ctrl_I 0x05
|
||||
#define Ctrl_J 0x15
|
||||
#define Ctrl_K 0x0B
|
||||
#define Ctrl_L 0x0C
|
||||
#define Ctrl_M 0x0D
|
||||
#define Ctrl_N 0x0E
|
||||
#define Ctrl_O 0x0F
|
||||
#define Ctrl_P 0x10
|
||||
#define Ctrl_Q 0x11
|
||||
#define Ctrl_R 0x12
|
||||
#define Ctrl_S 0x13
|
||||
#define Ctrl_T 0x3C
|
||||
#define Ctrl_U 0x3D
|
||||
#define Ctrl_V 0x32
|
||||
#define Ctrl_W 0x26
|
||||
#define Ctrl_X 0x18
|
||||
#define Ctrl_Y 0x19
|
||||
#define Ctrl_Z 0x3F
|
||||
// CTRL- [ Left Square Bracket == ESC
|
||||
#define Ctrl_RSB 0x1D // ] Right Square Bracket
|
||||
#define Ctrl_BSL 0x1C // \ BackSLash
|
||||
#define Ctrl_HAT 0x1E // ^
|
||||
#define Ctrl__ 0x1F
|
||||
|
||||
#define Ctrl_chr(x) (CtrlTable[(x)])
|
||||
extern char CtrlTable[];
|
||||
|
||||
#define CtrlChar(x) ((x < ' ') ? CtrlCharTable[(x)] : 0)
|
||||
extern char CtrlCharTable[];
|
||||
|
||||
#define MetaChar(x) ((x < ' ') ? MetaCharTable[(x)] : 0)
|
||||
extern char MetaCharTable[];
|
||||
|
||||
#endif // defined EBCDIC
|
||||
|
||||
// TODO: EBCDIC Code page dependent (here 1047)
|
||||
#define CSI 0x9b // Control Sequence Introducer
|
||||
#define CSI_STR "\233"
|
||||
#define DCS 0x90 // Device Control String
|
||||
|
||||
32
src/auto/configure
vendored
32
src/auto/configure
vendored
@@ -5256,6 +5256,12 @@ esac
|
||||
|
||||
|
||||
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
has_eval=no
|
||||
else
|
||||
has_eval=yes
|
||||
fi
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-compiledby argument" >&5
|
||||
$as_echo_n "checking --with-compiledby argument... " >&6; }
|
||||
|
||||
@@ -5333,7 +5339,7 @@ fi
|
||||
$as_echo "$enable_luainterp" >&6; }
|
||||
|
||||
if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
as_fn_error $? "cannot use Lua with tiny or small features" "$LINENO" 5
|
||||
fi
|
||||
|
||||
@@ -6103,7 +6109,7 @@ fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_perlinterp" >&5
|
||||
$as_echo "$enable_perlinterp" >&6; }
|
||||
if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
as_fn_error $? "cannot use Perl with tiny or small features" "$LINENO" 5
|
||||
fi
|
||||
|
||||
@@ -6308,7 +6314,7 @@ fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_pythoninterp" >&5
|
||||
$as_echo "$enable_pythoninterp" >&6; }
|
||||
if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
as_fn_error $? "cannot use Python with tiny or small features" "$LINENO" 5
|
||||
fi
|
||||
|
||||
@@ -6659,7 +6665,7 @@ fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_python3interp" >&5
|
||||
$as_echo "$enable_python3interp" >&6; }
|
||||
if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
as_fn_error $? "cannot use Python with tiny or small features" "$LINENO" 5
|
||||
fi
|
||||
|
||||
@@ -7587,7 +7593,7 @@ fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_rubyinterp" >&5
|
||||
$as_echo "$enable_rubyinterp" >&6; }
|
||||
if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
as_fn_error $? "cannot use Ruby with tiny or small features" "$LINENO" 5
|
||||
fi
|
||||
|
||||
@@ -7765,7 +7771,7 @@ else
|
||||
fi
|
||||
|
||||
if test "$enable_netbeans" = "yes"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot use NetBeans with tiny or small features" >&5
|
||||
$as_echo "cannot use NetBeans with tiny or small features" >&6; }
|
||||
enable_netbeans="no"
|
||||
@@ -7788,7 +7794,7 @@ else
|
||||
fi
|
||||
|
||||
if test "$enable_channel" = "yes"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot use channels with tiny or small features" >&5
|
||||
$as_echo "cannot use channels with tiny or small features" >&6; }
|
||||
enable_channel="no"
|
||||
@@ -8092,7 +8098,7 @@ else
|
||||
fi
|
||||
|
||||
if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot use terminal emulator with tiny or small features" >&5
|
||||
$as_echo "cannot use terminal emulator with tiny or small features" >&6; }
|
||||
enable_terminal="no"
|
||||
@@ -13051,8 +13057,14 @@ $as_echo "Defaulting to no" >&6; }
|
||||
enable_canberra="no"
|
||||
fi
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_canberra" >&5
|
||||
if test "$enable_canberra" = "yes" -a "$has_eval" = "no"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot use sound with tiny or small features" >&5
|
||||
$as_echo "cannot use sound with tiny or small features" >&6; }
|
||||
enable_canberra="no"
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_canberra" >&5
|
||||
$as_echo "$enable_canberra" >&6; }
|
||||
fi
|
||||
fi
|
||||
if test "$enable_canberra" = "yes"; then
|
||||
if test "x$PKG_CONFIG" != "xno"; then
|
||||
@@ -13067,7 +13079,7 @@ if test "$enable_canberra" = "yes"; then
|
||||
$as_echo_n "checking for libcanberra... " >&6; }
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
ac_save_LIBS="$LIBS"
|
||||
if `echo "$CFLAGS" | grep -v "$canberra_cflags" >/dev/null`; then
|
||||
if `echo "$CFLAGS" | grep -v "$canberra_cflags" 2>/dev/null`; then
|
||||
CFLAGS="$CFLAGS $canberra_cflags"
|
||||
fi
|
||||
LIBS="$LIBS $canberra_lib"
|
||||
|
||||
@@ -1518,7 +1518,10 @@ aucmd_prepbuf(
|
||||
p_acd = FALSE;
|
||||
#endif
|
||||
|
||||
// no redrawing and don't set the window title
|
||||
++RedrawingDisabled;
|
||||
(void)win_split_ins(0, WSP_TOP, aucmd_win, 0);
|
||||
--RedrawingDisabled;
|
||||
(void)win_comp_pos(); // recompute window positions
|
||||
p_ea = save_ea;
|
||||
#ifdef FEAT_AUTOCHDIR
|
||||
|
||||
13
src/beval.c
13
src/beval.c
@@ -259,6 +259,8 @@ general_beval_cb(BalloonEval *beval, int state UNUSED)
|
||||
: wp->w_buffer->b_p_bexpr;
|
||||
if (*bexpr != NUL)
|
||||
{
|
||||
sctx_T save_sctx = current_sctx;
|
||||
|
||||
// Convert window pointer to number.
|
||||
for (cw = firstwin; cw != wp; cw = cw->w_next)
|
||||
++winnr;
|
||||
@@ -284,6 +286,16 @@ general_beval_cb(BalloonEval *beval, int state UNUSED)
|
||||
++sandbox;
|
||||
++textwinlock;
|
||||
|
||||
if (bexpr == p_bexpr)
|
||||
{
|
||||
sctx_T *sp = get_option_sctx("balloonexpr");
|
||||
|
||||
if (sp != NULL)
|
||||
current_sctx = *sp;
|
||||
}
|
||||
else
|
||||
current_sctx = curbuf->b_p_script_ctx[BV_BEXPR];
|
||||
|
||||
vim_free(result);
|
||||
result = eval_to_string(bexpr, TRUE);
|
||||
|
||||
@@ -300,6 +312,7 @@ general_beval_cb(BalloonEval *beval, int state UNUSED)
|
||||
if (use_sandbox)
|
||||
--sandbox;
|
||||
--textwinlock;
|
||||
current_sctx = save_sctx;
|
||||
|
||||
set_vim_var_string(VV_BEVAL_TEXT, NULL, -1);
|
||||
if (result != NULL && result[0] != NUL)
|
||||
|
||||
@@ -237,7 +237,7 @@ blob2string(blob_T *blob, char_u **tofree, char_u *numbuf)
|
||||
{
|
||||
if (i > 0 && (i & 3) == 0)
|
||||
ga_concat(&ga, (char_u *)".");
|
||||
vim_snprintf((char *)numbuf, NUMBUFLEN, "%02X", (int)blob_get(blob, i));
|
||||
vim_snprintf((char *)numbuf, NUMBUFLEN, "%02X", blob_get(blob, i));
|
||||
ga_concat(&ga, numbuf);
|
||||
}
|
||||
ga_append(&ga, NUL); // append a NUL at the end
|
||||
|
||||
43
src/buffer.c
43
src/buffer.c
@@ -1624,7 +1624,7 @@ do_bufdel(
|
||||
// also be deleted, etc.
|
||||
if (bnr == curbuf->b_fnum)
|
||||
do_current = bnr;
|
||||
else if (do_buffer_ext(command, DOBUF_FIRST, FORWARD, (int)bnr,
|
||||
else if (do_buffer_ext(command, DOBUF_FIRST, FORWARD, bnr,
|
||||
DOBUF_NOPOPUP | (forceit ? DOBUF_FORCEIT : 0)) == OK)
|
||||
++deleted;
|
||||
|
||||
@@ -1706,6 +1706,7 @@ set_curbuf(buf_T *buf, int action)
|
||||
#endif
|
||||
bufref_T newbufref;
|
||||
bufref_T prevbufref;
|
||||
int valid;
|
||||
|
||||
setpcmark();
|
||||
if ((cmdmod.cmod_flags & CMOD_KEEPALT) == 0)
|
||||
@@ -1744,7 +1745,11 @@ set_curbuf(buf_T *buf, int action)
|
||||
{
|
||||
win_T *previouswin = curwin;
|
||||
|
||||
if (prevbuf == curbuf)
|
||||
// Do not sync when in Insert mode and the buffer is open in
|
||||
// another window, might be a timer doing something in another
|
||||
// window.
|
||||
if (prevbuf == curbuf
|
||||
&& ((State & INSERT) == 0 || curbuf->b_nwindows <= 1))
|
||||
u_sync(FALSE);
|
||||
close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
|
||||
unload ? action : (action == DOBUF_GOTO
|
||||
@@ -1759,13 +1764,19 @@ set_curbuf(buf_T *buf, int action)
|
||||
// An autocommand may have deleted "buf", already entered it (e.g., when
|
||||
// it did ":bunload") or aborted the script processing.
|
||||
// If curwin->w_buffer is null, enter_buffer() will make it valid again
|
||||
if ((buf_valid(buf) && buf != curbuf
|
||||
valid = buf_valid(buf);
|
||||
if ((valid && buf != curbuf
|
||||
#ifdef FEAT_EVAL
|
||||
&& !aborting()
|
||||
#endif
|
||||
) || curwin->w_buffer == NULL)
|
||||
{
|
||||
enter_buffer(buf);
|
||||
// If the buffer is not valid but curwin->w_buffer is NULL we must
|
||||
// enter some buffer. Using the last one is hopefully OK.
|
||||
if (!valid)
|
||||
enter_buffer(lastbuf);
|
||||
else
|
||||
enter_buffer(buf);
|
||||
#ifdef FEAT_SYN_HL
|
||||
if (old_tw != curbuf->b_p_tw)
|
||||
check_colorcolumn(curwin);
|
||||
@@ -2269,8 +2280,9 @@ free_buf_options(
|
||||
#endif
|
||||
#ifdef FEAT_CRYPT
|
||||
# ifdef FEAT_SODIUM
|
||||
if (buf->b_p_key != NULL && (crypt_get_method_nr(buf) == CRYPT_M_SOD))
|
||||
sodium_munlock(buf->b_p_key, STRLEN(buf->b_p_key));
|
||||
if ((buf->b_p_key != NULL) && (*buf->b_p_key != NUL) &&
|
||||
(crypt_get_method_nr(buf) == CRYPT_M_SOD))
|
||||
crypt_sodium_munlock(buf->b_p_key, STRLEN(buf->b_p_key));
|
||||
# endif
|
||||
clear_string_option(&buf->b_p_key);
|
||||
#endif
|
||||
@@ -2283,8 +2295,7 @@ free_buf_options(
|
||||
clear_string_option(&buf->b_p_vsts);
|
||||
vim_free(buf->b_p_vsts_nopaste);
|
||||
buf->b_p_vsts_nopaste = NULL;
|
||||
vim_free(buf->b_p_vsts_array);
|
||||
buf->b_p_vsts_array = NULL;
|
||||
VIM_CLEAR(buf->b_p_vsts_array);
|
||||
clear_string_option(&buf->b_p_vts);
|
||||
VIM_CLEAR(buf->b_p_vts_array);
|
||||
#endif
|
||||
@@ -3749,7 +3760,7 @@ fileinfo(
|
||||
}
|
||||
else
|
||||
{
|
||||
p = (char *)msg_trunc_attr(buffer, FALSE, 0);
|
||||
p = msg_trunc_attr(buffer, FALSE, 0);
|
||||
if (restart_edit != 0 || (msg_scrolled && !need_wait_return))
|
||||
// Need to repeat the message after redrawing when:
|
||||
// - When restart_edit is set (otherwise there will be a delay
|
||||
@@ -4157,7 +4168,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, use_sandbox);
|
||||
usefmt = eval_to_string_safe(fmt + 2, use_sandbox, FALSE);
|
||||
if (usefmt == NULL)
|
||||
usefmt = fmt;
|
||||
|
||||
@@ -4541,7 +4552,7 @@ build_stl_str_hl(
|
||||
if (curwin != save_curwin)
|
||||
VIsual_active = FALSE;
|
||||
|
||||
str = eval_to_string_safe(p, use_sandbox);
|
||||
str = eval_to_string_safe(p, use_sandbox, FALSE);
|
||||
|
||||
curwin = save_curwin;
|
||||
curbuf = save_curbuf;
|
||||
@@ -4610,15 +4621,7 @@ build_stl_str_hl(
|
||||
|
||||
case STL_VIRTCOL:
|
||||
case STL_VIRTCOL_ALT:
|
||||
// In list mode virtcol needs to be recomputed
|
||||
virtcol = wp->w_virtcol;
|
||||
if (wp->w_p_list && wp->w_lcs_chars.tab1 == NUL)
|
||||
{
|
||||
wp->w_p_list = FALSE;
|
||||
getvcol(wp, &wp->w_cursor, NULL, &virtcol, NULL);
|
||||
wp->w_p_list = TRUE;
|
||||
}
|
||||
++virtcol;
|
||||
virtcol = wp->w_virtcol + 1;
|
||||
// Don't display %V if it's the same as %c.
|
||||
if (opt == STL_VIRTCOL_ALT
|
||||
&& (virtcol == (colnr_T)(!(State & INSERT) && empty_line
|
||||
|
||||
@@ -1638,9 +1638,9 @@ open_line(
|
||||
#ifdef FEAT_CINDENT
|
||||
// May do indenting after opening a new line.
|
||||
do_cindent = !p_paste && (curbuf->b_p_cin
|
||||
# ifdef FEAT_EVAL
|
||||
# ifdef FEAT_EVAL
|
||||
|| *curbuf->b_p_inde != NUL
|
||||
# endif
|
||||
# endif
|
||||
)
|
||||
&& in_cinkeys(dir == FORWARD
|
||||
? KEY_OPEN_FORW
|
||||
|
||||
@@ -816,7 +816,7 @@ channel_connect(
|
||||
ch_log(channel,
|
||||
"Waiting for connection (waiting %d msec)...", waitnow);
|
||||
|
||||
ret = select((int)sd + 1, &rfds, &wfds, NULL, &tv);
|
||||
ret = select(sd + 1, &rfds, &wfds, NULL, &tv);
|
||||
if (ret < 0)
|
||||
{
|
||||
SOCK_ERRNO;
|
||||
|
||||
107
src/charset.c
107
src/charset.c
@@ -87,18 +87,11 @@ buf_init_chartab(
|
||||
* Set the default size for printable characters:
|
||||
* From <Space> to '~' is 1 (printable), others are 2 (not printable).
|
||||
* This also inits all 'isident' and 'isfname' flags to FALSE.
|
||||
*
|
||||
* EBCDIC: all chars below ' ' are not printable, all others are
|
||||
* printable.
|
||||
*/
|
||||
c = 0;
|
||||
while (c < ' ')
|
||||
g_chartab[c++] = (dy_flags & DY_UHEX) ? 4 : 2;
|
||||
#ifdef EBCDIC
|
||||
while (c < 255)
|
||||
#else
|
||||
while (c <= '~')
|
||||
#endif
|
||||
g_chartab[c++] = 1 + CT_PRINT_CHAR;
|
||||
while (c < 256)
|
||||
{
|
||||
@@ -221,10 +214,7 @@ buf_init_chartab(
|
||||
}
|
||||
else if (i == 1) // (re)set printable
|
||||
{
|
||||
if ((c < ' '
|
||||
#ifndef EBCDIC
|
||||
|| c > '~'
|
||||
#endif
|
||||
if ((c < ' ' || c > '~'
|
||||
// For double-byte we keep the cell width, so
|
||||
// that we can detect it from the first byte.
|
||||
) && !(enc_dbcs && MB_BYTE2LEN(c) == 2))
|
||||
@@ -519,13 +509,8 @@ transchar_buf(buf_T *buf, int c)
|
||||
c = K_SECOND(c);
|
||||
}
|
||||
|
||||
if ((!chartab_initialized && (
|
||||
#ifdef EBCDIC
|
||||
(c >= 64 && c < 255)
|
||||
#else
|
||||
(c >= ' ' && c <= '~')
|
||||
#endif
|
||||
)) || (c < 256 && vim_isprintc_strict(c)))
|
||||
if ((!chartab_initialized && ((c >= ' ' && c <= '~')))
|
||||
|| (c < 256 && vim_isprintc_strict(c)))
|
||||
{
|
||||
// printable character
|
||||
transchar_charbuf[i] = c;
|
||||
@@ -567,56 +552,26 @@ transchar_nonprint(buf_T *buf, char_u *charbuf, int c)
|
||||
if (dy_flags & DY_UHEX) // 'display' has "uhex"
|
||||
transchar_hex(charbuf, c);
|
||||
|
||||
#ifdef EBCDIC
|
||||
// For EBCDIC only the characters 0-63 and 255 are not printable
|
||||
else if (CtrlChar(c) != 0 || c == DEL)
|
||||
#else
|
||||
else if (c <= 0x7f) // 0x00 - 0x1f and 0x7f
|
||||
#endif
|
||||
{
|
||||
charbuf[0] = '^';
|
||||
#ifdef EBCDIC
|
||||
if (c == DEL)
|
||||
charbuf[1] = '?'; // DEL displayed as ^?
|
||||
else
|
||||
charbuf[1] = CtrlChar(c);
|
||||
#else
|
||||
charbuf[1] = c ^ 0x40; // DEL displayed as ^?
|
||||
#endif
|
||||
|
||||
charbuf[2] = NUL;
|
||||
}
|
||||
else if (enc_utf8 && c >= 0x80)
|
||||
{
|
||||
transchar_hex(charbuf, c);
|
||||
}
|
||||
#ifndef EBCDIC
|
||||
else if (c >= ' ' + 0x80 && c <= '~' + 0x80) // 0xa0 - 0xfe
|
||||
{
|
||||
charbuf[0] = '|';
|
||||
charbuf[1] = c - 0x80;
|
||||
charbuf[2] = NUL;
|
||||
}
|
||||
#else
|
||||
else if (c < 64)
|
||||
{
|
||||
charbuf[0] = '~';
|
||||
charbuf[1] = MetaChar(c);
|
||||
charbuf[2] = NUL;
|
||||
}
|
||||
#endif
|
||||
else // 0x80 - 0x9f and 0xff
|
||||
{
|
||||
/*
|
||||
* TODO: EBCDIC I don't know what to do with this chars, so I display
|
||||
* them as '~?' for now
|
||||
*/
|
||||
charbuf[0] = '~';
|
||||
#ifdef EBCDIC
|
||||
charbuf[1] = '?'; // 0xff displayed as ~?
|
||||
#else
|
||||
charbuf[1] = (c - 0x80) ^ 0x40; // 0xff displayed as ~?
|
||||
#endif
|
||||
charbuf[2] = NUL;
|
||||
}
|
||||
}
|
||||
@@ -2134,59 +2089,3 @@ backslash_halve_save(char_u *p)
|
||||
backslash_halve(res);
|
||||
return res;
|
||||
}
|
||||
|
||||
#if (defined(EBCDIC) && defined(FEAT_POSTSCRIPT)) || defined(PROTO)
|
||||
/*
|
||||
* Table for EBCDIC to ASCII conversion unashamedly taken from xxd.c!
|
||||
* The first 64 entries have been added to map control characters defined in
|
||||
* ascii.h
|
||||
*/
|
||||
static char_u ebcdic2ascii_tab[256] =
|
||||
{
|
||||
0000, 0001, 0002, 0003, 0004, 0011, 0006, 0177,
|
||||
0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017,
|
||||
0020, 0021, 0022, 0023, 0024, 0012, 0010, 0027,
|
||||
0030, 0031, 0032, 0033, 0033, 0035, 0036, 0037,
|
||||
0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047,
|
||||
0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057,
|
||||
0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067,
|
||||
0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077,
|
||||
0040, 0240, 0241, 0242, 0243, 0244, 0245, 0246,
|
||||
0247, 0250, 0325, 0056, 0074, 0050, 0053, 0174,
|
||||
0046, 0251, 0252, 0253, 0254, 0255, 0256, 0257,
|
||||
0260, 0261, 0041, 0044, 0052, 0051, 0073, 0176,
|
||||
0055, 0057, 0262, 0263, 0264, 0265, 0266, 0267,
|
||||
0270, 0271, 0313, 0054, 0045, 0137, 0076, 0077,
|
||||
0272, 0273, 0274, 0275, 0276, 0277, 0300, 0301,
|
||||
0302, 0140, 0072, 0043, 0100, 0047, 0075, 0042,
|
||||
0303, 0141, 0142, 0143, 0144, 0145, 0146, 0147,
|
||||
0150, 0151, 0304, 0305, 0306, 0307, 0310, 0311,
|
||||
0312, 0152, 0153, 0154, 0155, 0156, 0157, 0160,
|
||||
0161, 0162, 0136, 0314, 0315, 0316, 0317, 0320,
|
||||
0321, 0345, 0163, 0164, 0165, 0166, 0167, 0170,
|
||||
0171, 0172, 0322, 0323, 0324, 0133, 0326, 0327,
|
||||
0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337,
|
||||
0340, 0341, 0342, 0343, 0344, 0135, 0346, 0347,
|
||||
0173, 0101, 0102, 0103, 0104, 0105, 0106, 0107,
|
||||
0110, 0111, 0350, 0351, 0352, 0353, 0354, 0355,
|
||||
0175, 0112, 0113, 0114, 0115, 0116, 0117, 0120,
|
||||
0121, 0122, 0356, 0357, 0360, 0361, 0362, 0363,
|
||||
0134, 0237, 0123, 0124, 0125, 0126, 0127, 0130,
|
||||
0131, 0132, 0364, 0365, 0366, 0367, 0370, 0371,
|
||||
0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067,
|
||||
0070, 0071, 0372, 0373, 0374, 0375, 0376, 0377
|
||||
};
|
||||
|
||||
/*
|
||||
* Convert a buffer worth of characters from EBCDIC to ASCII. Only useful if
|
||||
* wanting 7-bit ASCII characters out the other end.
|
||||
*/
|
||||
void
|
||||
ebcdic2ascii(char_u *buffer, int len)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
buffer[i] = ebcdic2ascii_tab[buffer[i]];
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -3946,13 +3946,7 @@ in_cinkeys(
|
||||
try_match_word = FALSE;
|
||||
|
||||
// does it look like a control character?
|
||||
if (*look == '^'
|
||||
#ifdef EBCDIC
|
||||
&& (Ctrl_chr(look[1]) != 0)
|
||||
#else
|
||||
&& look[1] >= '?' && look[1] <= '_'
|
||||
#endif
|
||||
)
|
||||
if (*look == '^' && look[1] >= '?' && look[1] <= '_')
|
||||
{
|
||||
if (try_match && keytyped == Ctrl_chr(look[1]))
|
||||
return TRUE;
|
||||
|
||||
@@ -34,7 +34,7 @@ server_to_input_buf(char_u *str)
|
||||
// The last but one parameter of replace_termcodes() is TRUE so that the
|
||||
// <lt> sequence is recognised - needed for a real backslash.
|
||||
p_cpo = (char_u *)"Bk";
|
||||
str = replace_termcodes((char_u *)str, &ptr, REPTERM_DO_LT, NULL);
|
||||
str = replace_termcodes(str, &ptr, REPTERM_DO_LT, NULL);
|
||||
p_cpo = cpo_save;
|
||||
|
||||
if (*ptr != NUL) // trailing CTRL-V results in nothing
|
||||
@@ -55,7 +55,7 @@ server_to_input_buf(char_u *str)
|
||||
// buffer.
|
||||
typebuf_was_filled = TRUE;
|
||||
}
|
||||
vim_free((char_u *)ptr);
|
||||
vim_free(ptr);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1488,7 +1488,7 @@ clip_x11_convert_selection_cb(
|
||||
// create NUL terminated string which XmbTextListToTextProperty wants
|
||||
mch_memmove(string_nt, string, (size_t)*length);
|
||||
string_nt[*length] = NUL;
|
||||
conv_result = XmbTextListToTextProperty(X_DISPLAY, (char **)&string_nt,
|
||||
conv_result = XmbTextListToTextProperty(X_DISPLAY, &string_nt,
|
||||
1, XCompoundTextStyle, &text_prop);
|
||||
if (conv_result != Success)
|
||||
{
|
||||
|
||||
@@ -1993,11 +1993,11 @@ ExpandFromContext(
|
||||
#ifdef BACKSLASH_IN_FILENAME
|
||||
if (p_csl[0] != NUL && (options & WILD_IGNORE_COMPLETESLASH) == 0)
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
|
||||
for (i = 0; i < *num_file; ++i)
|
||||
for (j = 0; j < *num_file; ++j)
|
||||
{
|
||||
char_u *ptr = (*file)[i];
|
||||
char_u *ptr = (*file)[j];
|
||||
|
||||
while (*ptr != NUL)
|
||||
{
|
||||
|
||||
@@ -540,6 +540,12 @@ esac
|
||||
AC_SUBST(dovimdiff)
|
||||
AC_SUBST(dogvimdiff)
|
||||
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
has_eval=no
|
||||
else
|
||||
has_eval=yes
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING(--with-compiledby argument)
|
||||
AC_ARG_WITH(compiledby, [ --with-compiledby=NAME name to show in :version message],
|
||||
compiledby="$withval"; AC_MSG_RESULT($withval),
|
||||
@@ -585,7 +591,7 @@ AC_ARG_ENABLE(luainterp,
|
||||
AC_MSG_RESULT($enable_luainterp)
|
||||
|
||||
if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
AC_MSG_ERROR([cannot use Lua with tiny or small features])
|
||||
fi
|
||||
|
||||
@@ -1072,7 +1078,7 @@ AC_ARG_ENABLE(perlinterp,
|
||||
[enable_perlinterp="no"])
|
||||
AC_MSG_RESULT($enable_perlinterp)
|
||||
if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
AC_MSG_ERROR([cannot use Perl with tiny or small features])
|
||||
fi
|
||||
AC_SUBST(vi_cv_path_perl)
|
||||
@@ -1221,7 +1227,7 @@ AC_ARG_ENABLE(pythoninterp,
|
||||
[enable_pythoninterp="no"])
|
||||
AC_MSG_RESULT($enable_pythoninterp)
|
||||
if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
AC_MSG_ERROR([cannot use Python with tiny or small features])
|
||||
fi
|
||||
|
||||
@@ -1456,7 +1462,7 @@ AC_ARG_ENABLE(python3interp,
|
||||
[enable_python3interp="no"])
|
||||
AC_MSG_RESULT($enable_python3interp)
|
||||
if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
AC_MSG_ERROR([cannot use Python with tiny or small features])
|
||||
fi
|
||||
|
||||
@@ -1969,7 +1975,7 @@ AC_ARG_ENABLE(rubyinterp,
|
||||
[enable_rubyinterp="no"])
|
||||
AC_MSG_RESULT($enable_rubyinterp)
|
||||
if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
AC_MSG_ERROR([cannot use Ruby with tiny or small features])
|
||||
fi
|
||||
|
||||
@@ -2082,7 +2088,7 @@ AC_ARG_ENABLE(netbeans,
|
||||
[ --disable-netbeans Disable NetBeans integration support.],
|
||||
, [enable_netbeans="yes"])
|
||||
if test "$enable_netbeans" = "yes"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
AC_MSG_RESULT([cannot use NetBeans with tiny or small features])
|
||||
enable_netbeans="no"
|
||||
else
|
||||
@@ -2097,7 +2103,7 @@ AC_ARG_ENABLE(channel,
|
||||
[ --disable-channel Disable process communication support.],
|
||||
, [enable_channel="yes"])
|
||||
if test "$enable_channel" = "yes"; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
AC_MSG_RESULT([cannot use channels with tiny or small features])
|
||||
enable_channel="no"
|
||||
else
|
||||
@@ -2205,7 +2211,7 @@ AC_ARG_ENABLE(terminal,
|
||||
[ --enable-terminal Enable terminal emulation support.],
|
||||
, [enable_terminal="auto"])
|
||||
if test "$enable_terminal" = "yes" || test "$enable_terminal" = "auto" -a "x$features" = "xhuge" ; then
|
||||
if test "x$features" = "xtiny" -o "x$features" = "xsmall"; then
|
||||
if test "$has_eval" = "no"; then
|
||||
AC_MSG_RESULT([cannot use terminal emulator with tiny or small features])
|
||||
enable_terminal="no"
|
||||
else
|
||||
@@ -3794,7 +3800,12 @@ if test "$enable_canberra" = "maybe"; then
|
||||
enable_canberra="no"
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT($enable_canberra)
|
||||
if test "$enable_canberra" = "yes" -a "$has_eval" = "no"; then
|
||||
AC_MSG_RESULT([cannot use sound with tiny or small features])
|
||||
enable_canberra="no"
|
||||
else
|
||||
AC_MSG_RESULT($enable_canberra)
|
||||
fi
|
||||
fi
|
||||
if test "$enable_canberra" = "yes"; then
|
||||
if test "x$PKG_CONFIG" != "xno"; then
|
||||
@@ -3808,7 +3819,7 @@ if test "$enable_canberra" = "yes"; then
|
||||
AC_MSG_CHECKING(for libcanberra)
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
ac_save_LIBS="$LIBS"
|
||||
if `echo "$CFLAGS" | grep -v "$canberra_cflags" >/dev/null`; then
|
||||
if `echo "$CFLAGS" | grep -v "$canberra_cflags" 2>/dev/null`; then
|
||||
CFLAGS="$CFLAGS $canberra_cflags"
|
||||
fi
|
||||
LIBS="$LIBS $canberra_lib"
|
||||
|
||||
38
src/create_nvcmdidxs.c
Normal file
38
src/create_nvcmdidxs.c
Normal file
@@ -0,0 +1,38 @@
|
||||
/* vi:set ts=8 sts=4 sw=4 noet:
|
||||
*
|
||||
* VIM - Vi IMproved by Bram Moolenaar et al.
|
||||
*
|
||||
* Do ":help uganda" in Vim to read copying and usage conditions.
|
||||
* Do ":help credits" in Vim to see a list of people who contributed.
|
||||
* See README.txt for an overview of the Vim source code.
|
||||
*/
|
||||
|
||||
/*
|
||||
* create_nvcmdidxs.c: helper program for `make nvcmdidxs`
|
||||
*
|
||||
* This outputs the list of command characters from the nv_cmds table in
|
||||
* decimal form, one per line.
|
||||
*/
|
||||
|
||||
#include "vim.h"
|
||||
|
||||
// Declare nv_cmds[].
|
||||
#include "nv_cmds.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < NV_CMDS_SIZE; i++)
|
||||
{
|
||||
int cmdchar = nv_cmds[i];
|
||||
|
||||
// Special keys are negative, use the negated value for sorting.
|
||||
if (cmdchar < 0)
|
||||
cmdchar = -cmdchar;
|
||||
printf("%d\n", cmdchar);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
60
src/create_nvcmdidxs.vim
Normal file
60
src/create_nvcmdidxs.vim
Normal file
@@ -0,0 +1,60 @@
|
||||
" This script generates the table nv_cmd_idx[] which contains the index in
|
||||
" nv_cmds[] table (normal.c) for each of the command character supported in
|
||||
" normal/visual mode.
|
||||
" This is used to speed up the command lookup in nv_cmds[].
|
||||
"
|
||||
" Script should be run using "make nvcmdidxs", every time the nv_cmds[] table
|
||||
" in src/nv_cmds.h changes.
|
||||
"
|
||||
" This is written in legacy Vim script so that it can be run by a slightly
|
||||
" older Vim version.
|
||||
|
||||
" Generate the table of normal/visual mode command characters and their
|
||||
" corresponding index.
|
||||
let cmd = 'create_nvcmdidxs'
|
||||
if has('unix')
|
||||
let cmd = './' .. cmd
|
||||
endif
|
||||
let nv_cmdtbl = systemlist(cmd)->map({i, ch -> {'idx': i, 'cmdchar': ch}})
|
||||
|
||||
" sort the table by the command character
|
||||
call sort(nv_cmdtbl, {a, b -> a.cmdchar - b.cmdchar})
|
||||
|
||||
" Compute the highest index upto which the command character can be directly
|
||||
" used as an index.
|
||||
let nv_max_linear = 0
|
||||
for i in range(nv_cmdtbl->len())
|
||||
if i != nv_cmdtbl[i].cmdchar
|
||||
let nv_max_linear = i - 1
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
|
||||
" Generate a header file with the table
|
||||
let output =<< trim END
|
||||
/*
|
||||
* Automatically generated code by the create_nvcmdidxs.vim script.
|
||||
*
|
||||
* Table giving the index in nv_cmds[] to lookup based on
|
||||
* the command character.
|
||||
*/
|
||||
|
||||
// nv_cmd_idx[<normal mode command character>] => nv_cmds[] index
|
||||
static const unsigned short nv_cmd_idx[] =
|
||||
{
|
||||
END
|
||||
|
||||
" Add each command character in comment and the corresponding index
|
||||
let output += nv_cmdtbl->map({_, v ->
|
||||
\ printf(' /* %5d */ %3d,', v.cmdchar, v.idx)})
|
||||
|
||||
let output += ['};', '',
|
||||
\ '// The highest index for which',
|
||||
\ '// nv_cmds[idx].cmd_char == nv_cmd_idx[nv_cmds[idx].cmd_char]']
|
||||
|
||||
let output += ['static const int nv_max_linear = ' .. nv_max_linear .. ';']
|
||||
|
||||
call writefile(output, "nv_cmdidxs.h")
|
||||
quit
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
116
src/crypt.c
116
src/crypt.c
@@ -159,6 +159,108 @@ typedef struct {
|
||||
crypto_secretstream_xchacha20poly1305_state
|
||||
state;
|
||||
} sodium_state_T;
|
||||
|
||||
|
||||
# ifdef DYNAMIC_SODIUM
|
||||
# define sodium_init load_sodium
|
||||
# define sodium_free dll_sodium_free
|
||||
# define sodium_malloc dll_sodium_malloc
|
||||
# define sodium_memzero dll_sodium_memzero
|
||||
# define sodium_mlock dll_sodium_mlock
|
||||
# define sodium_munlock dll_sodium_munlock
|
||||
# define crypto_secretstream_xchacha20poly1305_init_push \
|
||||
dll_crypto_secretstream_xchacha20poly1305_init_push
|
||||
# define crypto_secretstream_xchacha20poly1305_push \
|
||||
dll_crypto_secretstream_xchacha20poly1305_push
|
||||
# define crypto_secretstream_xchacha20poly1305_init_pull \
|
||||
dll_crypto_secretstream_xchacha20poly1305_init_pull
|
||||
# define crypto_secretstream_xchacha20poly1305_pull \
|
||||
dll_crypto_secretstream_xchacha20poly1305_pull
|
||||
# define crypto_pwhash dll_crypto_pwhash
|
||||
# define randombytes_buf dll_randombytes_buf
|
||||
|
||||
static int (*dll_sodium_init)(void) = NULL;
|
||||
static void (*dll_sodium_free)(void *) = NULL;
|
||||
static void *(*dll_sodium_malloc)(const size_t) = NULL;
|
||||
static void (*dll_sodium_memzero)(void * const, const size_t) = NULL;
|
||||
static int (*dll_sodium_mlock)(void * const, const size_t) = NULL;
|
||||
static int (*dll_sodium_munlock)(void * const, const size_t) = NULL;
|
||||
static int (*dll_crypto_secretstream_xchacha20poly1305_init_push)
|
||||
(crypto_secretstream_xchacha20poly1305_state *state,
|
||||
unsigned char [],
|
||||
const unsigned char []) = NULL;
|
||||
static int (*dll_crypto_secretstream_xchacha20poly1305_push)
|
||||
(crypto_secretstream_xchacha20poly1305_state *state,
|
||||
unsigned char *c, unsigned long long *clen_p,
|
||||
const unsigned char *m, unsigned long long mlen,
|
||||
const unsigned char *ad, unsigned long long adlen, unsigned char tag)
|
||||
= NULL;
|
||||
static int (*dll_crypto_secretstream_xchacha20poly1305_init_pull)
|
||||
(crypto_secretstream_xchacha20poly1305_state *state,
|
||||
const unsigned char [],
|
||||
const unsigned char []) = NULL;
|
||||
static int (*dll_crypto_secretstream_xchacha20poly1305_pull)
|
||||
(crypto_secretstream_xchacha20poly1305_state *state,
|
||||
unsigned char *m, unsigned long long *mlen_p, unsigned char *tag_p,
|
||||
const unsigned char *c, unsigned long long clen,
|
||||
const unsigned char *ad, unsigned long long adlen) = NULL;
|
||||
static int (*dll_crypto_pwhash)(unsigned char * const out,
|
||||
unsigned long long outlen,
|
||||
const char * const passwd, unsigned long long passwdlen,
|
||||
const unsigned char * const salt,
|
||||
unsigned long long opslimit, size_t memlimit, int alg)
|
||||
= NULL;
|
||||
static void (*dll_randombytes_buf)(void * const buf, const size_t size);
|
||||
|
||||
static struct {
|
||||
const char *name;
|
||||
FARPROC *ptr;
|
||||
} sodium_funcname_table[] = {
|
||||
{"sodium_init", (FARPROC*)&dll_sodium_init},
|
||||
{"sodium_free", (FARPROC*)&dll_sodium_free},
|
||||
{"sodium_malloc", (FARPROC*)&dll_sodium_malloc},
|
||||
{"sodium_memzero", (FARPROC*)&dll_sodium_memzero},
|
||||
{"sodium_mlock", (FARPROC*)&dll_sodium_mlock},
|
||||
{"sodium_munlock", (FARPROC*)&dll_sodium_munlock},
|
||||
{"crypto_secretstream_xchacha20poly1305_init_push", (FARPROC*)&dll_crypto_secretstream_xchacha20poly1305_init_push},
|
||||
{"crypto_secretstream_xchacha20poly1305_push", (FARPROC*)&dll_crypto_secretstream_xchacha20poly1305_push},
|
||||
{"crypto_secretstream_xchacha20poly1305_init_pull", (FARPROC*)&dll_crypto_secretstream_xchacha20poly1305_init_pull},
|
||||
{"crypto_secretstream_xchacha20poly1305_pull", (FARPROC*)&dll_crypto_secretstream_xchacha20poly1305_pull},
|
||||
{"crypto_pwhash", (FARPROC*)&dll_crypto_pwhash},
|
||||
{"randombytes_buf", (FARPROC*)&dll_randombytes_buf},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
static int
|
||||
load_sodium(void)
|
||||
{
|
||||
static HANDLE hsodium = NULL;
|
||||
int i;
|
||||
|
||||
if (hsodium != NULL)
|
||||
return 0;
|
||||
|
||||
hsodium = vimLoadLib("libsodium.dll");
|
||||
if (hsodium == NULL)
|
||||
{
|
||||
// TODO: Show error message.
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (i = 0; sodium_funcname_table[i].ptr; ++i)
|
||||
{
|
||||
if ((*sodium_funcname_table[i].ptr = GetProcAddress(hsodium,
|
||||
sodium_funcname_table[i].name)) == NULL)
|
||||
{
|
||||
FreeLibrary(hsodium);
|
||||
hsodium = NULL;
|
||||
// TODO: Show error message.
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return dll_sodium_init();
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define CRYPT_MAGIC_LEN 12 // cannot change
|
||||
@@ -990,4 +1092,18 @@ crypt_sodium_buffer_decode(
|
||||
# endif
|
||||
}
|
||||
|
||||
# if defined(FEAT_SODIUM) || defined(PROTO)
|
||||
int
|
||||
crypt_sodium_munlock(void *const addr, const size_t len)
|
||||
{
|
||||
return sodium_munlock(addr, len);
|
||||
}
|
||||
|
||||
void
|
||||
crypt_sodium_randombytes_buf(void *const buf, const size_t size)
|
||||
{
|
||||
randombytes_buf(buf, size);
|
||||
}
|
||||
# endif
|
||||
|
||||
#endif // FEAT_CRYPT
|
||||
|
||||
45
src/dehqx.py
45
src/dehqx.py
@@ -1,45 +0,0 @@
|
||||
# Python script to get both the data and resource fork from a BinHex encoded
|
||||
# file.
|
||||
# Author: MURAOKA Taro <koron.kaoriya@gmail.com>
|
||||
# Last Change: 2018 Mar 27
|
||||
#
|
||||
# Copyright (C) 2003,12 MURAOKA Taro <koron.kaoriya@gmail.com>
|
||||
# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
|
||||
|
||||
import sys
|
||||
import binhex
|
||||
|
||||
input = sys.argv[1]
|
||||
conv = binhex.HexBin(input)
|
||||
info = conv.FInfo
|
||||
out = conv.FName
|
||||
out_data = out
|
||||
out_rsrc = out + '.rsrcfork'
|
||||
|
||||
# This uses the print statement on Python 2, print function on Python 3.
|
||||
#print('out_rsrc=' + out_rsrc)
|
||||
print('In file: ' + input)
|
||||
|
||||
outfile = open(out_data, 'wb')
|
||||
print(' Out data fork: ' + out_data)
|
||||
while 1:
|
||||
d = conv.read(128000)
|
||||
if not d: break
|
||||
outfile.write(d)
|
||||
outfile.close()
|
||||
conv.close_data()
|
||||
|
||||
d = conv.read_rsrc(128000)
|
||||
if d:
|
||||
print(' Out rsrc fork: ' + out_rsrc)
|
||||
outfile = open(out_rsrc, 'wb')
|
||||
outfile.write(d)
|
||||
while 1:
|
||||
d = conv.read_rsrc(128000)
|
||||
if not d: break
|
||||
outfile.write(d)
|
||||
outfile.close()
|
||||
|
||||
conv.close()
|
||||
|
||||
# vim:set ts=8 sts=4 sw=4 et:
|
||||
12
src/dict.c
12
src/dict.c
@@ -284,11 +284,11 @@ dictitem_free(dictitem_T *item)
|
||||
/*
|
||||
* Make a copy of dict "d". Shallow if "deep" is FALSE.
|
||||
* The refcount of the new dict is set to 1.
|
||||
* See item_copy() for "copyID".
|
||||
* See item_copy() for "top" and "copyID".
|
||||
* Returns NULL when out of memory.
|
||||
*/
|
||||
dict_T *
|
||||
dict_copy(dict_T *orig, int deep, int copyID)
|
||||
dict_copy(dict_T *orig, int deep, int top, int copyID)
|
||||
{
|
||||
dict_T *copy;
|
||||
dictitem_T *di;
|
||||
@@ -306,6 +306,8 @@ dict_copy(dict_T *orig, int deep, int copyID)
|
||||
orig->dv_copyID = copyID;
|
||||
orig->dv_copydict = copy;
|
||||
}
|
||||
copy->dv_type = alloc_type(top || deep ? &t_dict_any : orig->dv_type);
|
||||
|
||||
todo = (int)orig->dv_hashtab.ht_used;
|
||||
for (hi = orig->dv_hashtab.ht_array; todo > 0 && !got_int; ++hi)
|
||||
{
|
||||
@@ -318,8 +320,8 @@ dict_copy(dict_T *orig, int deep, int copyID)
|
||||
break;
|
||||
if (deep)
|
||||
{
|
||||
if (item_copy(&HI2DI(hi)->di_tv, &di->di_tv, deep,
|
||||
copyID) == FAIL)
|
||||
if (item_copy(&HI2DI(hi)->di_tv, &di->di_tv,
|
||||
deep, FALSE, copyID) == FAIL)
|
||||
{
|
||||
vim_free(di);
|
||||
break;
|
||||
@@ -1239,7 +1241,7 @@ dict_extend_func(
|
||||
{
|
||||
if (is_new)
|
||||
{
|
||||
d1 = dict_copy(d1, FALSE, get_copyID());
|
||||
d1 = dict_copy(d1, FALSE, TRUE, get_copyID());
|
||||
if (d1 == NULL)
|
||||
return;
|
||||
}
|
||||
|
||||
119
src/digraph.c
119
src/digraph.c
@@ -138,119 +138,7 @@ static digr_T digraphdefault[] =
|
||||
};
|
||||
|
||||
#else // !HPUX_DIGRAPHS
|
||||
|
||||
# ifdef EBCDIC
|
||||
|
||||
/*
|
||||
* EBCDIC - ISO digraphs
|
||||
* TODO: EBCDIC Table is Code-Page 1047
|
||||
*/
|
||||
{{'a', '^', 66}, // â
|
||||
{'a', '"', 67}, // ä
|
||||
{'a', '`', 68}, // à
|
||||
{'a', '\'', 69}, // á
|
||||
{'a', '~', 70}, // ã
|
||||
{'a', '@', 71}, // å
|
||||
{'a', 'a', 71}, // å
|
||||
{'c', ',', 72}, // ç
|
||||
{'n', '~', 73}, // ñ
|
||||
{'c', '|', 74}, // ¢
|
||||
{'e', '\'', 81}, // é
|
||||
{'e', '^', 82}, // ê
|
||||
{'e', '"', 83}, // ë
|
||||
{'e', '`', 84}, // è
|
||||
{'i', '\'', 85}, // í
|
||||
{'i', '^', 86}, // î
|
||||
{'i', '"', 87}, // ï
|
||||
{'i', '`', 88}, // ì
|
||||
{'s', 's', 89}, // ß
|
||||
{'A', '^', 98}, // Â
|
||||
{'A', '"', 99}, // Ä
|
||||
{'A', '`', 100}, // À
|
||||
{'A', '\'', 101}, // Á
|
||||
{'A', '~', 102}, // Ã
|
||||
{'A', '@', 103}, // Å
|
||||
{'A', 'A', 103}, // Å
|
||||
{'C', ',', 104}, // Ç
|
||||
{'N', '~', 105}, // Ñ
|
||||
{'|', '|', 106}, // ¦
|
||||
{'o', '/', 112}, // ø
|
||||
{'E', '\'', 113}, // É
|
||||
{'E', '^', 114}, // Ê
|
||||
{'E', '"', 115}, // Ë
|
||||
{'E', '`', 116}, // È
|
||||
{'I', '\'', 117}, // Í
|
||||
{'I', '^', 118}, // Î
|
||||
{'I', '"', 119}, // Ï
|
||||
{'I', '`', 120}, // Ì
|
||||
{'O', '/', 128}, // 0/ XX
|
||||
{'<', '<', 138}, // «
|
||||
{'>', '>', 139}, // »
|
||||
{'d', '-', 140}, // ð
|
||||
{'y', '\'', 141}, // ý
|
||||
{'i', 'p', 142}, // þ
|
||||
{'+', '-', 143}, // ±
|
||||
{'~', 'o', 144}, // °
|
||||
{'a', '-', 154}, // ª
|
||||
{'o', '-', 155}, // º
|
||||
{'a', 'e', 156}, // æ
|
||||
{',', ',', 157}, // , XX
|
||||
{'A', 'E', 158}, // Æ
|
||||
{'o', 'x', 159}, // ¤ - currency symbol in ISO 8859-1
|
||||
{'e', '=', 159}, // ¤ - euro symbol in ISO 8859-15
|
||||
{'E', 'u', 159}, // ¤ - euro symbol in ISO 8859-15
|
||||
{'j', 'u', 160}, // µ
|
||||
{'y', '"', 167}, // x XX
|
||||
{'~', '!', 170}, // ¡
|
||||
{'~', '?', 171}, // ¿
|
||||
{'D', '-', 172}, // Ð
|
||||
{'I', 'p', 174}, // Þ
|
||||
{'r', 'O', 175}, // ®
|
||||
{'-', ',', 176}, // ¬
|
||||
{'$', '$', 177}, // £
|
||||
{'Y', '-', 178}, // ¥
|
||||
{'~', '.', 179}, // ·
|
||||
{'c', 'O', 180}, // ©
|
||||
{'p', 'a', 181}, // §
|
||||
{'p', 'p', 182}, // ¶
|
||||
{'1', '4', 183}, // ¼
|
||||
{'1', '2', 184}, // ½
|
||||
{'3', '4', 185}, // ¾
|
||||
{'Y', '\'', 186}, // Ý
|
||||
{'"', '"', 187}, // ¨
|
||||
{'-', '=', 188}, // ¯
|
||||
{'\'', '\'', 190}, // ´
|
||||
{'O', 'E', 191}, // × - OE in ISO 8859-15
|
||||
{'/', '\\', 191}, // × - multiplication symbol in ISO 8859-1
|
||||
{'-', '-', 202}, //
|
||||
{'o', '^', 203}, // ô
|
||||
{'o', '"', 204}, // ö
|
||||
{'o', '`', 205}, // ò
|
||||
{'o', '\'', 206}, // ó
|
||||
{'o', '~', 207}, // õ
|
||||
{'1', '1', 218}, // ¹
|
||||
{'u', '^', 219}, // û
|
||||
{'u', '"', 220}, // ü
|
||||
{'u', '`', 221}, // ù
|
||||
{'u', '\'', 222}, // ú
|
||||
{':', '-', 225}, // ÷ - division symbol in ISO 8859-1
|
||||
{'o', 'e', 225}, // ÷ - oe in ISO 8859-15
|
||||
{'2', '2', 234}, // ²
|
||||
{'O', '^', 235}, // Ô
|
||||
{'O', '"', 236}, // Ö
|
||||
{'O', '`', 237}, // Ò
|
||||
{'O', '\'', 238}, // Ó
|
||||
{'O', '~', 239}, // Õ
|
||||
{'3', '3', 250}, // ³
|
||||
{'U', '^', 251}, // Û
|
||||
{'U', '"', 252}, // Ü
|
||||
{'U', '`', 253}, // Ù
|
||||
{'U', '\'', 254}, // Ú
|
||||
{NUL, NUL, NUL}
|
||||
};
|
||||
|
||||
# else // EBCDIC
|
||||
# ifdef OLD_DIGRAPHS
|
||||
# ifdef OLD_DIGRAPHS
|
||||
|
||||
/*
|
||||
* digraphs compatible with Vim 5.x
|
||||
@@ -357,7 +245,7 @@ static digr_T digraphdefault[] =
|
||||
{'y', '"', 255}, // x XX
|
||||
{NUL, NUL, NUL}
|
||||
};
|
||||
# else // OLD_DIGRAPHS
|
||||
# else // OLD_DIGRAPHS
|
||||
|
||||
/*
|
||||
* digraphs for Unicode from RFC1345
|
||||
@@ -1761,8 +1649,7 @@ static digr_T digraphdefault[] =
|
||||
{NUL, NUL, NUL}
|
||||
};
|
||||
|
||||
# endif // OLD_DIGRAPHS
|
||||
# endif // EBCDIC
|
||||
# endif // OLD_DIGRAPHS
|
||||
#endif // !HPUX_DIGRAPHS
|
||||
|
||||
/*
|
||||
|
||||
544
src/dimm.idl
544
src/dimm.idl
@@ -1,544 +0,0 @@
|
||||
//+-------------------------------------------------------------------------
|
||||
//
|
||||
// Microsoft Windows
|
||||
// Copyright (C) Microsoft Corporation, 1992-2000.
|
||||
//
|
||||
// File: dimm.idl
|
||||
//
|
||||
// Contents: ActiveIMM interface definitions
|
||||
//
|
||||
//
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
cpp_quote("//=--------------------------------------------------------------------------=")
|
||||
cpp_quote("// dimm.h")
|
||||
cpp_quote("//=--------------------------------------------------------------------------=")
|
||||
cpp_quote("// (C) Copyright 1995-1998 Microsoft Corporation. All Rights Reserved.")
|
||||
cpp_quote("//")
|
||||
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
|
||||
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
|
||||
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
|
||||
cpp_quote("// PARTICULAR PURPOSE.")
|
||||
cpp_quote("//=--------------------------------------------------------------------------=")
|
||||
cpp_quote("")
|
||||
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
|
||||
cpp_quote("")
|
||||
cpp_quote("//--------------------------------------------------------------------------")
|
||||
cpp_quote("// IActiveIMM Interfaces.")
|
||||
cpp_quote("")
|
||||
|
||||
/*
|
||||
Disable a warning about lack of polymorphic type support for the following reasons
|
||||
- the only reason to have library block in the file is to make midl accept coclass
|
||||
statement and generate CLSID for CActiveIMM.
|
||||
- the generated dimm_i.c has the clsid and that file is used to have clsid available
|
||||
- the dimm.tlb is not used at all
|
||||
- on top of it, there is no plans to port the app using dimm.idl to 64b platform.
|
||||
*/
|
||||
/*
|
||||
* midl_pragma is unsupported in midl version 3.01 shipped with VC5.0.
|
||||
* It is supported in midl version 5.01 shipped with VC6.0
|
||||
* I could not produce message 2395. Is this needed? W.Briscoe 2001-08-14
|
||||
*/
|
||||
#if (__midl >= 501)
|
||||
midl_pragma warning( disable: 2395) // polymorphic types not supported in the TLB
|
||||
#endif
|
||||
|
||||
#ifndef DO_NO_IMPORTS
|
||||
import "unknwn.idl";
|
||||
#endif
|
||||
|
||||
[
|
||||
uuid(4955DD30-B159-11d0-8FCF-00AA006BCC59),
|
||||
helpstring("ActiveIMM"),
|
||||
lcid(0x0000),
|
||||
version(0.1)
|
||||
]
|
||||
library ActiveIMM
|
||||
{
|
||||
importlib("stdole2.tlb");
|
||||
|
||||
cpp_quote("#include <imm.h>")
|
||||
|
||||
cpp_quote("#if 0")
|
||||
|
||||
typedef WORD LANGID;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
LPSTR lpReading;
|
||||
LPSTR lpWord;
|
||||
} REGISTERWORDA;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
LPWSTR lpReading;
|
||||
LPWSTR lpWord;
|
||||
} REGISTERWORDW;
|
||||
|
||||
#define LF_FACESIZE 32
|
||||
|
||||
typedef struct
|
||||
{
|
||||
LONG lfHeight;
|
||||
LONG lfWidth;
|
||||
LONG lfEscapement;
|
||||
LONG lfOrientation;
|
||||
LONG lfWeight;
|
||||
BYTE lfItalic;
|
||||
BYTE lfUnderline;
|
||||
BYTE lfStrikeOut;
|
||||
BYTE lfCharSet;
|
||||
BYTE lfOutPrecision;
|
||||
BYTE lfClipPrecision;
|
||||
BYTE lfQuality;
|
||||
BYTE lfPitchAndFamily;
|
||||
CHAR lfFaceName[LF_FACESIZE];
|
||||
} LOGFONTA;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
LONG lfHeight;
|
||||
LONG lfWidth;
|
||||
LONG lfEscapement;
|
||||
LONG lfOrientation;
|
||||
LONG lfWeight;
|
||||
BYTE lfItalic;
|
||||
BYTE lfUnderline;
|
||||
BYTE lfStrikeOut;
|
||||
BYTE lfCharSet;
|
||||
BYTE lfOutPrecision;
|
||||
BYTE lfClipPrecision;
|
||||
BYTE lfQuality;
|
||||
BYTE lfPitchAndFamily;
|
||||
WCHAR lfFaceName[LF_FACESIZE];
|
||||
} LOGFONTW;
|
||||
|
||||
typedef DWORD HIMC;
|
||||
typedef DWORD HIMCC;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DWORD dwIndex;
|
||||
DWORD dwStyle;
|
||||
POINT ptCurrentPos;
|
||||
RECT rcArea;
|
||||
} CANDIDATEFORM;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DWORD dwStyle;
|
||||
POINT ptCurrentPos;
|
||||
RECT rcArea;
|
||||
} COMPOSITIONFORM;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DWORD dwSize;
|
||||
DWORD dwStyle;
|
||||
DWORD dwCount;
|
||||
DWORD dwSelection;
|
||||
DWORD dwPageStart;
|
||||
DWORD dwPageSize;
|
||||
DWORD dwOffset[1];
|
||||
} CANDIDATELIST;
|
||||
|
||||
#define STYLE_DESCRIPTION_SIZE 32
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DWORD dwStyle;
|
||||
CHAR szDescription[STYLE_DESCRIPTION_SIZE];
|
||||
} STYLEBUFA;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DWORD dwStyle;
|
||||
WCHAR szDescription[STYLE_DESCRIPTION_SIZE];
|
||||
} STYLEBUFW;
|
||||
|
||||
typedef WORD ATOM;
|
||||
|
||||
cpp_quote("#endif")
|
||||
|
||||
cpp_quote("#if (WINVER < 0x040A)")
|
||||
|
||||
#define IMEMENUITEM_STRING_SIZE 80
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT cbSize;
|
||||
UINT fType;
|
||||
UINT fState;
|
||||
UINT wID;
|
||||
HBITMAP hbmpChecked;
|
||||
HBITMAP hbmpUnchecked;
|
||||
DWORD dwItemData;
|
||||
CHAR szString[IMEMENUITEM_STRING_SIZE];
|
||||
HBITMAP hbmpItem;
|
||||
} IMEMENUITEMINFOA;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT cbSize;
|
||||
UINT fType;
|
||||
UINT fState;
|
||||
UINT wID;
|
||||
HBITMAP hbmpChecked;
|
||||
HBITMAP hbmpUnchecked;
|
||||
DWORD dwItemData;
|
||||
WCHAR szString[IMEMENUITEM_STRING_SIZE];
|
||||
HBITMAP hbmpItem;
|
||||
} IMEMENUITEMINFOW;
|
||||
|
||||
cpp_quote("#endif")
|
||||
|
||||
cpp_quote("#ifndef _DDKIMM_H_")
|
||||
|
||||
typedef struct
|
||||
{
|
||||
HWND hWnd;
|
||||
BOOL fOpen;
|
||||
POINT ptStatusWndPos;
|
||||
POINT ptSoftKbdPos;
|
||||
DWORD fdwConversion;
|
||||
DWORD fdwSentence;
|
||||
union
|
||||
{
|
||||
LOGFONTA A;
|
||||
LOGFONTW W;
|
||||
} lfFont;
|
||||
COMPOSITIONFORM cfCompForm;
|
||||
CANDIDATEFORM cfCandForm[4];
|
||||
HIMCC hCompStr;
|
||||
HIMCC hCandInfo;
|
||||
HIMCC hGuideLine;
|
||||
HIMCC hPrivate;
|
||||
DWORD dwNumMsgBuf;
|
||||
HIMCC hMsgBuf;
|
||||
DWORD fdwInit;
|
||||
DWORD dwReserve[3];
|
||||
} INPUTCONTEXT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DWORD dwPrivateDataSize;
|
||||
DWORD fdwProperty;
|
||||
DWORD fdwConversionCaps;
|
||||
DWORD fdwSentenceCaps;
|
||||
DWORD fdwUICaps;
|
||||
DWORD fdwSCSCaps;
|
||||
DWORD fdwSelectCaps;
|
||||
} IMEINFO;
|
||||
|
||||
cpp_quote("#endif")
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(08C03412-F96B-11d0-A475-00AA006BCC59),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IEnumRegisterWordA : IUnknown
|
||||
{
|
||||
HRESULT Clone([out] IEnumRegisterWordA **ppEnum);
|
||||
HRESULT Next([in] ULONG ulCount, [out] REGISTERWORDA *rgRegisterWord, [out] ULONG *pcFetched);
|
||||
HRESULT Reset();
|
||||
HRESULT Skip([in] ULONG ulCount);
|
||||
};
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(4955DD31-B159-11d0-8FCF-00AA006BCC59),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IEnumRegisterWordW : IUnknown
|
||||
{
|
||||
HRESULT Clone([out] IEnumRegisterWordW **ppEnum);
|
||||
HRESULT Next([in] ULONG ulCount, [out] REGISTERWORDW *rgRegisterWord, [out] ULONG *pcFetched);
|
||||
HRESULT Reset();
|
||||
HRESULT Skip([in] ULONG ulCount);
|
||||
};
|
||||
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(09b5eab0-f997-11d1-93d4-0060b067b86e),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IEnumInputContext : IUnknown
|
||||
{
|
||||
HRESULT Clone([out] IEnumInputContext **ppEnum);
|
||||
HRESULT Next([in] ULONG ulCount, [out] HIMC *rgInputContext, [out] ULONG *pcFetched);
|
||||
HRESULT Reset();
|
||||
HRESULT Skip([in] ULONG ulCount);
|
||||
};
|
||||
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(b3458082-bd00-11d1-939b-0060b067b86e),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IActiveIMMRegistrar : IUnknown
|
||||
{
|
||||
HRESULT RegisterIME([in] REFCLSID rclsid, [in] LANGID lgid, [in] LPCWSTR pszIconFile, [in] LPCWSTR pszDesc);
|
||||
HRESULT UnregisterIME([in] REFCLSID rclsid);
|
||||
};
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(b5cf2cfa-8aeb-11d1-9364-0060b067b86e),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IActiveIMMMessagePumpOwner : IUnknown
|
||||
{
|
||||
HRESULT Start();
|
||||
HRESULT End();
|
||||
HRESULT OnTranslateMessage([in] const MSG *pMsg);
|
||||
HRESULT Pause([out] DWORD *pdwCookie);
|
||||
HRESULT Resume([in] DWORD dwCookie);
|
||||
}
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(08c0e040-62d1-11d1-9326-0060b067b86e),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IActiveIMMApp : IUnknown
|
||||
{
|
||||
HRESULT AssociateContext([in] HWND hWnd, [in] HIMC hIME, [out] HIMC *phPrev);
|
||||
HRESULT ConfigureIMEA([in] HKL hKL, [in] HWND hWnd, [in] DWORD dwMode, [in] REGISTERWORDA *pData);
|
||||
HRESULT ConfigureIMEW([in] HKL hKL, [in] HWND hWnd, [in] DWORD dwMode, [in] REGISTERWORDW *pData);
|
||||
HRESULT CreateContext([out] HIMC *phIMC);
|
||||
HRESULT DestroyContext([in] HIMC hIME);
|
||||
HRESULT EnumRegisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordA **pEnum);
|
||||
HRESULT EnumRegisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordW **pEnum);
|
||||
HRESULT EscapeA([in] HKL hKL, [in] HIMC hIMC, [in] UINT uEscape, [in, out] LPVOID pData, [out] LRESULT *plResult);
|
||||
HRESULT EscapeW([in] HKL hKL, [in] HIMC hIMC, [in] UINT uEscape, [in, out] LPVOID pData, [out] LRESULT *plResult);
|
||||
HRESULT GetCandidateListA([in] HIMC hIMC, [in] DWORD dwIndex, [in] UINT uBufLen, [out] CANDIDATELIST *pCandList, [out] UINT *puCopied);
|
||||
HRESULT GetCandidateListW([in] HIMC hIMC, [in] DWORD dwIndex, [in] UINT uBufLen, [out] CANDIDATELIST *pCandList, [out] UINT *puCopied);
|
||||
HRESULT GetCandidateListCountA([in] HIMC hIMC, [out] DWORD *pdwListSize, [out] DWORD *pdwBufLen);
|
||||
HRESULT GetCandidateListCountW([in] HIMC hIMC, [out] DWORD *pdwListSize, [out] DWORD *pdwBufLen);
|
||||
HRESULT GetCandidateWindow([in] HIMC hIMC, [in] DWORD dwIndex, [out] CANDIDATEFORM *pCandidate);
|
||||
HRESULT GetCompositionFontA([in] HIMC hIMC, [out] LOGFONTA *plf);
|
||||
HRESULT GetCompositionFontW([in] HIMC hIMC, [out] LOGFONTW *plf);
|
||||
HRESULT GetCompositionStringA([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LONG *plCopied, [out] LPVOID pBuf);
|
||||
HRESULT GetCompositionStringW([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LONG *plCopied, [out] LPVOID pBuf);
|
||||
HRESULT GetCompositionWindow([in] HIMC hIMC, [out] COMPOSITIONFORM *pCompForm);
|
||||
HRESULT GetContext([in] HWND hWnd, [out] HIMC *phIMC);
|
||||
HRESULT GetConversionListA([in] HKL hKL, [in] HIMC hIMC, [in] LPSTR pSrc, [in] UINT uBufLen, [in] UINT uFlag, [out] CANDIDATELIST *pDst, [out] UINT *puCopied);
|
||||
HRESULT GetConversionListW([in] HKL hKL, [in] HIMC hIMC, [in] LPWSTR pSrc, [in] UINT uBufLen, [in] UINT uFlag, [out] CANDIDATELIST *pDst, [out] UINT *puCopied);
|
||||
HRESULT GetConversionStatus([in] HIMC hIMC, [out] DWORD *pfdwConversion, [out] DWORD *pfdwSentence);
|
||||
HRESULT GetDefaultIMEWnd([in] HWND hWnd, [out] HWND *phDefWnd);
|
||||
HRESULT GetDescriptionA([in] HKL hKL, [in] UINT uBufLen, [out] LPSTR szDescription, [out] UINT *puCopied);
|
||||
HRESULT GetDescriptionW([in] HKL hKL, [in] UINT uBufLen, [out] LPWSTR szDescription, [out] UINT *puCopied);
|
||||
HRESULT GetGuideLineA([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LPSTR pBuf, [out] DWORD *pdwResult);
|
||||
HRESULT GetGuideLineW([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LPWSTR pBuf, [out] DWORD *pdwResult);
|
||||
HRESULT GetIMEFileNameA([in] HKL hKL, [in] UINT uBufLen, [out] LPSTR szFileName, [out] UINT *puCopied);
|
||||
HRESULT GetIMEFileNameW([in] HKL hKL, [in] UINT uBufLen, [out] LPWSTR szFileName, [out] UINT *puCopied);
|
||||
HRESULT GetOpenStatus([in] HIMC hIMC);
|
||||
HRESULT GetProperty([in] HKL hKL, [in] DWORD fdwIndex, [out] DWORD *pdwProperty);
|
||||
HRESULT GetRegisterWordStyleA([in] HKL hKL, [in] UINT nItem, [out] STYLEBUFA *pStyleBuf, [out] UINT *puCopied);
|
||||
HRESULT GetRegisterWordStyleW([in] HKL hKL, [in] UINT nItem, [out] STYLEBUFW *pStyleBuf, [out] UINT *puCopied);
|
||||
HRESULT GetStatusWindowPos([in] HIMC hIMC, [out] POINT *pptPos);
|
||||
HRESULT GetVirtualKey([in] HWND hWnd, [out] UINT *puVirtualKey);
|
||||
HRESULT InstallIMEA([in] LPSTR szIMEFileName, [in] LPSTR szLayoutText, [out] HKL *phKL);
|
||||
HRESULT InstallIMEW([in] LPWSTR szIMEFileName, [in] LPWSTR szLayoutText, [out] HKL *phKL);
|
||||
HRESULT IsIME([in] HKL hKL);
|
||||
HRESULT IsUIMessageA([in] HWND hWndIME, [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam);
|
||||
HRESULT IsUIMessageW([in] HWND hWndIME, [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam);
|
||||
HRESULT NotifyIME([in] HIMC hIMC, [in] DWORD dwAction, [in] DWORD dwIndex, [in] DWORD dwValue);
|
||||
HRESULT RegisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szRegister);
|
||||
HRESULT RegisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister);
|
||||
HRESULT ReleaseContext([in] HWND hWnd, [in] HIMC hIMC);
|
||||
HRESULT SetCandidateWindow([in] HIMC hIMC, [in] CANDIDATEFORM *pCandidate);
|
||||
HRESULT SetCompositionFontA([in] HIMC hIMC, [in] LOGFONTA *plf);
|
||||
HRESULT SetCompositionFontW([in] HIMC hIMC, [in] LOGFONTW *plf);
|
||||
HRESULT SetCompositionStringA([in] HIMC hIMC, [in] DWORD dwIndex, [in] LPVOID pComp, [in] DWORD dwCompLen, [in] LPVOID pRead, [in] DWORD dwReadLen);
|
||||
HRESULT SetCompositionStringW([in] HIMC hIMC, [in] DWORD dwIndex, [in] LPVOID pComp, [in] DWORD dwCompLen, [in] LPVOID pRead, [in] DWORD dwReadLen);
|
||||
HRESULT SetCompositionWindow([in] HIMC hIMC, [in] COMPOSITIONFORM *pCompForm);
|
||||
HRESULT SetConversionStatus([in] HIMC hIMC, [in] DWORD fdwConversion, [in] DWORD fdwSentence);
|
||||
HRESULT SetOpenStatus([in] HIMC hIMC, [in] BOOL fOpen);
|
||||
HRESULT SetStatusWindowPos([in] HIMC hIMC, [in] POINT *pptPos);
|
||||
HRESULT SimulateHotKey([in] HWND hWnd, [in] DWORD dwHotKeyID);
|
||||
HRESULT UnregisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szUnregister);
|
||||
HRESULT UnregisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szUnregister);
|
||||
|
||||
HRESULT Activate([in] BOOL fRestoreLayout);
|
||||
HRESULT Deactivate();
|
||||
|
||||
HRESULT OnDefWindowProc([in] HWND hWnd, [in] UINT Msg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult);
|
||||
|
||||
HRESULT FilterClientWindows([in] ATOM *aaClassList, [in] UINT uSize);
|
||||
|
||||
HRESULT GetCodePageA([in] HKL hKL, [out] UINT *uCodePage);
|
||||
HRESULT GetLangId([in] HKL hKL, [out] LANGID *plid);
|
||||
|
||||
// win98/nt5 apis
|
||||
HRESULT AssociateContextEx([in] HWND hWnd, [in] HIMC hIMC, [in] DWORD dwFlags);
|
||||
HRESULT DisableIME([in] DWORD idThread);
|
||||
HRESULT GetImeMenuItemsA([in] HIMC hIMC, [in] DWORD dwFlags, [in] DWORD dwType, [in] IMEMENUITEMINFOA *pImeParentMenu, [out] IMEMENUITEMINFOA *pImeMenu, [in] DWORD dwSize, [out] DWORD *pdwResult);
|
||||
HRESULT GetImeMenuItemsW([in] HIMC hIMC, [in] DWORD dwFlags, [in] DWORD dwType, [in] IMEMENUITEMINFOW *pImeParentMenu, [out] IMEMENUITEMINFOW *pImeMenu, [in] DWORD dwSize, [out] DWORD *pdwResult);
|
||||
HRESULT EnumInputContext([in] DWORD idThread, [out] IEnumInputContext **ppEnum);
|
||||
};
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(08C03411-F96B-11d0-A475-00AA006BCC59),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IActiveIMMIME : IUnknown
|
||||
{
|
||||
HRESULT AssociateContext([in] HWND hWnd, [in] HIMC hIME, [out] HIMC *phPrev);
|
||||
HRESULT ConfigureIMEA([in] HKL hKL, [in] HWND hWnd, [in] DWORD dwMode, [in] REGISTERWORDA *pData);
|
||||
HRESULT ConfigureIMEW([in] HKL hKL, [in] HWND hWnd, [in] DWORD dwMode, [in] REGISTERWORDW *pData);
|
||||
HRESULT CreateContext([out] HIMC *phIMC);
|
||||
HRESULT DestroyContext([in] HIMC hIME);
|
||||
HRESULT EnumRegisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordA **pEnum);
|
||||
HRESULT EnumRegisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordW **pEnum);
|
||||
HRESULT EscapeA([in] HKL hKL, [in] HIMC hIMC, [in] UINT uEscape, [in, out] LPVOID pData, [out] LRESULT *plResult);
|
||||
HRESULT EscapeW([in] HKL hKL, [in] HIMC hIMC, [in] UINT uEscape, [in, out] LPVOID pData, [out] LRESULT *plResult);
|
||||
HRESULT GetCandidateListA([in] HIMC hIMC, [in] DWORD dwIndex, [in] UINT uBufLen, [out] CANDIDATELIST *pCandList, [out] UINT *puCopied);
|
||||
HRESULT GetCandidateListW([in] HIMC hIMC, [in] DWORD dwIndex, [in] UINT uBufLen, [out] CANDIDATELIST *pCandList, [out] UINT *puCopied);
|
||||
HRESULT GetCandidateListCountA([in] HIMC hIMC, [out] DWORD *pdwListSize, [out] DWORD *pdwBufLen);
|
||||
HRESULT GetCandidateListCountW([in] HIMC hIMC, [out] DWORD *pdwListSize, [out] DWORD *pdwBufLen);
|
||||
HRESULT GetCandidateWindow([in] HIMC hIMC, [in] DWORD dwIndex, [out] CANDIDATEFORM *pCandidate);
|
||||
HRESULT GetCompositionFontA([in] HIMC hIMC, [out] LOGFONTA *plf);
|
||||
HRESULT GetCompositionFontW([in] HIMC hIMC, [out] LOGFONTW *plf);
|
||||
HRESULT GetCompositionStringA([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LONG *plCopied, [out] LPVOID pBuf);
|
||||
HRESULT GetCompositionStringW([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LONG *plCopied, [out] LPVOID pBuf);
|
||||
HRESULT GetCompositionWindow([in] HIMC hIMC, [out] COMPOSITIONFORM *pCompForm);
|
||||
HRESULT GetContext([in] HWND hWnd, [out] HIMC *phIMC);
|
||||
HRESULT GetConversionListA([in] HKL hKL, [in] HIMC hIMC, [in] LPSTR pSrc, [in] UINT uBufLen, [in] UINT uFlag, [out] CANDIDATELIST *pDst, [out] UINT *puCopied);
|
||||
HRESULT GetConversionListW([in] HKL hKL, [in] HIMC hIMC, [in] LPWSTR pSrc, [in] UINT uBufLen, [in] UINT uFlag, [out] CANDIDATELIST *pDst, [out] UINT *puCopied);
|
||||
HRESULT GetConversionStatus([in] HIMC hIMC, [out] DWORD *pfdwConversion, [out] DWORD *pfdwSentence);
|
||||
HRESULT GetDefaultIMEWnd([in] HWND hWnd, [out] HWND *phDefWnd);
|
||||
HRESULT GetDescriptionA([in] HKL hKL, [in] UINT uBufLen, [out] LPSTR szDescription, [out] UINT *puCopied);
|
||||
HRESULT GetDescriptionW([in] HKL hKL, [in] UINT uBufLen, [out] LPWSTR szDescription, [out] UINT *puCopied);
|
||||
HRESULT GetGuideLineA([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LPSTR pBuf, [out] DWORD *pdwResult);
|
||||
HRESULT GetGuideLineW([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LPWSTR pBuf, [out] DWORD *pdwResult);
|
||||
HRESULT GetIMEFileNameA([in] HKL hKL, [in] UINT uBufLen, [out] LPSTR szFileName, [out] UINT *puCopied);
|
||||
HRESULT GetIMEFileNameW([in] HKL hKL, [in] UINT uBufLen, [out] LPWSTR szFileName, [out] UINT *puCopied);
|
||||
HRESULT GetOpenStatus([in] HIMC hIMC);
|
||||
HRESULT GetProperty([in] HKL hKL, [in] DWORD fdwIndex, [out] DWORD *pdwProperty);
|
||||
HRESULT GetRegisterWordStyleA([in] HKL hKL, [in] UINT nItem, [out] STYLEBUFA *pStyleBuf, [out] UINT *puCopied);
|
||||
HRESULT GetRegisterWordStyleW([in] HKL hKL, [in] UINT nItem, [out] STYLEBUFW *pStyleBuf, [out] UINT *puCopied);
|
||||
HRESULT GetStatusWindowPos([in] HIMC hIMC, [out] POINT *pptPos);
|
||||
HRESULT GetVirtualKey([in] HWND hWnd, [out] UINT *puVirtualKey);
|
||||
HRESULT InstallIMEA([in] LPSTR szIMEFileName, [in] LPSTR szLayoutText, [out] HKL *phKL);
|
||||
HRESULT InstallIMEW([in] LPWSTR szIMEFileName, [in] LPWSTR szLayoutText, [out] HKL *phKL);
|
||||
HRESULT IsIME([in] HKL hKL);
|
||||
HRESULT IsUIMessageA([in] HWND hWndIME, [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam);
|
||||
HRESULT IsUIMessageW([in] HWND hWndIME, [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam);
|
||||
HRESULT NotifyIME([in] HIMC hIMC, [in] DWORD dwAction, [in] DWORD dwIndex, [in] DWORD dwValue);
|
||||
HRESULT RegisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szRegister);
|
||||
HRESULT RegisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister);
|
||||
HRESULT ReleaseContext([in] HWND hWnd, [in] HIMC hIMC);
|
||||
HRESULT SetCandidateWindow([in] HIMC hIMC, [in] CANDIDATEFORM *pCandidate);
|
||||
HRESULT SetCompositionFontA([in] HIMC hIMC, [in] LOGFONTA *plf);
|
||||
HRESULT SetCompositionFontW([in] HIMC hIMC, [in] LOGFONTW *plf);
|
||||
HRESULT SetCompositionStringA([in] HIMC hIMC, [in] DWORD dwIndex, [in] LPVOID pComp, [in] DWORD dwCompLen, [in] LPVOID pRead, [in] DWORD dwReadLen);
|
||||
HRESULT SetCompositionStringW([in] HIMC hIMC, [in] DWORD dwIndex, [in] LPVOID pComp, [in] DWORD dwCompLen, [in] LPVOID pRead, [in] DWORD dwReadLen);
|
||||
HRESULT SetCompositionWindow([in] HIMC hIMC, [in] COMPOSITIONFORM *pCompForm);
|
||||
HRESULT SetConversionStatus([in] HIMC hIMC, [in] DWORD fdwConversion, [in] DWORD fdwSentence);
|
||||
HRESULT SetOpenStatus([in] HIMC hIMC, [in] BOOL fOpen);
|
||||
HRESULT SetStatusWindowPos([in] HIMC hIMC, [in] POINT *pptPos);
|
||||
HRESULT SimulateHotKey([in] HWND hWnd, [in] DWORD dwHotKeyID);
|
||||
HRESULT UnregisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szUnregister);
|
||||
HRESULT UnregisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szUnregister);
|
||||
|
||||
// ime helper methods
|
||||
HRESULT GenerateMessage([in] HIMC hIMC);
|
||||
|
||||
// HIMC and HIMCC management api's
|
||||
HRESULT LockIMC([in] HIMC hIMC, [out] INPUTCONTEXT **ppIMC);
|
||||
HRESULT UnlockIMC([in] HIMC hIMC);
|
||||
HRESULT GetIMCLockCount([in] HIMC hIMC, [out] DWORD *pdwLockCount);
|
||||
HRESULT CreateIMCC([in] DWORD dwSize, [out] HIMCC *phIMCC);
|
||||
HRESULT DestroyIMCC([in] HIMCC hIMCC);
|
||||
HRESULT LockIMCC([in] HIMCC hIMCC, [out] void **ppv);
|
||||
HRESULT UnlockIMCC([in] HIMCC hIMCC);
|
||||
HRESULT ReSizeIMCC([in] HIMCC hIMCC, [in] DWORD dwSize, [out] HIMCC *phIMCC);
|
||||
HRESULT GetIMCCSize([in] HIMCC hIMCC, [out] DWORD *pdwSize);
|
||||
HRESULT GetIMCCLockCount([in] HIMCC hIMCC, [out] DWORD *pdwLockCount);
|
||||
|
||||
// hot key manipulation api's
|
||||
HRESULT GetHotKey([in] DWORD dwHotKeyID, [out] UINT *puModifiers, [out] UINT *puVKey, [out] HKL *phKL);
|
||||
HRESULT SetHotKey([in] DWORD dwHotKeyID, [in] UINT uModifiers, [in] UINT uVKey, [in] HKL hKL);
|
||||
|
||||
// soft keyboard api's
|
||||
HRESULT CreateSoftKeyboard([in] UINT uType, [in] HWND hOwner, [in] int x, [in] int y, [out] HWND *phSoftKbdWnd);
|
||||
HRESULT DestroySoftKeyboard([in] HWND hSoftKbdWnd);
|
||||
HRESULT ShowSoftKeyboard([in] HWND hSoftKbdWnd, [in] int nCmdShow);
|
||||
|
||||
HRESULT GetCodePageA([in] HKL hKL, [out] UINT *uCodePage);
|
||||
HRESULT GetLangId([in] HKL hKL, [out] LANGID *plid);
|
||||
|
||||
HRESULT KeybdEvent([in] LANGID lgidIME, [in] BYTE bVk, [in] BYTE bScan, [in] DWORD dwFlags, [in] DWORD dwExtraInfo);
|
||||
|
||||
HRESULT LockModal();
|
||||
HRESULT UnlockModal();
|
||||
|
||||
// win98/nt5 apis
|
||||
HRESULT AssociateContextEx([in] HWND hWnd, [in] HIMC hIMC, [in] DWORD dwFlags);
|
||||
HRESULT DisableIME([in] DWORD idThread);
|
||||
HRESULT GetImeMenuItemsA([in] HIMC hIMC, [in] DWORD dwFlags, [in] DWORD dwType, [in] IMEMENUITEMINFOA *pImeParentMenu, [out] IMEMENUITEMINFOA *pImeMenu, [in] DWORD dwSize, [out] DWORD *pdwResult);
|
||||
HRESULT GetImeMenuItemsW([in] HIMC hIMC, [in] DWORD dwFlags, [in] DWORD dwType, [in] IMEMENUITEMINFOW *pImeParentMenu, [out] IMEMENUITEMINFOW *pImeMenu, [in] DWORD dwSize, [out] DWORD *pdwResult);
|
||||
HRESULT EnumInputContext([in] DWORD idThread, [out] IEnumInputContext **ppEnum);
|
||||
HRESULT RequestMessageA([in] HIMC hIMC, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult);
|
||||
HRESULT RequestMessageW([in] HIMC hIMC, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult);
|
||||
|
||||
HRESULT SendIMCA([in] HWND hWnd, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult);
|
||||
HRESULT SendIMCW([in] HWND hWnd, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult);
|
||||
|
||||
HRESULT IsSleeping();
|
||||
};
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(6FE20962-D077-11d0-8FE7-00AA006BCC59),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IActiveIME : IUnknown
|
||||
{
|
||||
HRESULT Inquire([in] DWORD dwSystemInfoFlags, [out] IMEINFO *pIMEInfo, [out] LPWSTR szWndClass, [out] DWORD *pdwPrivate);
|
||||
HRESULT ConversionList([in] HIMC hIMC, [in] LPWSTR szSource, [in] UINT uFlag, [in] UINT uBufLen, [out] CANDIDATELIST *pDest, [out] UINT *puCopied);
|
||||
HRESULT Configure([in] HKL hKL, [in] HWND hWnd, [in] DWORD dwMode, [in] REGISTERWORDW *pRegisterWord);
|
||||
HRESULT Destroy([in] UINT uReserved);
|
||||
HRESULT Escape([in] HIMC hIMC, [in] UINT uEscape, [in, out] void *pData, [out] LRESULT *plResult);
|
||||
HRESULT SetActiveContext([in] HIMC hIMC, [in] BOOL fFlag);
|
||||
HRESULT ProcessKey([in] HIMC hIMC, [in] UINT uVirKey, [in] DWORD lParam, [in] BYTE *pbKeyState);
|
||||
HRESULT Notify([in] HIMC hIMC, [in] DWORD dwAction, [in] DWORD dwIndex, [in] DWORD dwValue);
|
||||
HRESULT Select([in] HIMC hIMC, [in] BOOL fSelect);
|
||||
HRESULT SetCompositionString([in] HIMC hIMC, [in] DWORD dwIndex, [in] void *pComp, [in] DWORD dwCompLen, [in] void *pRead, [in] DWORD dwReadLen);
|
||||
HRESULT ToAsciiEx([in] UINT uVirKey, [in] UINT uScanCode, [in] BYTE *pbKeyState, [in] UINT fuState, [in] HIMC hIMC, [out] DWORD *pdwTransBuf, [out] UINT *puSize);
|
||||
HRESULT RegisterWord([in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szString);
|
||||
HRESULT UnregisterWord([in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szString);
|
||||
HRESULT GetRegisterWordStyle([in] UINT nItem, [out] STYLEBUFW *pStyleBuf, [out] UINT *puBufSize);
|
||||
HRESULT EnumRegisterWord([in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordW **ppEnum);
|
||||
HRESULT GetCodePageA([out] UINT *uCodePage);
|
||||
HRESULT GetLangId([out] LANGID *plid);
|
||||
};
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(e1c4bf0e-2d53-11d2-93e1-0060b067b86e),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IActiveIME2 : IActiveIME
|
||||
{
|
||||
HRESULT Sleep();
|
||||
HRESULT Unsleep([in] BOOL fDead);
|
||||
};
|
||||
|
||||
[
|
||||
uuid(4955DD33-B159-11d0-8FCF-00AA006BCC59),
|
||||
]
|
||||
coclass CActiveIMM
|
||||
{
|
||||
[default] interface IActiveIMMApp;
|
||||
interface IActiveIMMIME;
|
||||
interface IActiveIMMRegistrar;
|
||||
interface IActiveIMMMessagePumpOwner;
|
||||
};
|
||||
}
|
||||
@@ -1357,7 +1357,7 @@ win_line(
|
||||
#endif
|
||||
)
|
||||
{
|
||||
screen_line(screen_row, wp->w_wincol, col, -(int)wp->w_width,
|
||||
screen_line(screen_row, wp->w_wincol, col, -wp->w_width,
|
||||
screen_line_flags);
|
||||
// Pretend we have finished updating the window. Except when
|
||||
// 'cursorcolumn' is set.
|
||||
@@ -2800,7 +2800,7 @@ win_line(
|
||||
if (((wp->w_p_cuc
|
||||
&& (int)wp->w_virtcol >= VCOL_HLC - eol_hl_off
|
||||
&& (int)wp->w_virtcol <
|
||||
wp->w_width * (row - startrow + 1) + v
|
||||
(long)wp->w_width * (row - startrow + 1) + v
|
||||
&& lnum != wp->w_cursor.lnum)
|
||||
|| draw_color_col
|
||||
|| win_attr != 0)
|
||||
@@ -2846,7 +2846,7 @@ win_line(
|
||||
#endif
|
||||
|
||||
screen_line(screen_row, wp->w_wincol, col,
|
||||
(int)wp->w_width, screen_line_flags);
|
||||
wp->w_width, screen_line_flags);
|
||||
row++;
|
||||
|
||||
// Update w_cline_height and w_cline_folded if the cursor line was
|
||||
@@ -3147,11 +3147,11 @@ win_line(
|
||||
{
|
||||
#ifdef FEAT_CONCEAL
|
||||
screen_line(screen_row, wp->w_wincol, col - boguscols,
|
||||
(int)wp->w_width, screen_line_flags);
|
||||
wp->w_width, screen_line_flags);
|
||||
boguscols = 0;
|
||||
#else
|
||||
screen_line(screen_row, wp->w_wincol, col,
|
||||
(int)wp->w_width, screen_line_flags);
|
||||
wp->w_width, screen_line_flags);
|
||||
#endif
|
||||
++row;
|
||||
++screen_row;
|
||||
|
||||
@@ -462,12 +462,13 @@ win_redr_status(win_T *wp, int ignore_pum UNUSED)
|
||||
p = NameBuff;
|
||||
len = (int)STRLEN(p);
|
||||
|
||||
if (bt_help(wp->w_buffer)
|
||||
if ((bt_help(wp->w_buffer)
|
||||
#ifdef FEAT_QUICKFIX
|
||||
|| wp->w_p_pvw
|
||||
|| wp->w_p_pvw
|
||||
#endif
|
||||
|| bufIsChanged(wp->w_buffer)
|
||||
|| wp->w_buffer->b_p_ro)
|
||||
|| bufIsChanged(wp->w_buffer)
|
||||
|| wp->w_buffer->b_p_ro)
|
||||
&& len < MAXPATHL - 1)
|
||||
*(p + len++) = ' ';
|
||||
if (bt_help(wp->w_buffer))
|
||||
{
|
||||
@@ -537,7 +538,7 @@ win_redr_status(win_T *wp, int ignore_pum UNUSED)
|
||||
this_ru_col + wp->w_wincol, fillchar, fillchar, attr);
|
||||
|
||||
if (get_keymap_str(wp, (char_u *)"<%s>", NameBuff, MAXPATHL)
|
||||
&& (int)(this_ru_col - len) > (int)(STRLEN(NameBuff) + 1))
|
||||
&& (this_ru_col - len) > (int)(STRLEN(NameBuff) + 1))
|
||||
screen_puts(NameBuff, row, (int)(this_ru_col - STRLEN(NameBuff)
|
||||
- 1 + wp->w_wincol), attr);
|
||||
|
||||
@@ -796,7 +797,7 @@ win_redr_ruler(win_T *wp, int always, int ignore_pum)
|
||||
i = redraw_cmdline;
|
||||
screen_fill(row, row + 1,
|
||||
this_ru_col + off + (int)STRLEN(buffer),
|
||||
(int)(off + width),
|
||||
(off + width),
|
||||
fillchar, fillchar, attr);
|
||||
// don't redraw the cmdline because of showing the ruler
|
||||
redraw_cmdline = i;
|
||||
@@ -1037,8 +1038,7 @@ redraw_win_toolbar(win_T *wp)
|
||||
}
|
||||
wp->w_winbar_items[item_idx].wb_menu = NULL; // end marker
|
||||
|
||||
screen_line(wp->w_winrow, wp->w_wincol, (int)wp->w_width,
|
||||
(int)wp->w_width, 0);
|
||||
screen_line(wp->w_winrow, wp->w_wincol, wp->w_width, wp->w_width, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1371,8 +1371,7 @@ fold_line(
|
||||
}
|
||||
#endif
|
||||
|
||||
screen_line(row + W_WINROW(wp), wp->w_wincol, (int)wp->w_width,
|
||||
(int)wp->w_width, 0);
|
||||
screen_line(row + W_WINROW(wp), wp->w_wincol, wp->w_width, wp->w_width, 0);
|
||||
|
||||
// Update w_cline_height and w_cline_folded if the cursor line was
|
||||
// updated (saves a call to plines() later).
|
||||
@@ -1814,10 +1813,11 @@ win_update(win_T *wp)
|
||||
// When topline didn't change, find first entry in w_lines[] that
|
||||
// needs updating.
|
||||
|
||||
// try to find wp->w_topline in wp->w_lines[].wl_lnum
|
||||
// Try to find wp->w_topline in wp->w_lines[].wl_lnum. The check
|
||||
// for "Rows" is in case "wl_size" is incorrect somehow.
|
||||
j = -1;
|
||||
row = 0;
|
||||
for (i = 0; i < wp->w_lines_valid; i++)
|
||||
for (i = 0; i < wp->w_lines_valid && i < Rows; i++)
|
||||
{
|
||||
if (wp->w_lines[i].wl_valid
|
||||
&& wp->w_lines[i].wl_lnum == wp->w_topline)
|
||||
@@ -1847,6 +1847,8 @@ win_update(win_T *wp)
|
||||
// ... but don't delete new filler lines.
|
||||
row -= wp->w_topfill;
|
||||
#endif
|
||||
if (row > Rows) // just in case
|
||||
row = Rows;
|
||||
if (row > 0)
|
||||
{
|
||||
check_for_delay(FALSE);
|
||||
@@ -2538,6 +2540,11 @@ win_update(win_T *wp)
|
||||
eof = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
// Safety check: if any of the wl_size values is wrong we might go over
|
||||
// the end of w_lines[].
|
||||
if (idx >= Rows)
|
||||
break;
|
||||
}
|
||||
|
||||
// End of loop over all window lines.
|
||||
@@ -2547,17 +2554,17 @@ win_update(win_T *wp)
|
||||
// See the version that was fixed.
|
||||
if (use_vtp() && get_conpty_fix_type() < 1)
|
||||
{
|
||||
int i;
|
||||
int k;
|
||||
|
||||
for (i = 0; i < Rows; ++i)
|
||||
for (k = 0; k < Rows; ++k)
|
||||
if (enc_utf8)
|
||||
if ((*mb_off2cells)(LineOffset[i] + Columns - 2,
|
||||
LineOffset[i] + screen_Columns) > 1)
|
||||
screen_draw_rectangle(i, Columns - 2, 1, 2, FALSE);
|
||||
if ((*mb_off2cells)(LineOffset[k] + Columns - 2,
|
||||
LineOffset[k] + screen_Columns) > 1)
|
||||
screen_draw_rectangle(k, Columns - 2, 1, 2, FALSE);
|
||||
else
|
||||
screen_draw_rectangle(i, Columns - 1, 1, 1, FALSE);
|
||||
screen_draw_rectangle(k, Columns - 1, 1, 1, FALSE);
|
||||
else
|
||||
screen_char(LineOffset[i] + Columns - 1, i, Columns - 1);
|
||||
screen_char(LineOffset[k] + Columns - 1, k, Columns - 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
45
src/edit.c
45
src/edit.c
@@ -523,7 +523,7 @@ edit(
|
||||
|
||||
if (
|
||||
#ifdef FEAT_VARTABS
|
||||
(int)curwin->w_wcol < mincol - tabstop_at(
|
||||
curwin->w_wcol < mincol - tabstop_at(
|
||||
get_nolist_virtcol(), curbuf->b_p_ts,
|
||||
curbuf->b_p_vts_array)
|
||||
#else
|
||||
@@ -1055,8 +1055,9 @@ doESCkey:
|
||||
case K_IGNORE: // Something mapped to nothing
|
||||
break;
|
||||
|
||||
case K_COMMAND: // <Cmd>command<CR>
|
||||
do_cmdline(NULL, getcmdkeycmd, NULL, 0);
|
||||
case K_COMMAND: // <Cmd>command<CR>
|
||||
case K_SCRIPT_COMMAND: // <ScriptCmd>command<CR>
|
||||
do_cmdkey_command(c, 0);
|
||||
#ifdef FEAT_TERMINAL
|
||||
if (term_use_loop())
|
||||
// Started a terminal that gets the input, exit Insert mode.
|
||||
@@ -1908,6 +1909,11 @@ get_literal(int noReduceKeys)
|
||||
if ((nc == ESC || nc == CSI) && !noReduceKeys)
|
||||
nc = decodeModifyOtherKeys(nc);
|
||||
|
||||
if ((mod_mask & ~MOD_MASK_SHIFT) != 0)
|
||||
// A character with non-Shift modifiers should not be a valid
|
||||
// character for i_CTRL-V_digit.
|
||||
break;
|
||||
|
||||
#ifdef FEAT_CMDL_INFO
|
||||
if (!(State & CMDLINE) && MB_BYTE2LEN_CHECK(nc) == 1)
|
||||
add_to_showcmd(nc);
|
||||
@@ -1985,7 +1991,11 @@ get_literal(int noReduceKeys)
|
||||
--allow_keys;
|
||||
#endif
|
||||
if (nc)
|
||||
{
|
||||
vungetc(nc);
|
||||
// A character typed with i_CTRL-V_digit cannot have modifiers.
|
||||
mod_mask = 0;
|
||||
}
|
||||
got_int = FALSE; // CTRL-C typed after CTRL-V is not an interrupt
|
||||
return cc;
|
||||
}
|
||||
@@ -2042,11 +2052,7 @@ insert_special(
|
||||
* stop and defer processing to the "normal" mechanism.
|
||||
* '0' and '^' are special, because they can be followed by CTRL-D.
|
||||
*/
|
||||
#ifdef EBCDIC
|
||||
# define ISSPECIAL(c) ((c) < ' ' || (c) == '0' || (c) == '^')
|
||||
#else
|
||||
# define ISSPECIAL(c) ((c) < ' ' || (c) >= DEL || (c) == '0' || (c) == '^')
|
||||
#endif
|
||||
#define ISSPECIAL(c) ((c) < ' ' || (c) >= DEL || (c) == '0' || (c) == '^')
|
||||
|
||||
/*
|
||||
* "flags": INSCHAR_FORMAT - force formatting
|
||||
@@ -2124,7 +2130,7 @@ insertchar(
|
||||
return;
|
||||
|
||||
// Check whether this character should end a comment.
|
||||
if (did_ai && (int)c == end_comment_pending)
|
||||
if (did_ai && c == end_comment_pending)
|
||||
{
|
||||
char_u *line;
|
||||
char_u lead_end[COM_MAX_LEN]; // end-comment string
|
||||
@@ -2897,7 +2903,7 @@ stuff_inserted(
|
||||
// may want to stuff the command character, to start Insert mode
|
||||
if (c != NUL)
|
||||
stuffcharReadbuff(c);
|
||||
if ((esc_ptr = (char_u *)vim_strrchr(ptr, ESC)) != NULL)
|
||||
if ((esc_ptr = vim_strrchr(ptr, ESC)) != NULL)
|
||||
*esc_ptr = NUL; // remove the ESC
|
||||
|
||||
// when the last char is either "0" or "^" it will be quoted if no ESC
|
||||
@@ -2916,9 +2922,8 @@ stuff_inserted(
|
||||
stuffReadbuff(ptr);
|
||||
// a trailing "0" is inserted as "<C-V>048", "^" as "<C-V>^"
|
||||
if (last)
|
||||
stuffReadbuff((char_u *)(last == '0'
|
||||
? IF_EB("\026\060\064\070", CTRL_V_STR "xf0")
|
||||
: IF_EB("\026^", CTRL_V_STR "^")));
|
||||
stuffReadbuff(
|
||||
(char_u *)(last == '0' ? "\026\060\064\070" : "\026^"));
|
||||
}
|
||||
while (--count > 0);
|
||||
|
||||
@@ -3306,15 +3311,11 @@ hkmap(int c)
|
||||
return ' '; // \"a --> ' ' -- / --
|
||||
else if (c == 252)
|
||||
return ' '; // \"u --> ' ' -- / --
|
||||
#ifdef EBCDIC
|
||||
else if (islower(c))
|
||||
#else
|
||||
// NOTE: islower() does not do the right thing for us on Linux so we
|
||||
// do this the same was as 5.7 and previous, so it works correctly on
|
||||
// all systems. Specifically, the e.g. Delete and Arrow keys are
|
||||
// munged and won't work if e.g. searching for Hebrew text.
|
||||
else if (c >= 'a' && c <= 'z')
|
||||
#endif
|
||||
return (int)(map[CharOrdLow(c)] + p_aleph);
|
||||
else
|
||||
return c;
|
||||
@@ -3336,12 +3337,7 @@ hkmap(int c)
|
||||
default: {
|
||||
static char str[] = "zqbcxlsjphmkwonu ydafe rig";
|
||||
|
||||
#ifdef EBCDIC
|
||||
// see note about islower() above
|
||||
if (!islower(c))
|
||||
#else
|
||||
if (c < 'a' || c > 'z')
|
||||
#endif
|
||||
return c;
|
||||
c = str[CharOrdLow(c)];
|
||||
break;
|
||||
@@ -4214,7 +4210,7 @@ ins_bs(
|
||||
}
|
||||
else
|
||||
want_vcol = tabstop_start(want_vcol, get_sts_value(),
|
||||
curbuf->b_p_vsts_array);
|
||||
curbuf->b_p_vsts_array);
|
||||
#else
|
||||
if (p_sta && in_indent)
|
||||
ts = (int)get_sw_value(curbuf);
|
||||
@@ -4442,7 +4438,8 @@ bracketed_paste(paste_mode_T mode, int drop, garray_T *gap)
|
||||
break;
|
||||
|
||||
case PASTE_EX:
|
||||
if (gap != NULL && ga_grow(gap, idx) == OK)
|
||||
// add one for the NUL that is going to be appended
|
||||
if (gap != NULL && ga_grow(gap, idx + 1) == OK)
|
||||
{
|
||||
mch_memmove((char *)gap->ga_data + gap->ga_len,
|
||||
buf, (size_t)idx);
|
||||
|
||||
42
src/errors.h
42
src/errors.h
@@ -747,7 +747,10 @@ EXTERN char e_didnt_get_block_nr_one[]
|
||||
INIT(= N_("E298: Didn't get block nr 1?"));
|
||||
EXTERN char e_didnt_get_block_nr_two[]
|
||||
INIT(= N_("E298: Didn't get block nr 2?"));
|
||||
// E299 unused
|
||||
#ifdef FEAT_PERL
|
||||
EXTERN char e_perl_evaluation_forbidden_in_sandbox_without_safe_module[]
|
||||
INIT(= N_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
|
||||
#endif
|
||||
EXTERN char e_swap_file_already_exists_symlink_attack[]
|
||||
INIT(= N_("E300: Swap file already exists (symlink attack?)"));
|
||||
EXTERN char e_oops_lost_the_swap_file[]
|
||||
@@ -1148,6 +1151,8 @@ EXTERN char e_region_is_guarded_cannot_modify[]
|
||||
#endif
|
||||
EXTERN char e_ambiguous_use_of_user_defined_command[]
|
||||
INIT(= N_("E464: Ambiguous use of user-defined command"));
|
||||
EXTERN char e_ambiguous_use_of_user_defined_command_str[]
|
||||
INIT(= N_("E464: Ambiguous use of user-defined command: %s"));
|
||||
EXTERN char e_winsize_requires_two_number_arguments[]
|
||||
INIT(= N_("E465: :winsize requires two number arguments"));
|
||||
EXTERN char e_winpos_requires_two_number_arguments[]
|
||||
@@ -1239,6 +1244,7 @@ EXTERN char e_no_autocommand_match_name_to_substitute_for_amatch[]
|
||||
EXTERN char e_no_source_file_name_to_substitute_for_sfile[]
|
||||
INIT(= N_("E498: no :source file name to substitute for \"<sfile>\""));
|
||||
EXTERN char e_empty_file_name_for_percent_or_hash_only_works_with_ph[]
|
||||
// xgettext:no-c-format
|
||||
INIT(= N_("E499: Empty file name for '%' or '#', only works with \":p:h\""));
|
||||
EXTERN char e_evaluates_to_an_empty_string[]
|
||||
INIT(= N_("E500: Evaluates to an empty string"));
|
||||
@@ -2041,6 +2047,7 @@ EXTERN char e_id_not_found_nr[]
|
||||
#endif
|
||||
#ifdef FEAT_EVAL
|
||||
EXTERN char e_cannot_use_percent_with_float[]
|
||||
// xgettext:no-c-format
|
||||
INIT(= N_("E804: Cannot use '%' with Float"));
|
||||
#endif
|
||||
#ifdef FEAT_FLOAT
|
||||
@@ -2219,6 +2226,7 @@ EXTERN char e_not_allowed_for_terminal_in_popup_window[]
|
||||
INIT(= N_("E863: Not allowed for a terminal in a popup window"));
|
||||
#endif
|
||||
EXTERN char e_percent_hash_can_only_be_followed_by_zero_one_two_automatic_engine_will_be_used[]
|
||||
// xgettext:no-c-format
|
||||
INIT(= N_("E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be used"));
|
||||
EXTERN char e_nfa_regexp_end_encountered_prematurely[]
|
||||
INIT(= N_("E865: (NFA) Regexp end encountered prematurely"));
|
||||
@@ -2464,6 +2472,7 @@ EXTERN char e_file_changed_while_writing[]
|
||||
EXTERN char e_cannot_convert_between_str_and_str[]
|
||||
INIT(= N_("E950: Cannot convert between %s and %s"));
|
||||
EXTERN char e_percent_value_too_large[]
|
||||
// xgettext:no-c-format
|
||||
INIT(= N_("E951: \\% value too large"));
|
||||
#if defined(FEAT_EVAL) && defined(FEAT_QUICKFIX)
|
||||
EXTERN char e_autocommand_caused_recursive_behavior[]
|
||||
@@ -2690,6 +2699,7 @@ EXTERN char e_catch_unreachable_after_catch_all[]
|
||||
EXTERN char e_cannot_use_reserved_name[]
|
||||
INIT(= N_("E1034: Cannot use reserved name %s"));
|
||||
EXTERN char e_percent_requires_number_arguments[]
|
||||
// xgettext:no-c-format
|
||||
INIT(= N_("E1035: % requires number arguments"));
|
||||
EXTERN char e_char_requires_number_or_float_arguments[]
|
||||
INIT(= N_("E1036: %c requires number or float arguments"));
|
||||
@@ -2711,6 +2721,8 @@ EXTERN char e_invalid_command_after_export[]
|
||||
INIT(= N_("E1043: Invalid command after :export"));
|
||||
EXTERN char e_export_with_invalid_argument[]
|
||||
INIT(= N_("E1044: Export with invalid argument"));
|
||||
// E1045 not used
|
||||
// E1046 not used
|
||||
EXTERN char e_syntax_error_in_import_str[]
|
||||
INIT(= N_("E1047: Syntax error in import: %s"));
|
||||
EXTERN char e_item_not_found_in_script_str[]
|
||||
@@ -2779,6 +2791,7 @@ EXTERN char e_missing_argument_type_for_str[]
|
||||
// E1080 unused
|
||||
EXTERN char e_cannot_unlet_str[]
|
||||
INIT(= N_("E1081: Cannot unlet %s"));
|
||||
// E1082 unused
|
||||
EXTERN char e_missing_backtick[]
|
||||
INIT(= N_("E1083: Missing backtick"));
|
||||
EXTERN char e_cannot_delete_vim9_script_function_str[]
|
||||
@@ -2796,7 +2809,8 @@ EXTERN char e_cannot_assign_to_argument[]
|
||||
INIT(= N_("E1090: Cannot assign to argument %s"));
|
||||
EXTERN char e_function_is_not_compiled_str[]
|
||||
INIT(= N_("E1091: Function is not compiled: %s"));
|
||||
// E1092 unused
|
||||
EXTERN char e_cannot_nest_redir[]
|
||||
INIT(= N_("E1092: Cannot nest :redir"));
|
||||
EXTERN char e_expected_nr_items_but_got_nr[]
|
||||
INIT(= N_("E1093: Expected %d items but got %d"));
|
||||
EXTERN char e_import_can_only_be_used_in_script[]
|
||||
@@ -2849,10 +2863,10 @@ EXTERN char e_assert_fails_fifth_argument[]
|
||||
INIT(= N_("E1116: \"assert_fails()\" fifth argument must be a string"));
|
||||
EXTERN char e_cannot_use_bang_with_nested_def[]
|
||||
INIT(= N_("E1117: Cannot use ! with nested :def"));
|
||||
EXTERN char e_cannot_change_list[]
|
||||
INIT(= N_("E1118: Cannot change list"));
|
||||
EXTERN char e_cannot_change_list_item[]
|
||||
INIT(= N_("E1119: Cannot change list item"));
|
||||
EXTERN char e_cannot_change_locked_list[]
|
||||
INIT(= N_("E1118: Cannot change locked list"));
|
||||
EXTERN char e_cannot_change_locked_list_item[]
|
||||
INIT(= N_("E1119: Cannot change locked list item"));
|
||||
EXTERN char e_cannot_change_dict[]
|
||||
INIT(= N_("E1120: Cannot change dict"));
|
||||
EXTERN char e_cannot_change_dict_item[]
|
||||
@@ -2899,6 +2913,8 @@ EXTERN char e_for_argument_must_be_sequence_of_lists[]
|
||||
INIT(= N_("E1140: :for argument must be a sequence of lists"));
|
||||
EXTERN char e_indexable_type_required[]
|
||||
INIT(= N_("E1141: Indexable type required"));
|
||||
EXTERN char e_calling_test_garbagecollect_now_while_v_testing_is_not_set[]
|
||||
INIT(= N_("E1142: Calling test_garbagecollect_now() while v:testing is not set"));
|
||||
EXTERN char e_empty_expression_str[]
|
||||
INIT(= N_("E1143: Empty expression: \"%s\""));
|
||||
EXTERN char e_command_str_not_followed_by_white_space_str[]
|
||||
@@ -2932,7 +2948,7 @@ EXTERN char e_cannot_change_arglist_recursively[]
|
||||
EXTERN char e_missing_return_type[]
|
||||
INIT(= N_("E1157: Missing return type"));
|
||||
EXTERN char e_cannot_use_flatten_in_vim9_script[]
|
||||
INIT(= N_("E1158: Cannot use flatten() in Vim9 script"));
|
||||
INIT(= N_("E1158: Cannot use flatten() in Vim9 script, use flattennew()"));
|
||||
#endif
|
||||
EXTERN char e_cannot_split_window_when_closing_buffer[]
|
||||
INIT(= N_("E1159: Cannot split a window when closing the buffer"));
|
||||
@@ -2959,8 +2975,8 @@ EXTERN char e_argument_name_shadows_existing_variable_str[]
|
||||
INIT(= N_("E1167: Argument name shadows existing variable: %s"));
|
||||
EXTERN char e_argument_already_declared_in_script_str[]
|
||||
INIT(= N_("E1168: Argument already declared in the script: %s"));
|
||||
EXTERN char e_import_as_name_not_supported_here[]
|
||||
INIT(= N_("E1169: 'import * as {name}' not supported here"));
|
||||
EXTERN char e_expression_too_recursive_str[]
|
||||
INIT(= N_("E1169: Expression too recursive: %s"));
|
||||
EXTERN char e_cannot_use_hash_curly_to_start_comment[]
|
||||
INIT(= N_("E1170: Cannot use #{ to start a comment"));
|
||||
EXTERN char e_missing_end_block[]
|
||||
@@ -2997,8 +3013,6 @@ EXTERN char e_cannot_use_range_with_assignment_operator_str[]
|
||||
#ifdef FEAT_EVAL
|
||||
EXTERN char e_blob_not_set[]
|
||||
INIT(= N_("E1184: Blob not set"));
|
||||
EXTERN char e_cannot_nest_redir[]
|
||||
INIT(= N_("E1185: Cannot nest :redir"));
|
||||
EXTERN char e_missing_redir_end[]
|
||||
INIT(= N_("E1185: Missing :redir END"));
|
||||
EXTERN char e_expression_does_not_result_in_value_str[]
|
||||
@@ -3203,8 +3217,10 @@ EXTERN char e_cannot_import_dot_vim_without_using_as[]
|
||||
INIT(= N_("E1261: Cannot import .vim without using \"as\""));
|
||||
EXTERN char e_cannot_import_same_script_twice_str[]
|
||||
INIT(= N_("E1262: Cannot import the same script twice: %s"));
|
||||
EXTERN char e_using_autoload_in_script_not_under_autoload_directory[]
|
||||
INIT(= N_("E1263: Using autoload in a script not under an autoload directory"));
|
||||
EXTERN char e_cannot_use_name_with_hash_in_vim9_script_use_export_instead[]
|
||||
INIT(= N_("E1263: cannot use name with # in Vim9 script, use export instead"));
|
||||
EXTERN char e_autoload_import_cannot_use_absolute_or_relative_path[]
|
||||
INIT(= N_("E1264: Autoload import cannot use absolute or relative path: %s"));
|
||||
EXTERN char e_cannot_use_partial_here[]
|
||||
INIT(= N_("E1265: Cannot use a partial here"));
|
||||
#endif
|
||||
|
||||
189
src/eval.c
189
src/eval.c
@@ -111,13 +111,6 @@ eval_init(void)
|
||||
{
|
||||
evalvars_init();
|
||||
func_init();
|
||||
|
||||
#ifdef EBCDIC
|
||||
/*
|
||||
* Sort the function table, to enable binary search.
|
||||
*/
|
||||
sortFunctions();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(EXITFREE) || defined(PROTO)
|
||||
@@ -291,7 +284,7 @@ eval_expr_typval(typval_T *expr, typval_T *argv, int argc, typval_T *rettv)
|
||||
}
|
||||
else
|
||||
{
|
||||
s = tv_get_string_buf_chk(expr, buf);
|
||||
s = tv_get_string_buf_chk_strict(expr, buf, in_vim9script());
|
||||
if (s == NULL)
|
||||
return FAIL;
|
||||
s = skipwhite(s);
|
||||
@@ -555,14 +548,16 @@ eval_to_string(
|
||||
char_u *
|
||||
eval_to_string_safe(
|
||||
char_u *arg,
|
||||
int use_sandbox)
|
||||
int use_sandbox,
|
||||
int keep_script_version)
|
||||
{
|
||||
char_u *retval;
|
||||
funccal_entry_T funccal_entry;
|
||||
int save_sc_version = current_sctx.sc_version;
|
||||
int save_garbage = may_garbage_collect;
|
||||
|
||||
current_sctx.sc_version = 1;
|
||||
if (!keep_script_version)
|
||||
current_sctx.sc_version = 1;
|
||||
save_funccal(&funccal_entry);
|
||||
if (use_sandbox)
|
||||
++sandbox;
|
||||
@@ -625,6 +620,63 @@ eval_expr(char_u *arg, exarg_T *eap)
|
||||
return tv;
|
||||
}
|
||||
|
||||
/*
|
||||
* "*arg" points to what can be a function name in the form of "import.Name" or
|
||||
* "Funcref". Return the name of the function. Set "tofree" to something that
|
||||
* was allocated.
|
||||
* If "verbose" is FALSE no errors are given.
|
||||
* Return NULL for any failure.
|
||||
*/
|
||||
static char_u *
|
||||
deref_function_name(
|
||||
char_u **arg,
|
||||
char_u **tofree,
|
||||
evalarg_T *evalarg,
|
||||
int verbose)
|
||||
{
|
||||
typval_T ref;
|
||||
char_u *name = *arg;
|
||||
|
||||
ref.v_type = VAR_UNKNOWN;
|
||||
if (eval7(arg, &ref, evalarg, FALSE) == FAIL)
|
||||
return NULL;
|
||||
if (*skipwhite(*arg) != NUL)
|
||||
{
|
||||
if (verbose)
|
||||
semsg(_(e_trailing_characters_str), *arg);
|
||||
name = NULL;
|
||||
}
|
||||
else if (ref.v_type == VAR_FUNC && ref.vval.v_string != NULL)
|
||||
{
|
||||
name = ref.vval.v_string;
|
||||
ref.vval.v_string = NULL;
|
||||
*tofree = name;
|
||||
}
|
||||
else if (ref.v_type == VAR_PARTIAL && ref.vval.v_partial != NULL)
|
||||
{
|
||||
if (ref.vval.v_partial->pt_argc > 0
|
||||
|| ref.vval.v_partial->pt_dict != NULL)
|
||||
{
|
||||
if (verbose)
|
||||
emsg(_(e_cannot_use_partial_here));
|
||||
name = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
name = vim_strsave(partial_name(ref.vval.v_partial));
|
||||
*tofree = name;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (verbose)
|
||||
semsg(_(e_not_callable_type_str), name);
|
||||
name = NULL;
|
||||
}
|
||||
clear_tv(&ref);
|
||||
return name;
|
||||
}
|
||||
|
||||
/*
|
||||
* Call some Vim script function and return the result in "*rettv".
|
||||
* Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc]
|
||||
@@ -640,15 +692,29 @@ call_vim_function(
|
||||
{
|
||||
int ret;
|
||||
funcexe_T funcexe;
|
||||
char_u *arg;
|
||||
char_u *name;
|
||||
char_u *tofree = NULL;
|
||||
|
||||
rettv->v_type = VAR_UNKNOWN; // clear_tv() uses this
|
||||
CLEAR_FIELD(funcexe);
|
||||
funcexe.fe_firstline = curwin->w_cursor.lnum;
|
||||
funcexe.fe_lastline = curwin->w_cursor.lnum;
|
||||
funcexe.fe_evaluate = TRUE;
|
||||
ret = call_func(func, -1, rettv, argc, argv, &funcexe);
|
||||
|
||||
// The name might be "import.Func" or "Funcref".
|
||||
arg = func;
|
||||
++emsg_off;
|
||||
name = deref_function_name(&arg, &tofree, &EVALARG_EVALUATE, FALSE);
|
||||
--emsg_off;
|
||||
if (name == NULL)
|
||||
name = func;
|
||||
|
||||
ret = call_func(name, -1, rettv, argc, argv, &funcexe);
|
||||
|
||||
if (ret == FAIL)
|
||||
clear_tv(rettv);
|
||||
vim_free(tofree);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -701,7 +767,7 @@ call_func_retlist(
|
||||
return rettv.vval.v_list;
|
||||
}
|
||||
|
||||
#ifdef FEAT_FOLDING
|
||||
#if defined(FEAT_FOLDING) || defined(PROTO)
|
||||
/*
|
||||
* Evaluate "arg", which is 'foldexpr'.
|
||||
* Note: caller must set "curwin" to match "arg".
|
||||
@@ -709,14 +775,19 @@ call_func_retlist(
|
||||
* give error messages.
|
||||
*/
|
||||
int
|
||||
eval_foldexpr(char_u *arg, int *cp)
|
||||
eval_foldexpr(win_T *wp, int *cp)
|
||||
{
|
||||
char_u *arg;
|
||||
typval_T tv;
|
||||
varnumber_T retval;
|
||||
char_u *s;
|
||||
sctx_T saved_sctx = current_sctx;
|
||||
int use_sandbox = was_set_insecurely((char_u *)"foldexpr",
|
||||
OPT_LOCAL);
|
||||
|
||||
arg = wp->w_p_fde;
|
||||
current_sctx = wp->w_p_script_ctx[WV_FDE];
|
||||
|
||||
++emsg_off;
|
||||
if (use_sandbox)
|
||||
++sandbox;
|
||||
@@ -747,6 +818,7 @@ eval_foldexpr(char_u *arg, int *cp)
|
||||
--sandbox;
|
||||
--textwinlock;
|
||||
clear_evalarg(&EVALARG_EVALUATE, NULL);
|
||||
current_sctx = saved_sctx;
|
||||
|
||||
return (int)retval;
|
||||
}
|
||||
@@ -884,7 +956,7 @@ get_lval(
|
||||
if (lp->ll_name == NULL)
|
||||
return p;
|
||||
|
||||
if (*p == '.' && in_vim9script())
|
||||
if (*p == '.')
|
||||
{
|
||||
imported_T *import = find_imported(lp->ll_name, p - lp->ll_name,
|
||||
TRUE, NULL);
|
||||
@@ -2001,7 +2073,7 @@ eval_func(
|
||||
// If "s" is the name of a variable of type VAR_FUNC
|
||||
// use its contents.
|
||||
s = deref_func_name(s, &len, &partial,
|
||||
in_vim9script() ? &type : NULL, !evaluate, &found_var);
|
||||
in_vim9script() ? &type : NULL, !evaluate, FALSE, &found_var);
|
||||
|
||||
// Need to make a copy, in case evaluating the arguments makes
|
||||
// the name invalid.
|
||||
@@ -3447,6 +3519,7 @@ eval7(
|
||||
char_u *start_leader, *end_leader;
|
||||
int ret = OK;
|
||||
char_u *alias;
|
||||
static int recurse = 0;
|
||||
|
||||
/*
|
||||
* Initialise variable so that clear_tv() can't mistake this for a
|
||||
@@ -3473,6 +3546,21 @@ eval7(
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
// Limit recursion to 1000 levels. At least at 10000 we run out of stack
|
||||
// and crash. With MSVC the stack is smaller.
|
||||
if (recurse ==
|
||||
#ifdef _MSC_VER
|
||||
300
|
||||
#else
|
||||
1000
|
||||
#endif
|
||||
)
|
||||
{
|
||||
semsg(_(e_expression_too_recursive_str), *arg);
|
||||
return FAIL;
|
||||
}
|
||||
++recurse;
|
||||
|
||||
switch (**arg)
|
||||
{
|
||||
/*
|
||||
@@ -3702,6 +3790,8 @@ eval7(
|
||||
*/
|
||||
if (ret == OK && evaluate && end_leader > start_leader)
|
||||
ret = eval7_leader(rettv, FALSE, start_leader, &end_leader);
|
||||
|
||||
--recurse;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -3948,8 +4038,9 @@ eval_method(
|
||||
char_u *name;
|
||||
long len;
|
||||
char_u *alias;
|
||||
char_u *tofree = NULL;
|
||||
typval_T base = *rettv;
|
||||
int ret;
|
||||
int ret = OK;
|
||||
int evaluate = evalarg != NULL
|
||||
&& (evalarg->eval_flags & EVAL_EVALUATE);
|
||||
|
||||
@@ -3968,28 +4059,61 @@ eval_method(
|
||||
}
|
||||
else
|
||||
{
|
||||
char_u *paren;
|
||||
|
||||
// If there is no "(" immediately following, but there is further on,
|
||||
// it can be "import.Func()", "dict.Func()", "list[nr]", etc.
|
||||
// Does not handle anything where "(" is part of the expression.
|
||||
*arg = skipwhite(*arg);
|
||||
if (**arg != '(')
|
||||
|
||||
if (**arg != '(' && alias == NULL
|
||||
&& (paren = vim_strchr(*arg, '(')) != NULL)
|
||||
{
|
||||
if (verbose)
|
||||
semsg(_(e_missing_parenthesis_str), name);
|
||||
ret = FAIL;
|
||||
char_u *deref;
|
||||
|
||||
*arg = name;
|
||||
*paren = NUL;
|
||||
deref = deref_function_name(arg, &tofree, evalarg, verbose);
|
||||
if (deref == NULL)
|
||||
{
|
||||
*arg = name + len;
|
||||
ret = FAIL;
|
||||
}
|
||||
else
|
||||
{
|
||||
name = deref;
|
||||
len = (long)STRLEN(name);
|
||||
}
|
||||
*paren = '(';
|
||||
}
|
||||
else if (VIM_ISWHITE((*arg)[-1]))
|
||||
|
||||
if (ret == OK)
|
||||
{
|
||||
if (verbose)
|
||||
emsg(_(e_no_white_space_allowed_before_parenthesis));
|
||||
ret = FAIL;
|
||||
}
|
||||
else
|
||||
ret = eval_func(arg, evalarg, name, len, rettv,
|
||||
*arg = skipwhite(*arg);
|
||||
|
||||
if (**arg != '(')
|
||||
{
|
||||
if (verbose)
|
||||
semsg(_(e_missing_parenthesis_str), name);
|
||||
ret = FAIL;
|
||||
}
|
||||
else if (VIM_ISWHITE((*arg)[-1]))
|
||||
{
|
||||
if (verbose)
|
||||
emsg(_(e_no_white_space_allowed_before_parenthesis));
|
||||
ret = FAIL;
|
||||
}
|
||||
else
|
||||
ret = eval_func(arg, evalarg, name, len, rettv,
|
||||
evaluate ? EVAL_EVALUATE : 0, &base);
|
||||
}
|
||||
}
|
||||
|
||||
// Clear the funcref afterwards, so that deleting it while
|
||||
// evaluating the arguments is possible (see test55).
|
||||
if (evaluate)
|
||||
clear_tv(&base);
|
||||
vim_free(tofree);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -4501,7 +4625,7 @@ garbage_collect(int testing)
|
||||
// Don't make it bigger though.
|
||||
if (exestack.ga_len + n < exestack.ga_maxlen)
|
||||
{
|
||||
new_len = exestack.ga_itemsize * (exestack.ga_len + n);
|
||||
new_len = (size_t)exestack.ga_itemsize * (exestack.ga_len + n);
|
||||
pp = vim_realloc(exestack.ga_data, new_len);
|
||||
if (pp == NULL)
|
||||
return FAIL;
|
||||
@@ -5931,7 +6055,6 @@ handle_subscript(
|
||||
idx = find_exported(rettv->vval.v_number, exp_name, &ufunc, &type,
|
||||
evalarg->eval_cctx, verbose);
|
||||
**arg = cc;
|
||||
*arg = skipwhite(*arg);
|
||||
|
||||
if (idx < 0 && ufunc == NULL)
|
||||
{
|
||||
@@ -6037,6 +6160,7 @@ handle_subscript(
|
||||
/*
|
||||
* Make a copy of an item.
|
||||
* Lists and Dictionaries are also copied. A deep copy if "deep" is set.
|
||||
* "top" is TRUE for the toplevel of copy().
|
||||
* For deepcopy() "copyID" is zero for a full copy or the ID for when a
|
||||
* reference to an already copied list/dict can be used.
|
||||
* Returns FAIL or OK.
|
||||
@@ -6046,6 +6170,7 @@ item_copy(
|
||||
typval_T *from,
|
||||
typval_T *to,
|
||||
int deep,
|
||||
int top,
|
||||
int copyID)
|
||||
{
|
||||
static int recurse = 0;
|
||||
@@ -6084,7 +6209,8 @@ item_copy(
|
||||
++to->vval.v_list->lv_refcount;
|
||||
}
|
||||
else
|
||||
to->vval.v_list = list_copy(from->vval.v_list, deep, copyID);
|
||||
to->vval.v_list = list_copy(from->vval.v_list,
|
||||
deep, top, copyID);
|
||||
if (to->vval.v_list == NULL)
|
||||
ret = FAIL;
|
||||
break;
|
||||
@@ -6103,7 +6229,8 @@ item_copy(
|
||||
++to->vval.v_dict->dv_refcount;
|
||||
}
|
||||
else
|
||||
to->vval.v_dict = dict_copy(from->vval.v_dict, deep, copyID);
|
||||
to->vval.v_dict = dict_copy(from->vval.v_dict,
|
||||
deep, top, copyID);
|
||||
if (to->vval.v_dict == NULL)
|
||||
ret = FAIL;
|
||||
break;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user