├── AUTHORS ├── ChangeLog ├── LICENSE ├── README.md ├── VERSION ├── devel ├── Makefile ├── NEWS ├── common.aap ├── doc │ └── main.aap ├── main.aap ├── pdf_maker │ ├── main.aap │ ├── reference.inp │ ├── uncss.sh │ └── user_manual.inp ├── release │ ├── main.aap │ ├── vcd-setup-unicode.nsi │ └── vcd-setup.nsi ├── tools │ ├── banner.html │ ├── batch │ ├── changes.py │ ├── checkin.sh │ ├── formatmb.vim │ ├── gb2utf │ ├── html2lex.c │ ├── html2lex.patch │ ├── main.aap │ ├── svnchanges.sh │ ├── tagscngen.py │ ├── testtags.py │ ├── vim-stylesheet.css │ ├── vim2html.pl │ └── vimcdoc.js └── www │ └── htdocs │ ├── 2html.vim │ ├── 2htmlcmd.vim │ ├── doc │ └── Makefile │ ├── images │ └── screenshot.jpg │ ├── main.aap │ └── vimcdoc-sf.py ├── dict.txt ├── doc ├── arabic.cnx ├── autocmd.cnx ├── builtin.cnx ├── change.cnx ├── channel.cnx ├── cmdline.cnx ├── debug.cnx ├── debugger.cnx ├── develop.cnx ├── diff.cnx ├── digraph.cnx ├── editing.cnx ├── eval.cnx ├── farsi.cnx ├── filetype.cnx ├── fold.cnx ├── ft_ada.cnx ├── ft_context.cnx ├── ft_hare.cnx ├── ft_mp.cnx ├── ft_ps1.cnx ├── ft_raku.cnx ├── ft_rust.cnx ├── ft_sql.cnx ├── gui.cnx ├── gui_w32.cnx ├── gui_x11.cnx ├── hangulin.cnx ├── hebrew.cnx ├── help.cnx ├── helphelp.cnx ├── howto.cnx ├── if_cscop.cnx ├── if_lua.cnx ├── if_mzsch.cnx ├── if_ole.cnx ├── if_perl.cnx ├── if_pyth.cnx ├── if_ruby.cnx ├── if_sniff.cnx ├── if_tcl.cnx ├── indent.cnx ├── index.cnx ├── insert.cnx ├── intro.cnx ├── map.cnx ├── mbyte.cnx ├── message.cnx ├── mlang.cnx ├── motion.cnx ├── netbeans.cnx ├── options.cnx ├── os_390.cnx ├── os_amiga.cnx ├── os_beos.cnx ├── os_dos.cnx ├── os_haiku.cnx ├── os_mac.cnx ├── os_mint.cnx ├── os_msdos.cnx ├── os_os2.cnx ├── os_qnx.cnx ├── os_risc.cnx ├── os_unix.cnx ├── os_vms.cnx ├── os_win32.cnx ├── pattern.cnx ├── pi_getscript.cnx ├── pi_gzip.cnx ├── pi_logipat.cnx ├── pi_netrw.cnx ├── pi_paren.cnx ├── pi_spec.cnx ├── pi_tar.cnx ├── pi_tutor.cnx ├── pi_vimball.cnx ├── pi_zip.cnx ├── popup.cnx ├── print.cnx ├── quickfix.cnx ├── quickref.cnx ├── quotes.cnx ├── recover.cnx ├── remote.cnx ├── repeat.cnx ├── rileft.cnx ├── russian.cnx ├── scroll.cnx ├── sign.cnx ├── spell.cnx ├── sponsor.cnx ├── starting.cnx ├── syntax.cnx ├── tabpage.cnx ├── tags-cn ├── tagsrch.cnx ├── term.cnx ├── terminal.cnx ├── testing.cnx ├── textprop.cnx ├── tips.cnx ├── todo.cnx ├── uganda.cnx ├── undo.cnx ├── userfunc.cnx ├── usr_01.cnx ├── usr_02.cnx ├── usr_03.cnx ├── usr_04.cnx ├── usr_05.cnx ├── usr_06.cnx ├── usr_07.cnx ├── usr_08.cnx ├── usr_09.cnx ├── usr_10.cnx ├── usr_11.cnx ├── usr_12.cnx ├── usr_20.cnx ├── usr_21.cnx ├── usr_22.cnx ├── usr_23.cnx ├── usr_24.cnx ├── usr_25.cnx ├── usr_26.cnx ├── usr_27.cnx ├── usr_28.cnx ├── usr_29.cnx ├── usr_30.cnx ├── usr_31.cnx ├── usr_32.cnx ├── usr_40.cnx ├── usr_41.cnx ├── usr_42.cnx ├── usr_43.cnx ├── usr_44.cnx ├── usr_45.cnx ├── usr_50.cnx ├── usr_51.cnx ├── usr_52.cnx ├── usr_90.cnx ├── usr_toc.cnx ├── various.cnx ├── version4.cnx ├── version5.cnx ├── version6.cnx ├── version7.cnx ├── version8.cnx ├── version9.cnx ├── vi_diff.cnx ├── vietnamese.cnx ├── vim9.cnx ├── vim9class.cnx ├── visual.cnx ├── windows.cnx └── workshop.cnx ├── guides.txt ├── hooks └── pre-commit ├── plugin └── vimcdoc.vim ├── syntax └── help_cn.vim └── vimcdoc.sh /AUTHORS: -------------------------------------------------------------------------------- 1 | Ken ( nek_in@21cn.com ) 2 | wandys ( wandys@users.sourceforge.net ) 3 | lang2 ( lang2@users.sourceforge.net ) 4 | ychimin2000 ( ychimin2000@users.sourceforge.net ) 5 | snoopyxp ( snoopyxp@users.sourceforge.net ) 6 | yemao ( yemao@users.sourceforge.net ) 7 | nutlm ( nutlm@users.sourceforge.net ) 8 | dasn ( dasn@users.sourceforge.net ) 9 | cranecai ( cranecai@users.sourceforge.net ) 10 | icrazy ( icrazy@users.sourceforge.net ) 11 | jwdu ( junweidu@ustc.edu ) 12 | foolstone ( foolstone@ustc.edu ) 13 | xxxss ( xxxss@users.sourceforge.net ) 14 | slimzhao ( slimzhao@users.sourceforge.net ) 15 | quhongjun ( quhongjun@users.sourceforge.net ) 16 | yianwillis ( yianwillis@users.sourceforge.net ) 17 | tocer ( tocer@users.sourceforge.net ) 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The Vimcdoc License, Version 0.2 2 | 3 | Copyright (C) 2013 The Vimcdoc team (http://github.com/yianwillis/vimcdoc, 4 | http://vimcdoc.sf.net). All rights reserved. 5 | 6 | This software is provided 'as-is', without any expressed or implied 7 | warranty. In no event will the author be held liable for any damages 8 | arising from the use of this software. 9 | 10 | 11 | Redistribution and use in source and binary forms, with or without 12 | modification, are permitted provided that the following conditions 13 | are met: 14 | 15 | 1. Redistributions of software must retain the above copyright 16 | notice and this list of conditions. 17 | 18 | 2. No commercial use of this software are allowed without written 19 | permission from the author. For written permission, please contact 20 | yianwillis@gmail.com 21 | 22 | 3. The origin of this software must not be misrepresented; you must 23 | not claim that you wrote the original software. 24 | 25 | 4. Copyright of the individual documents are retained by the author of 26 | the document. 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | vimcdoc 2 | ======= 3 | 4 | Vim 中文文档计划 5 | 6 | # 关 于 7 | 8 | [Vim](https://www.vim.org) 是一个功能非常强大,且具有很强扩展性的编辑器。而且 9 | Vim 本身带有一个完备的帮助系统。本项目的目的就是将 Vim 的这些文档翻译成中文,以 10 | 便更多的人认识及更好地使用这个非常强大的编辑器。文档分成用户手册和参考手册两部 11 | 分,你既可以象使用教程那样循序渐进,也可以快速地查阅来获取帮助。 12 | 13 | # 在 线 阅 读 14 | 15 | 可在线阅读帮助文档的 HTML 版。 16 | 17 | https://yianwillis.github.io/vimcdoc/ 18 | 19 | 为了最佳阅读效果,请确保你的系统安装了 'Noto Sans Mono CJK SC' 或 NSimsun 字 20 | 体,否则可能有字体不能完全对齐的情况。 21 | 22 | # 下 载 23 | 24 | https://github.com/yianwillis/vimcdoc/releases 提供发布版本的下载。 25 | 26 | * PDF 用户手册和参考手册 27 | * tar.gz 包 28 | * Win32 UTF8 版本的中文自动安装程序 (原有的 ANSI 版本不再提供) 29 | 30 | # 安装 31 | 32 | ## Vim 8+ 自带软件包支持 33 | 34 | ```shell 35 | $ mkdir -p ~/.vim/pack/foo/start 36 | $ cd ~/.vim/pack/foo/start 37 | $ git clone git://github.com/yianwillis/vimcdoc.git 38 | ``` 39 | 40 | 重启 Vim。 41 | 42 | 其中 foo 可以是任何你自选的名字。 43 | 44 | 当然,如果不想用 git,也可用解压下载的 tar.gz 包到 `~/.vim/pack/foo/start`。git 45 | 方式的好处可以随时进行更新。 46 | 47 | ## [vim-plug](https://github.com/junegunn/vim-plug) 48 | 49 | .vimrc 中加入: 50 | 51 | ``` 52 | Plug 'yianwillis/vimcdoc' 53 | ``` 54 | 55 | 重启 Vim 后执行命令 `:PlugInstall`。 56 | 57 | ## [Vundle](https://github.com/VundleVim/Vundle.vim) 58 | 59 | .vimrc 中加入: 60 | 61 | ``` 62 | Plugin 'yianwillis/vimcdoc' 63 | ``` 64 | 65 | 重启 Vim 后执行 `:PluginInstall`。 66 | 67 | ## [NeoBundle](https://github.com/Shougo/neobundle.vim) 68 | 69 | .vimrc 中加入: 70 | 71 | ``` 72 | NeoBundle 'yianwillis/vimcdoc' 73 | ``` 74 | 75 | 重启 Vim 后执行命令 `:NeoBundleInstall`。 76 | 77 | ## [Pathogen](https://github.com/tpope/vim-pathogen) 78 | 79 | ```shell 80 | $ cd ~/.vim/bundle 81 | $ git clone git://github.com/yianwillis/vimcdoc.git 82 | ``` 83 | 84 | 重启 Vim。 85 | 86 | ## Linux 程序安装 87 | 88 | 下载的 tar.gz 包括所有翻译过的 vim 文档 (.cnx 文件) 和相关的语法文件和插件。 89 | 先将其解压缩: 90 | 91 | ```shell 92 | $ tar zxvf vimcdoc-.tar.gz 93 | ``` 94 | 95 | 然后进入 vimcdoc- 目录并执行 96 | 97 | ```shell 98 | $ ./vimcdoc.sh -i 99 | ``` 100 | 101 | 就可以了。该安装程序会自动识别 Vim 的安装路径,将中文的文档拷贝到相应的地方。原 102 | 有的英文文档不受影响。 103 | 104 | 缺省安装 vimcdoc.vim 插件,设置缺省帮助语言为中文。如果你不希望如此,可用 105 | 106 | ```shell 107 | $ ./vimcdoc.sh -I 108 | ``` 109 | 110 | 来代替。 111 | 112 | 这种方法对 root 和非 root 用户都适用。但建议以 root 身份安装。当以 root 身份安 113 | 装时,文件会被拷贝至 /usr/share/vim/vimfiles/doc 下。因此所有系统的用户都可以使 114 | 用中文文档。如果你的 vim 是安装在 /usr/local 下的话,你需要这样设定 vim 的 115 | runtimepath 选项: 116 | 117 | ```vim 118 | :set rtp+=/usr/share/vim/vimfiles 119 | ``` 120 | 121 | 你可以将上面的设定加入到你的 vimrc 文件中以便每次启动 vim 都生效。当以普通用户 122 | 安装时,所有文件会被拷贝至 ~/.vim/doc 下,所以仅对该用户有效。 123 | 124 | ## Win32 程序安装 125 | 126 | 建议使用已经做好的自动安装程序。该程序不写注册表,不建立程序组,不覆盖任何 Vim 127 | 原有文件。所以可以放心使用。 128 | 129 | ## 手动安装 130 | 131 | 你也可以自己动手来安装:只要把所有的中文文档以及 tags-cn 文件拷贝到 runtimepath 132 | 之一的 doc 子目录下就行了。runtimepath 可用在 vim 内用 `:set rtp?` 命令来得到。比 133 | 如在 `vimcdoc-` 目录中,可以执行以下命令: 134 | 135 | ```shell 136 | $ cp -R doc /usr/share/vim/vimfiles/doc 137 | ``` 138 | 139 | 这种方法对 Linux 和 Win32 都有效。 140 | 141 | 现在启动 vim/gvim, 键入 :help 看看吧! 142 | 143 | 144 | # 卸 载 145 | 146 | ## Linux 程序安装 147 | 如果你是使用的自动安装脚本安装的话,只要运行: 148 | 149 | ```shell 150 | $ ./vimcdoc.sh -u 151 | ``` 152 | 153 | 即可。但必须用与安装时同样的用户名 (root 用户安装程序会在 154 | /usr/share/doc/vimcdoc 下安装该文件)。 155 | 156 | ## Win32 程序安装 157 | 158 | 假定你的 Vim 安装在 c:\vim 下,在 c:\vim\vimfiles\doc\ 目录内会有一个 159 | vimcdoc-Uninst.exe,只要执行它就可以了。 160 | 161 | ## 设 置 162 | 163 | 你的 'encoding' 设置及字体必须支持中文显示。对于使用非 utf-8 中文环境的用户,在 164 | 浏览某些帮助文件的时候可能会遇到麻烦。这是因为那些文件包含无法在 gbk, gb2312 等 165 | 编码方式下显示的字符。遇到这种情况,有以下几种解决方案: 166 | 167 | 1. 使用 utf-8 中文环境。例如,将 `LC_ALL` 设定为 `zh_CN.UTF-8` 168 | 2. 强制 vim 使用 utf-8 编码。做法是 `:set enc=utf-8` 169 | 3. 如果你的系统有 GB18030 支持,可以让 vim 使用 GB18030 编码,因为 GB18030 对非 170 | 中文字符也能进行适当的处理。方法是 171 | 172 | ```vim 173 | :set enc=2byte-gb18030 174 | ``` 175 | 176 | 这时,Vim 会正确地进行转换。注意这里不能通过设置 `LC_ALL` 来完成。 177 | 178 | 如果使用 2 或 3,建议把 vim 设置写入你的个人 .vimrc 设置文件,避免每次都要输入 179 | 命令的麻烦。 180 | 181 | 备注:如果 `set enc=utf-8` 时,使用的中文消息出现乱码,可以同时设置 182 | 183 | ```vim 184 | :language message zh_CN.UTF-8 185 | ``` 186 | 187 | # 加 入 188 | 189 | 我们欢迎各种各样的帮助,翻译,测试,等等等等。如果你也想加入本项目的话,请直接 190 | 与我们联系 (见下),同时请先行阅读 guides.txt。 191 | 192 | AUTHORS 列出了翻译人员。 193 | 194 | LICENSE 包括版权信息。 195 | 196 | # 信 息 197 | 198 | 欢迎访问我们的主页以获取更多的信息和最新的版本: 199 | 200 | https://github.com/yianwillis/vimcdoc 201 | 202 | 这将是我们的新主页。原版本 http://vimcdoc.sf.net (English) 的内容已经完整导入。 203 | 以后的更新也只会在 github 进行。 204 | 205 | 206 | # 联 系 207 | 208 | 任何建议、问题等等,请送往 yianwillis@gmail.com。 209 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 2.5.0 2 | -------------------------------------------------------------------------------- /devel/Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | @echo "For installation instruction, please read README.md." 3 | 4 | install: 5 | @echo "Please read the README.md document" 6 | -------------------------------------------------------------------------------- /devel/common.aap: -------------------------------------------------------------------------------- 1 | # Common definition of all aap recipe 2 | # Fist thing you need to do is to change the following line 3 | # to your own SF id 4 | SF_USER = yianwillis 5 | 6 | # Remote access related variables 7 | SF_SHELL_DOMAIN = web.sourceforge.net 8 | SF_RELEASE_DOMAIN = frs.sourceforge.net 9 | SF_SCP_WEB_URL = scp://$SF_USER@$SF_SHELL_DOMAIN/home/project-web/vimcdoc/htdocs 10 | SF_SCP_RELEASE_URL = scp://$SF_USER@$SF_RELEASE_DOMAIN/home/frs/project/vimcdoc 11 | 12 | # Release related variables 13 | # TOPLEVELDIR is defined externally. 14 | VERSION_FILE = $TOPLEVELDIR/VERSION 15 | VCD = vimcdoc 16 | @VERSION = file2string( VERSION_FILE ) 17 | DOC_DIR = $TOPLEVELDIR/doc 18 | DOC_FILES = $DOC_DIR/*.cnx 19 | EXTRA_FILES = plugin/vimcdoc.vim syntax/help_cn.vim 20 | MISC_FILES = README.md VERSION AUTHORS LICENSE dict.txt vimcdoc.sh guides.txt ChangeLog 21 | DEVEL_DIR = $TOPLEVELDIR/devel 22 | RELEASE_DIR = $DEVEL_DIR/release 23 | TOOLS_DIR = $DEVEL_DIR/tools 24 | RELEASE_NAME = $(VCD)-$(VERSION) 25 | TARBALL = $(RELEASE_NAME).tar 26 | TARGZ = $(TARBALL).gz 27 | WIN32EXE = $(RELEASE_NAME)-setup.exe 28 | WIN32EXE_UNICODE = $(RELEASE_NAME)-setup-unicode.exe 29 | -------------------------------------------------------------------------------- /devel/doc/main.aap: -------------------------------------------------------------------------------- 1 | TOPLEVELDIR = ../.. 2 | :include {once} $TOPLEVELDIR/devel/common.aap 3 | 4 | @Files = expand2string(glob(DOC_FILES)) 5 | 6 | :attr {publish = $SF_SCP_WEB_URL/doc/%file%} vim-stylesheet.css 7 | :attr {publish = $SF_SCP_WEB_URL/doc/%file%} vimcdoc.js 8 | :attr {publish = $SF_SCP_WEB_URL/doc/%file%} *.html 9 | 10 | allhtml {virtual}: 11 | :copy $TOOLS_DIR/vim-stylesheet.css . 12 | :copy $TOOLS_DIR/vimcdoc.js . 13 | :sys $TOOLS_DIR/vim2html.pl \ 14 | --banner=$TOOLS_DIR/banner.html \ 15 | --canonical_prefix=https://yianwillis.github.io/vimcdoc/doc \ 16 | --help_file=$DOC_DIR/help.cnx \ 17 | $DOC_DIR/tags-cn \ 18 | $DOC_FILES 19 | 20 | all {virtual}: 21 | :print Use 'aap ' to check-in a file and update the webpage on sf.net. 22 | :print Use 'aap publish' to update all html and css files on sf.net 23 | 24 | clean {virtual}: 25 | :del {r}{force} *.css *.js *.html *~ *.bak 26 | -------------------------------------------------------------------------------- /devel/main.aap: -------------------------------------------------------------------------------- 1 | # Following are steps for a new release: 2 | # aap ChangeLog: update ChangeLog file 3 | # VERSION, NEWS: to be updated manually 4 | # aap -f release/main.aap release: release/vimcdoc-.tar.gz, release/vimcdoc--setup-unicode.exe 5 | # aap -f pdf_maker/main.aap release: release/reference-.pdf, pdf_maker/user_manual-.pdf 6 | # aap -f doc/main.aap allhtml: docs/*.html 7 | # aap -f www/htdocs/main.aap index.html: www/htdocs/index.html 8 | # 9 | # Steps to publish: 10 | # aap -f release/main.aap publish (release packages and pdf manuals) 11 | # aap -f doc/main.aap publish (vimcdoc.sf.net help files) 12 | # aap -f www/htdocs/main.aap publish (vimcdoc homepage) 13 | # 14 | # External tools we would need: 15 | # nsis, ANSI (2.x standard) and unicode (3.0 alpha needed) 16 | # wine, if running from non-windows environment 17 | # latex, latexmk 18 | # latex packages: CJK, alltt, color, verbatim, hyperref, url, arphic, arphic-ttf 19 | 20 | TOPLEVELDIR=.. 21 | :include common.aap 22 | 23 | ChangeLog: $DOC_FILES 24 | :sys git log --date=short --pretty="format:%ad %aE %s%n" --name-only > $TOPLEVELDIR/ChangeLog 25 | 26 | all: 27 | :print Use 'aap clean' to clean up. 28 | :print Use 'aap ChangeLog' to update ChangeLog. 29 | 30 | clean: 31 | :del {r}{force} *~ *.bak 32 | :execute doc/main.aap clean 33 | :execute tools/main.aap clean 34 | :execute pdf_maker/main.aap clean 35 | :execute release/main.aap clean 36 | :execute www/htdocs/main.aap clean 37 | 38 | # vim:ts=4:noet: 39 | -------------------------------------------------------------------------------- /devel/pdf_maker/main.aap: -------------------------------------------------------------------------------- 1 | TOPLEVELDIR=../.. 2 | :include {once} $TOPLEVELDIR/devel/common.aap 3 | :child $TOOLS_DIR/main.aap 4 | 5 | all: 6 | :print Use 'aap clean' to clean up. 7 | :print Use 'aap publish' to publish pdf manual to SF. 8 | :print Use 'aap release' to generate pdf mauals to release. 9 | 10 | help.html: 11 | :sys $TOOLS_DIR/vim2html.pl \ 12 | --canonical_prefix=https://yianwillis.github.io/vimcdoc/doc \ 13 | --help_file=$DOC_DIR/help.cnx \ 14 | $DOC_DIR/tags-cn \ 15 | $DOC_FILES 16 | :copy $TOOLS_DIR/vim-stylesheet.css . 17 | :copy $TOOLS_DIR/vimcdoc.js . 18 | :sys ./uncss.sh 19 | 20 | :rule %.tex: help.html ../tools/html2lex %.inp 21 | :sys ../tools/html2lex ${match}.inp -o $target 22 | 23 | :rule %.pdf: %.tex 24 | :sys {f} latexmk -f -xelatex $match 25 | 26 | release: reference.pdf user_manual.pdf 27 | :copy reference.pdf $(RELEASE_DIR)/reference-$(VERSION).pdf 28 | :copy user_manual.pdf $(RELEASE_DIR)/user_manual-$(VERSION).pdf 29 | 30 | clean: 31 | :del {r}{force} *.html *.pdf *.tex *.aux *.log *.out *.fdb_latexmk *.fls *.css 32 | :execute $TOOLS_DIR/main.aap clean 33 | -------------------------------------------------------------------------------- /devel/pdf_maker/uncss.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for i in *.html; do 3 | cat $i | 4 | perl -np -e 's/((?:.(?!<\/?code))*.)<\/code>/\1<\/dfn>/g' | 5 | perl -np -e 's/((?:.(?!<\/?code))*.)<\/code>/\1<\/kbd>/g' | 6 | perl -np -e 's/((?:.(?!<\/?code))*.)<\/code>/\1<\/blink>/g' | 7 | perl -np -e 's/((?:.(?!<\/?code))*.)<\/code>/\1<\/samp>/g' | 8 | perl -np -e 's/((?:.(?!<\/?code))*.)<\/code>/\1<\/tt>/g' | 9 | perl -np -e 's/((?:(?:.(?!<\/?code))*.)?)<\/code>/\1<\/var>/g' | 10 | perl -np -e 's/((?:(?:.(?!<\/?code))*.)?)<\/code>/\1<\/strong>/g' | 11 | perl -np -e 's/((?:.(?!<\/?code))*.)<\/code>/\1<\/cite>/g' | 12 | grep -v 'Generated by vim2html' > tmp && 13 | mv tmp $(basename $i) 14 | done 15 | -------------------------------------------------------------------------------- /devel/pdf_maker/user_manual.inp: -------------------------------------------------------------------------------- 1 | \documentclass[10pt]{article} 2 | \usepackage{xeCJK,alltt,color,verbatim,hyperref,bookmark} 3 | \usepackage[top=1in,bottom=1in,left=1.4in,right=1.4in]{geometry} 4 | \setmainfont{Noto Sans Mono CJK SC Regular} 5 | \setmonofont{Noto Sans Mono CJK SC Regular} 6 | \setCJKmainfont{Noto Sans Mono CJK SC Regular} 7 | \setCJKmonofont{Noto Sans Mono CJK SC Regular} 8 | 9 | %html -s plain 10 | \definecolor{vimtag}{RGB}{250,0,250} 11 | \definecolor{header}{RGB}{82,80,82} 12 | \definecolor{section}{RGB}{164,32,246} 13 | \definecolor{keystroke}{RGB}{106,89,205} 14 | \definecolor{special}{RGB}{106,89,205} 15 | \definecolor{compat}{RGB}{106,89,205} 16 | \definecolor{vim}{RGB}{0,136,136} 17 | \hypersetup{colorlinks=true} 18 | 19 | \begin{document} 20 | 21 | \title{Vim 中文用户手册} 22 | \author{http://github.com/yianwillis/vimcdoc} 23 | 24 | \maketitle 25 | 26 | %html -r http://github.com/yianwillis/vimcdoc 27 | %html -o href_in_alltt normal 28 | %html -o label "%p\phantomsection\label{%f}" 29 | %html -o label_n "%p\phantomsection\label{%f:%n}" 30 | %html -o cf "%p\hyperref{%f}{%a}" 31 | %html -o cf_n "%p\hyperref[%f:%n]{%a}" 32 | %html -d section -alltt "\begin{alltt} " "\end{alltt}\nl" 33 | %html -d h4 -alltt "\textcolor{header}{\textbf{" "}}\nl" 34 | %html -d td -alltt "" "\hfill " 35 | %html -d b "\textcolor{vimtag}{\textbf{" "}}" 36 | %html -d strong "\textcolor{section}{" "}" 37 | %html -d kbd "\textcolor{keystroke}{" "}" 38 | %html -d samp "\textcolor{special}{" "}" 39 | %html -d cite "\textcolor{compat}{" "}" 40 | %html -d tt "\textcolor{vim}{" "}" 41 | %html -d dfn "\colorbox{yellow}{\textcolor{blue}{" "}}" 42 | %html -d var "\textcolor{blue}{" "}" 43 | %html -d title -on "\clearpage\phantomsection\addcontentsline{toc}{subsection}{" "}\nl" 44 | %html -d h2 -l2 -off "" "" 45 | 46 | %html usr_toc.html 0 47 | 48 | \phantomsection\addcontentsline{toc}{section}{初步知识} 49 | %html usr_01.html 1 50 | %html usr_02.html 1 51 | %html usr_03.html 1 52 | %html usr_04.html 1 53 | %html usr_05.html 1 54 | %html usr_06.html 1 55 | %html usr_07.html 1 56 | %html usr_08.html 1 57 | %html usr_09.html 1 58 | %html usr_10.html 1 59 | %html usr_11.html 1 60 | %html usr_12.html 1 61 | 62 | \phantomsection\addcontentsline{toc}{section}{高效地编辑} 63 | %html usr_20.html 1 64 | %html usr_21.html 1 65 | %html usr_22.html 1 66 | %html usr_23.html 1 67 | %html usr_24.html 1 68 | %html usr_25.html 1 69 | %html usr_26.html 1 70 | %html usr_27.html 1 71 | %html usr_28.html 1 72 | %html usr_29.html 1 73 | %html usr_30.html 1 74 | %html usr_31.html 1 75 | %html usr_32.html 1 76 | 77 | \phantomsection\addcontentsline{toc}{section}{调节 Vim} 78 | %html usr_40.html 1 79 | %html usr_41.html 1 80 | %html usr_42.html 1 81 | %html usr_43.html 1 82 | %html usr_44.html 1 83 | %html usr_45.html 1 84 | 85 | \phantomsection\addcontentsline{toc}{section}{编写 Vim 脚本} 86 | %html usr_50.html 1 87 | %html usr_51.html 1 88 | %html usr_52.html 1 89 | 90 | \phantomsection\addcontentsline{toc}{section}{让 Vim 工作} 91 | %html usr_90.html 1 92 | 93 | \end{document} 94 | -------------------------------------------------------------------------------- /devel/release/main.aap: -------------------------------------------------------------------------------- 1 | TOPLEVELDIR=../.. 2 | :include ../common.aap 3 | 4 | # ANSI NSIS, available from nsis.sourceforge.net/. 5 | MAKENSIS = "c:\Program Files\NSIS2\makensis" 6 | # Unicode NSIS, available from offical NSIS 3.0a1 7 | MAKENSIS_UNI = "c:\Program Files\NSIS\makensis" 8 | # MAC Version's nsis. 9 | MAKENSIS_UNI_MAC = "makensis" 10 | NSISFILE = vcd-setup.nsi 11 | NSISFILE_UNI = vcd-setup-unicode.nsi 12 | NSISZIP = /X"SetCompressor bzip2" 13 | NSISOUTPUT = /V0 14 | 15 | 16 | :attr {publish = $SF_SCP_RELEASE_URL/vimcdoc/%file%} $TARGZ 17 | # :attr {publish = $SF_SCP_RELEASE_URL/win32-install/%file%} $WIN32EXE 18 | :attr {publish = $SF_SCP_RELEASE_URL/win32-install-unicode/%file%} $WIN32EXE_UNICODE 19 | :attr {publish = $SF_SCP_RELEASE_URL/pdf-manual/%file%} *.pdf 20 | 21 | all {virtual}: 22 | :print Use 'aap release' to generate release packages. 23 | :print Use 'aap publish' to publish a release to SF. 24 | 25 | release {virtual}: $RELEASE_NAME 26 | :print 'Making release files....' 27 | #Building Linux release. 28 | doc_files = $DOC_FILES 29 | @for doc in glob(doc_files): 30 | :copy {m} $doc $RELEASE_NAME/doc/ 31 | extra_files = $EXTRA_FILES 32 | @for script in var2list(extra_files): 33 | :copy {m} $TOPLEVELDIR/$script $RELEASE_NAME/$script 34 | misc_files = $MISC_FILES 35 | @for file in var2list(misc_files): 36 | :copy {m} $TOPLEVELDIR/$file $RELEASE_NAME/$file 37 | :cd $RELEASE_NAME 38 | :chmod 755 vimcdoc.sh 39 | @gentag_cmd = "vim -e -s +'helptags ++t ./doc' +q" 40 | :sys {force} $gentag_cmd 41 | :cd - 42 | :sys tar cf $(TARBALL) $(RELEASE_NAME) 43 | :sys {force} gzip -9f $(TARBALL) # in windows, gzip return IO error 44 | # but the zip file is good . 45 | # I don't know why. 46 | :move $(TARGZ) $(RELEASE_DIR) 47 | :copy $NSISFILE $NSISFILE_UNI $RELEASE_NAME 48 | :cd $RELEASE_NAME 49 | os = $OSTYPE 50 | @if os == "mswin": 51 | :sys $(MAKENSIS) $(NSISFILE) 52 | :sys $(MAKENSIS_UNI) $(NSISFILE_UNI) 53 | @else: 54 | # :sys wine $(MAKENSIS) $(NSISFILE) 55 | # :sys wine $(MAKENSIS_UNI) $(NSISFILE_UNI) 56 | :sys $(MAKENSIS_UNI_MAC) $(NSISFILE_UNI) 57 | :cd - 58 | # :move $RELEASE_NAME/$(VCD)-setup.exe $(RELEASE_DIR)/$(RELEASE_NAME)-setup.exe 59 | :move $RELEASE_NAME/$(VCD)-setup-unicode.exe $(RELEASE_DIR)/$(RELEASE_NAME)-setup-unicode.exe 60 | @if os == "posix": 61 | :sys 'pwd' 62 | @elif os == "mswin": 63 | :sys chdir 64 | :del {r} $RELEASE_NAME 65 | 66 | $RELEASE_NAME: $VERSION_FILE 67 | :mkdir $RELEASE_NAME 68 | 69 | clean: 70 | :del {r}{force} $TARGZ $WIN32EXE $WIN32EXE_UNICODE *.pdf *.bak *~ 71 | :del {r}{force} $RELEASE_NAME 72 | -------------------------------------------------------------------------------- /devel/release/vcd-setup-unicode.nsi: -------------------------------------------------------------------------------- 1 | # vimcdoc (http://github.com/yianwillis/vimcdoc) Win32 platform installation program 2 | # NSIS source script 3 | # Compile this file with NSIS2!! available at http://nsis.sf.net 4 | # Author: lang2 (lang2_at_users.sf.net) 5 | 6 | Unicode true 7 | OutFile "vimcdoc-setup-unicode.exe" 8 | 9 | XPStyle On 10 | 11 | SetCompressor bzip2 12 | 13 | # We are overwriting everything 14 | SetOverwrite on 15 | 16 | ###### 17 | # Setup pages to be displayed 18 | ###### 19 | Page license 20 | Page components 21 | Page directory 22 | Page instfiles 23 | 24 | ###### 25 | # Load the language files 26 | ###### 27 | LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf" 28 | LoadLanguageFile "${NSISDIR}\Contrib\Language files\SimpChinese.nlf" 29 | 30 | SetFont /LANG=$(LANG_SIMPCHINESE) "SimSun" 9 31 | 32 | #Setup license page 33 | LicenseLangString myLicenseData ${LANG_ENGLISH} "LICENSE" 34 | LicenseLangString myLicenseData ${LANG_SIMPCHINESE} "LICENSE" 35 | LicenseData $(myLicenseData) 36 | 37 | ###### 38 | # Setup various language string 39 | # The same name is used for lang string and the install attribute is the 40 | # same, which is confusing. But works nonetheless. Note that $() is a 41 | # user variable. 42 | ###### 43 | #Setup name string 44 | LangString Name ${LANG_SIMPCHINESE} "Vim 中文文档" 45 | LangString Name ${LANG_ENGLISH} "Vim Chinese Documentation" 46 | Name $(Name) 47 | 48 | LangString DocsectName ${LANG_ENGLISH} "Chinese documentation" 49 | LangString DocsectName ${LANG_SIMPCHINESE} "Vim 中文文档" 50 | 51 | ;LangString Backup ${LANG_ENGLISH} "Backup originals" 52 | ;LangString Backup ${LANG_SIMPCHINESE} "备份原文档" 53 | 54 | LangString StartVim ${LANG_SIMPCHINESE} "安装完毕后察看中文帮助" 55 | LangString StartVim ${LANG_ENGLISH} "View the Chinese help after installation" 56 | 57 | LangString SetupVim ${LANG_SIMPCHINESE} "设置中文为缺省帮助语言" 58 | LangString SetupVim ${LANG_ENGLISH} "Set Chinese as the default help language" 59 | 60 | LangString BrandingText ${LANG_SIMPCHINESE} "http://github.com/yianwillis/vimcdoc" 61 | LangString BrandingText ${LANG_ENGLISH} "http://github.com/yianwillis/vimcdoc" 62 | BrandingText $(BrandingText) 63 | 64 | LangString LicenseText ${LANG_SIMPCHINESE} "版权信息" 65 | LangString LicenseText ${LANG_ENGLISH} "License agreement" 66 | LicenseText $(LicenseText) 67 | 68 | LangString CompletedText ${LANG_ENGLISH} "Thanks for installing vimcdoc." 69 | LangString CompletedText ${LANG_SIMPCHINESE} "感谢使用 Vim 中文文档!" 70 | CompletedText $(CompletedText) 71 | 72 | LangString DirText1 ${LANG_ENGLISH} "Please make sure that the following directory is corrrect. \ 73 | If you are not sure, simply press 'Install'." 74 | LangString DirText2 ${LANG_ENGLISH} "The setup program has \ 75 | detected that you have Vim installed in:" 76 | LangString DirText1 ${LANG_SIMPCHINESE} "请确认以下列出的目录。如果你不确定,请点击'安装'。" 77 | LangString DirText2 ${LANG_SIMPCHINESE} "安装程序检测到你的 Vim 安装在以下目录:" 78 | DirText $(DirText1) $(DirText2) 79 | 80 | LangString ComponentText ${LANG_SIMPCHINSE} "请选择安装选项:" 81 | LangString ComponentText ${LANG_ENGLISH} "Please setup installation options:" 82 | ComponentText $(ComponentText) 83 | 84 | 85 | ###### 86 | # Pre-processing 87 | ###### 88 | #Setup the INSTDIR from registery 89 | InstallDirRegKey HKLM SOFTWARE\Vim\Gvim "path" 90 | #InstallColors 000000 809090 91 | InstProgressFlags smooth 92 | 93 | UninstallText "This will uninstall vimcdoc. Hit next to continue." 94 | 95 | ShowInstDetails show 96 | 97 | ########### 98 | # Sections 99 | ########### 100 | Section !$(DocsectName) 101 | SectionIn RO ;This section has to be run 102 | 103 | ; Set the other two options to be off 104 | StrCpy $R1 'no' 105 | StrCpy $R2 'no' 106 | 107 | SectionEnd 108 | 109 | #Section $(Backup) 110 | #StrCpy $R0 'yes' 111 | #AddSize 3500 112 | #SectionEnd 113 | 114 | Section $(SetupVim) 115 | StrCpy $R2 'yes' 116 | SectionEnd 117 | 118 | Section $(StartVim) 119 | StrCpy $R1 'yes' 120 | SectionEnd 121 | 122 | Section - DoStuff 123 | SetOutPath $INSTDIR\..\vimfiles\doc 124 | File /r "doc\*.cnx" 125 | File "doc\tags-cn" 126 | SetOutPath $INSTDIR\..\vimfiles\syntax 127 | File "syntax\help_cn.vim" 128 | StrCmp $R2 'yes' 0 +3 129 | SetOutPath $INSTDIR\..\vimfiles\plugin 130 | File "plugin\vimcdoc.vim" 131 | SetOutPath $PROGRAMFILES\vimcdoc 132 | File "README.md" 133 | File "LICENSE" 134 | File "AUTHORS" 135 | File "guides.txt" 136 | SectionEnd 137 | 138 | Section "Uninstall" 139 | Delete $INSTDIR\*.cnx 140 | Delete $INSTDIR\tags-cn 141 | Delete $INSTDIR\..\syntax\help_cn.vim 142 | Delete $INSTDIR\..\plugin\vimcdoc.vim 143 | Delete $INSTDIR\vimcdoc-uninst.exe 144 | Rmdir /r $PROGRAMFILES\vimcdoc 145 | SectionEnd 146 | 147 | 148 | ########################### 149 | ## Functions 150 | ########################## 151 | #Function BackupOrig 152 | #IfFileExists $INSTDIR\doc\backup\*.* BackedUp 153 | #CreateDirectory $INSTDIR\doc\backup 154 | #CopyFiles "$INSTDIR\doc\*.cnx" "$INSTDIR\doc\backup" 4000 155 | #BackedUp: ; backup already. skip 156 | #FunctionEnd 157 | 158 | # Yes the uninstaller is not written into $PROGRAMFILES 159 | # because I don't know how to! 160 | Function .onInstSuccess 161 | WriteUninstaller $INSTDIR\..\vimfiles\doc\vimcdoc-uninst.exe 162 | StrCmp $R1 'yes' 0 +2 163 | Exec "$INSTDIR\gvim.exe +help@cn" ; view help file in Vim 164 | FunctionEnd 165 | 166 | Function .onInit 167 | Push ${LANG_ENGLISH} 168 | Push English 169 | Push ${LANG_SIMPCHINESE} 170 | Push "简体中文" 171 | Push 2 ; 2 is the number of languages 172 | LangDLL::LangDialog "Installer Language" "Please select the language of the installer" 173 | 174 | Pop $LANGUAGE 175 | StrCmp $LANGUAGE "cancel" 0 +2 176 | Abort 177 | FunctionEnd 178 | 179 | 180 | 181 | ; eof 182 | -------------------------------------------------------------------------------- /devel/release/vcd-setup.nsi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yianwillis/vimcdoc/976c6fd8e324fa141a5aabdda1cad6f0e7d201ef/devel/release/vcd-setup.nsi -------------------------------------------------------------------------------- /devel/tools/banner.html: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /devel/tools/batch: -------------------------------------------------------------------------------- 1 | cd /groups/vcd/htdocs/doc 2 | mput *.html 3 | mput vim-stylesheet.css 4 | chmod 664 * 5 | -------------------------------------------------------------------------------- /devel/tools/changes.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # vim:tw=78:ts=4:shiftwidth=4:noexpandtab: 3 | # This is a python script to detect changes since the last release 4 | # of vimcdoc. It makes an assumption that all releases are 'cvs tag'ed 5 | # as 'VIMCDOC.*' (so that cvs branches will not confused as a release) 6 | # and every argument is indeed a CVS file, i.e. 'cvs log' output is not 7 | # garbage. 8 | # Usage: ./changes.py 9 | # Author: lang2 10 | # Note: You have to run this b4 you tag the release, otherwise it 11 | # won't detect anything! 12 | # Todo: 13 | # 1. some of the nameing are very bad. 14 | # 2. draw a state diagram maybe, since this is a state machine. 15 | 16 | 17 | import re 18 | import sys 19 | import os 20 | from string import upper 21 | 22 | # global vars 23 | log_file = 'vimcdoc-trans.log' 24 | FILE = '' 25 | head = None 26 | author = None 27 | fh = None 28 | last_log = '' 29 | last_tag = None 30 | 31 | new_files = [] 32 | update_files = {} 33 | 34 | ############# 35 | # StateMachine class definition 36 | ############# 37 | class StateMachine: 38 | def __init__(self): 39 | self.handlers = {} 40 | self.startState = None 41 | self.endStates = [] 42 | 43 | def add_state(self, name, handler, end_state=0): 44 | name = upper(name) 45 | self.handlers[name] = handler 46 | if end_state: 47 | self.endStates.append(name) 48 | 49 | def set_start(self, name): 50 | self.startState = upper(name) 51 | 52 | def run(self, cargo): 53 | try: 54 | handler = self.handlers[self.startState] 55 | except: 56 | raise "InitializationError", "must call .set_start() before .run()" 57 | if not self.endStates: 58 | raise "InitializationError", "at least one state must be an end_state" 59 | 60 | while 1: 61 | (newState, cargo) = handler(cargo) 62 | if upper(newState) in self.endStates: 63 | break 64 | else: 65 | handler = self.handlers[upper(newState)] 66 | 67 | 68 | # function definitions 69 | def prepare_log(): 70 | global FILE 71 | 72 | if os.path.exists( log_file ): 73 | os.remove( log_file ) 74 | 75 | cmd = 'cvs log' 76 | for f in sys.argv[1:]: 77 | cmd += ' ' + f 78 | cmd += ' > ' + log_file 79 | 80 | os.system( cmd ) 81 | 82 | ################## 83 | # individule state handlers 84 | ################## 85 | 86 | # detect what file we are on 87 | def detect_file(line): 88 | # Detec head head:1.3 89 | global fh 90 | global head 91 | global FILE 92 | 93 | #print 'State: detect_file' 94 | #print 'line= ' + line 95 | 96 | pat = re.compile( r'^Working file: (.*)$' ) 97 | matobj = pat.match( line ) 98 | if matobj != None: 99 | state = 'detect_head' 100 | FILE = matobj.group(1) 101 | # print FILE 102 | else: 103 | state = 'DETECT_FILE' 104 | 105 | line = fh.readline().rstrip() 106 | return ( state, line ) 107 | 108 | # detect cvs-head of the file 109 | def detect_head(line): 110 | # Detec head head:1.3 111 | global fh 112 | global head 113 | 114 | #print 'State: detect_head' 115 | #print 'line= ' + line 116 | 117 | pat = re.compile( r'^head: (.*)$' ) 118 | matobj = pat.match( line ) 119 | if matobj != None: 120 | state = 'LAST_TAG' 121 | head = matobj.group(1) 122 | else: 123 | state = 'DETECT_HEAD' 124 | 125 | line = fh.readline().rstrip() 126 | return ( state, line ) 127 | 128 | def detect_last_tag( line ): 129 | global fh 130 | global head 131 | global last_tag 132 | 133 | #print 'State: detect_last_tag' 134 | #print 'line= ' + line 135 | 136 | if ( line ): 137 | pat = re.compile( r'^\tVIMCDOC.*: (.*)$' ) 138 | matobj = pat.match( line ) 139 | 140 | if matobj != None: 141 | last_tag = matobj.group(1) 142 | #print 'last_tag: %s' % last_tag 143 | 144 | if last_tag == head: 145 | state = 'END' 146 | else: 147 | state = 'LAST_ENTRY' 148 | else: 149 | state = 'LAST_TAG' 150 | 151 | line = fh.readline().rstrip() 152 | else: 153 | new_files.append( FILE ) 154 | state = 'end' 155 | return ( state, line ) 156 | 157 | #no line contains a new file 158 | #print FILE[:-4] 159 | #print 'New file.' 160 | #state = -1 161 | 162 | def detect_last_entry_start(line): 163 | global fh 164 | global head 165 | 166 | #print 'State: detect_last_entry_start' 167 | #print 'line= ' + line 168 | 169 | regex = '^revision ' + head + '$' 170 | pat = re.compile( regex ) 171 | matobj = pat.match( line ) 172 | if matobj != None: 173 | state = 'DETECT_AUTHOR' 174 | else: 175 | state = 'LAST_ENTRY' 176 | 177 | line = fh.readline().rstrip() 178 | return (state, line) 179 | 180 | 181 | def detect_author(line): 182 | global fh 183 | global head 184 | global last_log 185 | 186 | #print 'State: detect_author' 187 | #print 'line= ' + line 188 | 189 | current_revision = None 190 | 191 | pat = re.compile( r'^revision (.*)$' ) 192 | matobj = pat.match( line ) 193 | if matobj != None: 194 | if matobj.group(1) == last_tag: 195 | #print "\r" 196 | update_files[ FILE ] = last_log 197 | state = 'end' 198 | else: 199 | state = 'detect_author' 200 | else: 201 | #print line 202 | last_log += line + "\n" 203 | state = 'detect_author' 204 | 205 | line = fh.readline().rstrip() 206 | 207 | return (state,line) 208 | 209 | # wrapper for the state machine 210 | def analyse_single_file(file): 211 | global FILE 212 | global fh 213 | 214 | #print 'Process ' + FILE 215 | line = fh.readline().rstrip() 216 | 217 | #print "~~~~~\t" + FILE[:-4] + "\t~~~~~" 218 | m = StateMachine() 219 | m.add_state("detect_file", detect_file) 220 | m.add_state("detect_head", detect_head) 221 | m.add_state("last_tag", detect_last_tag) 222 | m.add_state("last_entry", detect_last_entry_start) 223 | m.add_state("detect_author", detect_author) 224 | m.add_state("end", None, end_state=1) 225 | m.set_start("detect_file") 226 | m.run(line) 227 | 228 | 229 | ############################## 230 | # main 231 | ############################## 232 | if __name__ == '__main__': 233 | if len (sys.argv) <= 1: 234 | print 'I need at least one filename to work.' 235 | sys.exit(1) 236 | 237 | prepare_log() 238 | 239 | fh = open( log_file ) 240 | for f in sys.argv[1:]: 241 | last_log = '' 242 | FILE = '' 243 | analyse_single_file( f ) 244 | fh.close() 245 | os.remove( log_file ) 246 | 247 | print '>>>> NEW FILES SINCE LAST RELEASE <<<<' 248 | for x in new_files: 249 | print x 250 | 251 | print "\r" 252 | print '>>>> UPDATED FILES SINCE LAST RELEASE <<<<' 253 | for x in update_files: 254 | print "~~~~~\t" + x + "\t~~~~~" 255 | print update_files[x] 256 | -------------------------------------------------------------------------------- /devel/tools/checkin.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ROOT="$(git rev-parse --show-toplevel)" 4 | [[ $# == 1 ]] || exit 1 5 | git commit -a -m "$1" 6 | git push 7 | cd "$ROOT"/devel/doc 8 | aap -f main.aap allhtml 9 | git checkout gh-pages 10 | cp *.html *.css *.js ../../doc 11 | git commit -a -m "$1" 12 | git push 13 | git checkout master 14 | -------------------------------------------------------------------------------- /devel/tools/formatmb.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yianwillis/vimcdoc/976c6fd8e324fa141a5aabdda1cad6f0e7d201ef/devel/tools/formatmb.vim -------------------------------------------------------------------------------- /devel/tools/gb2utf: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ $# -eq 0 ]; then 4 | echo "`basename $0` " 5 | else 6 | if iconv -f GBK -t UTF-8 "$1" > "$1_utf-8.txt"; then 7 | mv -f "$1_utf-8.txt" "$1" 8 | fi 9 | fi 10 | -------------------------------------------------------------------------------- /devel/tools/html2lex.patch: -------------------------------------------------------------------------------- 1 | --- html2lex.c.orig 2011-05-06 20:36:25.000000000 -0700 2 | +++ html2lex.c 2011-05-06 20:40:04.000000000 -0700 3 | @@ -1913,6 +1913,12 @@ 4 | } 5 | } 6 | 7 | +bool in_header; 8 | +int in_math; 9 | +int in_verb; 10 | +int in_alltt; 11 | + 12 | + 13 | void print_str_(FILE *fout, char *str); 14 | void print_str_(FILE *fout, char *str) 15 | { 16 | @@ -1980,10 +1986,13 @@ 17 | else if ((unsigned char)*str >= ' ' && (unsigned char)*str <= HIGHASCII) 18 | ch = *str; 19 | if (fout) 20 | - if ( ch == '_' || ch == '#' || ch == '[' || ch == ']' 21 | + if ( ch == '#' || ch == '[' || ch == ']' 22 | + || ch == '-' || ch == '\\' || ch == '\'' || ch == ',' 23 | + || ch == '`' || ch == '<' || ch == '=' 24 | || ch == '{' || ch == '}' || ch == '%' || ch == '&' 25 | - || ch == '~' || ch == '\0') 26 | - fputc('.', fout); 27 | + || ch == '~' || ch == '\0') { 28 | + fprintf(fout, "_%2d", (int)ch); 29 | + } 30 | else 31 | fputc(ch, fout); 32 | } 33 | @@ -2012,6 +2021,11 @@ 34 | break; 35 | if (codes[i] == '\0') 36 | fputc('%', fout); 37 | + else if (codes[i] == 'a') 38 | + { 39 | + print_str(fout, strs[i], NULL, "", 0,in_math, in_verb, in_alltt); 40 | + str++; 41 | + } 42 | else 43 | { print_str_(fout, strs[i]); 44 | str++; 45 | @@ -2021,12 +2035,6 @@ 46 | 47 | /* Generation state values */ 48 | 49 | -bool in_header; 50 | -int in_math; 51 | -int in_verb; 52 | -int in_alltt; 53 | - 54 | - 55 | #define URL_not 0 56 | #define URL_ftp 1 57 | #define URL_mailto 2 58 | @@ -2279,11 +2287,12 @@ 59 | 60 | /* correct .html file: */ 61 | else if (href_status == 0) 62 | - { char *strs[4]; 63 | + { char *strs[5]; 64 | char filenr[10]; 65 | sprintf(filenr, opt_filenr, find_file(file)->nr); 66 | strs[0] = filenr; 67 | - strs[1] = fragil_env ? c_protect : ""; 68 | + strs[1] = atext; 69 | + strs[2] = fragil_env ? c_protect : ""; 70 | 71 | if ( in_header 72 | ? opt_href_in_header == OPT_NORMAL 73 | @@ -2294,25 +2303,25 @@ 74 | /* ignore */; 75 | else if (name[0] == '\0') 76 | print_f(fout, latex_fmt[0] != '\0' ? latex_fmt : opt_cf, 77 | - "fp", strs); 78 | + "fap", strs); 79 | else 80 | - { strs[2] = name; 81 | + { strs[3] = name; 82 | print_f(fout, latex_fmt[0] != '\0' ? latex_fmt : opt_cf_n, 83 | - "fpn", strs); 84 | + "fapn", strs); 85 | } 86 | } 87 | else if (f_kind == FOOTNOTE_KIND_MARK) 88 | fputs(c_footmark, fout); 89 | else 90 | - { strs[2] = f_kind == FOOTNOTE_KIND_NORMAL 91 | + { strs[3] = f_kind == FOOTNOTE_KIND_NORMAL 92 | ? c_footnote : c_foottext; 93 | if (name[0] == '\0') 94 | print_f(fout, latex_fmt[0] != '\0' ? latex_fmt : opt_f_cf, 95 | - "fpF", strs); 96 | + "fapF", strs); 97 | else 98 | - { strs[3] = name; 99 | + { strs[4] = name; 100 | print_f(fout, latex_fmt[0] != '\0' ? latex_fmt : opt_f_cf_n, 101 | - "fpFn", strs); 102 | + "fapFn", strs); 103 | } 104 | } 105 | } 106 | @@ -2615,8 +2624,8 @@ 107 | #define H_DEL 48 108 | { "del", C_YES, T_CHAR, 0, "", "" }, 109 | #define H_PRE 49 110 | - { "pre", C_YES, T_VERB, LATEX_KIND_VERB, "\\begin{verbatim} ", 111 | - "\\end{verbatim}\n" }, 112 | + { "pre", C_YES, T_VERB, LATEX_KIND_ALLTT, "\\begin{alltt} ", 113 | + "\\end{alltt}\n" }, 114 | #define H_XMP 50 115 | { "xmp", C_YES, T_VERB, LATEX_KIND_VERB, "\\begin{verbatim} ", 116 | "\\end{verbatim}\n" }, 117 | @@ -3212,7 +3221,8 @@ 118 | || (in_header && tagkind == T_P) 119 | || (item_depth >= 4 && tagkind == T_LIST) 120 | || in_verb 121 | - || (in_alltt && tagkind != T_CHAR)) 122 | + || (in_alltt && !(latex_kind & LATEX_KIND_ALLTT) && 123 | + tagkind != T_CHAR)) 124 | { if (freport && option_warn) 125 | fprintf(freport, 126 | "%s (%d) : <%s> ignored in LaTeX.\n", 127 | @@ -4522,7 +4532,7 @@ 128 | LATEX_CLOSES(tagnr) 129 | else if (OPEN_TAG(T_CHAR)) 130 | { 131 | - if (tagnr == H_FONT) 132 | + if (tagnr == H_FONT || tagnr == H_CODE) 133 | { 134 | LATEX_OPEN(tagnr) // FONT may be nested 135 | } 136 | @@ -4630,10 +4640,11 @@ 137 | { empty_line = FALSE; 138 | empty_item = FALSE; 139 | } 140 | - add_to_comment(ch, &i); 141 | - ch = (char)fgetc(fin); 142 | if (active_href && atext_len < MAX_AT) 143 | atext[atext_len++] = ch; 144 | + else 145 | + add_to_comment(ch, &i); 146 | + ch = (char)fgetc(fin); 147 | } 148 | add_to_comment('\0', &i); 149 | if (no_header && !no_copy && !empty_line && fout != NULL) 150 | @@ -5167,4 +5178,3 @@ 151 | 152 | return 0; 153 | } 154 | - 155 | -------------------------------------------------------------------------------- /devel/tools/main.aap: -------------------------------------------------------------------------------- 1 | TOPLEVELDIR=../.. 2 | :include {once} $TOPLEVELDIR/devel/common.aap 3 | 4 | all: 5 | :print Use 'aap clean' to clean up. 6 | :print Use 'aap html2lex' to generate the html2lex binary. 7 | 8 | html2lex: html2lex.c 9 | :sys $CC -o $target $source -DASCII8 10 | 11 | clean: 12 | :del {r}{force} html2lex 13 | -------------------------------------------------------------------------------- /devel/tools/svnchanges.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | version=VIMCDOC_`cat ../VERSION | sed -e 's/\./_/g'` 4 | last_rev=`svn info ../../tags/$version | grep 'Last Changed Rev:' | cut -d ' ' -f 4` 5 | 6 | # decect added new files since last tagged release 7 | list=/tmp/vimcdoc-list.$$ 8 | added=/tmp/vimcdoc-added.$$ 9 | cd ../doc 10 | ls > $list 11 | ls ../../tags/$version/doc | comm -3 - $list > $added 12 | if [ -s $added ]; then 13 | echo '>>>> NEW FILES SINCE LAST RELEASE <<<<' 14 | cat $added 15 | echo -e '\n' 16 | fi 17 | rm $list $added 18 | 19 | # output updating info of various files 20 | change=/tmp/vimcdoc-change.$$ 21 | echo '>>>> UPDATED FILES SINCE LAST RELEASE <<<' 22 | for i in *.txt 23 | do 24 | svn log -r $last_rev:HEAD $i > $change 25 | len=`cat $change | wc -l` 26 | if [ $len -gt 1 ]; then 27 | echo -e "~~~~\t$i\t~~~~" 28 | cat $change | sed -e '/^-----/d' -e '/^r[0-9]\+/d' -e '/^\s*$/d' 29 | echo -e '\n' 30 | fi 31 | done 32 | rm $change 33 | -------------------------------------------------------------------------------- /devel/tools/tagscngen.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Python script for adapting a original tags file into vimcdoc 0.7.0+ 3 | # compatible. 4 | # Usage: run inside 'tools' directory directly and will generate a 5 | # tags-cn file 6 | 7 | import os 8 | import sys 9 | import glob 10 | from testtags import parse_tag_line 11 | import logging 12 | 13 | doc_dir = '../doc' 14 | tags_file = '%s/tags' % doc_dir 15 | 16 | 17 | class Vimcdoc: 18 | """Class for vimcdoc, including a dictionary for the translated 19 | documents. This is core. Information such as who's the author, 20 | etc, can be retrieved from this dictionary.""" 21 | 22 | documents = [] 23 | def __init__(self): 24 | for i in glob.glob1( doc_dir, '*.txt' ): 25 | #shamelessly take over all docs b4 we standardize the 26 | #author line 27 | self.documents.append( i ) 28 | return 29 | 30 | def __repr__(self): 31 | return self.documents 32 | 33 | def __iter__(self): 34 | return self.iterator() 35 | 36 | def iterator(self): 37 | for i in self.documents: 38 | yield i 39 | 40 | 41 | def txt2cnx(fn): 42 | """Transfer a *.txt filename to a *.cnx filename""" 43 | return os.path.splitext(fn)[0] + '.cnx' 44 | 45 | def generate_tagscn_file(): 46 | """ Generate a tags-cn file which can be used for release. The 47 | output file will be written to the current directory.""" 48 | 49 | docs = Vimcdoc() 50 | try: 51 | fp = open( tags_file, 'r' ) 52 | fp_out = open ('tags-cn', 'w') 53 | for i in fp: 54 | i = i.strip() 55 | taginfo = parse_tag_line( i ) 56 | if taginfo["file"] in docs: 57 | fp_out.write( '%s\t%s\t%s\n' % \ 58 | ( taginfo["name"],\ 59 | txt2cnx(taginfo["file"]), \ 60 | '/'+taginfo["jump"] ) ) 61 | else: 62 | print 'Deleted: %s' % i 63 | except IOError: 64 | print 'Error opening files.' 65 | except KeyError: 66 | pass 67 | else: 68 | fp.close() 69 | fp_out.close() 70 | 71 | 72 | if __name__ == '__main__': 73 | logging.getLogger().setLevel( logging.DEBUG ) 74 | generate_tagscn_file() 75 | -------------------------------------------------------------------------------- /devel/tools/testtags.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | ################################################################## 4 | # vim:ts=4:shiftwidth=4:noet:tw=78: 5 | # 6 | # This is a python script for testing the integraty of the tags. 7 | # Run this in the 'doc' directory where all the translated files 8 | # are together with the tags file. 9 | # 10 | # Author: lang2 (wzhliang@speedymail.org) 11 | ################################################################## 12 | 13 | 14 | ## I M P O R T S 15 | import os 16 | import os.path 17 | import re 18 | import string 19 | import commands 20 | import logging 21 | 22 | ## F U N C T I O N S 23 | def print_tag_info(ti): 24 | """Print informaiton about a tag.""" 25 | print 'TAG: %s' % ti['name'] 26 | print 'FILE: %s' % ti['file'] 27 | print 'JUMP: %s' % ti['jump'] 28 | 29 | def adapt_pattern(pat): 30 | """ Adapt a vim search pattern to be used for grep.""" 31 | str = string.replace(pat, '*', '\\*') 32 | str = string.replace(str, '[', '\\[') 33 | str = string.replace(str, ']', '\\]') 34 | str = string.replace(str, '^', '\\^') 35 | return str 36 | 37 | def find_tag(ti): 38 | """try to find the tag given the tag info.""" 39 | if os.path.isfile( ti["file"] ): 40 | cmd = "grep '%s' %s" % ( adapt_pattern(ti["jump"]), ti["file"] ) 41 | (err, msg) = commands.getstatusoutput( cmd ) 42 | if 0 != err: 43 | print 'Tag\t%20s\tis not found in file <%s>.' \ 44 | % (ti["name"], ti["file"]) 45 | logging.info( 'COMMAND: %s' % cmd ) 46 | #else: 47 | #logging.info ( msg ) 48 | 49 | 50 | def parse_tag_line(line): 51 | taginfo={} 52 | reobj = re.compile('(\S+)\s+(\S+)\s+/(\S+)') 53 | matobj = re.search( reobj, line ) 54 | if not matobj is None: 55 | taginfo["name"] = matobj.group(1) 56 | taginfo["file"] = matobj.group(2) 57 | taginfo["jump"] = matobj.group(3) 58 | return taginfo 59 | else: 60 | print 'WARNING: tag %10s cannot be checked.' % taginfo["name"] 61 | return None 62 | 63 | ###################### 64 | ## M A I N 65 | ###################### 66 | if __name__ == '__main__': 67 | #logging.getLogger().setLevel( logging.DEBUG ) 68 | 69 | try: 70 | fp = open('tags', 'r') 71 | 72 | for line in fp: 73 | line = line.strip() 74 | taginfo = parse_tag_line(line) 75 | if not taginfo is None: 76 | find_tag(taginfo) 77 | except IOError: 78 | print 'Error reading tag file. You have to run this inside' 79 | print 'the doc directory.' 80 | except KeyError: 81 | print 'Something wrong with your tag file. Parsing error.' 82 | else: 83 | fp.close() 84 | 85 | #EOF 86 | -------------------------------------------------------------------------------- /devel/tools/vim-stylesheet.css: -------------------------------------------------------------------------------- 1 | @import 'https://fontlibrary.org/face/gnu-unifont'; 2 | @font-face { 3 | font-family: 'Noto Sans Mono CJK SC'; 4 | src: 5 | local('Noto Sans Mono CJK SC Regular'), 6 | local('NotoSansMonoCJKsc-Regular'), 7 | url('/assets/fonts/noto/NotoSansMonoCJKsc-Regular.otf') format('opentype'); 8 | } 9 | @media only screen and (max-width: 768px) { 10 | #banner { 11 | width: calc(100% - 2em) !important; 12 | text-align: center; 13 | } 14 | #banner hr { display: none; } 15 | header { display: none; } 16 | footer { display: none; } 17 | #outer { 18 | position: fixed; 19 | top: 4em; right: 1px; bottom: 1px; left: 1px; 20 | width: auto !important; 21 | max-width: 40em; 22 | overflow: scroll; 23 | } 24 | } 25 | body { 26 | font-family: 'Noto Sans Mono CJK SC', WenQuanYiZenHeiMono, Sarasa-Mono-T-SC-Regular, 'MS Hei', NSimsun, UnifontMedium, monospace; 27 | } 28 | #outer { 29 | border: 1px solid; 30 | border-radius: 1em; 31 | margin: auto; 32 | width: 40em; 33 | padding: 0.5em; 34 | background: rgb(255, 248, 220); 35 | } 36 | .inner { white-space: pre; } 37 | .inner:first-line { line-height: 0; } 38 | #banner { 39 | margin: auto; 40 | display: table; 41 | position: fixed; 42 | z-index: 1; 43 | width: 5.5em; 44 | } 45 | #banner form { display: inline; } 46 | #banner input { 47 | width: 5.5em; 48 | border-radius: 0.5em; 49 | box-sizing: border-box; 50 | background: rgb(255, 248, 220); 51 | font: inherit; 52 | } 53 | #banner iframe { display: none; } 54 | footer { margin-top: 1em; font-style:italic; } 55 | code { font-family: inherit; } 56 | :link { 57 | color: rgb(0,137,139); 58 | text-decoration: none; 59 | } 60 | :visited { 61 | color: rgb(0,100,100); 62 | background-color: white; /* should be inherit */ 63 | } 64 | :active { 65 | color: rgb(0,200,200); 66 | background-color: white; /* should be inherit */ 67 | } 68 | B.vimtag { 69 | color: rgb(250,0,250); 70 | font-weight: normal; 71 | } 72 | h1, h2 { 73 | color: rgb(82,80,82); 74 | text-align: center; 75 | } 76 | h3, h4, h5, h6 { 77 | color: rgb(82,80,82); 78 | text-shadow: 2px 2px 2px #E6E6E6; 79 | margin: 0px; 80 | } 81 | .doubleline { 82 | border: none 0; 83 | border-top: 3px double #c00; 84 | width: 40em; 85 | height: 3px; 86 | margin: 1em auto 1em 0; 87 | text-align: left; 88 | } 89 | .singleline { 90 | width: 40em; 91 | margin: 1em auto 1em 0; 92 | text-align: left; 93 | } 94 | .headline { color: rgb(0,137,139); } 95 | .header { color: rgb(164, 32, 246); } 96 | .section { color: rgb(164, 32, 246); } 97 | .keystroke { color: rgb(106, 89, 205); } 98 | .vim { color: rgb(0, 136, 136); } 99 | .example { color: rgb(0, 0, 255); } 100 | .option { color: rgb(0, 139, 0); } 101 | .special { color: rgb(106, 89, 205); } 102 | .notvi { color: rgb(106, 89, 205); } 103 | .note { color: blue; background-color: yellow; } 104 | .emphasis { color: blue; } 105 | .sub {} 106 | .badlink { color: rgb(0,37,39); } 107 | -------------------------------------------------------------------------------- /devel/tools/vimcdoc.js: -------------------------------------------------------------------------------- 1 | window.addEventListener('DOMContentLoaded', (event) => { 2 | const tag = new URLSearchParams(window.location.search).get("tag"); 3 | if (tag) { 4 | for(var i = 0; i < document.links.length; ++i) { 5 | const link = document.links[i]; 6 | if (link.innerHTML == tag) { 7 | window.parent.location.replace(link.href); 8 | } 9 | } 10 | } 11 | }); 12 | -------------------------------------------------------------------------------- /devel/www/htdocs/2htmlcmd.vim: -------------------------------------------------------------------------------- 1 | :set nonumber | syntax off | so ./2html.vim | wqa 2 | -------------------------------------------------------------------------------- /devel/www/htdocs/doc/Makefile: -------------------------------------------------------------------------------- 1 | .phony: clean html 2 | 3 | VIM2HTML = ../../../doc/vim2html.pl 4 | VIMDOCDIR = ../../../doc 5 | 6 | html: 7 | ${VIM2HTML} ${VIMDOCDIR}/tags ${VIMDOCDIR}/*.txt 8 | 9 | %.html:${VIMDOCDIR}/%.txt 10 | ${VIM2HTML} ${VIMDOCDIR}/tags $< 11 | 12 | 13 | clean: 14 | rm -f *.html *~ *.css 15 | -------------------------------------------------------------------------------- /devel/www/htdocs/images/screenshot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yianwillis/vimcdoc/976c6fd8e324fa141a5aabdda1cad6f0e7d201ef/devel/www/htdocs/images/screenshot.jpg -------------------------------------------------------------------------------- /devel/www/htdocs/main.aap: -------------------------------------------------------------------------------- 1 | TOPLEVELDIR=../../.. 2 | :include $TOPLEVELDIR/devel/common.aap 3 | 4 | Files = index.html 5 | `glob('images/*.png')` 6 | `glob('images/*.jpg')` 7 | 8 | :attr {publish = $SF_SCP_WEB_URL/%file%} $Files 9 | :attr {publish = $SF_SCP_WEB_URL/%basename%} ../../../ChangeLog 10 | 11 | all: index.html 12 | :print Use 'aap publish' to publish the latest index.html, ChangeLog and screenshots. 13 | 14 | index.html: $TOPLEVELDIR/NEWS $TOPLEVELDIR/AUTHORS vimcdoc-sf.py 15 | :sys touch index.html 16 | :sys ./vimcdoc-sf.py -ci 17 | 18 | clean: 19 | :del {r}{force} index.html *~ *.bak 20 | -------------------------------------------------------------------------------- /doc/debug.cnx: -------------------------------------------------------------------------------- 1 | *debug.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年3月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: Willis 6 | 7 | 8 | 调试 Vim *debug-vim* 9 | 10 | 本文档是为了调试 Vim 自身而准备的,如果 Vim 不能正确工作,请看这里。 11 | 如果要调试 Vim 脚本和函数等,见 |debug-scripts|。 12 | 13 | 1. 用 gcc 和 gdb 定位崩溃 |debug-gcc| 14 | 2. 定位内存泄漏 |debug-leaks| 15 | 3. Windows 漏洞报告 |debug-win32| 16 | 17 | ============================================================================== 18 | 19 | 1. 用 gcc 和 gdb 定位崩溃 *debug-gcc* *gdb* 20 | 21 | 如果 Vim 崩溃于某测试文件而使用的编译器是 gcc 的话,下面给出具体步骤,你可以用 22 | 它来发现 Vim 崩溃的准确位置。MingW 工具同样适用。 23 | 24 | 1. 用 "-g" 选项编译 Vim (src/Makefile 有一行用于此目的,只要去掉注释即可)。同 25 | 时保证不使用 "strip" (不要安装,或者用 "STRIP = /bin/true")。 26 | 27 | 2. 执行命令 (把 "11" 换成实际失败的那个测试): > 28 | cd testdir 29 | gdb ../vim 30 | run -u unix.vim -U NONE -s dotest.in test11.in 31 | 32 | 3. 检查 Vim 在哪里崩溃,gdb 会给出这方面的消息。 33 | 34 | 4. 此 gdb 命令可以得到堆栈记录: > 35 | where 36 | < 此命令可以查看不同的堆栈记录位置: > 37 | frame 3 38 | < 把 "3" 换成堆栈记录其中一个位置。 39 | 40 | ============================================================================== 41 | 42 | 2. 定位内存泄漏 *debug-leaks* *valgrind* 43 | 44 | 如果你怀疑 Vim 泄漏内存并且使用的是 Linux,valgrind 是定位内存泄漏很有用的工 45 | 具。 46 | 47 | 首先,编译 Vim 时定义 EXITFREE。在 MAKEFILE 里查找之并去掉注释。 48 | 49 | 用以下的命令启动 Vim: 50 | > 51 | valgrind --log-file=valgrind.log --leak-check=full ./vim 52 | 53 | 备注: Vim 的运行会变慢许多。如果 .vimrc 很大或者有多个插件,启动时请耐心,也可 54 | 使用 "--clean" 参数运行来跳过这些。 55 | 56 | 常有一些库函数发生泄漏,例如 getpwuid() 和 XtVaAppCreateShell()。没法避免这种 57 | 情况,但泄漏的字节数应该很少,不超过一千字节。 58 | 59 | ============================================================================== 60 | 61 | 3. Windows 漏洞报告 *debug-win32* 62 | 63 | 如果 Vim 的 Windows 版本崩溃且崩溃可以重现,通过采取若干步骤,你可以提供有用的 64 | 漏洞报告。 65 | 66 | 67 | 3.1 通用 ~ 68 | 69 | 首先,你需要可执行文件的调试器符号文件 (PDB): gvim.pdb 对应 gvim.exe,vim.pdb 70 | 对应 vim.exe。在获得可执行文件的相同位置应该可以下载 PDB。确信使用和 EXE 匹配 71 | 的 PDB 文件 (日期相同)。 72 | 73 | 如果你自己用 Microsoft Visual C++ 编译器编译可执行文件,PDB 应该和 EXE 在同一 74 | 个生成目录。 75 | 76 | 如果你有 Visual Studio,用它来代替 VC Toolkit 和 WinDbg。 77 | 78 | 如果是使用其它编译器,你应该用相应的调试器: Cygwin 和 MinGW 编译器使用 gdb (见 79 | 上 |debug-gcc|)。 80 | 81 | 82 | *debug-vs2005* 83 | 3.2 用 Visual Studio 2005/Visual C++ 2005 Express 调试 Vim 的崩溃 ~ 84 | 85 | 首先启动 vim.exe 或 gvim.exe,然后启动 Visual Studio。(如果你没有 Visual 86 | Studio,按照 |get-ms-debuggers| 的指示获取免费版本 Visual C++ 2005 Express 87 | Edition。) 88 | 89 | 在 Tools 菜单上点击 Attach to Process (连接到进程)。选择 Vim 的进程。 90 | 91 | 在 Vim 里,重现崩溃。Visual Studio 这时会给出对话框,告诉你 Vim 进程出现了未处 92 | 理的例外。点击 Break,中断该进程并进入调试。 93 | 94 | Visual Studio 这时弹出另一个对话框,告诉你无法载入符号文件所以不能显示源代码。 95 | 点击 OK。 96 | 97 | 这时会打开若干窗口。在 Call Stack (调用栈) 窗口按鼠标右键。然后选择 Load 98 | Symbols (载入符号)。Find Symbols (寻找符号) 对话框会打开以寻找 (g)vim.pdb。导 99 | 航到你准备好的包含 PDB 文件的目录,然后选择 Open。 100 | 101 | 此时,你应该有了完整的调用栈,其中包含了 vim 的函数名和行号。双击任何一行会给 102 | 出 Find Source (寻找源代码) 对话框。导航到包含 Vim 源代码的目录 (如果有的话)。 103 | 104 | 如果你不知道如何继续调试,按照 ":help bug-reports" 的步骤进行。把调用栈粘贴到 105 | 漏洞报告里。 106 | 107 | 如果有 Visual Studio 的付费版本,你可以用 Debug 菜单保存一个 minidump 并在漏洞 108 | 报告里一并发送。minidump 是一个小文件 (<100KB),里面包含进程的状态信息。 109 | Visual C++ 2005 Express Edition 不能保存 minidump 也不能安装成为 just-in-time 110 | (即时) 调试器。如果你需要保存 minidump 或者需要即时 (或 postmortem,事后) 调试 111 | 器的话,使用 WinDbg,|debug-windbg|。 112 | 113 | *debug-windbg* 114 | 3.3 用 WinDbg 调试 Vim 的崩溃 ~ 115 | 116 | |get-ms-debuggers| 说明如何得到 WinDbg。 117 | 118 | 和 Visual Studio IDE 一样,你可以连接 WinDbg 到运行中的 Vim 进程。你也可以让系 119 | 统自动激活 WinDbg,从而使之成为事后调试器。要设置 WinDbg 成为一个事后调试器, 120 | 运行 "windbg -I"。 121 | 122 | 要连接 WinDbg 到运行中的 Vim 进程,启动 WinDbg,在 File 菜单上点击 Attach to 123 | Process (连接到进程)。选择 Vim 进程然后点击 OK。 124 | 125 | 这个时候,选择 File 菜单的 Symbol File Path (符号文件路径),然后把包含 Vim PDB 126 | 文件的目录加入 sympath。如果你有 Vim 源代码,使用 File 菜单的 Source File Path 127 | (源文件路径)。WinDbg 里可以打开源文件,如果你愿意,也可以设置断点。现在重现崩 128 | 溃。WinDbg 应该会打开源文件并定位于崩溃所在的位置。使用 View 菜单,你可以检查 129 | 调用栈、局部变量、观察窗口 (watch window) 和其它。 130 | 131 | 如果把 WinDbg 用作事后调试器,你不需要把 WinDbg 连接到 Vim 进程上。只要简单地 132 | 重现崩溃,WinDbg 就会自动启动。用上面相同的方法设置符号文件路径和源文件路径。 133 | 134 | 要保存 minidump,在 WinDbg 命令行上输入: > 135 | .dump vim.dmp 136 | < 137 | *debug-minidump* 138 | 3.4 打开 Minidump ~ 139 | 140 | 如果你有 minidump 文件,你可以用 Visual Studio 或 WinDbg 打开它。 141 | 142 | Visual Studio 2005 里: File 菜单上选择 Open,然后 Project/Solution。导航到该 143 | .dmp 文件然后将它打开。现在按 F5 打开调试器。按照 |debug-vs2005| 的指示来设置 144 | 符号文件路径。 145 | 146 | WinDbg 里: 选择 File 菜单的 Open Crash Dump,按照 |debug-windbg| 的指示来设置 147 | 符号文件路径。 148 | 149 | *get-ms-debuggers* 150 | 3.5 获得 Microsoft 调试工具 ~ 151 | 152 | Debugging Tools for Windows (Windows 调试工具) 可以在这里下载 153 | https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools 154 | 它包括 WinDbg 调试器。 155 | 156 | Visual C++ 2005 Express Edition 可以在这里免费下载: 157 | http://msdn.microsoft.com/vstudio/express/visualC/default.aspx 158 | 159 | ========================================================================= 160 | vim:tw=78:ts=8:noet:ft=help:norl: 161 | -------------------------------------------------------------------------------- /doc/debugger.cnx: -------------------------------------------------------------------------------- 1 | *debugger.txt* 适用于 Vim 9.1 版本。 最近更新: 2020年1月 2 | 3 | 4 | VIM 参考手册 by Gordon Prieur 5 | 译者: iCrazy 6 | 7 | 8 | 支持调试器的特性 *debugger-support* 9 | 10 | 这里的特性是为了和调试器、集成编程环境 (IPE) 或集成开发环境 (IDE) 集成使用的。 11 | 要在 Vim 终端窗口中运行调试器,可见 |terminal-debugger|。 12 | 13 | 1. 调试器的功能 |debugger-features| 14 | 2. Vim 编译选项 |debugger-compilation| 15 | 16 | ============================================================================== 17 | 1. 调试器的功能 *debugger-features* 18 | 19 | 有以下功能可用: 20 | 21 | 替代命令输入 |alt-input| 22 | 调试标号 |debug-signs| 23 | 调试源代码高亮 |debug-highlight| 24 | 信息页脚 |gui-footer| 25 | 气泡表达式求值 |balloon-eval| 26 | 27 | 这些特性主要是针对图形界面的 gvim 而新增的。然而,|alt-input| 和 28 | |debug-highlight| 是同时针对 vim 和 gvim 进行开发的。一些其他的功能略做修改, 29 | 即可在非 GUI 的 vim 上使用。但是,我没有这样做,我也没有测试过针对非图形 GUI 30 | 界面编译出的 vim 的可靠性。 31 | 32 | 33 | 1.1 替代命令输入 *alt-input* 34 | 35 | 要使 Vim 和一个调试器一起工作,至少必须有一种和调试器进行输入连接的方式,或者 36 | 有一个外部工具。尽管很多情况下,也同时会有一个输出连接,但这并不是必要的。 37 | 38 | 输入连接的目的是让外部调试器把命令传送给 Vim。调试器送来的命令必须足以使它自己 39 | 显示当前的调试环境和状态。 40 | 41 | 目前的实现是基于 X 工具包中的 dispatch 循环和对 XtAddInput() 函数的调用的。 42 | 43 | 44 | 1.2 调试标号 *debug-signs* 45 | 46 | 很多调试器用在一些行前面加一个小记号或使这些行颜色高亮的方式来给它们做标记。命 47 | 令 |:sign| 可以使得调试器设定这种图形标号。这项特性有什么作用呢?举例来说,它 48 | 可以用来使调试器显示一个箭头,从而指示正在被调试的程序的程序计数器 (PC)。另一 49 | 个用处是在有断点的行后面显示一个小的停止标号。这些可见的标号可以使用户得知一些 50 | 调试器的状态信息。 51 | 52 | 这些特性不仅仅可以和调试器一起使用。它们可以使一个 IPE 高亮显示编译错误、查找 53 | 到的文本等等。标号功能还可以和 |debug-highlight| 一起工作,从而保证标号可以被 54 | 显眼的显示出来。 55 | 56 | 调试标号可以用命令 |:sign| 来定义和设置。 57 | 58 | 59 | 1.3 调试源代码高亮 *debug-highlight* 60 | 61 | 这项特性可以使得您把一行文字突出地高亮。这种高亮是用来使某一行突出显示的。高亮 62 | 功能在 vim 和 gvim 中都可以工作,而调试标号一般仅在 gvim 下工作。Sun 63 | Microsystem 的 dtterm 是一个例外,它有一个 "sign gutter" 可以用来显示标号。 64 | 65 | 66 | 1.4 信息页脚 *gui-footer* 67 | 68 | 信息页脚可以用来显示调试器或 IPE 中传来的信息。它还可以用来显示菜单和工具栏提 69 | 示。页脚区域位于 GUI 窗口的底部,在用来显示冒号 (:) 命令的那一行的下方。 70 | 71 | 页脚的显示是用 'guioptions' 中的字母 'F' 来控制的。 72 | 73 | 74 | 1.5 气泡表达式求值 *balloon-eval* 75 | 76 | 这项特性可以使一个调试器或其他的外部工具根据鼠标所指的位置显示动态的信息。它的 77 | 目的在于使 Sun 的 Visual WorkShop 调试器能够显示表达式表达式求值。实际上,这个 78 | 特性是用通用的方式实现的,所以它还可以用来显示其他的信息。不过此功能很有限,更 79 | 高级的弹出界面可见 |popup-window|。 80 | 81 | 另一种使用气泡的方法是使用 'balloonexpr' 选项。完全由用户定义。 82 | 83 | 气泡表达式求值还有一些可以设置的参数。对于 Motif,字体列表和颜色可以通过 X 资 84 | 源 (XmNballoonEvalFontList、XmNballoonEvalBackground 和 85 | XmNballoonEvalForeground) 来设定。 86 | 87 | 选项 'balloondelay' 用来设定显示气泡之前的延迟时间。 88 | 选项 'ballooneval' 和/或 'balloonevalterm' 选项必须打开。 89 | 90 | 气泡表达式求值仅当用 |+balloon_eval| 特性编译时有效。对终端而言,适用的是 91 | |+balloon_eval_term| 特性。 92 | 93 | 气泡表达式求值功能还被用来为工具栏显示提示。对于这个用途,无须设置选项 94 | 'ballooneval',但是其他选项的值将被应用。 95 | 96 | ============================================================================== 97 | 2. Vim 编译选项 *debugger-compilation* 98 | 99 | 调试器特性是为了和 Sun 的 Visual WorkShop 集成编程环境 (ipe) 一起使用而开发 100 | 的。事实上,它们使用了一种通用的方式,所以其他的调试器也可以使用这些特性。 101 | 102 | 以下的编译时的预处理程序变量控制着这些特性: 103 | 104 | 交替命令输入 ALT_X_INPUT 105 | 调试符号 FEAT_SIGNS 106 | 调试高亮 FEAT_SIGNS 107 | 信息页脚 FEAT_FOOTER 108 | 气泡表达式求值 FEAT_BEVAL 109 | 110 | Sun Visual WorkShop 的特别支持已被删除,因为该产品不复存在。 111 | 112 | 对 Sun NetBeans 的支持,可见 |netbeans|。 113 | 114 | 115 | vim:tw=78:sw=4:ts=8:noet:ft=help:norl: 116 | -------------------------------------------------------------------------------- /doc/farsi.cnx: -------------------------------------------------------------------------------- 1 | *farsi.txt* 适用于 Vim 9.1 版本。 最近更新: 2019年12月 2 | 3 | 4 | VIM 参考手册 by Mortaza Ghassab Shiran 5 | 译者: Willis 6 | 7 | 8 | 从右到左的显示和 Vim 的波斯语映射 *farsi* *Farsi* 9 | 10 | 11 | *E27* 12 | 8.1.0932 补丁删除了波斯语支持。那时,此功能已过时且无人使用。 13 | 14 | 如果你想把波斯语支持加回来,请看一下 8.1 发布版本中的旧的波斯语代码。它应和带 15 | Unicode 字符集的阿拉伯语支持合并。 16 | 17 | 18 | vim:tw=78:ts=8:noet:ft=help:norl: 19 | -------------------------------------------------------------------------------- /doc/ft_context.cnx: -------------------------------------------------------------------------------- 1 | *ft_context.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年3月 2 | 3 | 这是 ConTeXt 文件类型插件的文档。 4 | 5 | 注意: 此插件需要 +vim9script。 6 | 7 | ============================================================================== 8 | 内 容 *context.vim* *ft-context* 9 | 10 | 1. 介绍 |ft-context-intro| 11 | 2. 命令 |ft-context-commands| 12 | 3. 设置 |ft-context-settings| 13 | 4. 映射 |ft-context-mappings| 14 | 15 | ============================================================================== 16 | *ft-context-intro* 17 | 介绍 ~ 18 | 19 | ConTeXt,与 LaTeX 类似,是基于宏的在 TeX 上构造的排版系统: 20 | > 21 | https://wiki.contextgarden.net 22 | https://wiki.contextgarden.net/Vim 23 | < 24 | ConTeXt 插件提供语法高亮、补全和排版 ConTeXt 文档的支持。排版文档的建议方式是 25 | 使用 |:ConTeXt|。这会调用在 `$PATH` 上找到的 `mtxrun` 脚本。 26 | 27 | 要更精细地控制命令及其环境,可直接调用 `context.Typeset()` (老式 Vim 脚本里可 28 | 用 `context#Typeset()`)。例如,如果在 `~/context` 下安装了 ConTeXt,可类似于下 29 | 面这样来定义函数以使用它: 30 | > 31 | import autoload 'context.vim' 32 | 33 | def MyConTeXt() 34 | const env = {'PATH': 35 | printf("%s/context/tex/texmf--/bin:%s", $HOME, $PATH)} 36 | context.Typeset("%", env) 37 | enddef 38 | 39 | 代码可放在 `~/.vim/after/ftplugin/context.vim`。然后可定义映射来调用此定制函数: 40 | > 41 | nnoremap t MyConTeXt() 42 | < 43 | `context.Typeset()` 接受第三个可选的参数,用于指定定制的排版命令。此参数必须是 44 | 函数,接受路径,返回以列表形式出现的命令。例如: 45 | > 46 | def ConTeXtCustomCommand(path: string): list 47 | return ['mtxrun', '--script', 'context', '--nonstopmode', path] 48 | enddef 49 | 50 | context.ConTeXtTypeset("%", v:none, ConTeXtCustomCommand) 51 | < 52 | 大型项目的组织方式通常是一个根文档和若干章节文件。编辑章节文件时,最好可以直接 53 | 在其上调用 |:ConTeXt|,而不用先切换到根文件。为此,可在每个章节文件的头部加入 54 | "魔术行",指定根文件的相对路径。例如: 55 | > 56 | % !TEX root = ../MyRoot.tex 57 | < 58 | Vim 在当前缓冲区的头十行里寻找魔术行: 如果找到,对该行指定的文档而不是当前缓冲 59 | 区进行排版。根文档不须在 Vim 中打开。 60 | 61 | 要扩展补全和语法高亮,可用 ConTeXt 生成支持文件,并加入到你的配置中。如果配置 62 | 文件位于 `~/.vim`,可用: 63 | > 64 | mkdir -p ~/.vim/syntax/shared 65 | cd ~/.vim/syntax/shared 66 | mtxrun --script interface --vim 67 | < 68 | 末尾的命令会创建以下语法文件: 69 | 70 | - `context-data-context.vim`; 71 | - `context-data-interfaces.vim`; 72 | - `context-data-metafun.vim`; 73 | - `context-data-tex.vim`. 74 | 75 | 相同的命令也可用于这些语法文件的更新。 76 | 77 | *ft-context-commands* 78 | 命令 ~ 79 | *:ConTeXt* 80 | 启动后台 |job| 排版当前缓冲区的文档。此命令接受可选的缓冲区名,以选择另一个缓 81 | 冲区进行排版。 82 | 83 | *:ConTeXtLog* 84 | 编辑当前缓冲区包含的源代码对应的日志文件。 85 | 86 | *:ConTeXtJobsStatus* 87 | 回显当前后台中运行的作业数目。 88 | 89 | *:ConTeXtStopJobs* 90 | 停止当前后台中运行的所有 ConTeXt 作业。 91 | 92 | *ft-context-settings* 93 | 设置 ~ 94 | *'b:context_ignore_makefile'* 95 | *'g:context_ignore_makefile'* 96 | |:make| 可用于 (同步) 排版文档。如果存在 Makefile 而没有置位本选项,使用标准 97 | `make`。如果置位了本选项,不管有没有 Makefile 存在也会调用 `mtxrun`。 98 | > 99 | g:context_ignore_makefile = 0 100 | < 101 | 注意: 用 |:make| 前,先把缓冲区的工作目录设为要排版的文件所在的目录。 102 | 103 | *'g:context_extra_options'* 104 | 传递给 `mtxrun` 的额外选项的列表。 105 | > 106 | g:context_extra_options = [] 107 | < 108 | *'b:context_include'* 109 | *'g:context_include'* 110 | 文件类型/GROUP 组对的字典,用于决定 \startGROUP 和 \stopGROUP 之间应用哪种语法 111 | 高亮。缺省是高亮 `\startXML` 和 `\stopXML` 之间的 XML。 112 | > 113 | g:context_include = {'xml': 'XML'} 114 | 115 | 注意: Lua 和 MetaPost 总是在对应块的范围内高亮。 116 | 117 | *'g:no_context_maps'* 118 | 置位时不定义映射。 119 | > 120 | g:no_context_maps = 0 121 | < 122 | *ft-context-mappings* 123 | 映射 ~ 124 | 125 | tp "重新排版 TeX 段落"。 126 | 127 | i$ "内含内嵌数学块"。 128 | 129 | a$ "一个内嵌数学块"。 130 | 131 | ]] [count] 个正向小节开始处。 132 | 133 | [[ [count] 个反向小节开始处。 134 | 135 | ][ [count] 个正向小节结尾处。 136 | 137 | [] [count] 个反向小节结尾处。 138 | 139 | ]} [count] 个正向块结尾 (\stop...、\setup...、 140 | \define...)。 141 | 142 | [{ [count] 个反向块起始 (\start...、\setup...、 143 | \define...)。 144 | 145 | vim:tw=78:sw=4:ts=8:noet:ft=help:norl: 146 | -------------------------------------------------------------------------------- /doc/ft_hare.cnx: -------------------------------------------------------------------------------- 1 | *ft_hare.txt* Hare 程序语言的支持 2 | 3 | ============================================================================== 4 | 内 容 *hare* 5 | 6 | 1. 介绍 |hare-intro| 7 | 2. 文件类型插件 |hare-plugin| 8 | 3. 设置 |hare-settings| 9 | 10 | ============================================================================== 11 | 介 绍 *hare-intro* 12 | 13 | 此插件提供 Hare 编程语言的语法高亮、缩进和其他功能。也支持 Hare 模块内部的 14 | README 文件,但须先置位 |g:filetype_haredoc|。 15 | 16 | ============================================================================== 17 | 文 件 类 型 插 件 *hare-plugin* 18 | 19 | 此插件依据 HAREPATH 环境变量的内容自动设置 'path' 值,这样 |gf| 等命令就可以直 20 | 接打开标准库或第三方模块。如果没设置 HAREPATH,缺省为多数 Unix-相容文件系统的 21 | 建议路径,也就是 /usr/src/hare/stdlib 和 /usr/src/hare/third-party。 22 | 23 | ============================================================================== 24 | 设 置 *hare-settings* 25 | 26 | 此插件提供少量可在 vimrc 里定义的变量,用来配置其行为。 27 | 28 | *g:filetype_haredoc* 29 | 此插件能够自动检测 Hare 模块,并设置 README 文件为 "haredoc" 文件类型。因为递 30 | 归目录搜索作为一种经验法则有少许效能影响,缺省关闭此特性,但可选择性打开它: > 31 | let g:filetype_haredoc = 1 32 | < 33 | 调节搜索行为的不同方式可见 |g:haredoc_search_depth|。 34 | 35 | *g:hare_recommended_style* 36 | 根据官方 Hare 风格指导,缺省置位以下选项: > 37 | setlocal noexpandtab 38 | setlocal shiftwidth=0 39 | setlocal softtabstop=0 40 | setlocal tabstop=8 41 | setlocal textwidth=80 42 | < 43 | 要关闭之: > 44 | let g:hare_recommended_style = 0 45 | < 46 | *g:hare_space_error* 47 | 缺省,空格字符之后的拖尾空白和制表被高亮为错误。插入模式下会自动关闭。要完全关 48 | 闭此高亮: > 49 | let g:hare_space_error = 0 50 | < 51 | *g:haredoc_search_depth* 52 | 缺省,打开 |g:filetype_haredoc| 时,只搜索当前目录及其直属子目录。可调整最大搜 53 | 索深度: > 54 | let g:haredoc_search_depth = 2 55 | < 56 | 值 效果~ 57 | 0 仅搜索当前目录。 58 | 1 仅搜索当前目录及其直属子目录。 59 | 2 搜索当前目录及其下两层的子目录。 60 | 61 | 最大搜索深度可为任何整数,但不推荐大于 2 的值,绝大多数情况下没有可见的好处。 62 | 63 | ============================================================================== 64 | vim:tw=78:ts=8:noet:ft=help:norl: 65 | -------------------------------------------------------------------------------- /doc/ft_mp.cnx: -------------------------------------------------------------------------------- 1 | *ft_mp.txt* 适用于 Vim 9.1 版本。 最近更新: 2023年2月 2 | 3 | 这是关于 METAFONT 和 MetaPost 文件类型的插件的文档。除非特别指定,下面定义的命 4 | 令、设置和映射对两种文件类型都适用。 5 | 6 | 注意: 此插件需要 +vim9script。 7 | 8 | ============================================================================== 9 | 内 容 *mp.vim* *ft-metapost* 10 | *mf.vim* *ft-metafont* 11 | 12 | 1. 介绍 |ft-metapost-intro| 13 | 2. 命令 |ft-metapost-commands| 14 | 3. 设置 |ft-metapost-settings| 15 | 4. 映射 |ft-metapost-mappings| 16 | 17 | ============================================================================== 18 | *ft-metapost-intro* 19 | *ft-metafont-intro* 20 | 介绍 ~ 21 | 此文件类型提供 METAFONT 和 MetaPost 文档的完整支持,包括语法高亮、缩进和补全。 22 | 23 | 为 METAFONT 和 MetaPost 代码定义缩进规则需要点技巧,也有些主观,因为它们的语法 24 | 是很自由的。此插件使用一些经验法则,应适用于多数情况,但特定情况下可以自行覆盖 25 | 自动规则,以使 `gg=G` 这样的命令可以保存手动定义的缩进。 26 | 27 | 为此,可在一行后加上 `%>`、`%<`、`%=` 或 `%!`,以显式地控制其后一行的缩进。 28 | `<` 和 `>` 符号可重复多次: 例如 `%>>` 会使下行缩进两次。当然,`%<` 会使下行减 29 | 少一层缩进;而 `%=` 设置下行的缩进和当前行的相同;而 `%!` 代表下行的缩进手动控 30 | 制,不应改变。 31 | 32 | 例如,下面是简单宏的缺省缩进方式: 33 | > 34 | def foo = 35 | makepen( 36 | subpath(T-n,t) of r 37 | shifted .5down 38 | --subpath(t,T) of r shifted .5up -- cycle 39 | ) 40 | withcolor black 41 | enddef 42 | < 43 | 通过加入特殊注释,可随意控制缩进: 44 | > 45 | def foo = 46 | makepen( 47 | subpath(T-n,t) of r %> 48 | shifted .5down %> 49 | --subpath(t,T) of r shifted .5up -- cycle %<<< 50 | ) 51 | withcolor black 52 | enddef 53 | < 54 | *ft-metapost-commands* 55 | 命令 ~ 56 | *:FixBeginfigs* 57 | 重新编号当前缓冲区的 beginfig() 块,使第 n 个图的编号为 n。只适用于 MetaPost。 58 | 59 | *ft-metapost-settings* 60 | *ft-metafont-settings* 61 | 设置 ~ 62 | *'g:mf_other_macros'* 63 | 高亮一些其它的基本宏名,如 cmbase、logo 等等的。METAFONT 缓冲区缺省设为 1, 64 | MetaPost 缓冲区缺省设为 0。 65 | 66 | *'g:mf_plain_macros'* 67 | 高亮 plain.mf 定义的关键字。METAFONT 缓冲区缺省设为 1,MetaPost 缓冲区缺省设为 68 | 0。 69 | 70 | *'g:mf_plain_modes'* 71 | 高亮 modes.mf 定义的关键字。METAFONT 缓冲区缺省设为 1,MetaPost 缓冲区缺省设为 72 | 0。 73 | 74 | *'g:mp_close_tag'* 75 | 定义结束缩进块的额外关键字。例如定义了: 76 | > 77 | g:mp_close_tag = ['\'] 78 | < 79 | 那么 `endfoo` 开始的行会比前一行减少一层缩进。 80 | > 81 | g:mp_close_tag = [] 82 | < 83 | *'b:mp_metafun'* 84 | *'g:mp_metafun'* 85 | 设为 1 时,高亮 ConTeXt 的 MetaFun 关键字。只适用于 MetaPost。 86 | > 87 | g:mp_metafun = 0 88 | < 89 | *'g:mp_mfplain_macros'* 90 | 高亮 mfplain.mp 定义的关键字。只适用于 MetaPost。 91 | > 92 | g:mp_mfplain_macros = 1 93 | < 94 | *'g:mp_open_tag'* 95 | 定义开始缩进块的额外关键字。例如定义了: 96 | > 97 | g:mp_open_tag = ['\'] 98 | < 99 | 那么 `beginfoo` 开始的行会被缩进。 100 | > 101 | g:mp_open_tag = [] 102 | < 103 | *'g:mp_other_macros'* 104 | 高亮所有基本的宏包 (boxes、rboxes、format、graph、marith、sarith、string、TEX) 105 | 定义的关键字。此选项只影响 MetaPost 缓冲区。 106 | > 107 | g:mp_other_macros = 1 108 | < 109 | *'g:mp_plain_macros'* 110 | 高亮 plain.mp 定义的关键字。只适用于 MetaPost。 111 | > 112 | g:mp_plain_macros = 1 113 | < 114 | *'g:no_mp_maps'* 115 | *'g:no_mf_maps'* 116 | 置位时,在给定文件类型对应的缓冲区里不定义映射。 117 | > 118 | g:no_mp_maps = 0 119 | g:no_mf_maps = 0 120 | < 121 | *ft-metapost-mappings* 122 | *ft-metafont-mappings* 123 | 映射 ~ 124 | 125 | ]] [count] 个正向 vardefs、宏和图。 126 | 127 | [[ [count] 个反向 vardef、宏和图。 128 | 129 | ][ [count] 个正向 vardef、宏和图的结尾处。 130 | 131 | [] [count] 个反向 vardef、宏和图的结尾处。 132 | 133 | ]} [count] 个正向块结尾处 (fi、endfor、endgroup)。 134 | 135 | [{ [count] 个反向块开始处 (if、for、begingroup)。 136 | 137 | vim:tw=78:sw=4:ts=8:noet:ft=help:norl: 138 | -------------------------------------------------------------------------------- /doc/ft_ps1.cnx: -------------------------------------------------------------------------------- 1 | *ft_ps1.txt* 用于 Vim 的 Windows PowerShell 语法插件 2 | 3 | 译者: Willis 4 | 5 | 作者: Peter Provost 6 | 许可证: Apache 2.0 7 | URL: https://github.com/PProvost/vim-ps1 8 | 9 | 介 绍 *ps1-syntax* 10 | 11 | 此插件提供 Windows PowerShell 脚本、模块和 XML 配置文件的 Vim 语法、缩进和文件 12 | 类型检测。 13 | 14 | 15 | 关 于 *ps1-about* 16 | 17 | 要从 GitHub 上获取最新版本或报告漏洞: 18 | 19 | https://github.com/PProvost/vim-ps1 20 | 21 | 22 | 折 叠 *ps1-folding* 23 | 24 | ps1 语法文件提供脚本块和脚本里的数字签名的语法折叠 (见 |:syn-fold|)。 25 | 26 | 如果 'foldmethod' 设为 "syntax",会折叠函数脚本块,但此行为可在 .vimrc 里或打 27 | 开脚本前用下列命令关闭: > 28 | 29 | :let g:ps1_nofold_blocks = 1 30 | < 31 | 也会折叠脚本里的数字签名,除非你使用: > 32 | 33 | :let g:ps1_nofold_sig = 1 34 | < 35 | 注意: 语法折叠会显著减慢语法高亮,对大文件尤然。 36 | 37 | 38 | 编 译 器 *ps1-compiler* 39 | 40 | powershell `:compiler` 脚本配置 |:make| 以在 PowerShell 中执行脚本。 41 | 42 | 它会试图智能选择缺省 PowerShell 命令: 如果可用的话,`pwsh`,否则选择 43 | `powershell`,但你可以定制: > 44 | 45 | :let g:ps1_makeprg_cmd = '/path/to/pwsh' 46 | < 47 | 要配置是否显示例外类型信息: > 48 | 49 | :let g:ps1_efm_show_error_categories = 1 50 | < 51 | 52 | 关 键 字 查 找 *ps1-keyword* 53 | 54 | 要用 PowerShell 的 Get-Help 查找关键字,按 |K| 键。要更方便地进行翻页,要安装 55 | 分页程序 `less`,在许多 Linux 发布和 macOS 中有提供。 56 | 57 | 也有许多其它 Windows 上的发布,如 https://chocolatey.org/packages/less/。请确 58 | 保 `less` 在 `PATH` 环境变量列出的某目录里,上面的 chocolatey 就是如此。 59 | 60 | ------------------------------------------------------------------------------ 61 | vim:ft=help: 62 | -------------------------------------------------------------------------------- /doc/ft_raku.cnx: -------------------------------------------------------------------------------- 1 | *ft_raku.txt* Raku 程序语言文件类型 2 | 3 | *vim-raku* 4 | 5 | Vim-raku 提供了 Raku 程序的语法高亮、缩进和其他支持。 6 | 7 | 1. 在 Raku 文件里使用 Unicode |raku-unicode| 8 | 9 | ============================================================================== 10 | 1. 在 Raku 文件里使用 Unicode *raku-unicode* 11 | 12 | 用 Unicode 符号定义新操作符可以使 Raku 程序更易读。请见: 13 | https://perl6advent.wordpress.com/2012/12/18/day-18-formulas-resistance-is-futile/ 14 | 15 | Raku 虽然定义了部分常见操作符的 ASCII 版本 (见 16 | https://docs.raku.org/language/unicode_ascii),但能使用完整范围的 Unicode 操作 17 | 符更为理想。你的操作系统可能提供了自己的输入方法,但建议使用 Vim 内建的功能。 18 | 19 | Vim 里生成这些符号的自然办法是使用二合字母的快捷方式 (:help |digraphs-use|)。 20 | 很多已有定义。键入 `:digraphs` 可获得完整列表。为方便起见,可以读入二合字母列 21 | 表并保存到文件里。外壳上可用: > 22 | vim +'redir >/tmp/vim-digraphs-listing.txt' +digraphs +'redir END' +q 23 | 24 | 有标准的 Vim 二合字母可用: 25 | << « /0 ∅ !< ≮ ~ 26 | >> » Ob ∘ !> ≯ ~ 27 | ., … 00 ∞ (C ⊂ ~ 28 | (U ∩ -: ÷ )C ⊃ ~ 29 | )U ∪ (_ ⊆ >= ≥ ~ 30 | ?= ≅ )_ ⊇ =< ≤ ~ 31 | (- ∈ ?= ≅ != ≠ ~ 32 | -) ∋ ?- ≃ ~ 33 | 34 | 希腊字母可通过 '*' 后跟对应的拉丁符号来获取: 35 | *p π ~ 36 | *t τ ~ 37 | *X × ~ 38 | 39 | 数值的上标、下标可通过 's' 和 'S' 获取: 40 | 0s ₀ 0S ⁰ ~ 41 | 1s ₁ 1S ¹ ~ 42 | 2s ₂ 9S ⁹ ~ 43 | 44 | 但有些符号没有缺省定义。可在 ~/.vimrc 文件里加入新二合字母的定义。 > 45 | exec 'digraph \\ ' .. char2nr('∖') 46 | exec 'digraph \< ' .. char2nr('≼') 47 | exec 'digraph \> ' .. char2nr('≽') 48 | exec 'digraph (L ' .. char2nr('⊈') 49 | exec 'digraph )L ' .. char2nr('⊉') 50 | exec 'digraph (/ ' .. char2nr('⊄') 51 | exec 'digraph )/ ' .. char2nr('⊅') 52 | exec 'digraph )/ ' .. char2nr('⊅') 53 | exec 'digraph U+ ' .. char2nr('⊎') 54 | exec 'digraph 0- ' .. char2nr('⊖') 55 | " Euler 常数 56 | exec 'digraph ne ' .. char2nr('𝑒') 57 | " Raku 的原子操作标记 58 | exec 'digraph @@ ' .. char2nr('⚛') 59 | 60 | 一个替代方案是用插入模式缩写来把 ASCII 操作符转换为对应的单字符 Unicode 等价符 61 | 号。 > 62 | iabbrev !(<) ⊄ 63 | iabbrev !(<=) ⊈ 64 | iabbrev !(>) ⊅ 65 | iabbrev !(>=) ⊉ 66 | iabbrev !(cont) ∌ 67 | iabbrev !(elem) ∉ 68 | iabbrev != ≠ 69 | iabbrev (&) ∩ 70 | iabbrev (+) ⊎ 71 | iabbrev (-) ∖ 72 | iabbrev (.) ⊍ 73 | iabbrev (<) ⊂ 74 | iabbrev (<+) ≼ 75 | iabbrev (<=) ⊆ 76 | iabbrev (>) ⊃ 77 | iabbrev (>+) ≽ 78 | iabbrev (>=) ⊇ 79 | iabbrev (\|) ∪ 80 | iabbrev (^) ⊖ 81 | iabbrev (atomic) ⚛ 82 | iabbrev (cont) ∋ 83 | iabbrev (elem) ∈ 84 | iabbrev * × 85 | iabbrev **0 ⁰ 86 | iabbrev **1 ¹ 87 | iabbrev **2 ² 88 | iabbrev **3 ³ 89 | iabbrev **4 ⁴ 90 | iabbrev **5 ⁵ 91 | iabbrev **6 ⁶ 92 | iabbrev **7 ⁷ 93 | iabbrev **8 ⁸ 94 | iabbrev **9 ⁹ 95 | iabbrev ... … 96 | iabbrev / ÷ 97 | iabbrev << « 98 | iabbrev <<[=]<< «=« 99 | iabbrev <<[=]>> «=» 100 | iabbrev <= ≤ 101 | iabbrev =~= ≅ 102 | iabbrev >= ≥ 103 | iabbrev >> » 104 | iabbrev >>[=]<< »=« 105 | iabbrev >>[=]>> »=» 106 | iabbrev Inf ∞ 107 | iabbrev atomic-add-fetch ⚛+= 108 | iabbrev atomic-assign ⚛= 109 | iabbrev atomic-fetch ⚛ 110 | iabbrev atomic-dec-fetch --⚛ 111 | iabbrev atomic-fetch-dec ⚛-- 112 | iabbrev atomic-fetch-inc ⚛++ 113 | iabbrev atomic-inc-fetch ++⚛ 114 | iabbrev atomic-sub-fetch ⚛−= 115 | iabbrev e 𝑒 116 | iabbrev o ∘ 117 | iabbrev pi π 118 | iabbrev set() ∅ 119 | iabbrev tau τ 120 | < 121 | vim:tw=78:ts=8:noet:ft=help:norl: 122 | -------------------------------------------------------------------------------- /doc/hangulin.cnx: -------------------------------------------------------------------------------- 1 | *hangulin.txt* 适用于 Vim 9.1 版本。 最近更新: 2019年12月 2 | 3 | 4 | VIM 参考手册 By Chi-Deok Hwang and Sung-Hyun Nam 5 | 译者: Willis 6 | 7 | 8 | *hangul* 9 | 对没有 XIM (X 输入法) 的用户而言,Vim 曾经有内建的谚文,韩国语的一种书写方式的 10 | 支持。因为工作得不好且没人维护,在 Vim 8.1.2327 中删除此支持。 11 | 12 | 如果你仍要此韩语输入方法,可以回到 Vim 8.1.2326 或更早版本。如果你认为此代码仍 13 | 然有用且想维护它,不妨提供一个补丁把它加回来。不过,最好让它能支持 UTF-8 编 14 | 码。 15 | 16 | 17 | vim:tw=78:ts=8:noet:ft=help:norl: 18 | -------------------------------------------------------------------------------- /doc/hebrew.cnx: -------------------------------------------------------------------------------- 1 | *hebrew.txt* 适用于 Vim 9.1 版本。 最近更新: 2019年12月 2 | 3 | 4 | VIM 参考手册 by Ron Aaron (and Avner Lottem) 5 | 译者: Willis 6 | 7 | 8 | Vim 的希伯来语支持 (选项和映射) *hebrew* 9 | 10 | 11 | 'rightleft' 的功能是由 Avner Lottem 最早创建的。 12 | Ron Aaron 现在为支持这些功能提供帮助。 13 | 14 | {仅当编译时加入 |+rightleft| 特性才有效} 15 | 16 | 17 | 简介 18 | ------------ 19 | 希伯来语专用的选项包括 'hkmap'、'hkmapp'、'keymap'=hebrew 和 'aleph'。 20 | 对希伯来语有用的选项包括 'delcombine'、'allowrevins'、'revins'、'rightleft' 21 | 和 'rightleftcmd'。 22 | 23 | 'rightleft' 模式反转显示的顺序,所以字符不是通常的从左到右,而是从右到左的显 24 | 示。这主要是对希伯来语和其它中东的语言有用。参阅 |rileft.txt| 去了解更多。 25 | 26 | 细节 27 | -------------- 28 | + 选项: 29 | + 'rightleft' ('rl') 把窗口朝向设为从右到左。这意味着逻辑上的文字 'ABC' 会 30 | 被显示成 'CBA'。文字将从窗口右边界开始输出,而不是左边。 31 | + 'hkmap' ('hk') 在插入/替换模式中把键盘映射设成希伯来语方式。 32 | + 'aleph' ('al'),数值,保存 Aleph 的十进制代码,键盘映射用。 33 | + 'hkmapp' ('hkp') 把键盘映射设成 '根据读音的希伯来语'。 34 | 35 | 注意: 这三个选项 ('hkmap'、'hkmapp' 和 'aleph') 现在已经作废。你应该用 36 | ":set keymap=hebrewp" 来代替。 37 | 38 | + 'delcombine' ('deco'),布尔值,如果编辑 UTF-8 编码的希伯来文字,可以在一 39 | 个字符上 (带有 niqud ) 上按 'x' 来去掉 niqud 或者 te`amim。 40 | 41 | + 'rightleftcmd' ('rlc') 从右边开始显示用于搜索的命令行提示,这只适用于 42 | 'rightleft' 的窗口。 43 | 44 | + 编码: 45 | + Unix 上,ISO 8859-8 编码 (希伯来字母编码: 224-250)。 46 | + MS DOS 上,PC 编码 (希伯来字母编码: 128-154)。 47 | 这些都是缺省值,可以用 'aleph' 选项来覆盖。 48 | + 你应该选用 UTF8,因为它支持组合字符 (如果不是 UTF8 编码,'deco' 什么都不 49 | 做)。 50 | 51 | + Vim 参数: 52 | + 'vim -H file' 启动希伯来语文件 file 的编辑,也就是,打开 'rightleft' 和 53 | 'hkmap'。 54 | 55 | + 按键: 56 | + 'allowrevins' 选项使得 CTRL-_ 命令在插入和命令行模式下可用。 57 | 58 | + 插入/替换模式下的 CTRL-_ 切换 'revins' 和 'hkmap': 59 | 60 | 在从右到左的窗口里,'revins' 和 'nohkmap' 被切换,因为可能输入英语。 61 | 62 | 在从左到右的窗口里,'revins' 和 'hkmap' 被切换,因为可能输入希伯来语。 63 | 64 | CTRL-_ 把光标移到输入文本的结尾。 65 | 66 | + CTRL-_ 在命令行模式下切换键盘映射 (参见下面的漏洞)。 67 | 这个设置和 'hkmap' 无关,后者只适用于插入/替换模式。 68 | 69 | 注意: 在有些键盘上,CTRL-_ 被映射成 CTRL-?。 70 | 71 | + 'hkmap' 设置时,键盘的映射如下 (标准以色利键盘): 72 | 73 | q w e r t y u i o p 74 | / ' ק ר א ט ו ן ם פ 75 | 76 | a s d f g h j k l ; ' 77 | ש ד ג כ ע י ח ל ך ף , 78 | 79 | z x c v b n m , . / 80 | ז ס ב ה נ מ צ ת ץ . 81 | 82 | 这也是当 'keymap=hebrew' 设置时的映射方式。使用 'keymap' 的好处是它在 83 | UTF8 下正常工作,例如,输入的字符是正确的;'hkmap' 则不然。'keymap' 键盘 84 | 也可以插入 niqud 和 te`amim。要了解具体这些映射是什么,看看 'hebrew.vim' 85 | 等键盘映射文件。 86 | 87 | 反向输入 88 | 89 | 如果 'revins' (反向输入) 选项被打开,插入是反向的。这可以用来输入希伯来语。这 90 | 时,输入文字时,光标不动,文本向右移动。 删除光标下的字符,CTRL-W 和 91 | CTRL-U 工作的方向也经过反转。无论 'backspace' 选项如何设置,、CTRL-W 和 92 | CTRL-U 并不会在插入点开始处和行尾停住。 93 | 94 | 现在 (还) 没有反向替换模式。 95 | 96 | 如果设置了 "showmode" 选项,反向插入模式激活时,状态行会显示 97 | "-- REVERSE INSERT --"。 98 | 99 | 如果打开了 'allowrevins' 选项,CTRL-_ 也可以进入反向插入模式,而且还有一些附带 100 | 的功能: 首先,键盘映射根据窗口的朝向自动切换 - 如果在从左到右的窗口,'revins' 101 | 被用来输入希伯来文,所以键盘改变为希伯来语方式 (设置 'hkmap');如果在从右到左 102 | 的窗口,'revins' 被用来输入英语,所以键盘切换成英语方式 (关闭 'hkmap')。其次, 103 | 通过 CTRL-_ 来退出 'revins' 时的光标移动到输入文字的末尾 (如果可能的话)。 104 | 105 | 在从右到左的窗口粘贴 106 | ---------------------------------- 107 | 如果用鼠标剪切文本,然后在从右到左的窗口中粘贴,文本会被反向,这时因为从剪切缓 108 | 冲区里得到的字符是从左到右的,而文件中的插入操作是从右到左的。要避免这个问题, 109 | 在粘贴前切换 'revins' 选项 (通过键入 CTRL-? 或者 CTRL-_ )。 110 | 111 | 112 | 希伯来字母和 'isprint' 变量 113 | -------------------------------------------- 114 | 有时希伯来字母代码在 'isprint' 变量定义的非可显示字符的范围内。例如,在 Linux 115 | 控制台上,希伯来字体的编码从 128 开始,而缺省的 'isprint' 变量是 @,161-255。 116 | 结果就是所有的希伯来字母都被显示成 ~x。要解决这个问题,执行 > 117 | set isprint=@,128-255 118 | 119 | 120 | vim:tw=78:ts=8:noet:ft=help:norl: 121 | -------------------------------------------------------------------------------- /doc/howto.cnx: -------------------------------------------------------------------------------- 1 | *howto.txt* 适用于 Vim 9.1 版本。 最近更新: 2006年5月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: iCrazy 6 | 7 | 8 | 如何…… *howdoi* *how-do-i* *howto* *how-to* 9 | 10 | |tutor| 入门 11 | |:quit| 退出?我被困住了,请帮帮我! 12 | |initialization| 初始化 Vim 13 | |vimrc-intro| 写一个 Vim 脚本文件 (vimrc) 14 | |suspend| 挂起 Vim 15 | |usr_11.txt| 在一次崩溃后恢复 16 | |07.4| 在覆盖我的文件时保留一个备份 17 | 18 | |usr_07.txt| 编辑文件 19 | |23.4| 编辑二进制文件 20 | |usr_24.txt| 插入文本 21 | |deleting| 删除文本 22 | |usr_04.txt| 改变文本 23 | |04.5| 复制和移动文本 24 | |usr_25.txt| 给文本排版 25 | |30.6| 给注释排版 26 | |30.2| 缩进 C 程序 27 | |25.3| 自动设置缩进 28 | 29 | |usr_26.txt| 重复执行命令 30 | |02.5| 撤销和重做 31 | 32 | |usr_03.txt| 在文本中移动 33 | |word-motions| 基于单词的移动 34 | |left-right-motions| 左右移动 35 | |up-down-motions| 上下移动 36 | |object-motions| 基于文本对象的移动 37 | |various-motions| 其它移动方式 38 | |object-select| 基于文本对象的选择 39 | |'whichwrap'| 移动时跳过换行符 40 | |'virtualedit'| 移动到没有文本的地方 41 | |usr_27.txt| 指定查找的模式 42 | |tags-and-searches| 进行标签和特殊查找 43 | |29.4| 在包含文件中查找变量、函数或宏 44 | |K| 查找光标处关键词的手册页 45 | 46 | |03.7| 滚屏 47 | |'sidescroll'| 水平/竖直方向滚屏 48 | |'scrolloff'| 设置可见的上下文行数 49 | 50 | |mode-switching| 切换模式 51 | |04.4| 使用可视模式 52 | |'insertmode'| 以插入模式启动 Vim 53 | 54 | |40.1| 映射热键 55 | |24.7| 创建缩写 56 | 57 | |ins-expandtab| 在插入模式下用空格扩展制表符 58 | |i_CTRL-R| 在插入模式下插入寄存器的内容 59 | |24.3| 在插入模式下自动补全单词 60 | |25.1| 断开过长的行 61 | 62 | |20.1| 编辑命令行 63 | |20.3| 命令行自动补全 64 | |'cmdheight'| 增加命令行的高度 65 | |10.3| 指定命令行范围 66 | |40.3| 指定在 读/写 或 进入/离开 缓冲区/窗口 之前/之后 67 | 自动执行命令 68 | 69 | |'autowrite'| 自动存盘 70 | |30.1| 加速 编辑-编译-编辑 循环,在 Vim 里面编译和修正错误 71 | 72 | |options| 设置选项 73 | |auto-setting| 自动设置选项 74 | |term-dependent-settings| 设置依赖于终端名称的选项 75 | |save-settings| 保存设置 76 | |:quote| 对我的 .vim 文件进行注释 77 | |'helpheight'| 调整默认的帮助高度 78 | |'highlight'| 设置各种高亮模式 79 | |'title'| 设置窗口标题 80 | |'icon'| 设置窗口图标标题 81 | |'report'| 避免看到每一行上的改变信息 82 | |'shortmess'| 避免按回车 |hit-enter| 提示 83 | 84 | |mouse-using| 在 Vim 中使用鼠标 85 | |usr_08.txt| 管理多窗口和缓冲区 86 | |gui.txt| 使用 GUI 87 | 88 | |您 (还) 不能!| 用 Vim 洗盘子 :) 89 | 90 | |usr_06.txt| 打开语法高亮 91 | |2html.vim| 把一个彩色的文件转换成 HTML 92 | |less| 用 Vim 模拟 less 或 more,但带有语法高亮 93 | 94 | vim:tw=78:ts=8:noet:ft=help:norl: 95 | -------------------------------------------------------------------------------- /doc/if_ole.cnx: -------------------------------------------------------------------------------- 1 | *if_ole.txt* 适用于 Vim 9.1 版本。 最近更新: 2023年2月 2 | 3 | 4 | VIM 参考手册 by Paul Moore 5 | 译者: Dasn 6 | 7 | 8 | Vim 的 OLE 接口 *ole-interface* 9 | 10 | 1. 激活 OLE 功能 |ole-activation| 11 | 2. 方法 |ole-methods| 12 | 3. "normal" 命令 |ole-normal| 13 | 4. 注册 |ole-registration| 14 | 5. 与微软的 Visual Studio 集成 |MSVisualStudio| 15 | 16 | {仅当编译时加入 |+ole| 特性才有效。参见 src/if_ole.INSTALL} 17 | 一个替代方案是使用 客户机服务器 模式进行通信 |clientserver|。 18 | 19 | ============================================================================== 20 | 1. 激活 OLE 功能 *ole-activation* 21 | 22 | Vim 可以作为 OLE 服务器运行,能被任意的 OLE 客户端访问,例如: 我们可以用 23 | Visual Basic,Python,或者 Perl 与 Vim 通信。Vim 的程序名 (在 OLE 中称为 24 | "ProgID") 是 "Vim.Application"。 25 | 26 | 因此,要启动一个 Vim 实例 (或者要与一个已经启动的实例通信),你应该使用类似于下 27 | 面的代码: 28 | 29 | [Visual Basic] > 30 | Dim Vim As Object 31 | Set Vim = CreateObject("Vim.Application") 32 | 33 | [Python] > 34 | from win32com.client.dynamic import Dispatch 35 | vim = Dispatch('Vim.Application') 36 | 37 | [Perl] > 38 | use Win32::OLE; 39 | $vim = new Win32::OLE 'Vim.Application'; 40 | 41 | [C#] > 42 | // 在项目中加入 Vim 的引用。 43 | // 选择 COM 标签页。 44 | // 选择 "Vim Ole Interface 1.1 Type Library" 45 | Vim.Vim vimobj = new Vim.Vim(); 46 | 47 | Vim 不能作为 "隐藏" 的 OLE 服务器来运行,这一点 Vim 不像其它一些 OLE 服务器。 48 | Vim 的 OLE 客户端启动时,一个 Vim 程序的实例会立刻显现出来。简单地断开 OLE 连 49 | 接不能关掉 Vim 实例,需要显式地执行退出命令才可以 (例如,:qa!,:wqa)。 50 | 51 | ============================================================================== 52 | 2. 方法 *ole-methods* 53 | 54 | Vim 为客户端提供了四种方法。 55 | 56 | *ole-sendkeys* 57 | SendKeys(keys) 执行一系列键击。 58 | 59 | 这个函数只需要一个参数,参数 keys 代表要敲击的字符串。通过此函数发送这些字符串 60 | 和你直接在 Vim 里敲击键盘的效果是一样的。特殊键可以用它们的 <..> 名字,就像映 61 | 射的右手边里的格式一样 (参考 |:map| 特殊键的表达方式译者)。备注: 不支持 Ex 模 62 | 式下的 "normal" 命令 - 见下面 |ole-normal|。 63 | 64 | 例子: (Visual Basic 语法) > 65 | Vim.SendKeys "ihello" 66 | Vim.SendKeys "ma1GV4jy`a" 67 | 68 | 这个例子假设 Vim 处于普通模式,要强制进入普通模式,可以在字符序列前加入 69 | CTRL-\ CTRL-N,就像这样: > 70 | 71 | Vim.SendKeys "ihello" 72 | 73 | (译者注: 下面是 Perl 语法: > 74 | 75 | $vim->SendKeys("ihello"); 76 | < 77 | 备注: 在 Perl 语法里,特殊字符前需要加 "\"。) 78 | 79 | CTRL-\ CTRL-N 使得 Vim 从插入模式或命令行模式返回普通模式。 80 | 备注: 不能用这个命令发送 Vim 命令的一部分。 81 | *ole-eval* 82 | Eval(expr) 计算表达式的值。 83 | 84 | 函数只有一个参数 expr,Vim 正常格式的表达式 (参考 |expression|)。返回值是一个 85 | 包含表达式结果的字符串。|List| 通过连接项目并插入换行符以转化为字符串。 86 | 87 | 例子: (Visual Basic 语法) > 88 | 89 | Line20 = Vim.Eval("getline(20)") 90 | Twelve = Vim.Eval("6 + 6") ' 注意,这是一个字符串。 91 | Font = Vim.Eval("&guifont") 92 | < 93 | *ole-setforeground* 94 | SetForeground() 让 Vim 窗口转入前台工作。 95 | 96 | 这个函数没有参数,没有返回值。 97 | 98 | 例子: (Visual Basic 语法) > 99 | 100 | Vim.SetForeground 101 | < 102 | *ole-gethwnd* 103 | GetHwnd() 返回 Vim 窗口的句柄。 104 | 105 | 这个函数没有参数,它返回 Vim 主窗口的句柄。你可以用它来控制 Vim 窗口,或者跟踪 106 | 窗口的 z-深度 等位置。 107 | 108 | 例子: (Visual Basic 语法) > 109 | 110 | Vim_Hwnd = Vim.GetHwnd 111 | < 112 | 113 | ============================================================================== 114 | 3. "normal" 命令 *ole-normal* 115 | 116 | 因为 Vim 是通过 Ex 模式下的 :normal 命令来实现对 OLE 命令的处理,所以 Vim 不能 117 | 通过 OLE 执行 :normal 命令。如果你这样做,肯定没用。至于产生的结果,也许没什么 118 | 害处,也许不能预料。 119 | 120 | 现在没有办法能捕获这种错误,所以用户在使用的时候要注意有这么一个限制。 121 | ============================================================================== 122 | 4. 注册 *ole-registration* *E243* 123 | 124 | 在 Vim 作为 OLE 服务器运行之前,必须向系统注册。如果你想注册,可以在运行 Vim 125 | 的时候加一个参数 "-register"。 126 | *-register* > 127 | gvim -register 128 | 129 | 如果运行 OLE 版本的 gvim 时,Vim 的 OLE 服务没有注册,gvim 会弹出一个对话框, 130 | 让你选择是否注册,选择 "Yes" 注册。 131 | 132 | 有时候可能注册不会成功,这可能是因为注册表不可写。如果是这个原因,你需要以管理 133 | 员的身份来运行 gvim。 134 | 135 | 一旦注册,Vim 的路径就会被存储到注册表里。在你移动、删除或升级 Vim 之前,应该 136 | 使用 "-unregister" 清除这些注册信息。 137 | *-unregister* > 138 | gvim -unregister 139 | 140 | 系统会使用最先注册的 Vim 执行 OLE 命令。如果 Vim 已经运行,那么就使用当前运行 141 | 的 Vim。如果你不想让 (多个) Vim 响应 OLE 命令,请使用非 OLE 版本的 Vim,并且把 142 | 它放到别的目录里。这时,OLE 版本的 Vim 路径不应包含在你的正常路径里,这样当你 143 | 键入 "gvim" 时启动的才是非 OLE 版本。 144 | 145 | *-silent* 146 | 如果不想让 Vim 在注册时弹出对话框,可以在前面加 "-silent" 参数: 147 | > 148 | gvim -silent -register 149 | gvim -silent -unregister 150 | 151 | ============================================================================== 152 | 5. 与微软的 Visual Studio 集成 *MSVisualStudio* 153 | 154 | 9.0.0698 补丁从 Vim 中删除了旧有的 "VisVim" 集成。 155 | 156 | 157 | 在 Visual Studio .Net 里使用 Vim ~ 158 | 159 | .Net Studio 已经提供了外部编辑器的支持。按以下步骤进行: 160 | 161 | 在 .Net Studio 里,选择菜单 Tools->External Tools... 162 | 加入 163 | Title - Vim 164 | Command - c:\vim\vim63\gvim.exe 165 | Arguments - --servername VS_NET --remote-silent "+call cursor($(CurLine), $(CurCol))" $(ItemPath) 166 | Init Dir - 空 167 | 168 | 现在在 .Net 里打开文件时,可以在 .Net 菜单里选择: Tools->Vim 169 | 170 | 这样就能在 Vim 里打开文件。 171 | 可以把该外部命令作为图标加入,把它放在任何你喜欢的位置上。也可以把它设为你的缺 172 | 省编辑器。 173 | 174 | 如果你有进一步的改进,请到 Vim 邮件列表上发帖,以告知我们。 175 | 176 | --servername VS_NET 177 | 建立 vim 的新实例,名为 VS_NET。这样如果你从 VS 里打开多个文件,它们会使用相同 178 | 的 Vim 实例。这样,你可以运行多个 Vim 的备份,但可以控制在哪个里编辑 VS 文件。 179 | 180 | --remote-silent "+call cursor(10, 27)" 181 | - 把光标放在第 10 行第 27 列 182 | Vim 里 > 183 | :h --remote-silent 可以了解详情 184 | 185 | [.Net 的评注由 Dave Fishburn 和 Brian Sturk 提供] 186 | 187 | ============================================================================== 188 | vim:tw=78:ts=8:noet:ft=help:norl: 189 | 190 | -------------------------------------------------------------------------------- /doc/if_ruby.cnx: -------------------------------------------------------------------------------- 1 | *if_ruby.txt* 适用于 Vim 9.1 版本。 最近更新: 2020年4月 2 | 3 | 4 | VIM 参考手册 by Shugo Maeda 5 | 译者: Willis、tocer 6 | 7 | Vim 的 Ruby 接口 *ruby* *Ruby* 8 | 9 | 10 | 1. 命令 |ruby-commands| 11 | 2. Vim 模块 |ruby-vim| 12 | 3. Vim::Buffer 对象 |ruby-buffer| 13 | 4. Vim::Window 对象 |ruby-window| 14 | 5. 全局变量 |ruby-globals| 15 | 6. rubyeval() Vim 函数 |ruby-rubyeval| 16 | 7. 动态调入 |ruby-dynamic| 17 | 18 | *E266* *E267* *E268* *E269* *E270* *E271* *E272* *E273* 19 | 20 | {仅当编译 Vim 时加入 |+ruby| 特性才有效} 21 | 22 | ruby 的主页是 http://www.ruby-lang.org/。你可以在那里找到 Ruby 下载的链接。 23 | 24 | ============================================================================== 25 | 1. 命令 *ruby-commands* 26 | 27 | *:ruby* *:rub* 28 | :rub[y] {cmd} 执行 Ruby 命令 {cmd}。要试一试: > 29 | :ruby print "Hello" 30 | 31 | :rub[y] << [trim] [{endmarker}] 32 | {script} 33 | {endmarker} 34 | 执行 Ruby 脚本 {script}。 35 | 36 | 如果省略 [endmarker],缺省为单个句号 '.',类似于 37 | |:append| 和 |:insert| 命令。更多详情可见 38 | |:let-heredoc|。 39 | 40 | 这种形式的 |:ruby| 命令主要用于在 vim 脚本里包含 ruby 41 | 代码。 42 | 43 | 注意: 如果编译时没有加入 Ruby 特性,这个命令不会工作。 44 | 为了避免错误,参看 |script-here|。 45 | 46 | 示例 Vim 脚本: > 47 | 48 | function! RedGem() 49 | ruby << EOF 50 | class Garnet 51 | def initialize(s) 52 | @buffer = Vim::Buffer.current 53 | vimputs(s) 54 | end 55 | def vimputs(s) 56 | @buffer.append(@buffer.count,s) 57 | end 58 | end 59 | gem = Garnet.new("pretty") 60 | EOF 61 | endfunction 62 | < 63 | 要看运行的 Ruby 版本: > 64 | :ruby print RUBY_VERSION 65 | < 66 | 67 | *:rubydo* *:rubyd* *E265* 68 | :[range]rubyd[o] {cmd} 在 [range] 界定的每行上分别执行 Ruby 命令 {cmd},执行 69 | 时,$_ 设为相应的行文本,不含结尾的 。修改 $_ 就 70 | 会修改相应的行,不过要 注意: 此命令不能用来增加或者删 71 | 除行。 72 | 缺省的 [range] 是整个文件: "1,$"。 73 | 74 | *:rubyfile* *:rubyf* 75 | :rubyf[ile] {file} 执行 Ruby 脚本文件 {file}。这和 `:ruby load 'file'` 相 76 | 当,但可用文件名自动补全功能。 77 | 78 | 79 | |sandbox| 里不能执行 Ruby 命令。 80 | 81 | ============================================================================== 82 | 2. Vim 模块 *ruby-vim* 83 | 84 | Ruby 代码通过 "Vim" 模块调用所有的 vim 功能。 85 | 86 | 概述: > 87 | print "Hello" # 显示消息 88 | Vim.command(cmd) # 执行 ex 命令 89 | num = Vim::Window.count # 得到窗口行数 90 | w = Vim::Window[n] # 得到第 "n" 个窗口 91 | cw = Vim::Window.current # 得到当前窗口 92 | num = Vim::Buffer.count # 得到缓冲区的个数 93 | b = Vim::Buffer[n] # 得到第 "n" 个缓冲区 94 | cb = Vim::Buffer.current # 得到当前缓冲区 95 | w.height = lines # 设置窗口高度 96 | w.cursor = [row, col] # 设置窗口里的光标位置 97 | pos = w.cursor # 得到数组 [行, 列] 98 | name = b.name # 得到缓冲区的文件名 99 | line = b[n] # 得到缓冲区的某一行 100 | num = b.count # 得到总的行数 101 | b[n] = str # 设置缓冲区的某一行 102 | b.delete(n) # 删除某一行 103 | b.append(n, str) # 在第 n 行后增加一行 104 | line = Vim::Buffer.current.line # 得到当前行 105 | num = Vim::Buffer.current.line_number # 得到当前行号 106 | Vim::Buffer.current.line = "test" # 设置当前行 107 | < 108 | 109 | 模块函数: 110 | 111 | *ruby-message* 112 | Vim::message({msg}) 113 | 显示消息 {msg}。 114 | 115 | *ruby-blob* 116 | Vim::blob({arg}) 117 | 返回来自 {arg} 的 |Blob| 字面常量字符串。 118 | 119 | *ruby-set_option* 120 | Vim::set_option({arg}) 121 | 设置 vim 选项。{arg} 可以是任何一个 ":set" 命令接受的命令。 注意 这意 122 | 味着参数里不能有空格!参见 |:set|。 123 | 124 | *ruby-command* 125 | Vim::command({cmd}) 126 | 执行 Ex 命令 {cmd}。 127 | 128 | *ruby-evaluate* 129 | Vim::evaluate({expr}) 130 | 用 vim 内部的表达式分析器执行 {expr} (参看 |expression|)。执行结果返回 131 | 的类型如下: 132 | - Integer, 如果 Vim 表达式返回数值 133 | - Float,如果 Vim 表达式返回浮点数 134 | - String,如果 Vim 表达式返回字符串 135 | - Array,如果 Vim 表达式返回 Vim 列表 136 | - Hash,如果 Vim 表达式返回 Vim 字典 137 | 递归扩展字典和列表。 138 | 139 | ============================================================================== 140 | 3. Vim::Buffer 对象 *ruby-buffer* 141 | 142 | Vim::Buffer 对象代表 Vim 缓冲区。 143 | 144 | 类方法: 145 | 146 | current 返回当前缓冲区对象。 147 | count 返回缓冲区的总数。 148 | self[{n}] 返回第 {n} 个缓冲区。首个缓冲区的序号是 0。 149 | 150 | 方法: 151 | 152 | name 返回缓冲区的全名。 153 | number 返回缓冲区的序号。 154 | count 返回总行数。 155 | length 返回总行数。 156 | self[{n}] 从缓冲区中返回一行。{n} 是行号。 157 | self[{n}] = {str} 158 | 设置缓冲区的一行。{n} 是行号。 159 | delete({n}) 删除缓冲区的一行。{n} 是行号。 160 | append({n}, {str}) 161 | 在第 {n} 行后增加一行。 162 | line 如果缓冲区激活,返回缓冲区的当前行。 163 | line = {str} 如果缓冲区激活,设置缓冲区的当前行。 164 | line_number 如果缓冲区激活,返回当前行的行号。 165 | 166 | ============================================================================== 167 | 4. Vim::Window 对象 *ruby-window* 168 | 169 | Vim::Window 对象代表 Vim 窗口。 170 | 171 | 类方法: 172 | 173 | current 返回当前窗口对象。 174 | count 返回窗口的总数。 175 | self[{n}] 返回第 {n} 个窗口。首个窗口的序号是 0。 176 | 177 | 方法: 178 | 179 | buffer 返回显示的缓冲区对象。 180 | height 返回窗口的高度。 181 | height = {n} 设置窗口的高度为 {n}。 182 | width 返回窗口的宽度。 183 | width = {n} 设置窗口的宽度为 {n}。 184 | cursor 返回光标位置数组: [行、列]。 185 | 首行号为 1 而首列号为 0。 186 | cursor = [{row}, {col}] 187 | 设置光标位置为行 {row} 和列 {col}。 188 | 189 | ============================================================================== 190 | 5. 全局变量 *ruby-globals* 191 | 192 | 有两个全局变量。 193 | 194 | $curwin 当前窗口对象。 195 | $curbuf 当前缓冲区对象。 196 | 197 | ============================================================================== 198 | 6. rubyeval() Vim 函数 *ruby-rubyeval* 199 | 200 | 为提供双向接口的方便,可用 |rubyeval()| 函数来计算 Ruby 表达式并传递其值给 Vim 201 | 脚本。 202 | 203 | Ruby 值 "true"、"false" 和 "nil" 分别转换为 v:true、v:false 和 v:null。 204 | 205 | ============================================================================== 206 | 7. 动态调入 *ruby-dynamic* 207 | 208 | MS-Windows 和 Unix 上,可以动态调入 Ruby 库。|:version| 输出这时应包括 209 | |+ruby/dyn|。 210 | 211 | 这意味着 Vim 只有在必要时才寻找 Ruby DLL 或动态库文件。如果不使用 Ruby 接口, 212 | 你就不需要它。这样,即使没有该 DLL 文件,你也可使用 Vim。 213 | 214 | 215 | MS-Windows ~ 216 | 217 | 必须安装正确的 Ruby 版本才能工作。该包可以从这里下载: 218 | http://rubyinstaller.org/downloads/ 219 | 目前的版本是 rubyinstaller-2.2.5.exe 220 | 221 | 要使用 Ruby 接口,Ruby DLL 必须在搜索路径上。控制台窗口里输入 "path" 可以看到 222 | (搜索路径) 当前使用的目录。也可用 'rubydll' 选项设置 Ruby DLL。 223 | 224 | DLL 名必须匹配 Vim 编译时所使用的 Ruby 版本。目前,该名字为 225 | "msvcrt-ruby220.dll",也就是 Ruby 2.2.X。要确信这一点,编辑 "gvim.exe" 文件并 226 | 查找 "ruby\d*.dll\c"。 227 | 228 | 如果编译 Vim 时要使用带 MSVC 的 RubyInstaller 1.9 或 2.X,需要一点技巧。详见 229 | src/INSTALLpc.txt。 230 | 231 | 如果 Vim 使用 RubyInstaller 2.4 或以后版本编译,可能还需要在 PATH 环境变量里加 232 | 入 "C:\Ruby\bin\ruby_builtin_dlls"。 233 | 234 | 235 | Unix ~ 236 | 237 | 'rubydll' 选项可用来指定 Ruby 共享库文件,而不用编译时指定的 DYNAMIC_RUBY_DLL 238 | 文件。共享库的版本必须和 Vim 编译使用的 Ruby 版本保持一致。 239 | 240 | ============================================================================== 241 | vim:tw=78:ts=8:noet:ft=help:norl: 242 | -------------------------------------------------------------------------------- /doc/if_sniff.cnx: -------------------------------------------------------------------------------- 1 | *if_sniff.txt* 适用于 Vim 9.1 版本。 最近更新: 2017年7月 2 | 3 | 4 | VIM 参考手册 5 | by Anton Leherbauer (toni@takefive.co.at) 6 | 译者: Willis 7 | 8 | 9 | 7.4.1433 补丁删除了 SNiFF+ 支持。要想继续用,同步到之前的版本。 10 | 11 | vim:tw=78:ts=8:noet:ft=help:norl: 12 | -------------------------------------------------------------------------------- /doc/mlang.cnx: -------------------------------------------------------------------------------- 1 | *mlang.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年3月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: jwdu 、iCrazy 6 | 7 | 8 | 多语言特性 *multilang* *multi-lang* 9 | 10 | 这里讲的是使用各种不同语言的信息和菜单。如果希望编辑多字节文本请参看 11 | |multibyte|。 12 | 13 | 基本的使用请参看用户手册 |usr_45.txt|。 14 | 15 | 1. 信息 |multilang-messages| 16 | 2. 菜单 |multilang-menus| 17 | 3. 脚本 |multilang-scripts| 18 | 19 | 同时请参看 |help-translated| 阅读有关多语言帮助使用。 20 | 21 | {仅当编译时加入 |+multi_lang| 特性才有效} 22 | 23 | ============================================================================== 24 | 1. 信息 *multilang-messages* 25 | 26 | Vim 从环境变量中获取当前 locale 信息。这意味着在大部分的情形下,Vim 将使用你喜 27 | 欢的语言,除非这种语言不存在。 28 | 29 | 为了知道你的系统所支持的语言列表,可以查看以下的路径 (针对 Unix): 30 | /usr/lib/locale ~ 31 | /usr/share/locale ~ 32 | 不幸的是,大小写是区分的。同时还要注意 "-" 和 "_" 不要用混了。 33 | 34 | (译者注: Windows 上,简体/繁体中文对应语言是 chinese_china 和 chinese_taiwan, 35 | 它们在内部被翻译为 zh_CN 和 zh_TW。换而言之,可以用 > 36 | :language chinese_china " 不能直接用 zh_CN 37 | 但 > 38 | :echo v:lang 39 | zh_CN 40 | 这一翻译机制目前来自硬编码,因而看来没有 UTF-8 对应形式的支持。) 41 | 42 | *:lan* *:lang* *:language* *E197* 43 | :lan[guage] 44 | :lan[guage] mes[sages] 45 | :lan[guage] cty[pe] 46 | :lan[guage] tim[e] 47 | :lan[guage] col[late] 48 | 显示当前的语言 (即 locale)。 49 | 使用 "messages" 参数,会显示用作消息的语言。术语: 50 | LC_MESSAGES。 51 | 使用 "ctype" 参数,会显示用作字符编码的语言。术语: 52 | LC_CTYPE。 53 | 使用 "time" 参数,会显示用作 strftime() 的语言。术语: 54 | LC_TIME。 55 | 使用 "collate" 参数,会显示用作排序规则的语言。术语: 56 | LC_COLLATE。 57 | 不加参数时显示当地语言的全称 (这个功能依赖于系统)。 58 | 当前的语言同样也可以通过变量 |v:lang|、|v:ctype|、 59 | |v:collate| 和 |v:lc_time| 来获得。 60 | 61 | :lan[guage] {name} 62 | :lan[guage] mes[sages] {name} 63 | :lan[guage] cty[pe] {name} 64 | :lan[guage] tim[e] {name} 65 | :lan[guage] col[late] {name} 66 | 把当前的语言 (即 locale) 设置成 {name}。 67 | {name} 的 POSIX 格式是: > 68 | language[_territory][.encoding] 69 | < 此处的 {name} 必须是你系统上的一个有效的语言。一些系统 70 | 接受像 "en" 或 "en_US" 这样的别名,但是,一些系统只接 71 | 受像 "en_US.ISO_8859-1" 这样完整的名称。Unix 系统上可 72 | 以用以下命令查看支持的 locale: > 73 | :!locale -a 74 | < 借助于参数 "messages",你就可以设置消息使用的语言。如 75 | 果你希望的话,这两者可以不同,例如: 当你编辑日文文本时 76 | 使用英文消息。它设置 $LC_MESSAGES。 77 | 借助于参数 "ctype",你就可以设置用作字符编码的语言。这 78 | 将会影响到 Vim 所连接的库。一般不能将它和 'encoding' 79 | 设成不同的值,除非是 "C"。它设置 $LC_CTYPE。 80 | 借助于参数 "time" 参数,你就可以设置用作时间和日期消息 81 | 的语言。它影响到 strftime()。它设置 $LC_TIME。 82 | 借助于参数 "collate" 参数,你就可以设置用作排序规则的 83 | 语言。它影响到字符的排序。它设置 $LC_COLLATE。 84 | 没有参数时,以上都会被设置,另外还会设置 $LANG。 85 | 如有可能,LC_NUMERIC 值总会被设为 "C",以便浮点数使用 86 | '.' 作为十进制小数点。 87 | 这将会使那些依赖语言的项目 (信息,时间和日期的格式) 看 88 | 起来有一些不同。这不是所有系统都完全支持的。 89 | 如果设置失败,将会返回一个出错信息。如果设置成功,将不 90 | 会有任何信息。例如: > 91 | :language 92 | Current language: C 93 | :language de_DE.ISO_8859-1 94 | :language mes 95 | Current messages language: de_DE.ISO_8859-1 96 | :lang mes en 97 | < 98 | 99 | MS-WINDOWS 信 息 的 翻 译 *win32-gettext* 100 | 101 | 如果你用了自安装的 .exe 文件,应该不需要什么设置。否则你可能找不到 102 | libintl.dll 文件。可以从下面的网站得到它: 103 | 104 | http://sourceforge.net/projects/gettext 105 | 或: 106 | https://mlocati.github.io/gettext-iconv-windows/ 107 | 108 | 这里还包含了 xgettext,msgformat 以及其它工具。 109 | 110 | libintl.dll 应该和 (g)vim.exe 放在同一个目录内,或者放在环境变量 PATH 指定的那 111 | 些目录之一。Vim 也会查找备用名 "libintl-8.dll" 和 "intl.dll"。 112 | 113 | 消息数据文件 (vim.mo) 应放在 "$VIMRUNTIME/lang/xx/LC_MESSAGES",在这里 "xx" 是 114 | 语言的缩写 (多数是两个字母)。 115 | 116 | 如果你制作了自己的翻译,那么,你需要生成 .po 文件并把它转化为 .mo 文件。同时, 117 | 找到 Vim 的源代码并阅读 "src/po/README.txt" 文件。 118 | 119 | 如果你不想使用自动选择的语言,那么就把 $LANG 变量设为你希望的语言。如果你不希 120 | 望使用语言翻译,请设置成 "en"。 > 121 | 122 | :let $LANG = 'ja' 123 | 124 | (Windows 的文本由 Muraoka Taro 完成) 125 | 126 | ============================================================================== 127 | 2. 菜单 *multilang-menus* 128 | 129 | 基本的使用请参看 |45.2|,尤其是 'langmenu' 的使用部分。 130 | 131 | 注意 如果在翻译后对菜单作了更改,菜单的一些选项可能会显示成英文。请联系翻译的 132 | 维护者并请求他更新菜单的翻译。你可以在 "$VIMRUNTIME/lang/menu_.vim" 中找 133 | 到翻译者的名字和 e-mail 地址。 134 | 135 | 为菜单设定字体 (或字体集),请用 |:highlight| 命令。例如: > 136 | 137 | :highlight Menu font=k12,r12 138 | 139 | 140 | LOCALE 的 别 名 141 | 142 | 不幸的是,即使使用相同的语言和编码,不同系统上的当地语言名称也可能是不同的。如 143 | 果你没有得到你需要的菜单翻译,请检查下面命令的输出: > 144 | 145 | echo v:lang 146 | 147 | 现在,检查 "$VIMRUNTIME/lang" 目录中有没有使用相似语言的翻译文件。注意 符号 148 | "-" 和 "_" 的区别,它可能是找不到文件的罪魁祸首!另外一个通常要注意的差别是 149 | "iso8859-1" 和 "iso_8859-1"。所幸的是,Vim 把所有的名字都转换成小写了。因此, 150 | 你没有必要担心大小写的差别。为了避免空格被忘掉,它们被转化成下划线。 151 | 152 | 如果你发现了一个不同文件名的菜单翻译,你可以在自己的 runtime 目录下建立一个文 153 | 件并装载之。这个文件的名字可以是: > 154 | 155 | ~/.vim/lang/menu_.vim 156 | 157 | 检查 'runtimepath' 选项以确定会搜索哪些目录。在此文件中写一个命令来装载那个使 158 | 用不同名字的菜单文件: > 159 | 160 | runtime lang/menu_.vim 161 | 162 | 163 | 翻 译 菜 单 164 | 165 | 如果你想自己翻译菜单,你可以使用 |:menutrans| 命令,下面有一些说明。推荐把每种 166 | 语言的翻译放到单独的 Vim 脚本文件中。如果一种语言还没有被翻译,你可以成为它的 167 | 维护者,并把你的翻译贡献出来,以便能让其它 Vim 用户使用。如果你要这样的意愿的 168 | 话,请发 e-mail 给 Vim 的维护者: 。 169 | 170 | *:menut* *:menutrans* *:menutranslate* 171 | :menut[ranslate] clear 172 | 清除所有的菜单翻译。 173 | 174 | :menut[ranslate] {english} {mylang} 175 | 将菜单名称 {english} 翻译成 {mylang}。像 "&" 和 176 | "" 这样的特殊字符也必须包括进去。如同其它 |:menu| 177 | 命令中的那样,空格和句点需要用反斜杠来转义。 178 | 忽略 {english} 中的大小写。 179 | 180 | 你可以在 $VIMRUNTIME/lang 目录中找到例子。 181 | 182 | 为了检验你的翻译,首先你需要清除所有的菜单。用下面的方法你可以不重新启动 Vim 183 | 就达到这样的效果: > 184 | :source $VIMRUNTIME/delmenu.vim 185 | :source 186 | :source $VIMRUNTIME/menu.vim 187 | 188 | 菜单路径的每一个部分是被独立的翻译的。这就意味着: 如果 "Help" 被翻译成 189 | "帮助","Overview" 被翻译成 "总览",那么 "Help.Overview" 就会被翻译成 190 | "帮助.总览"。 191 | 192 | ============================================================================== 193 | 3. 脚本 *multilang-scripts* 194 | 195 | 在 Vim 脚本中,你可以用 |v:lang| 变量获得当前的 locale。缺省值是 "C" 或者来自 196 | 于环境变量 $LANG。 197 | 198 | 以下这个例子展示了这个变量的一个简单的应用,它可以显示出针对用户喜好语言的信 199 | 息: > 200 | 201 | :if v:lang =~ "zh_CN" 202 | : echo "早上好" 203 | :else 204 | : echo "Good morning" 205 | :endif 206 | < 207 | 208 | vim:tw=78:sw=4:ts=8:noet:ft=help:norl: 209 | -------------------------------------------------------------------------------- /doc/os_390.cnx: -------------------------------------------------------------------------------- 1 | *os_390.txt* 适用于 Vim 9.1 版本。 最近更新: 2017年8月 2 | 3 | 4 | VIM 参考手册 by Ralf Schandl 5 | 译者: Willis 6 | 7 | *zOS* *z/OS* *OS390* *os390* *MVS* 8 | 本文包含了 VIM 的 z/OS UNIX 版本的特点。 9 | 10 | 1. 依赖于 ASCII/EBCDIC 编码的脚本 |zOS-has-ebcdic| 11 | 2. Putty 和色彩 |zOS-PuTTY| 12 | 3. Motif 的问题 |zOS-Motif| 13 | 4 漏洞 |zOS-Bugs| 14 | 5. 限制 |zOS-limitations| 15 | 6. z/OS UNIX 上的开源软件 |zOS-open-source| 16 | 17 | 贡献者: ~ 18 | 本 z/OS UNIX 的移植是由 Ralf Schandl 为了下面提到的红皮书完成的。 19 | 20 | 提供修改、报告漏洞、或者两者都有者: 21 | 22 | David Moore 23 | Anthony Giorgio 24 | 还有其他 25 | 26 | ============================================================================== 27 | 1. 依赖于 ASCII/EBCDIC 的脚本 *OS390-has-ebcdic* *zOS-has-ebcdic* 28 | 29 | 为了内部脚本语言的编写方便,增加了 "ebcdic" 特性。所以你可以用以下方式修正依赖 30 | 于ASCII 的脚本: 31 | > 32 | if has("ebcdic") 33 | let space = 64 34 | else 35 | let space = 32 36 | endif 37 | < 38 | ============================================================================== 39 | 2. PuTTY 和色彩 *OS390-PuTTY* *zOS-PuTTY* 40 | 41 | 如果使用 PuTTY 连接到 z/OS 有语法高亮的问题或者显示不正常,可以: 42 | 43 | - 配置 Putty 使用 "vt220" 终端 (Connection->Data) 44 | - 在 vimrc 加入以下 3 行: 45 | 46 | > 47 | set t_AB=[4%p1%dm 48 | set t_AF=[3%p1%dm 49 | set t_CO=8 50 | < 51 | 52 | 注意:  是一个字符,用 可以输入。 53 | 54 | ============================================================================== 55 | 3. Motif 问题 *OS390-Motif* *zOS-Motif* 56 | 57 | 备注: Vim 6.* 发现过,此后没有测试过。 58 | 59 | 看起来,在移植 Motif 库到 z/OS 的时候,忘记把下拉菜单的快捷键从 EBCDIC 翻译成 60 | ASCII 了。即使在我手动修改菜单以后,快捷键也只能打开菜单 (比如 打开 61 | 文件菜单),但是不能打开菜单项 (比如 O 打开文件浏览器)。 62 | 63 | 现在还没有这个问题的解决方法。 64 | 65 | ============================================================================== 66 | 4. 漏洞 *OS390-bugs* *zOS-Bugs* 67 | 68 | - 在可视块模式,如果选择了大量的文本,Vim 一定会挂起。这可能是由一个内存错误引 69 | 起的。 注意 终端和 GUI 版本都存在这个问题。 70 | 71 | ============================================================================== 72 | 5. 限制 *OS390-limitations* *zOS-limitations* 73 | 74 | - tag 文件不能进行二进制查找。 75 | /bin/sort 程序缺省按照 ASCII 值排序。通常,ctags 调用这个程序来为标签 (tag) 76 | 排序。也许有一个 ctags 版本能够做正确的事情,不过我们不能肯定。看起来,这是 77 | 个永久的限制。 78 | 79 | - 在我们的大型机上测试的版本上,cscope 接口 (|cscope|) 不能工作。我们有一个 80 | 15.0b12 版本的。在用 "cscope add" 命令的时候,它使得 Vim 挂起。我猜这是因为 81 | cscope 数据库的二进制格式和 Vim 期待的不符所致。我试图把最新的 cscope (15.3) 82 | 移植到 z/OS 上,看来成效不大。如果有人有兴趣尝试并有进展,请给我个消息。 83 | 84 | - 没有 glib/gtk 支持。我不能成功在 z/OS UNIX 上编译 glib。这意味着你没法用漂亮 85 | 的 gtk 工具栏了。 86 | 87 | 编译时关闭的功能: 88 | - 多字节支持 (|multibyte|) 89 | - 从右到左模式 (|rileft|) 90 | - 波斯语键盘映射 (|Farsi|) 91 | - 阿拉伯语言支持 (|Arabic|) 92 | - 拼写检查 (|spell|) 93 | 94 | 还未测试: 95 | - Perl 接口 (|perl|) 96 | - 韩语输入 (|hangul|) 97 | - 加密支持 (|encryption|) 98 | - 语言映射 (|'langmap'|) 99 | - Python 支持 (|Python|) 100 | - 从右到左模式 (|'rightleft'|) 101 | - TCL 接口 (|tcl|) 102 | ... 103 | 104 | 如果你尝试过这些特性而且成功了,告诉我们! 105 | 106 | ============================================================================== 107 | 6. z/OS UNIX 上的开源软件 *OS390-open-source* *zOS-open-source* 108 | 109 | 如果你对 z/OS UNIX 上的其它开源软件感兴趣,请参考以下的红皮书: 110 | 111 | Mike MacIsaac et al 112 | "Open Source Software for z/OS and OS/390 UNIX" 113 | IBM Form Number: SG24-5944-01 114 | ISBN: 0738424633 115 | http://www-03.ibm.com/systems/resources/servers_eserver_zseries_zos_unix_redbook_sg245944.pdf 116 | 117 | 另见: 118 | http://www.redbooks.ibm.com 119 | http://www-03.ibm.com/systems/z/os/zos/features/unix/ 120 | http://www-03.ibm.com/systems/z/os/zos/features/unix/library/IBM+Redbooks/index.html 121 | 122 | 123 | 124 | ------------------------------------------------------------------------------ 125 | vim:tw=78:ts=8:noet:ft=help:norl: 126 | -------------------------------------------------------------------------------- /doc/os_amiga.cnx: -------------------------------------------------------------------------------- 1 | *os_amiga.txt* 适用于 Vim 9.1 版本。 最近更新: 2010年8月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: Willis 6 | 7 | 8 | *Amiga* 9 | 本文档描述了 Vim 的 Amiga 版本的特点。有一节还专门讨论了 |MorphOS|。 10 | 11 | 备注: Amiga 的代码还在,但没有人维护也没有经过测试。 12 | 13 | Amiga 上的安装: 14 | - Vim "doc" 目录赋予 "VIM:"。Vim 会查找 "VIM:doc/help.txt" 文件 (为了 help 命 15 | 令)。设置环境变量 $VIM 也可以。反过来,如果用到 $VIM 但它没有定义,就用 16 | "VIM:"。 17 | - DOS 1.3 或更早的版本: 把 "arp.library" 放在 "libs:" 里。Vim 必须在编译时加入 18 | |+ARP| 特性。确保 newcli 和 run 在 "C:" 里 (为了执行外部命令)。 19 | - 在 "c:" 或者任何在搜索路径的目录里提供一个能接受带 "-c" 的命令的外壳程序 (例 20 | 如,Fish disk 624 的 "Csh") (为了执行外部命令)。 21 | 22 | 如果你有足够内存,你可以使 Vim 和 csh 驻留来避免启动延迟。方法是执行命令 23 | "rez csh vim"。你要把 "rezlib.library" 放在你的 "libs:" 目录。在 2.0 下你需要 24 | rez 0.5 版本。 25 | 26 | 如果你不用二合字母 (digraphs),去掉 |+digraphs| 特性并重新编译可以减少一些内存 27 | 占用。如果你要在其它终端下使用 Vim,可以在重新编译时加上 TERMCAP 选项。Vim 在 28 | Manx 5.x 和 SAS 6.x 下能编译通过。见 makefiles 和 feature.h。 29 | 30 | 如果你发现当打开语法高亮或者使用嵌套的通配符搜索时,Vim 在某些文件上崩溃,那可 31 | 能是由于堆栈太小。试着增加堆栈大小。在命令行上,启动 Vim 之前,使用 Stack 命 32 | 令。而在 Workbench 上,选择 Vim 图标,打开 workbench 的 "Info" 菜单,然后改变 33 | 表单里的 Stack 字段。 34 | 35 | 如果你想要另外的颜色,设置如下的 termcap 代码: 36 | t_mr (反白文本) 37 | t_md (粗体文本) 38 | t_me (t_mr 和 t_md 后的正常文本) 39 | t_so (突出模式的文本) 40 | t_se (t_so 后的正常文本) 41 | t_us (加下划线的文本) 42 | t_ue (t_us 后的正常文本) 43 | t_ZH (斜体文本) 44 | t_ZR (t_ZH 后的正常文本) 45 | 46 | 可以使用标准 ANSI 的转换序列。这些代码是: 47 | 30 灰字 40 灰底 >0 灰色背景 0 关闭所有的属性 48 | 31 黑字 41 黑底 >1 黑色背景 1 粗体 49 | 32 白字 42 白底 >2 白色背景 2 变淡 50 | 33 蓝字 43 蓝底 >3 蓝色背景 3 斜体 51 | 34 灰字 44 灰底 >4 灰色背景 4 下划线 52 | 35 黑字 45 黑底 >5 黑色背景 7 反白 53 | 36 白字 46 白底 >6 白色背景 8 不可见 54 | 37 蓝字 47 蓝底 >7 蓝色背景 55 | 56 | 带 '>' 的代码必须在最后。底色和背景颜色应该一致。这些代码可以一起用,只要用分 57 | 号分开。例如,要在蓝色背景上显示白色文字: > 58 | :set t_me=^V[0;32;43;>3m 59 | :set t_se=^V[0;32;43;>3m 60 | :set t_ue=^V[0;32;43;>3m 61 | :set t_ZR=^V[0;32;43;>3m 62 | :set t_md=^V[1;32;43;>3m 63 | :set t_mr=^V[7;32;43;>3m 64 | :set t_so=^V[0;31;43;>3m 65 | :set t_us=^V[4;32;43;>3m 66 | :set t_ZH=^V[3;32;43;>3m 67 | 68 | 如果在一个过滤命令中使用多个命令,例如, > 69 | :r! echo this; echo that 70 | 只有最后一个命令的输出能看到。要补救这一点,你可以把命令组合起来。具体的做法决 71 | 定于你用的外壳程序 (这就是为何 Vim 不能自己这么做)。例如: > 72 | :r! (echo this; echo that) 73 | :r! {echo this; echo that} 74 | 75 | 接受单个文件名的命令允许文件名的空格。不过能接受多个文件的命令就不行了。文件名 76 | 内含的空格必须要用反斜杠来转换。 77 | 78 | ------------------------------------------------------------------------------ 79 | MorphOS 下的 Vim *MorphOS* 80 | 81 | [本节主要由 Ali Akcaagac 负责] 82 | 83 | 关于 MorphOS 版本的最新消息: 84 | http://www.akcaagac.com/index_vim.html 85 | 86 | 87 | 问题 ~ 88 | 89 | 有些问题不是 MorphOS 的,而更多是和 Vim 和 UN*X 有关。在随机存储器里启动 Vim 90 | 时,它抱怨 MorphOS 给出的一个 nag requestor,只要忽略它就行。另一个问题是运行 91 | Vim 时,有些插件会导致一些问题,这些都可以忽略。希望将来有人能够修正这些问题。 92 | 93 | 目前,要不理这些问题,你或者可以运行: > 94 | 95 | vim <要编辑的文件名> 96 | 97 | 或者,如果你想简单运行 Vim 而且还能享受到帮助文件等的助力,最好这么用: > 98 | 99 | vim --noplugins <当然你也可以加文件名> 100 | 101 | 102 | 安装 ~ 103 | 104 | 1) 请将 'VIM' 二进制码复制到 c: 105 | 2) 从以下位置得到 Vim 运行时代码包: 106 | 107 | ftp://ftp.vim.org/pub/vim/amiga/vim62rt.tgz 108 | 109 | 然后把它解压到 MorphOS 安装的 'Apps' 目录。对我而言,这会建立如下的目录结 110 | 构: 111 | 112 | MorphOS:Apps/Vim/Vim62/... 113 | 114 | 3) (非常重要的是) 把下面代码加到你的 s:shell-startup。 > 115 | 116 | ;Begin VIM 117 | Set VIM=MorphOS:Apps/Vim/Vim62 118 | Assign HOME: "" 119 | ;End VIM 120 | 121 | 4) 把 '.vimrc' 文件复制到 s: 122 | 123 | 5) 在这个包里还有一个叫做 'color-sequence' 的文件。它会将 MorphOS 外壳设成能显 124 | 示 ANSI 颜色。请将该文件复制到 s: 并且修改 s:shell-startup 成: > 125 | 126 | ;Begin VIM 127 | Set VIM=MorphOS:Apps/Vim/Vim62 128 | Assign HOME: "" 129 | Execute S:Color-Sequence 130 | Cls 131 | ;End VIM 132 | 133 | < 134 | vim:tw=78:ts=8:noet:ft=help:norl: 135 | -------------------------------------------------------------------------------- /doc/os_beos.cnx: -------------------------------------------------------------------------------- 1 | *os_beos.txt* 适用于 Vim 9.1 版本。 最近更新: 2020年7月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: Willis 6 | 7 | 8 | *beos* *BeOS* *BeBox* 9 | 本文件阐述 Vim 的 BeOS 移植版本的特殊之处。 10 | 11 | BeOS 的支持在 8.2.0849 补丁中被删除。 12 | 13 | 14 | vim:tw=78:ts=8:noet:ft=help:norl: 15 | -------------------------------------------------------------------------------- /doc/os_haiku.cnx: -------------------------------------------------------------------------------- 1 | *os_haiku.txt* 适用于 Vim 9.1 版本。 最近更新: 2023年2月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: Willis 6 | 7 | 8 | *Haiku* 9 | 本文包含了 Vim 的 Haiku 版本的特殊之处。除了本文提到的之外,和一般的 Unix 10 | |os_unix.txt| 版本的 Vim 行为大致相当。 11 | 12 | Haiku 是受 BeOS 启发的开源操作系统,特别针对个人计算而设计。 13 | 14 | 1. 通用 |haiku-general| 15 | 2. 编译 Vim |haiku-compiling| 16 | 3. Haiku GUI |haiku-gui| 17 | 4. $VIM 目录 |haiku-vimdir| 18 | 5. $USER_SETTINGS_DIR 目录 |haiku-user-settings-dir| 19 | 6. 拖放 |haiku-dragndrop| 20 | 7. 单一启动对多重启动 |haiku-launch| 21 | 8. 字体 |haiku-fonts| 22 | 9. meta 键修饰符 |haiku-meta| 23 | 10. 鼠标键映射 |haiku-mouse| 24 | 11. 色彩名 |haiku-colors| 25 | 12. GUI 工具栏图像 |haiku-toolbar-images| 26 | 13. 鸣谢 |haiku-support-credits| 27 | 14. 漏洞和未完成事宜 |haiku-bugs| 28 | 29 | 30 | 1. 通用 *haiku-general* 31 | 32 | 缺省语法高亮主要用于使用不同的前景色来高亮项目。最适用于深色背景和浅色字母的终 33 | 端窗口设置。有些中灰背景 (例如 (r,g,b)=(168,168,168)) 带上黑色字母也很不错。 34 | 35 | 36 | 2. 编译 Vim *haiku-compiling* 37 | 38 | Vim 可以用标准的 configure/make 方法编译。不带参数运行 ./configure 或传递 39 | --enable-gui=haiku 会在编译 vim 时带上 Haiku GUI 支持。运行 ./configure --help 40 | 可看到哪些其它的特性可以打开/关闭。 41 | 42 | Haiku 使用 "ncurses6" 作为其终端库,因此需要从 HaikuDepot 安装 43 | "ncurses6_devel" 包以配置 Haiku 的编译。初次编译时在下面的 ./configure 命令里 44 | 加上 "--with-tlib=ncurses"。 45 | 46 | 现在要用 "make" 来编译 Vim,然后 "make install" 来安装。要和 Haiku 无缝集成, 47 | 在 GUI 版本之外还应额外安装无 GUI 的 vim 程序。典型的编译命令是: > 48 | 49 | ./configure --prefix=`finddir B_SYSTEM_NONPACKAGED_DIRECTORY` \ 50 | --datarootdir=`finddir B_SYSTEM_NONPACKAGED_DATA_DIRECTORY` \ 51 | --mandir=`finddir B_SYSTEM_NONPACKAGED_DIRECTORY`/documentation/man \ 52 | --with-tlib=ncurses 53 | make clean 54 | make install 55 | 56 | ./configure --prefix=`finddir B_SYSTEM_NONPACKAGED_DIRECTORY` \ 57 | --datarootdir=`finddir B_SYSTEM_NONPACKAGED_DATA_DIRECTORY` \ 58 | --mandir=`finddir B_SYSTEM_NONPACKAGED_DIRECTORY`/documentation/man \ 59 | --with-tlib=ncurses \ 60 | --disable-gui 61 | make clean 62 | make install 63 | 64 | 65 | 3. Haiku GUI *haiku-gui* 66 | 67 | 通常,如果以 gvim 或 vim -g 方式启动,Vim 启动 GUI。带 GUI 的 vim 版本会试图判 68 | 断是否从 Tracker 而不是终端启动,如果是,则总选用 GUI。不过,如果用命令 69 | "vim - 84 | 85 | :version 86 | 87 | 通常 Haikuports 的版本其值是 /boot/common/data/vim,手动编译的版本其值为 88 | /boot/system/non-packaged/data/vim。如果不喜欢,可以自己设置 VIM 环境变量来覆 89 | 盖此值,或在 .vimrc 里设置 'helpfile': > 90 | 91 | :if version >= 500 92 | : set helpfile=~/vim/runtime/doc/help.txt 93 | : syntax on 94 | :endif 95 | 96 | 97 | 5. $USER_SETTINGS_DIR 目录 *haiku-user-settings-dir* 98 | 99 | $USER_SETTINGS_DIR 是代表 Haiku 保存配置和设定文件的位置的名字。 100 | 101 | 通常其值是 /boot/home/config/settings。 102 | 103 | 104 | 6. 拖放 *haiku-dragndrop* 105 | 106 | 可以把文件和目录放置在 Vim 图标上 (启动新 Vim 会话,除非用文件类型应用把 Vim 107 | 设为 "单一启动") 或 Vim 窗口上 (开始编辑文件)。目录的放置会切换 Vim 当前目录 108 | |:cd| |:pwd|。如果放置文件或目录时按住 SHIFT 键,Vim 会切换目录为首个放置项目 109 | 所在的目录。启动 Vim 时,不需要按住 shift: Vim 的行为相当于按住时一样。 110 | 111 | 放置文件时会设置当前参数列表。|argument-list| 112 | 113 | 114 | 7. 单一启动对多重启动 *haiku-launch* 115 | 116 | 发布时 Vim 的应用标志位 (FileTypes 首选项所见的) 设为多重启动。如果你喜欢的 117 | 话,可以设置为单一启动。这样试图打开第二份 Vim 时会用原来的 Vim 来打开文件。这 118 | 既适用于 Tracker,也适用于命令行。不过,后者不支持非文件 (选项) 参数。单一启动 119 | 的另一个缺点是即使编译时带了 GUI 支持,以非 GUI 应用方式运行的 vim 实例也会在 120 | 无警告的情况下忽略 "以 ... 方式打开" 请求。GUI 方式运行的 Vim 实例则没有这个问 121 | 题。 122 | 123 | 注意: 只有 GUI 版本有 BApplication (因而会有应用标志位)。此节不适用于你编译的 124 | 无 GUI 的版本。 125 | 126 | 127 | 8. 字体 *haiku-fonts* 128 | 129 | 这样设置字体 > 130 | 131 | :set guifont=DejaVu_Sans_Mono/Book/12 132 | 133 | 这里第一部分是字体家族,第二部分是风格,而第三部分是大小。这里可用下划线代替家 134 | 族和风格里的空格。 135 | 136 | 等宽字体提供最佳效果。Vim 试图使用所有 B_FIXED_SPACING 模式的字体,但显然这不 137 | 适用于比例字体 (尽管 BeBook 是这么说的)。 138 | 139 | 要检验当前字符支持什么编码,可用 > 140 | 141 | :digraphs 142 | 143 | 命令,列出一堆字符和它们的 ISO Latin 1 编码。如果,比如说,其中有 "方框" 字 144 | 符,或最后一个字符不是带点的 y,这么此编码对这个字体而言不可用。 145 | 146 | 指定的字体不可用时会改用系统固定宽度字体。 147 | 148 | 以下命令可给出 GUI 字体选择对话框: > 149 | 150 | :set guifont=* 151 | 152 | 153 | 9. meta 键修饰符 *haiku-meta* 154 | 155 | 可由左或右 OPTION 键来获取 META 键修饰符。这是因为 ALT (也就是 COMMAND) 键不传 156 | 递给应用的缘故。 157 | 158 | 159 | 10. 鼠标键映射 *haiku-mouse* 160 | 161 | Vim 把若干鼠标按钮命名为 LeftMouse、MiddleMouse 和 RightMouse。如果你用缺省鼠 162 | 标首选设定,这些名字确实对应现实情况。Vim 使用以下映射: 163 | 164 | Button 1 -> LeftMouse, 165 | Button 2 -> RightMouse, 166 | Button 3 -> MiddleMouse。 167 | 168 | 如果你的鼠标少于 3 个按钮,可提供自己的映射,把带修饰符 (可多个) 的鼠标点击映 169 | 射到其它的鼠标按钮。例见 $VIM/macros/swapmous.vim。 |gui-mouse-mapping| 170 | 171 | 172 | 11. 色彩名 *haiku-colors* 173 | 174 | Vim 有内建的若干色彩名。|v:colornames| 可定义额外的名字。详见 |:colorscheme|。 175 | 176 | 177 | 12. GUI 工具栏图像 *haiku-toolbar-images* 178 | 179 | 工具栏图像的替换集必须是 PNG 图像,高度可自选。计算图像宽度时要能在一列中包含 180 | 至少 32 个按钮的单元格。 181 | 必须以 $VIMRUNTIME/bitmaps/builtin-tools.png 名字保存此图像。按钮分配的更多详 182 | 情可见 |builtin-tools|。 183 | 184 | 185 | 13. 鸣谢 *haiku-support-credits* 186 | 187 | Haiku 的移植版本基于许多人完成的 BeOS 版本的相关工作 188 | - BeBox GUI 支持,1998 年版权所有,作者是 Olaf Seibert; 189 | - 99 年七月 R4 的移植版本,作者是 Richard Offer ; 190 | - 其它贡献者,不能尽列但我们不会忘记; 191 | - 2009 年四至五月的 Haiku 支持,作者是 Siarzhuk Zharski 。 192 | 193 | 所有的改动和补丁都以 vim 许可证发布。 194 | 195 | 谢谢大家了! 196 | 197 | 198 | 14. 漏洞和未完成事宜 *haiku-bugs* 199 | 200 | 此移植版本现在还在开发中,离尽善尽美还相差甚远。关于各种漏洞报告、补丁和愿望, 201 | 请使用 Vim 邮件列表或 Vim Github 库。 202 | 203 | 邮件列表: https://www.vim.org/maillist.php 204 | Vim Github 库: https://github.com/vim/vim 205 | 206 | 207 | vim:tw=78:ts=8:ft=help:norl: 208 | -------------------------------------------------------------------------------- /doc/os_mac.cnx: -------------------------------------------------------------------------------- 1 | *os_mac.txt* 适用于 Vim 9.1 版本。 最近更新: 2019年12月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar et al. 5 | 译者: iCrazy、Willis、tocer 6 | 7 | 8 | *mac* *Mac* *macintosh* *Macintosh* 9 | 10 | 本文件阐述 Vim 的 Macintonsh 版本的特性。 11 | 12 | 注意: 本文档已经略有过时。在这里你可以找到更多有用的信息: 13 | http://macvim.org 14 | 15 | 1. 文件名约定 |mac-filename| 16 | 2. .vimrc 和 .vim 文件 |mac-vimfile| 17 | 3. 标准映射 |mac-standard-mappings| 18 | 4. FAQ |mac-faq| 19 | 5. 已知的不足之处 |mac-lack| 20 | 6. Mac 错误报告 |mac-bug| 21 | 7. 编译 Vim |mac-compile| 22 | 8. Darwin 特性 |mac-darwin-feature| 23 | 24 | Vim 的 3.0 版有一个移植到 Mac 的版本。这是当时文档中开始的几句话: 25 | 26 | VIM Release Notes 27 | Initial Macintosh release, VIM version 3.0 28 | 19 October 1994 29 | 30 | Eric Fischer 31 | , , 32 | 5759 N. Guilford Ave 33 | Indianapolis IN 46220 USA 34 | 35 | ============================================================================== 36 | 1. 文件名约定 *mac-filename* 37 | 38 | 从 Vim 版本 7 开始,你只能用 unix 的路径分隔符。为了确定指定的文件名是与当前目 39 | 录相关 (相对路径),还是绝对路径 (即: 和 "桌面" 相关),我们使用了如下的算法: 40 | 41 | 如果路径以 "/" 开始,则为绝对路径 42 | 如果路径以 ":" 开始,则为相对路径 43 | 如果路径不以 "/" 和 ":" 开始,但是 ":" 在 "/" 之前出现,则为绝对路径 44 | > 45 | :e /HD/text 46 | :e HD:text 47 | < 编辑磁盘 "HD" 中的文件 "text" > 48 | :e :src:main.c 49 | :e src/main.c 50 | < 编辑当前目录下子目录 "src" 中的文件 "main.c" > 51 | :e os_mac.c 52 | < 编辑当前目录下的文件 "os_mac.c"。 53 | 54 | 您可以使用变量 |$VIM| 和 |$VIMRUNTIME| > 55 | 56 | :so $VIMRUNTIME:syntax:syntax.vim 57 | 58 | ============================================================================== 59 | 2. .vimrc 和 .vim 文件 *mac-vimfile* 60 | 61 | 对于 Vim 脚本,建议使用 Unix 风格的换行符,也就是单个 NL 字符。 62 | 63 | 当 Vim 启动时,它会载入 $VIMRUNTIME/macmap.vim 脚本以定义默认的命令键 64 | (command-key) 映射。 65 | 66 | 在旧版系统上,一般应避免使用以 "." 开头的文件,所以那些 rc 文件被命名为 67 | "vimrc" 或 "_vimrc",以及 "gvimrc" 或 "_gvimrc"。这些文件可以是任何格式 (mac、 68 | dos 或 unix)。如果 |'nocompatible'| 选项打开,Vim 可以处理任何文件格式,否则它 69 | 只能处理 mac 格式的文件。 70 | 71 | ============================================================================== 72 | 3. 标准映射 *mac-standard-mappings* 73 | 74 | 以下映射可用于剪切/复制/粘贴到剪贴板。 75 | 76 | 键 普通 可视 插入 描述 ~ 77 | Command-v "*P "-d"*P * 粘贴文本 ** 78 | Command-c "*y 复制可视文本 ** 79 | Command-x "*d 剪切可视文本 ** 80 | Backspace "*d 剪切可视文本 81 | 82 | ============================================================================== 83 | 4. Mac FAQ *mac-faq* 84 | 85 | 在互联网上: http://macvim.org/OSX/index.php#FAQ 86 | 87 | 问题: 我不能在 Apple 终端输入非 ASCII 的字符。 88 | 回答: 在 Windows Setting,Emulation,确信没有选上 "Escape non-ASCII 89 | characters"。 90 | 91 | 问题: 怎么从命令行启动 GUI? 92 | 回答: 假设 Vim.app 存放在 /Applications 中: 93 | open /Applications/Vim.app 94 | 或: 95 | /Applications/Vim.app/Contents/MacOS/Vim -g {arguments} 96 | 97 | 问题: 如果我用 GUI 或 open 启动 Vim.app,如何合理设置 $PATH? 98 | 回答: 下面这个窍门能用于多数外壳。把它放到 vimrc 文件中。macvim.org 发布的二进 99 | 制发行包中带有的系统 vimrc 文件已经包含。 > 100 | let s:path = system("echo echo VIMPATH'${PATH}' | $SHELL -l") 101 | let $PATH = matchstr(s:path, 'VIMPATH\zs.\{-}\ze\n') 102 | 103 | ============================================================================== 104 | 5. 已知的不足之处 *mac-lack* 105 | 106 | 在终端中,CTRL-^ 需要用 Shift-Control-6 来输入。而 CTRL-@ 则用 Shift-Control-2 107 | 输入。 108 | 109 | ============================================================================== 110 | 6. Mac 错误报告 *mac-bug* 111 | 112 | 当报告任何与 Mac 平台相关的 bug 或特性时,请使用 vim-mac 邮件列表 |vim-mac|。 113 | 然而,您必须先订阅它。另一个办法是直接在 Vim github 库报告问题: 114 | 115 | https://github.com/vim/vim/issues 116 | 117 | 对 MacVim 特定的问题,可以在这里报告问题: 118 | 119 | https://github.com/macvim-dev/macvim/issues 120 | 121 | ============================================================================== 122 | 7. 编译 Vim *mac-compile* 123 | 124 | 见伴随源程序的文件 "src/INSTALLmac.txt"。 125 | 126 | ============================================================================== 127 | 8. Darwin 特性 *mac-darwin-feature* 128 | 129 | 如果你的 Mac 不是太老,你运行的会是 OS X,也叫 Darwin。Darwin 之前的最后的 OS 130 | 版本是 Mac OS 9。Darwin 特性意味着 Vim 能使用 Darwin 特定的属性。 131 | 132 | 此特性可以完成两重目的: 133 | 134 | - Vim 可以和系统剪贴板互动。 135 | - 给 Vim 引入转换模块,为一些平台特定的字符编码和 Vim 所知编码之间弥合差异。 136 | 137 | 不需要讲,任何像样的文本编辑器要在同一桌面环境下和其它应用友好互动,没有这两条 138 | 是不行的。 139 | 140 | Vim 不是专为 macOS 设计的应用,需要额外的特性来使 macOS 的用户享受其它平台用户 141 | 相同的用户体验。 142 | 143 | 为简明起见,此特性称为 "darwin",用来表示它是专为此特定平台提供的 Vim 特性。 144 | 145 | 此特性是个配置选项。亦即,它的打开与否是在编译时间决定的;一旦选择打开,编译时 146 | 带入就不能在运行时关闭。 147 | 148 | 缺省打开此特性。对于多数 macOS 用户,这就足够了,除非他们有以下简要说明的特殊 149 | 需要。 150 | 151 | 要关闭此特性,给 configure 脚本传递 `--disable-darwin`: > 152 | 153 | ./configure --disable-darwin 154 | 155 | 然后运行 `make` 来编译 Vim。选项的顺序无关紧要。 156 | 157 | 要在运行时确定是否编译进 darwin 特性,可用 `has('osxdarwin')`,如果编译时有此 158 | 特性,返回 1;否则返回 0。为了后向兼容,继续可以用 'macunix' 代替 159 | 'osxdarwin'。 160 | 161 | 值得提出的 `--disable-darwin` 实际有用的用例包括: 162 | 163 | - 想用 |x11-selection| 而不是系统剪贴板。 164 | - 想用 |x11-clientserver|。 165 | 166 | 因为两者都需要 X11 客户间通信才能正常工作,而该通信机制和系统剪贴板时有冲突, 167 | 可以通过关闭 darwin 特性以防止 Vim 运行时挂起。 168 | 169 | 170 | vim:tw=78:ts=8:noet:ft=help:norl: 171 | -------------------------------------------------------------------------------- /doc/os_mint.cnx: -------------------------------------------------------------------------------- 1 | *os_mint.txt* 适用于 Vim 9.1 版本。 最近更新: 2020年7月 2 | 3 | 4 | VIM 参考手册 by Jens M.Felderhoff 5 | 译者: iCrazy 6 | 7 | *MiNT* *Atari* 8 | Atari MiNT 的支持在 8.2.1215 补丁中被删除。当时可能已不能工作,因为代码老旧且 9 | 无人维护。 10 | 11 | 12 | 原始代码提供者: Jens M. Felderhoff,电邮: 13 | 14 | 15 | vim:tw=78:ts=8:noet:ft=help:norl: 16 | -------------------------------------------------------------------------------- /doc/os_msdos.cnx: -------------------------------------------------------------------------------- 1 | *os_msdos.txt* 适用于 Vim 9.1 版本。 最近更新: 2017年8月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: Dasn、tocer 6 | 7 | 8 | *msdos* *ms-dos* *MSDOS* *MS-DOS* 9 | 本文过去描述 MS-DOS 版本 Vim 的特点。在 7.4.1399 补丁中删除了 MS-DOS 支持。如 10 | 果你还想要用,需要在此之前的版本。注意 MS-DOS 版本不能工作,内存不够。DOS32 版 11 | 本 (用 DJGPP) 在较旧的系统上可能还能用。 12 | 13 | 14 | vim:tw=78:ts=8:noet:ft=help:norl: 15 | -------------------------------------------------------------------------------- /doc/os_os2.cnx: -------------------------------------------------------------------------------- 1 | *os_os2.txt* 适用于 Vim 9.1 版本。 最近更新: 2017年8月 2 | 3 | 4 | VIM 参考手册 by Paul Slootman 5 | 译者: Willis 6 | 7 | 8 | *os2* *OS2* *OS/2* 9 | 本文过去讨论 OS/2 版本的 Vim 的特点。 10 | 11 | patch 7.4.1008 删除了 OS/2 的支持。 12 | 13 | 14 | vim:tw=78:ts=8:noet:ft=help:norl: 15 | -------------------------------------------------------------------------------- /doc/os_qnx.cnx: -------------------------------------------------------------------------------- 1 | *os_qnx.txt* 适用于 Vim 9.1 版本。 最近更新: 2006年2月 2 | 3 | 4 | VIM 参考手册 by Julian Kinraid 5 | 译者: Willis 6 | 7 | 8 | *QNX* *qnx* 9 | 10 | 1. 概述 |qnx-general| 11 | 2. 编译 Vim |qnx-compiling| 12 | 3. 终端支持 |qnx-terminal| 13 | 4. Photon GUI |photon-gui| 14 | 5. Photon 字体 |photon-fonts| 15 | 6. 漏洞和待做的事情 16 | 17 | ============================================================================== 18 | 19 | 1. 概述 *qnx-general* 20 | 21 | QNX 上的 Vim 和其他的 unix 版本行为大致相同。|os_unix.txt| 22 | 23 | 24 | 2. 编译 Vim *qnx-compiling* 25 | 26 | Vim 可以用通常的 configure/make 方法编译。如果你要编译 X11 的版本,在配置 27 | (configure) 时加入 --with-x 选项。否则,不需要任何参数。或者,加入 28 | --enable-gui=photon 以得到 Photon GUI 的支持。执行 ./configure --help,看看还 29 | 有什么特性你希望打开或者关闭。 30 | 31 | 32 | 3. 终端支持 *qnx-terminal* 33 | 34 | 如果鼠标和剪贴板选项在编译时加入的话 (通常如此),Vim 可以提供 pterm 这两方面的 35 | 支持。 36 | 37 | 影响鼠标设置的选项有 |'mouse'| 和 |'ttymouse'|。在使用鼠标时,如果你按住 38 | shift、ctrl、或是 alt,pterm 自己会处理鼠标事件。它会选择文本,和 Vim 所做的无 39 | 关。 40 | 41 | 如果鼠标可以使用,你按住 Alt-RightMouse (Alt + 鼠标右键) 可以打开 pterm 菜单。 42 | 要关闭 Vim 的鼠标支持,把 mouse 选项置空,即 set mouse= 43 | 44 | 45 | 4. Photon GUI *photon-gui* 46 | 47 | 要启动 Vim 的 GUI 版本,你可以运行 gvim 或者 vim -g。否则运行的是终端版本。更 48 | 多的信息可见 - |gui-x11-start| 49 | 50 | 支持的特性有: 51 | :browse 命令 |:browse| 52 | :confirm 命令 |:confirm| 53 | 光标闪烁 |'guicursor'| 54 | 菜单、弹出式菜单和菜单优先顺序 |:menu| 55 | |popup-menu| 56 | |menu-priority| 57 | 工具栏 |gui-toolbar| 58 | |'toolbar'| 59 | 字体选择工具 (:set guifont=*) |photon-fonts| 60 | 鼠标聚焦 |'mousefocus'| 61 | 鼠标隐藏 |'mousehide'| 62 | 鼠标图标形状 |'mouseshape'| 63 | 剪贴板 |gui-clipboard| 64 | 65 | 还未完成的特性: 66 | 若干国际化支持,包括波斯语和希伯来文字的支持, 67 | 不同的编码,等等。 68 | 69 | 本帮助文件 70 | 71 | 不支持的特性: 72 | 查找和替换窗口 |:promptfind| 73 | 可卸的菜单 74 | 75 | 其他我还没有想及的恕难加入 76 | 77 | 78 | 5. Photon 字体 *photon-fonts* 79 | 80 | 你可以在 gui 中用 guifont 选项设置字体 > 81 | :set guifont=Lucida\ Terminal 82 | < 83 | 该字体须是等宽字体,字体名如有空格,应以 '\' 转义之。缺省字体是 PC Terminal, 8 84 | 号字。用 '*' 作为字体名会打开一个标准的 Photon 字体选择工具,然后你可以从中选 85 | 择一个字体。 86 | 87 | 在字体名后面,你可以附加可选的控制字体大小和风格的选项,设置之间用 ':' 分隔。 88 | 不是所有的字体都支持所有的风格。 89 | 90 | 这些选项是, 91 | s{size} 字体大小 {size} 92 | b 粗体字 93 | a 抗锯齿字体 94 | i 斜体字 95 | 96 | 示例: 97 | 98 | 设定 monospace 10号抗锯齿字体 > 99 | :set guifont=monospace:s10:a 100 | < 101 | 设定 Courier 12号粗体斜体字 > 102 | :set guifont=Courier:s12:b:i 103 | < 104 | 从选择工具挑选字体 > 105 | :set guifont=* 106 | < 107 | 108 | 109 | 6. 漏洞和待做的事情 110 | 111 | 已知问题: 112 | - Vim 有时在执行外部程序时不响应。绕开的方法是把下面这行加入到你的 113 | |vimrc| 文件中: > 114 | set noguipty 115 | 116 | 漏洞: 117 | - 菜单高亮还有些许问题 118 | - 在使用 phiditto/phinows 等的时候,如果你用的字体不支持粗体属性而 Vim 119 | 要显示粗体字,情况就会弄乱。 120 | - 光标有时候很难看得到。 121 | - 一些我可以解决的小问题 :) 122 | 123 | 待做: 124 | - 改进多语言支持。 125 | - 在菜单和工具栏中加入设置字体的选项。 126 | - 查找和替换对话框。 127 | - 客户/服务器方面的功能。 128 | - 也许要做可卸下的菜单。 129 | 130 | - 在启动外部程序时,不要使用带 spawn() 的 fork()。 131 | 132 | vim:tw=78:sw=4:ts=8:noet:ft=help:norl: 133 | -------------------------------------------------------------------------------- /doc/os_risc.cnx: -------------------------------------------------------------------------------- 1 | *os_risc.txt* 适用于 Vim 9.1 版本。 最近更新: 2011年5月 2 | 3 | 4 | VIM 参考手册 by Thomas Leonard 5 | 译者: Willis 6 | 7 | 8 | *riscos* *RISCOS* *RISC-OS* 9 | RISC OS 的支持在 Vim 7.3.187 补丁中被删除。 10 | 如果你想在 RISC OS 中使用 Vim,请获取该补丁之前的版本。 11 | 12 | vim:tw=78:ts=8:noet:ft=help:norl: 13 | -------------------------------------------------------------------------------- /doc/os_unix.cnx: -------------------------------------------------------------------------------- 1 | *os_unix.txt* 适用于 Vim 9.1 版本。 最近更新: 2023年2月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: yemao 6 | 7 | 8 | *unix* *Unix* 9 | 本文件介绍了 Unix 版本的 vim 的一些特殊之处。 10 | 11 | 首先,要在 Unix 上编译 vim,请参考 src 目录下的 "INSTALL" 文件和 "Makefile" 文 12 | 件。 13 | 14 | 默认帮助文件名为 "/usr/local/lib/vim/help.txt" 15 | 同时,vim 会使用 "$HOME/.vimrc" 和 "$HOME/.exrc" 而不是 "s:.vimrc" 和 16 | "s:.exrc"。另外它会首先使用 /usr/local/etc/vimrc 文件。注意,如果 17 | "/usr/local/share" 已经存在,就会使用它来代替 "/usr/local/lib"。 18 | 19 | 临时文件 (用于过滤程序) 默认会放在 "/tmp" 下,如果你想把它们放在别处,那么必须 20 | 设置环境变量 $TMPDIR 为你放临时文件的目录。 21 | 22 | 通过扩展通配符,你可以使用 '~' (用户主目录) 及 '$' (系统环境变量)。 23 | 24 | *fork* *spoon* 25 | 执行外部命令时,会尽可能调用 fork()/exec(),不然会调用 system()。使用后者速度 26 | 会有所减慢。正因为有两个函数可以被调用,":version" 输出信息就有两种,当调用 27 | fork()/exec() 时,输出 |+fork|,否则输出 |+system()|。编译时可以修改。 28 | (GUI 上关于 fork (进程分叉) 的详细信息参考 |gui-fork|。) 29 | 30 | 因为历史原因,Unix 上的终端刷新常常认为比较慢 (比如串行终端和 suntools 下的外 31 | 壳窗口),所以默认情况下的 'showcmd' 选项和 'ruler' 选项都是关闭的。如果你所使 32 | 用的终端比较快的话,可以把它们打开: > 33 | set showcmd ruler 34 | 35 | 在 xterm 下使用 Vim,只要把 'mouse' 选项设成 "a" 就可以使用鼠标了。如果你有权 36 | 限使用 X-server,当你用鼠标拖动的时候,可以进行 gui 风格的复制和粘贴,而你还会 37 | 看到可视反馈。如果你还是想用 xterm 的复制和粘贴,使用鼠标时按住 shift 键,具体 38 | 请参考 |mouse-using|。只要你的 xterm 版本够新,设置一下 'ttymouse' 选项就可以 39 | 在拖动的时候得到可视反馈。 40 | 41 | *terminal-colors* 42 | 要在 Vim 里显示彩色,可以参考以下例子 (假定你的终端支持色彩显示,而 "T_Co" 为 43 | 空或零): > 44 | :set t_me=^[[0;1;36m " 正常模式 (撤销 t_mr 和 t_md) 45 | :set t_mr=^[[0;1;33;44m " 反转 (逆转) 模式 46 | :set t_md=^[[1;33;41m " 粗体模式 47 | :set t_se=^[[1;36;40m " 突出模式结束 48 | :set t_so=^[[1;32;45m " 突出模式开始 49 | :set t_ue=^[[0;1;36m " 下划线模式结束 50 | :set t_us=^[[1;32m " 下划线模式开始 51 | [注意,^[ 是 ,可以用 CTRL-V 来输入。] 52 | 53 | 而在真正的彩色终端下,可以使用 ":highlight" 命令。 54 | 55 | 另外,文件 "tools/vim132" 是一个外壳脚本。在 vt100 和与其类似的终端下,它可以 56 | 使 Vim 使用 132 列模式。 57 | 58 | vim:tw=78:ts=8:noet:ft=help:norl: 59 | -------------------------------------------------------------------------------- /doc/pi_gzip.cnx: -------------------------------------------------------------------------------- 1 | *pi_gzip.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年3月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: iCrazy 6 | 7 | 8 | 用 Vim 编辑压缩的文件 *gzip* *bzip2* *compress* 9 | 10 | 1. 自动命令 |gzip-autocmd| 11 | 12 | 这里涉及到的功能是一个 |standard-plugin|。 13 | 这个插件仅在 'compatible' 选项没有被置位的情况下有效。 14 | 您可以通过设置变量 "loaded_gzip" 来避免装载这个插件: > 15 | :let loaded_gzip = 1 16 | < 17 | *g:gzip_exec* 18 | 19 | 因为安全原因,你可能不想 Vim 在打开缓冲区时自动执行外部程序。此选项 (缺省: "1") 20 | 设为 "0" 时可防止程序命令的执行: > 21 | :let g:gzip_exec = 0 22 | < 23 | 24 | ============================================================================== 25 | 1. 自动命令 *gzip-autocmd* 26 | 27 | 这个插件建立自动命令来截获对具有以下扩展名的文件的读写: 28 | 29 | 扩展名 压缩格式 ~ 30 | *.bz2 bzip2 31 | *.bz3 bzip3 32 | *.gz gzip 33 | *.lz lzip 34 | *.lz4 lz4 35 | *.lzma lzma 36 | *.xz xz 37 | *.Z compress (Lempel-Ziv) 38 | *.zst zstd 39 | 40 | 您仅仅知道这些就已经足够了,此插件没有选项。 41 | 42 | 在解压缩一个文件之后,会自动重新检测文件格式。这样可能会使一个类似 "foo.c.gz" 43 | 的文件具有 "c" 的文件格式。 44 | 45 | 如果您设置了 'patchmode',在进行压缩后该值会被自动加到文件的扩展名后面。因而编 46 | 辑 patchmode 文件不会产生自动解压缩的效果。如果您希望这样,您需要改变文件名。 47 | 48 | ============================================================================== 49 | vim:tw=78:ts=8:noet:ft=help:norl: 50 | -------------------------------------------------------------------------------- /doc/pi_logipat.cnx: -------------------------------------------------------------------------------- 1 | *pi_logipat.txt* 逻辑模式 May 01, 2019 2 | 3 | 译者: Willis 4 | 5 | Author: Charles E. Campbell 6 | Copyright: (c) 2004-2016 by Charles E. Campbell *logiPat-copyright* 7 | The VIM LICENSE applies to LogiPat.vim and LogiPat.txt 8 | (see |copyright|) except use "LogiPat" instead of "Vim" 9 | No warranty, express or implied. Use At-Your-Own-Risk. 10 | 11 | ============================================================================== 12 | 1. 内容 *logiPat* *logiPat-contents* 13 | 14 | 1. 内容.....................: |logiPat-contents| 15 | 2. LogiPat 手册.............: |logiPat-manual| 16 | 3. LogiPat 示例.............: |logiPat-examples| 17 | 4. 警告.....................: |logiPat-caveat| 18 | 5. LogiPat 历史.............: |logiPat-history| 19 | 20 | 21 | ============================================================================== 22 | 2. LogiPat 手册 *logiPat-manual* *logiPat-man* 23 | 24 | *logiPat-arg* *logiPat-input* *logiPat-pattern* *logiPat-operators* 25 | 布尔逻辑模式的组成是 26 | 27 | operators ! = 非 28 | | = 逻辑或 29 | & = 逻辑与 30 | grouping ( ... ) 31 | patterns "pattern" 32 | 33 | *logiPat-cmd* 34 | :LogiPat {布尔逻辑模式} *:LogiPat* 35 | :LogiPat 是一个接受布尔逻辑参数的命令 (|logiPat-arg|)。 36 | 37 | :LP {布尔逻辑模式} *:LP* 38 | :LP 是 :LogiPat (|logiPat-cmd|) 的简写命令版本。 39 | 40 | :LPE {布尔逻辑模式} *:LPE* 41 | 不执行搜索,但进行布尔逻辑模式到正则表达式的转换,并在屏幕上回 42 | 显。 43 | 44 | :LogiPatFlags {搜索标志位} *LogiPat-flags* 45 | LogiPat 使用 |search()| 命令。:LogiPatFlags 命令可用来指定传递 46 | 给 search() 调用的标志位。 47 | 48 | :LPF {搜索标志位} *:LPF* 49 | :LPF 是 :LogiPatFlags 的简写版本。 50 | 51 | :let pat=LogiPat({布尔逻辑模式}) *LogiPat()* 52 | 如果直接调用 LogiPat(),不执行搜索,但进行布尔逻辑模式到正则表 53 | 达式的转换并返回之。 54 | 55 | 要在模式里指定 " 而不是用作模式的定界,给双引号加倍。 56 | 57 | 58 | ============================================================================== 59 | 3. LogiPat 示例 *logiPat-examples* 60 | 61 | LogiPat 接受布尔逻辑参数,产生正则表达式来实现选择。下面提供一系列的例 62 | 子 : 63 | > 64 | :LogiPat "abc" 65 | < 会搜索包含字符串 :abc: 的行 66 | > 67 | :LogiPat "ab""cd" 68 | < 会搜索包含字符串 :ab"cd: 的行 69 | > 70 | :LogiPat !"abc" 71 | < 会搜索不包含字符串 :abc: 的行 72 | > 73 | :LogiPat "abc"|"def" 74 | < 会搜索包含字符串 :abc: 或 :def: 的行 75 | > 76 | :LogiPat !("abc"|"def") 77 | < 会搜索既不包含字符串 :abc: 也不包含 :def: 的行 78 | > 79 | :LogiPat "abc"&"def" 80 | < 会搜索同时包含字符串 :abc: 和 :def: 的行 81 | > 82 | :let pat= LogiPat('!"abc"') 83 | < 会返回正则表达式,可用来匹配所有不包含 :abc: 的行。双倍的引号 84 | 是必要的,它可以把正常的匹配传递给 LogiPat,并把这种模式和布尔 85 | 逻辑的操作符区别开来。 86 | 87 | 88 | ============================================================================== 89 | 4. 警告 *logiPat-caveat* 90 | 91 | "not" 操作符可能比较脆弱;也就是,它并不总是能和 & (逻辑与) 和 | (逻 92 | 辑或) 操作符合作得很好。请先试试你的模式,可能的话用 :set hls,以确保 93 | 匹配符合你的期望。 94 | 95 | 96 | ============================================================================== 97 | 5. LogiPat 历史 (英文) *logiPat-history* 98 | 99 | v4 Jun 22, 2015 * LogiPat has been picked up by Bram M for standard 100 | plugin distribution; hence the name change 101 | v3 Sep 25, 2006 * LP_Or() fixed; it now encapsulates its output 102 | in \%(...\) parentheses 103 | Dec 12, 2011 * |:LPE| added 104 | * "" is mapped to a single " and left inside patterns 105 | v2 May 31, 2005 * LPF and LogiPatFlags commands weren't working 106 | v1 May 23, 2005 * initial release 107 | 108 | 109 | ============================================================================== 110 | vim:tw=78:ts=8:noet:ft=help 111 | -------------------------------------------------------------------------------- /doc/pi_paren.cnx: -------------------------------------------------------------------------------- 1 | *pi_paren.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年3月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: Willis 6 | 7 | 8 | 高亮匹配括号 *matchparen* 9 | 10 | 这里提到的功能是一个标准插件 |standard-plugin|。 11 | 只有 'compatible' 不置位时才能使用此插件。 12 | 13 | 设置 "loaded_matchparen" 变量可以避免载入此插件: > 14 | :let loaded_matchparen = 1 15 | 16 | 此插件安装 CursorMoved、CursorMovedI 和 WinEnter 自动命令来重新定义匹配高亮。 17 | 18 | *:NoMatchParen* *:DoMatchParen* 19 | 要在载入此插件后关闭它,用: > 20 | 21 | :NoMatchParen 22 | 23 | 要再次打开: > 24 | 25 | :DoMatchParen 26 | 27 | 使用的高亮是 MatchParen。":highlight" 命令可用来为它指定不同的颜色。例如: > 28 | 29 | :hi MatchParen ctermbg=blue guibg=lightblue 30 | 31 | 缺省插件会用 |hl-MatchParen| 高亮组高亮光标下的括号还有和其配对的括号。这可能 32 | 导致光标从屏幕上短暂消失,因为 MatchParen 色彩会接管光标的高亮。如果不想这样, 33 | 只想让配对的括号高亮而不是光标下的 (效果就是保持光标的风格不变),可设置 34 | "matchparen_disable_cursor_hl" 变量: > 35 | 36 | :let matchparen_disable_cursor_hl = 1 37 | 38 | 匹配的字符组来自 'matchpairs' 选项。你可以改变该值来高亮不同的匹配。注意 不是 39 | 什么值都可以。比如,你不能高亮单引号或双引号,因为它们的开始和结束字符相同。 40 | 41 | 使用语法高亮的属性。如果光标目前不在字符串或注释语法项目里,则忽略字符串和注释 42 | 里的匹配。任何名字里包含 "string" 或 "comment" 的语法项目都被认为是字符串或注 43 | 释项目。 44 | 45 | 移动光标时,限制搜索范围以避免延迟。这些限制包括: 46 | - 窗口的可见部分。 47 | - 光标上下 100 行,避免关闭折叠存在时的延迟过长。 48 | - 光标前后 'synmaxcol' 乘以 2 个字节,避免存在带语法高亮的长行时延迟过长。 49 | - 300 毫秒 (插入模式下是 60 毫秒) 的超时。可用 "g:matchparen_timeout" 和 50 | "g:matchparen_insert_timeout" 变量或局部于缓冲区的 "b:matchparen_timeout" 和 51 | "b:matchparen_insert_timeout" 来改变。 52 | 53 | 如果你希望 |%| 命令更好的工作,可以使用 matchit 插件,见 |matchit-install|。该 54 | 插件也可用于跳过注释里的匹配。这不同于 matchparen 高亮,两者使用不同的机制。 55 | 56 | ============================================================================== 57 | vim:tw=78:ts=8:noet:ft=help:norl: 58 | -------------------------------------------------------------------------------- /doc/pi_spec.cnx: -------------------------------------------------------------------------------- 1 | *pi_spec.txt* 适用于 Vim 9.1 版本。 最近更新: 2006年7月 2 | 3 | 作者: Gustavo Niemeyer ~ 4 | 译者: Willis 5 | 6 | 这是一个针对 rpm 规格文件的文件类型插件。 7 | 8 | 此 Vim 插件让你轻松更新 RPM 规格 (spec) 文件的更新记录段 (%changelog section) 9 | 的内容。如果该段还不存在,它可以为你新建段。如果你今天还没有更新,它会帮你建立 10 | 新的说明入口 (entry)。如果你还没有提供格式串 (|spec_chglog_format|),它会询问 11 | 你的 email 地址,然后自动为你提供该格式串。 12 | 13 | 1. 如何使用 |spec-how-to-use-it| 14 | 2. 自定义 |spec-customizing| 15 | 16 | ============================================================================== 17 | 1. 如何使用 *spec-how-to-use-it* 18 | 19 | spec_chglog 插件提供如下映射: 20 | 21 | :map c SpecChangelog 22 | 23 | 这意味着在规格文件里你可以通过按 |maplocalleader| 键 (缺省是 '\') 加 'c' 来执 24 | 行这个插件。如果你还没有设置 |spec_chglog_format|,此时插件会要求你提供 email 25 | 地址,编辑过程里会用到这个地址。 26 | 27 | 每次你运行此插件,它检查更新记录,看看最近的说明入口是否今天由你写入。如果是, 28 | 在此入口中插入新建更新记录,如果不是,它会建立一个新的更新记录入口。如果你打开 29 | |spec_chglog_release_info|,它同时还会检查文件名,版本和发布版本是不是匹配。如 30 | 果你自己还没有更新该软件包的发布号的话。这个插件能够智能地询问你是否要这么做。 31 | 32 | 设置键盘映射 *spec-setting-a-map* 33 | ------------- 34 | 35 | 正如你应该已经知道的,可以设置键盘映射执行任何 Vim 命令 (对此而言,其实还有别 36 | 的)。如果你不喜欢缺省的映射 c,可以自己定义。下面说明在 .vimrc 文 37 | 件里如何作此设置。比如,要把本插件映射到 键: 38 | > 39 | au FileType spec map SpecChangelog 40 | < 41 | 备注: 本插件会尊重你的本人意愿,不会再次把它的缺省设置强加于你。 42 | 43 | 该命令只会在规格文件的缓冲区中定义这个映射。 44 | 45 | 46 | ============================================================================== 47 | 2. 自定义 *spec-customizing* 48 | 49 | 格式串 *spec_chglog_format* 50 | ----------------- 51 | 52 | 你可以轻松地定制自己的规格文件入口的样式。为此,只须在 .vimrc 文件中这样设置 53 | "spec_chglog_format" 变量: > 54 | 55 | let spec_chglog_format = "%a %b %d %Y My Name " 56 | < 57 | 注意 "%a %b %d %Y" 是最常用的格式。如果你不提供格式串,第一次运行 SpecChanglog 58 | 命令时,它会询问 email 地址,然后为你构造 |spec_chglog_format| 变量。这种方式 59 | 下,你只要提供 email 地址一次。 60 | 61 | 要知道可用的格式串选项,察看 strftime() 函数的 man 手册页。 62 | 63 | 何处插入新的更新记录 *spec_chglog_prepend* 64 | ------------------------- 65 | 66 | 本插件通常把新的 %changelog 更新记录 (注意: 不是入口本身) 加在现有的记录之后。 67 | 如果你设置了 spec_chglog_prepend 变量 > 68 | 69 | let spec_chglog_prepend = 1 70 | 71 | 那么新记录将加在已有记录之前。 72 | 73 | 加入发布信息 *spec_chglog_release_info* 74 | ---------------------- 75 | 76 | 如果你愿意,本插件自动在每个更新记录入口中加入发布信息。这么做的一个好处是能控 77 | 制软件包每次更改之后是否更新发布号。如果包的版本或发行号没有更新,它询问你是否 78 | 要这么做。要打开这个功能,在 .vimrc 中加入以下代码: > 79 | 80 | let spec_chglog_release_info = 1 81 | 82 | 这样,更新记录入口的首个记录就会像这样: > 83 | 84 | + name-1.0-1cl 85 | 86 | 如果你不喜欢发布更新功能,也不想每次检测到旧的发布号时都回答 "No",可以关闭此 87 | 功能 > 88 | 89 | let spec_chglog_never_increase_release = 1 90 | 91 | 92 | 一切顺利!! 93 | 94 | vim:tw=78:ts=8:noet:ft=help:norl: 95 | -------------------------------------------------------------------------------- /doc/pi_tar.cnx: -------------------------------------------------------------------------------- 1 | *pi_tar.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年4月 2 | 3 | +====================+ 4 | | Tar 文件接口 | 5 | +====================+ 6 | 译者: Willis 7 | 8 | Author: Charles E. Campbell 9 | (remove NOSPAM from Campbell's email first) 10 | Copyright 2005-2017: *tar-copyright* 11 | The VIM LICENSE (see |copyright|) applies to the files in this 12 | package, including tarPlugin.vim, tar.vim, and pi_tar.txt. Like 13 | anything else that's except use "tar.vim" instead of "VIM". Like 14 | anything else that's free, tar.vim and its associated files are 15 | provided *as is* and comes with no warranty of any kind, either 16 | expressed or implied. No guarantees of merchantability. No 17 | guarantees of suitability for any purpose. By using this plugin, you 18 | agree that in no event will the copyright holder be liable for any 19 | damages resulting from the use of this software. Use at your own risk! 20 | 21 | ============================================================================== 22 | 1. 内容 *tar* *tar-contents* 23 | 1. 内容......................................................|tar-contents| 24 | 2. 用法......................................................|tar-usage| 25 | 3. 选项......................................................|tar-options| 26 | 4. 历史......................................................|tar-history| 27 | 28 | ============================================================================== 29 | 2. 用法 *tar-usage* *tar-manual* 30 | 31 | 编辑 *.tar 文件时,此插件进行处理,显示内容页面。移动光标到文件上,然后按 32 | 键,就可以选择该文件进行编辑。编辑后,可以写回该文件。目前,不能用 33 | 该插件建立新的 tar 归档文件。 34 | 35 | *:Vimuntar* 36 | VIMUNTAR~ 37 | 38 | :Vimuntar [vimhome] 39 | 40 | 本命令,如有需要,把 tar 包文件复制到以下目录中的 .vim 或 vimfiles 目 41 | 录: 若 [vimhome] 未指定,'runtimepath' 的第一个可写目录。不然, 42 | [vimhome] 参数允许用户自定义该目录。 43 | 44 | 复制动作使用 *g:tar_copycmd* 定义的命令,即 > 45 | cp 用于 cygwin、unix、macunix 46 | copy 用于 windows (32、95、64、16) 47 | < 提取动作使用 *g:tar_extractcmd* 定义的命令,缺省是 > 48 | "tar -xf" 49 | < 50 | *:TarDiff* 51 | 支 持 比 较~ 52 | 53 | :TarDiff [filename] 54 | 55 | 本命令会试图比较文件的 tar 包版本和系统上相对应的文件。为了找到系统上 56 | 的对应文件,脚本会用到 tar 包中的文件相关联的路径。如果当前目录下没有 57 | 该路径,:TarDiff 就无法找到相关的文件。 58 | 59 | 如果给出 [filename],该文件名 (和其路径) 会被用来指定相关文件。 60 | 61 | 62 | 禁 止 载 入~ 63 | 64 | 如果由于某种原因你不想 vim 检查 tar 文件,在 <.vimrc> 中定义两个变量就可以 65 | 不载入 tar 插件: > 66 | 67 | let g:loaded_tarPlugin= 1 68 | let g:loaded_tar = 1 69 | < 70 | *tar-mappings* 71 | 映 射~ 72 | 73 | 可在 tar 缓冲区里使用下列的 (缓冲区局部) 映射: 74 | 75 | 打开选中的文件进行编辑,所有的改动会写回到归档。 76 | 77 | x 提取选中的文件。 78 | 79 | ============================================================================== 80 | 3. 选项 *tar-options* 81 | 82 | 以下是用户可以改变的变量,通常在 <.vimrc> 文件里设置。 83 | 变量 缺省值 解释 ~ 84 | *g:tar_browseoptions* "Ptf" 用于得到内容列表 85 | *g:tar_readoptions* "OPxf" 用于从 tar 包里提取文件 86 | *g:tar_cmd* "tar" tar 程序名 87 | *g:tar_nomax* 0 如果为真,不最大化文件窗口 88 | *g:tar_secure* 未定义 如果存在: 89 | 使用 "--" 来避免 tar 命令行上不想要的 90 | 选项扩展。 91 | 请确定你用的 tar 命令接受 "--";Posix 92 | 兼容的 tar 工具都接受。 93 | 如果不存在: 94 | tar 插件拒绝接受任何 "-" 开头的 tar 文 95 | 件或成员文件。 96 | 不是所有的 tar 都支持 "--",所以这不是缺省行 97 | 为。 98 | *g:tar_writeoptions* "uf" 用于更新/替换文件 99 | 100 | 101 | ============================================================================== 102 | 4. 历史 (英文) *tar-history* 103 | 104 | v31 Apr 02, 2017 * (klartext) reported that browsing encrypted 105 | files in a zip archive created unencrypted 106 | swap files. I am applying a similar fix 107 | used on zip.vim to tar.vim: new buffers 108 | are opened with |:noswapfile|. 109 | May 16, 2017 * When the mouse option isn't empty, the 110 | leftmouse can be used to select a file 111 | in the tar-file listing. 112 | v30 Apr 22, 2014 * .tgz files are ambiguous: they may have been 113 | compressed with either gzip or bzip2. Tar.vim 114 | disambiguates by using unix's "file" command. 115 | Feb 18, 2016 * Changed =~ to =~# where appropriate 116 | Feb 18, 2017 * Now also permits xz decompression 117 | v28 Jun 23, 2011 * a few more decompression options (tbz tb2 txz) 118 | v27 May 31, 2011 * moved cygwin detection before g:tar_copycmd 119 | handling 120 | * inserted additional |:keepj| modifiers 121 | * changed silent to sil! (|:silent|) 122 | v26 Aug 09, 2010 * uses buffer-local instead of window variables 123 | to hold tarfile name 124 | * inserted keepj before 0d to protect jump list 125 | v25 Jun 19, 2010 * (Jan Steffens) added support for xz 126 | compression 127 | v24 Apr 07, 2009 * :Untarvim command implemented 128 | Sep 28, 2009 * Added lzma support 129 | v22 Aug 08, 2008 * security fixes 130 | v16 Jun 06, 2008 * tarfile:: used instead of tarfile: when 131 | editing files inside tarballs. Fixes a 132 | problem with tarballs called things like 133 | c:\abc.tar. (tnx to Bill McCarthy) 134 | v14 May 09, 2008 * arno caught a security bug 135 | May 28, 2008 * various security improvements. Now requires 136 | patch 299 which provides the fnameescape() 137 | function 138 | May 30, 2008 * allows one to view *.gz and *.bz2 files that 139 | are in *.tar files. 140 | v12 Sep 07, 2007 * &shq now used if not the empty string for 141 | g:tar_shq 142 | v10 May 02, 2006 * now using "redraw then echo" to show messages, 143 | instead of "echo and prompt user" 144 | v9 May 02, 2006 * improved detection of masquerading as tar file 145 | v8 May 02, 2006 * allows editing of files that merely masquerade 146 | as tar files 147 | v7 Mar 22, 2006 * work on making tar plugin work across network 148 | Mar 27, 2006 * g:tar_cmd now available for users to change 149 | the name of the tar program to be used. By 150 | default, of course, it's "tar". 151 | v6 Dec 21, 2005 * writing to files not in directories caused 152 | problems - fixed (pointed out by 153 | Christian Robinson) 154 | v5 Nov 22, 2005 * report option workaround installed 155 | v3 Sep 16, 2005 * handles writing files in an archive back to 156 | the archive 157 | Oct 18, 2005 * used instead of in autocmds 158 | Oct 18, 2005 * handles writing to compressed archives 159 | Nov 03, 2005 * handles writing tarfiles across a network 160 | using netrw#NetWrite() 161 | v2 * converted to use Vim7's new autoload feature 162 | by Bram Moolenaar 163 | v1 (original) * Michael Toren 164 | (see http://michael.toren.net/code/ 链接看来 165 | 已失效) 166 | 167 | ============================================================================== 168 | vim:tw=78:ts=8:noet:ft=help 169 | -------------------------------------------------------------------------------- /doc/pi_tutor.cnx: -------------------------------------------------------------------------------- 1 | *pi_tutor.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年5月 2 | 3 | VIM 互 动 教 程 *vim-tutor-mode* 4 | 5 | vim-tutor-mode 提供一个系统,可以跟着来创建 vim 和第三方插件的交互教程。这取代 6 | 了古老可敬的 `vimtutor` 系统。 7 | 8 | 原始作者: Felipe Morales 9 | 10 | ============================================================================= 11 | 1. 用法 *vim-tutor-usage* 12 | 13 | vim-tutor-mode 教程是超链文档,有富文本并包含链接。要和其余文本有区别,链接使 14 | 用下划线。把光标放在那里按 或双击可访问这些链接。 15 | 16 | 1.1 命令 17 | ------------ 18 | *:Tutor* 19 | :Tutor [tutorial] 打开教程。 [tutorial] 提供命令行补全,候选是 20 | 'runtimepath' 里的 "tutor//" 目录下的 ".tutor" 21 | 文件的列表。先显示 "vim-" 开头的教程。 22 | 23 | 如果没给出 [tutorial],此命令从 "vim-01-beginner" 教程 24 | 开始,这等价于 Vim 的 `vimtutor`,第 1 章。 25 | 26 | 如有可能,使用当前消息语言 (|v:lang|) 翻译过的教程,如 27 | 打开意大利语教程的第一章,可用: > 28 | 29 | :lang it_IT.UTF-8 30 | :Tutor 31 | < 32 | ============================================================================= 33 | 2. 创建教程 *vim-tutor-create* 34 | 35 | 编写 vim-tutor-mode 教程很容易。使用格式的总览可参考 "tutor.tutor" 文件: > 36 | 37 | :Tutor tutor 38 | < 39 | 新教程必须放在 'runtimepath' 里的 'tutor/' 目录下,这样才能被 :Tutor 命令检测 40 | 到。 41 | 42 | 编写教程时,建议使用比正规文档风格随便一点的语言 (除非内容需要)。 43 | 44 | ============================================================================= 45 | vim:tw=78:ts=8:noet:ft=help:norl: 46 | -------------------------------------------------------------------------------- /doc/pi_zip.cnx: -------------------------------------------------------------------------------- 1 | *pi_zip.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年4月 2 | 3 | +====================+ 4 | | Zip 文件接口 | 5 | +====================+ 6 | 译者: Willis 7 | 8 | Author: Charles E. Campbell 9 | (remove NOSPAM from Campbell's email first) 10 | Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright* 11 | The VIM LICENSE (see |copyright|) applies to the files in this 12 | package, including zipPlugin.vim, zip.vim, and pi_zip.vim. except use 13 | "zip.vim" instead of "VIM". Like anything else that's free, zip.vim 14 | and its associated files are provided *as is* and comes with no 15 | warranty of any kind, either expressed or implied. No guarantees of 16 | merchantability. No guarantees of suitability for any purpose. By 17 | using this plugin, you agree that in no event will the copyright 18 | holder be liable for any damages resulting from the use of this 19 | software. Use at your own risk! 20 | 21 | ============================================================================== 22 | 1. 内容 *zip* *zip-contents* 23 | 1. 内容....................................................|zip-contents| 24 | 2. 用法....................................................|zip-usage| 25 | 3. 附加扩展名..............................................|zip-extension| 26 | 4. 历史....................................................|zip-history| 27 | 28 | ============================================================================== 29 | 2. 用法 *zip-usage* *zip-manual* 30 | 31 | 编辑 *.zip 文件时,此插件进行处理,显示内容页面。移动光标到文件上,然后按 32 | 键,就可以选择该文件进行编辑。编辑后,可以写回该文件。目前,不能用 33 | 该插件建立新的 zip 归档文件。 34 | 35 | *zip-x* 36 | x : 光标在列出文件名上时提取此文件 37 | 38 | 选 项 39 | 40 | *g:zip_nomax* 41 | 42 | 如果此变量存在且为真,文件窗口在打开时不会自动最大化。 43 | 44 | *g:zip_shq* 45 | 不同的操作系统可能使用一个或多个外壳来执行命令。Zip 试图猜测正确的引号使用 46 | 机制,使得文件名中可以包含空格和其它;如果猜错了,可用 > 47 | g:zip_shq 48 | < 修正。它在 Unix 上缺省是单引号 ('),而 Windows 上缺省是双引号 (")。如果你希 49 | 望不用引号,简单地在 <.vimrc> 里把 g:zip_shq 置为空串 (let g:zip_shq= "")。 50 | 51 | *g:zip_unzipcmd* 52 | 用此选项指定执行 "unzip" 任务的程序,用于浏览。缺省: > 53 | let g:zip_unzipcmd= "unzip" 54 | < 55 | *g:zip_zipcmd* 56 | 用此选项指定执行 "zip" 任务的程序,用于写入 (更新) 已在 zip 包中的文件;缺 57 | 省: > 58 | let g:zip_zipcmd= "zip" 59 | < 60 | *g:zip_extractcmd* 61 | 用此选项指定程序 (和所需的选项),用于从 zip 归档文件提取文件。缺省 > 62 | let g:zip_extractcmd= g:zip_unzipcmd 63 | < 64 | *g:zip_exec* 65 | 因为安全原因,你可能不想 Vim 在打开缓冲区时自动执行外部程序。此选项 (缺省: "1") 66 | 设为 "0" 时可防止 "unzip" 命令的执行: > 67 | :let g:zip_exec = 0 68 | < 69 | 禁 止 载 入~ 70 | 71 | 如果由于某种原因你不想 vim 检查 zip 文件,在 <.vimrc> 中定义两个变量就可以 72 | 不载入 zip 插件: > 73 | 74 | let g:loaded_zipPlugin= 1 75 | let g:loaded_zip = 1 76 | < 77 | 78 | ============================================================================== 79 | 3. 附加扩展名 *zip-extension* 80 | 81 | 看来有不少归档程序生成 zip 文件但不使用 .zip 扩展名 (.jar、.xpi 等)。要处理 82 | 这些文件,在 <.vimrc> 文件中放上: > 83 | 84 | au BufReadCmd *.jar,*.xpi call zip#Browse(expand("")) 85 | < 86 | 你可以自由扩展该行以包含更多应被当作 zip 文件的扩展名。 87 | 88 | 此外,也可以在 .vimrc 里改变 *g:zipPlugin_ext* 。 89 | 当前 (2025 年 4 月) 包含了: > 90 | 91 | let g:zipPlugin_ext='*.aar,*.apk,*.celzip,*.crtx,*.docm,*.docx, 92 | \ *.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz, 93 | \ *.odb,*.odc,*.odf,*.odg,*.odi,*.odm,*.odp,*.ods,*.odt,*.otc,*.otf, 94 | \ *.otg,*.oth,*.oti,*.otp,*.ots,*.ott,*.oxt,*.potm,*.potx,*.ppam, 95 | \ *.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.whl,*.wsz, 96 | \ *.xap,*.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip' 97 | 98 | ============================================================================== 99 | 4. 历史 (英文) *zip-history* {{{1 100 | v33 Dec 07, 2021 * *.xlam mentioned twice in zipPlugin 101 | v32 Oct 22, 2021 * to avoid an issue with a vim 8.2 patch, zipfile: has 102 | been changed to zipfile:// . This often shows up 103 | as zipfile:/// with zipped files that are root-based. 104 | v29 Apr 02, 2017 * (Klartext) reported that an encrypted zip file could 105 | opened but the swapfile held unencrypted contents. 106 | The solution is to edit the contents of a zip file 107 | using the |:noswapfile| modifier. 108 | v28 Oct 08, 2014 * changed the sanity checks for executables to reflect 109 | the command actually to be attempted in zip#Read() 110 | and zip#Write() 111 | * added the extraction of a file capability 112 | Nov 30, 2015 * added *.epub to the |g:zipPlugin_ext| list 113 | Sep 13, 2016 * added *.apk to the |g:zipPlugin_ext| list and 114 | sorted the suffices. 115 | v27 Jul 02, 2013 * sanity check: zipfile must have "PK" as its first 116 | two bytes. 117 | * modified to allow zipfile: entries in quickfix lists 118 | v26 Nov 15, 2012 * (Jason Spiro) provided a lot of new extensions that 119 | are synonyms for .zip 120 | v25 Jun 27, 2011 * using keepj with unzip -Z 121 | (consistent with the -p variant) 122 | * (Ben Staniford) now uses 123 | has("win32unix") && executable("cygpath") 124 | before converting to cygwin-style paths 125 | v24 Jun 21, 2010 * (Cédric Bosdonnat) unzip seems to need its filenames 126 | fnameescape'd as well as shellquote'd 127 | * (Motoya Kurotsu) inserted keepj before 0d to protect 128 | jump list 129 | v17 May 09, 2008 * arno caught a security bug 130 | v15 Sep 07, 2007 * &shq now used if not the empty string for g:zip_shq 131 | v14 May 07, 2007 * using b:zipfile instead of w:zipfile to avoid problem 132 | when editing alternate file to bring up a zipfile 133 | v10 May 02, 2006 * now using "redraw then echo" to show messages, instead 134 | of "echo and prompt user" 135 | * g:zip_shq provided to allow for quoting control for the 136 | command being passed via :r! ... commands. 137 | v8 Apr 10, 2006 * Bram Moolenaar reported that he received an error message 138 | due to "Pattern not found: ^.*\%0c"; this was caused by 139 | stridx finding a Name... at the beginning of the line; 140 | zip.vim tried 4,$s/^.*\%0c//, but that doesn't work. 141 | Fixed. 142 | v7 Mar 22, 2006 * escaped some characters that can cause filename handling 143 | problems. 144 | v6 Dec 21, 2005 * writing to files not in directories caused problems - 145 | fixed (pointed out by Christian Robinson) 146 | v5 Nov 22, 2005 * report option workaround installed 147 | v3 Oct 18, 2005 * used instead of in autocmds 148 | v2 Sep 16, 2005 * silenced some commands (avoiding hit-enter prompt) 149 | * began testing under Windows; works thus far 150 | * filetype detection fixed 151 | Nov 03, 2005 * handles writing zipfiles across a network using 152 | netrw#NetWrite() 153 | v1 Sep 15, 2005 * Initial release, had browsing, reading, and writing 154 | 155 | ============================================================================== 156 | vim:tw=78:ts=8:ft=help:noet:norl:fdm=marker 157 | -------------------------------------------------------------------------------- /doc/recover.cnx: -------------------------------------------------------------------------------- 1 | *recover.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年3月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: iCrazy、tocer 6 | 7 | 8 | 从崩溃中恢复 *crash-recovery* 9 | 10 | 您经历过这样的事情么?您录入一个文档,录入了很长时间,眼看就要完成的时候,灾难 11 | 来了: 您的电脑崩溃了! 12 | 13 | 别 担 心 ! 14 | 15 | 您可以从 Vim 提供的文件里恢复大部分的改动,Vim 用这些文件保存文件的内容。一般 16 | 情况下,用单个命令就可以恢复您的文档: 17 | vim -r filename 18 | 19 | 1. 交换文件 |swap-file| 20 | 2. 恢复 |recovery| 21 | 22 | ============================================================================== 23 | 1. 交换文件 *swap-file* 24 | 25 | Vim 把您对文件的改动保存在一个交换文件中。多数情况下,用修改前的原文件加上 Vim 26 | 的交换文件,您就可以恢复对文档所做的改动了。 27 | 28 | 您可以用以下的命令看到当前正在使用的交换文件的文件名: 29 | 30 | :sw[apname] *:sw* *:swapname* 31 | 32 | 也可使用 |swapname()| 函数,也可以看到其它缓冲区的交换文件名。 33 | 34 | 正常情况下,交换文件的文件名和您正在编辑的文件相同,只是扩展名换成了 ".swp"。 35 | - 在 Unix 系统上,交换文件名以 '.' 开始,这样它们就不会在列目录文件时被显示出 36 | 来。 37 | - 在 MS-Windows 系统上,如果 'shortname' 选项是打开的,原文件名中的 '.' 会被 38 | '_' 替代。 39 | - 如果同名交换文件已经存在 (例如: 当您从一个崩溃中恢复时),Vim 会显示一个警告 40 | 信息,并且会使用另外一个诸如 ".swo",".swn" ……这样的文件扩展名。 41 | - 现存的文件永远不会因此被 Vim 所覆盖。 42 | - 当 Vim 停止编辑文件的时候,交换文件会被立即删除。 43 | 44 | 技术上: 用 '_' 替代 '.' 是为了避免在与 MS-DOS 兼容的文件系统中 (crossdos、 45 | multidos 等) 出现问题。如果 Vim 检测到您所编辑的文件存放在一个与 46 | MS-DOS 兼容的文件系统上,Vim 会建立一个标志位,实现和 'shortname' 选项 47 | 相同的功能。当您开始编辑其他文件时,这个标志位会被重置。 48 | *E326* 49 | 如果扩展名是 ".swp" 的文件已经存在,逐次递减最后的字母,直到找到没有现 50 | 存文件的名字为止。如果过了 ".saa" 还找不到,不建立交换文件。 51 | 52 | 通过设置 'directory' 这个选项,您可以把交换文件放到其他目录中去,而不是默认地 53 | 和您所编辑的文件放在同一目录中。 54 | 优点: 55 | - 您不会因为 ".swp" 文件的存在弄乱您的目录。 56 | - 当您把选项 'directory' 的值设置到另一个分区的时候,可以减少 (在一次系统崩溃 57 | 中) 文件所在分区文件系统毁坏的危险。 58 | 缺点: 59 | - 如果您在不同目录下面编辑同名文件,您会碰到文件重名问题 (尽管 Vim 会比较文件 60 | 路径而尽力避免此问题的发生)。这会导致 Vim 给出虚假的 ATTENTION 警告信息。 61 | - 如果您使用您的宿主 (home) 目录,而别人试图编辑同一个文件的时候,该用户不能访 62 | 问您的交换文件,也就不会出现 ATTENTION 警告信息。 63 | 在 Amiga 系统上,您还可以使用一种可以恢复数据的 ram disk,但是不能保证它可以 64 | 100% 工作正常。把交换文件放在普通的 ram disk (就像 Amiga 系统中的内存那样) 或 65 | 者放在重启后所有内容都会被清除的地方 (就像 Unix 上的 /tmp 目录) 是没有意义的, 66 | 在一次计算机崩溃中您会丢失所有的交换文件。 67 | 68 | 如果您希望把交换文件放在一个固定的地方,把类似于下面这些的命令写到您的 .vimrc 69 | 文件中去: 70 | :set dir=dh2:tmp (针对 Amiga) 71 | :set dir=~/tmp (针对 Unix) 72 | :set dir=c:\\tmp (针对 Win32) 73 | 这对于编辑软盘上的文件是十分便利的。当然您必须先自己建立这个 "tmp" 目录。 74 | 75 | 对于那些只读的文件,Vim 不会产生交换文件,除非文件特别大,使得内存使用超出了 76 | 'maxmem' 或 'maxmemtot' 的设置值。当然,如果对只读的文件进行了修改,交换文件文 77 | 件还是会被自动建立。 78 | 79 | 可以复位 'swapfile' 这个选项的值以避免产生交换文件。:noswapfile 修饰符可用来 80 | 使新缓冲区不建立交换文件。 81 | 82 | :nos[wapfile] {command} *:nos* *:noswapfile* 83 | 执行 {command}。如果包含载入新缓冲区的命令,缓冲区载入时不建立 84 | 交换文件,并复位 'swapfile' 选项。如果缓冲区已经有了交换文件则 85 | 不删除之,也不复位 'swapfile'。 86 | 87 | 88 | 检测已经存在的交换文件 ~ 89 | 90 | 您可以在用户手册中找到这些信息,参阅章节 |11.3|。 91 | 92 | 93 | 更新交换文件 ~ 94 | 95 | 在您录入 200 个字符后或者 4 秒内没有录入任何字符时,交换文件会被更新。只有在缓 96 | 冲区被修改的情况下,才会有这样的更新,仅仅移动光标是不会更新交换文件的。为什么 97 | 不进行实时的更新?原因在于这样频繁的更新会极大的拖慢其他正常工作的速度。您可以 98 | 在 'updatecount' 选项中修改 200 个字符的设置,还可以在 'updatetime' 选项中修改 99 | 4 秒的设置 (时间以毫秒为单位给出)。Vim 更新交换文件后,会把文件同步到磁盘上 100 | 去。这会消耗一定的时间,在忙碌的 Unix 系统上尤其如此。如果不希望这样,您可以把 101 | 'swapsync' 选项置成空串。不过,这样会使文件丢失的几率增大。在一些非 Unix 系统 102 | (MS-Windows、Amiga) 上,交换文件根本不会被写到磁盘上。 103 | 104 | 如果不希望把修改写到交换文件中,可以通过把 'updatecount' 选项设成 0 来避免这一 105 | 点,用 "-n" 选项启动 Vim 时也可以达到相同的效果。而把 'updatecount' 选项设成非 106 | 0 值可以恢复对交换文件的写入。这种情况下,所有缓冲区的交换文件都会被建立。但是 107 | 当把 'updatecount' 选项设成 0 时,已经存在的交换文件不会被删除,只有设置之后打 108 | 开的文件才受到影响。 109 | 110 | 如果您想确定您对文件所作的修改已经被写到交换文件中了,使用这个命令: 111 | 112 | *:pre* *:preserve* *E313* *E314* 113 | :pre[serve] 把当前缓冲区中的所有文本写入交换文件。这样在文件恢 114 | 复时就不再需要原文件了。本命令设置了当前缓冲区的一个标 115 | 志位。如果 'cpoptions' 里有 '&' 标志位而且 Vim 退出时 116 | 如果此缓冲区还处于载入状态,不删除此缓冲区的交换文件 117 | |cpo-&|。 118 | 119 | Vim 会通过文件开始的 6 个字符 "b0VIM " 来识别它的交换文件。Vim 的版本号 (如: 120 | 3.0) 会紧跟在那些字符之后。 121 | 122 | 123 | 链接和符号链接 ~ 124 | 125 | Unix 上同一文件可以有两个名字。这可以通过硬链接和符号链接 (symlink) 完成。 126 | 127 | 对于硬链接,Vim 不知道文件另外的名字。所以,交换文件名基于你用来编辑的文件名。 128 | 也不会检查是否编辑了使用别的名字的相同文件,因为 Vim 无法找到另外那个交换文件 129 | (除非在你整个硬盘上搜索,这太慢了)。 130 | 131 | 对于符号链接,Vim 解析链接以找到实际文件的名字。交换文件名基于那个实际的名字。 132 | 所以不管你用哪个名字编辑,交换文件名通常总是相同的。但有若干例外: 133 | - 如果实际文件所在的目录不可写,交换文件会放在别处。 134 | - 如果符号链接因为某些原因形成了循环,你会得到 *E773* 错误消息,而使用未经修改 135 | 的文件名。你不能在以后正常地保存文件。 136 | 137 | ============================================================================== 138 | 2. 恢复 *recovery* *E308* *E311* 139 | 140 | 基本的文件恢复已经在用户手册中解释了: |usr_11.txt|。 141 | 142 | 另一种恢复方式是在启动 Vim 后使用 ":recover" 命令。当您用 Vim 编辑一个文件并且 143 | 得到一个 "注意: 已找到一个交换文件 ..." 这样的提示时,这样比较方便。这种情况 144 | 下,一个简单的 ":recover" 命令就可以完成所有的工作。您也可以在使用 ":recover" 145 | 命令时指定文件名或者交换文件名: 146 | *:rec* *:recover* *E305* *E306* *E307* 147 | :rec[over] [file] 试图从交换文件中恢复 [file]。如果没有指定 [file],使用 148 | 当前缓冲区的文件名。当前缓冲区中的内容会丢失。如果缓冲 149 | 区已经被修改,此命令失效。 150 | 151 | :rec[over]! [file] 类似于 ":recover",但当前缓冲区中的任何改变都会丢失。 152 | 153 | *E312* *E309* *E310* *E1364* 154 | 在交换文件被损坏时,Vim 仿佛有些智能,知道接下来该怎么做。如果 Vim 对于找到的 155 | 文件有所怀疑,它会给出一个出错信息,并且在文本中插入含有 "???" 的行。如果您在 156 | 恢复的时候看到了出错信息,请在文件中查找 "???" 并确定到底哪里出了问题。或许您 157 | 仍然可以通过剪切和粘贴来取回可用的信息。 158 | 159 | 最常见的信息是 "???LINES MISSING"。这表示 Vim 无法从原文件中读取文本。通常在系 160 | 统崩溃而导致部分原文件无法及时写入磁盘时会出现这样的情况。 161 | 162 | 在覆盖原文件并删除交换文件之前,请务必确定您所作的恢复是成功的。先把恢复出来的 163 | 文件存到别的地方,然后运行 'diff' 来确定是否已经所需要的改动,是个好习惯。也可 164 | 使用 |:DiffOrig|。 165 | 166 | 当您确定恢复成功后,请删除交换文件。否则,您会继续得到 ".swp" 文件已经存在的警 167 | 告信息。 168 | 169 | 170 | 171 | 加 密 和 交 换 文 件 *:recover-crypt* 172 | 173 | 如果文本文件经过加密,交换文件也同样要加密。这使得恢复稍微复杂一些。从交换文件 174 | 恢复而又用到加密时,你需要输入一到两次加密密钥。 175 | 176 | 如果文本文件不再存在,只需要输入加密密钥一次来解密交换文件。 177 | 178 | 如果文本文件存在,其加密方式可能与交换文件不同。你需要输入加密密钥两次: 179 | 180 | Need encryption key for "/tmp/tt" ~ 181 | Enter encryption key: ****** ~ 182 | "/tmp/tt" [crypted] 23200L, 522129C ~ 183 | Using swap file "/tmp/.tt.swp" ~ 184 | Original file "/tmp/tt" ~ 185 | Swap file is encrypted: "/tmp/.tt.swp" ~ 186 | If you entered a new crypt key but did not write the text file, ~ 187 | enter the new crypt key. ~ 188 | If you wrote the text file after changing the crypt key press enter ~ 189 | to use the same key for text file and swap file ~ 190 | Enter encryption key: ~ 191 | 192 | 有两种可能的情况: 193 | 194 | 1. 加密密钥没有改变,或者在改变后才写入文本文件。你需要输入加密密钥两次。第二 195 | 次,按回车即可。这样就会应用相同的密钥来解密文本文件和交换文件。 196 | 2. 输入了新加密密钥,但之后没有保存文本文件。Vim 会使用新密钥来加密交换文件, 197 | 但文本文件仍然会使用旧密钥来加密。第二次提示时要输入新密钥。 198 | 199 | 注意 恢复后,交换文件的密钥会用于文本文件。写入文本文件时,需要使用新密钥。 200 | 201 | 202 | vim:tw=78:ts=8:noet:ft=help:norl: 203 | -------------------------------------------------------------------------------- /doc/remote.cnx: -------------------------------------------------------------------------------- 1 | *remote.txt* 适用于 Vim 9.1 版本。 最近更新: 2022年7月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: Willis、tocer 6 | 7 | 8 | Vim 客户-服务器 通信 *client-server* 9 | 10 | 1. 通用功能 |clientserver| 11 | 2. X11 专用条目 |x11-clientserver| 12 | 3. MS-Windows 专用条目 |w32-clientserver| 13 | 14 | ============================================================================== 15 | 1. 通用功能 *clientserver* 16 | 17 | 如果编译时加入 |+clientserver| 特性,Vim 可以作为命令服务器,接受客户的消息并 18 | 执行。同时,Vim 也可以作为客户端,发送消息给 Vim 服务器。 19 | 20 | 可以使用以下的命令行参数: 21 | 22 | 参数 意义 ~ 23 | 24 | --remote [+{cmd}] {file} ... *--remote* 25 | 在远端打开文件列表。如果没有 Vim 服务器,就在 26 | 本地执行。 27 | 有一个可选的初始命令: #{cmd},它必须是后面可以 28 | 跟 "|" 的 Ex 命令。 29 | 命令行的其余部分将作为文件列表。所以,非文件 30 | 的参数一定要在此之前出现。 31 | 你不能用这个方法编辑标准输入 |--|。 32 | 远端的 Vim 将被推向前台。如果不想如此,用 > 33 | vim --remote-send ":n filename" 34 | < 35 | --remote-silent [+{cmd}] {file} ... *--remote-silent* 36 | 同上,但如果服务器没打开而需要本地编辑,不产生 37 | 警告。 38 | --remote-wait [+{cmd}] {file} ... *--remote-wait* 39 | 同 --remote,但直到所有的文件在远端被完成 (卸 40 | 载) 为止才返回。 41 | --remote-wait-silent [+{cmd}] {file} ... *--remote-wait-silent* 42 | 同 --remote-wait,但如果服务器没打开,不产生警 43 | 告。 44 | *--remote-tab* 45 | --remote-tab 同 --remote 但用新标签页打开每个文件。 46 | *--remote-tab-silent* 47 | --remote-tab-silent 同 --remote-silent 但用新标签页打开每个文件。 48 | *--remote-tab-wait* 49 | --remote-tab-wait 同 --remote-wait 但用新标签页打开每个文件。 50 | 51 | *--remote-tab-wait-silent* 52 | --remote-tab-wait-silent 同 --remote-wait-silent 但用新标签页打开每个文 53 | 件。 54 | *--servername* 55 | --servername {name} 成为用 {name} 作为名字的服务器。如果同时也用了 56 | 某个 --remote 命令,连接到服务器 {name},而不 57 | 使用缺省的名字。(见下)。用大写形式的名字。 58 | *--remote-send* 59 | --remote-send {keys} 发送键序列 {keys} 到服务器,然后退出。{keys} 60 | 不通过映射。能识别特殊的键名,如 "" 会生成 61 | CR 字符。 62 | *--remote-expr* 63 | --remote-expr {expr} 在服务器上执行 {expr}。然后在标准输出上打出结 64 | 果。 65 | *--serverlist* 66 | --serverlist 输出可用的服务器名字的列表。 67 | 68 | 69 | 示例 ~ 70 | 71 | 在一个已经运行的 GVIM 服务器上编辑 "file.txt"。 > 72 | gvim --remote file.txt 73 | 74 | 在一个已经运行的名为 FOOBAR 的服务器上编辑 "file.txt"。 > 75 | gvim --servername FOOBAR --remote file.txt 76 | 77 | 在名为 "FILES" 的服务器上编辑 "file.txt",如果不存在这个服务器,自己成为服务器 78 | "FILES"。 > 79 | gvim --servername FILES --remote-silent file.txt 80 | 81 | 下面的例子不能工作。--remote 之后所有的参数都被视作文件名: > 82 | gvim --remote --servername FOOBAR file.txt 83 | 84 | 在远端服务器上编辑文件 "+foo" (注意 "./" 的使用避免了打头的加号的特别含义)。 > 85 | vim --remote ./+foo 86 | 87 | 告诉远端服务器 "BLA" 写入所有文件,并且退出。 > 88 | vim --servername BLA --remote-send ':wqa' 89 | 90 | 91 | 服 务 器 名 *client-server-name* 92 | 93 | 缺省地,Vim 试图用启动时的名字注册服务器名 (gvim、egvim ...),你可以用 94 | --servername 参数覆盖之。如果不能用指定的名字,尝试附加一个后缀,直到找到一个 95 | 空闲的名字为止。比如,在同一个 X 服务器上,第二次启动 gvim 的服务器名会是 96 | "gvim1"。可以通过 |v:servername| 得到最终的服务器名。这里忽略大小写的区别,所 97 | 以 "gvim" 和 "GVIM" 重复。 98 | 99 | 当 Vim 启动时带有 --remote、--remote-wait 或者 --remote-send 参数时,会根据上 100 | 述的方法由启动名和指定的 --servername 参数决定要访问的服务器名。如果准确的匹 101 | 配找不到,寻找第一个可以带数字后缀的服务器。不过,如果 --servername 给出的名字 102 | 已经带有数字后缀,必须准确匹配。 103 | 104 | 如果使用 --remote 和 --remote-wait 但没有可用的服务器,Vim 会根据剩余的参数启 105 | 动,自己编辑这些文件。这样,发送命令给 gvim 的时候,就不需要关心它是否已经启 106 | 动。 107 | 108 | --serverlist 参数让 Vim 在标准输出 (stdout) 上打出所有已经注册的命令服务器,然 109 | 后退出。 110 | *{server}* 111 | 若干函数使用 {server} 参数。如为空串,Unix 上会使用缺省服务器名,即 "GVIM"。 112 | MS-Windows 上空串不能工作。 113 | 114 | Win32 注意事项: 不一定总能把 Vim 服务器切换到在前台,因为 MS-Windows 不允许这 115 | 么做。客户通过 --remote 和 --remote-wait 参数调用而服务器名以 "g" 开始的时候, 116 | 服务器将被推向前台。 117 | 118 | 119 | 远 程 编 辑 120 | 121 | 用上面的结果,--remote 参数随后基于其后的参数构造一个 |:drop| 命令并发送之。 122 | --remote-wait 也会这么做,但同时等待所有文件编辑任务的完成。这是通过 BufUnload 123 | 事件完成的。文件卸载时,Vim 假设你完成了它的编辑任务。 124 | 注意: --remote 和 --remote-list 参数会吃掉命令行余下的部分。也就是说,余下的参 125 | 数都被认为是文件名,不要把参数放在那里! 126 | 127 | 函 数 128 | *E240* *E573* 129 | 若干 Vim 的函数可以用来书写命令服务器的脚本。参见 |builtin.txt| 的描述,也可以 130 | 在下面的函数名字上按 CTRL-] 以得到它们完整的描述。 131 | 132 | 摘要 解释 ~ 133 | remote_startserver( name) 运行服务器 134 | remote_expr( server, string, idvar) 发送表达式 135 | remote_send( server, string, idvar) 发送键序列 136 | serverlist() 得到可用服务器的列表 137 | remote_peek( serverid, retvar) 检查返回的字符串 138 | remote_read( serverid) 读取返回的字符串 139 | server2client( serverid, string) 发送返回字符串 140 | remote_foreground( server) 把服务器推向前台 141 | 142 | 也可参考 |CTRL-\_CTRL-N|,它可用来引导键序列。 143 | server2client() 的 {serverid} 可以通过 expand("") 得到。 144 | 145 | ============================================================================== 146 | 2. X11 专用条目 *x11-clientserver* 147 | *E247* *E248* *E251* *E258* *E277* 148 | 149 | 客户和服务器的通信是通过 X 服务器进行的。必须指明 Vim 服务器所处的 DISPLAY 位 150 | 置。通常的 X 服务器的保护措施这里也适用,你必须有权限在 X 服务器上打开一个窗 151 | 口,这样不同系统间的通信才有可能。 152 | 153 | 缺省地,GUI 的 Vim 会在 X 服务器上注册一个名字,使得后续的执行能通过这个名字寻 154 | 址并向它发送字符串。Vim 也可以作为一个客户端,给同一个 X11 显示上的其它 Vim 实 155 | 例发送字符串。 156 | 157 | X11 GUI 的 Vim (gvim) 启动时,会试图在根窗口的 'VimRegistry' 属性上注册发送服 158 | 务器的名字。 159 | 160 | 非 GUI 但可以访问到 X11 显示的 Vim (打开了 |xterm-clipboard|) 也可以作为命令服 161 | 务器,只要服务器名通过 --servername 参数明确给出,或者 Vim 编译时带 162 | |+autoservername| 特性就行了。 163 | 164 | 空的 --servername 参数关闭命令服务器。 165 | 166 | 要从别的应用程序向 Vim 服务器发送命令,可以阅读源代码 src/if_xcmdsrv.c。那里包 167 | 含了 Vim 使用的协议的一些情况。 168 | 169 | ============================================================================== 170 | 3. Win32 专用条目 *w32-clientserver* 171 | 172 | 每个 Win32 的 Vim 都可以作为服务器,包括控制台版本。你不需要编译时带 OLE 的版 173 | 本。我们使用 Windows 消息,它适用于任何版本的 MS-Windows。不过,它只允许在同一 174 | 个机器上进行通信。 175 | 176 | 因为我们使用 MS-Windows 的消息,别的应用程序也可以和 Vim 服务器通信。一个替代 177 | 方案是用 OLE 功能 |ole-interface|。 178 | 179 | 如果用 gvim,--remote-wait 正确的使用方法只能是: > 180 | 181 | start /w gvim --remote-wait file.txt 182 | < 183 | vim:tw=78:sw=4:ts=8:noet:ft=help:norl: 184 | -------------------------------------------------------------------------------- /doc/rileft.cnx: -------------------------------------------------------------------------------- 1 | *rileft.txt* 适用于 Vim 9.1 版本。 最近更新: 2023年2月 2 | 3 | 4 | VIM 参考手册 by Avner Lottem 5 | 更新: Nadim Shaikli 6 | 译者: Willis 7 | 8 | 9 | Vim 的从右到左显示模式 *rileft* 10 | 11 | 12 | 这些功能是由 Avner Lottem 最早创建的: 13 | E-mail: alottem@iil.intel.com 14 | Phone: +972-4-8307322 15 | 16 | *E26* 17 | {仅当编译时加入 |+rightleft| 特性才可用} 18 | 19 | 20 | 简介 21 | ------------ 22 | 有些语言,例如阿拉伯语、波斯语、希伯来语 (还有其他),要求从右到左显示他们的文 23 | 字的能力。这些语言的文件以常规的方式储存,从右到左只是一个对显示功能的要求 (根 24 | 据 Unicode 规格的定义): 设定为从右到左的文件里字符在屏幕的显示应是从右到左。 25 | 26 | 双向显示 (英语缩写是 bidi) 是 Unicode 提供的对这些语言的一个完整解决方案。bidi 27 | 提供用户在同一个窗口同时显示从右到左和从左到右文本的能力。目前,为了简单起见, 28 | Vim 并没有提供 bidi,而只是提供一个方法来显示/输入/使用从右到左的语言。一个较 29 | 旧的混合解决方案是为每个字符 (或一组字符) 编码一个不同的方向。我们不支持这个方 30 | 案,因为这样的支持对于一个已有的编辑器来说不是简单的增加功能而已 (而且 Unicode 31 | 也不认可这种方案)。 32 | 33 | 因为许多编写代码的人不使用从右到左模式,此功能有些情况未必能工作很好。如果你能 34 | 说明一下出了什么问题还有正确的行为应该如何工作,请在 github 里创建议题,见 35 | |bug-reports|。 36 | 37 | 38 | 特色 39 | ---------- 40 | o 就像原有的 Vim 一样,编辑从左到右的文件。 41 | 42 | o 在从右到左的窗口里察看和编辑文件。文件朝向是窗口的设置,所以可以在从左到右 43 | 和从右到左两种模式下同时察看同一个文件。(这有助于编辑混合两种文字的文件)。 44 | 45 | o 和原有的 Vim 兼容。几乎所有的功能都支持从右到左的模式 (参看下面的漏洞)。 46 | 47 | o 从反向的插入模式退回到文件里正确的位置 (如果可能的话)。 48 | 49 | o 不需要终端对从右到左能力的特别支持。这项改动完全独立于硬件。 50 | 51 | o 许多语言使用和需要从右到左的支持。这些语言可以相当容易地通过加入他们需要的 52 | 键盘映射和少量的代码改进得到支持。其中已经支持的语言包括 - |arabic.txt|、 53 | |farsi.txt| 和 |hebrew.txt|。 54 | 55 | 56 | 如果你有兴趣 ... 57 | -------------- 58 | 59 | o 启动 60 | ----------- 61 | + 'rightleft' ('rl') 把窗口朝向设为从右到左。 62 | + 'delcombine' ('deco'),布尔值,如果编辑 UTF-8 编码的语言,我们可以单独删 63 | 除组合字符,它被附加 (superimpose) 于在它之前的字符之上 (一些语言要求如 64 | 此)。 65 | + 'rightleftcmd' ('rlc') 在某些模式 (比如: 搜索) 下,把命令行也设成从右到左 66 | 的朝向。 67 | 68 | o 反向输入 *ins-reverse* 69 | ---------------- 70 | 为便于最大限度地利用 'rightleft' 选项,我们可以允许反向插入。如果 'revins' 71 | (反向输入) 选项被打开,插入是反向的。这可以用来输入从右到左的文字。这时,输 72 | 入文字时,光标不动,文本向右移动。 删除光标下的字符,CTRL-W 和 CTRL-U 73 | 工作的方向也经过反转。无论 'backspace' 选项如何设置,、CTRL-W 和 CTRL-U 74 | 并不会在插入点开始处和行尾停住。 75 | 76 | 现在 (还) 没有反向替换模式。 77 | 78 | 如果设置了 "showmode" 选项,反向插入模式激活时,状态行会显示 79 | "-- REVERSE INSERT --"。 80 | 81 | o 在从右到左的窗口粘贴 82 | ---------------------------------- 83 | 如果用鼠标剪切文本,然后在从右到左的窗口中粘贴,文本会被反向,这时因为从剪 84 | 切缓冲区里得到的字符是从左到右的,而文件中的插入操作是从右到左的。要避免这 85 | 个问题,在粘贴前切换 'revins' 选项。 86 | 87 | 88 | 漏洞 89 | ---- 90 | o 在从右到左的窗口里不能正确处理 CTRL-A 和 CTRL-X 命令 (加和减)。 91 | 92 | o 在命令行中不支持反向插入和从右到左的模式。不过,编辑器功能并未减少,因为可 93 | 以在命令行上从左到右地输入键盘映射、缩写和搜索命令。 94 | 95 | o 从右到左的模式较慢,因为从右到左是 Vim 自己模拟而不是控制终端处理的。 96 | 97 | o 如果 'rightleft' 和 'revins' 都打开,'textwidth' 不能工作。行不会自动回绕。 98 | 你只会得到一个很长的行。 99 | 100 | o 没有完整的双向显示 (bidi) 支持。 101 | 102 | 103 | vim:tw=78:ts=8:noet:ft=help:norl: 104 | -------------------------------------------------------------------------------- /doc/russian.cnx: -------------------------------------------------------------------------------- 1 | *russian.txt* 适用于 Vim 9.1 版本。 最近更新: 2006年7月 2 | 3 | 4 | VIM 参考手册 by Vassily Ragosin 5 | 译者: Willis 6 | 7 | 8 | Vim 中的俄罗斯语的本地化和支持 *russian* *Russian* 9 | 10 | 1. 简介 |russian-intro| 11 | 2. 俄语键盘映射 |russian-keymap| 12 | 3. 本地化 |russian-l18n| 13 | 4. 已知漏洞 |russian-issues| 14 | 15 | =============================================================================== 16 | 1. 简介 *russian-intro* 17 | 18 | Vim 的俄罗斯语支持已经相当完善。你可以像其他语言一样输入和查看俄语文字,无须特 19 | 别改变设置。 20 | 21 | =============================================================================== 22 | 2. 俄语键盘映射 *russian-keymap* 23 | 24 | 要切换语言,你可以使用系统自带的键盘切换工具。你也可以使用 Vim 发布中的某一个 25 | 俄语的键盘映射。例如, 26 | > 27 | :set keymap=russian-jcukenwin 28 | < 29 | 如果是后者,即使你没有系统俄语键盘或者一个独立的系统范围内的键盘设置,你还是可 30 | 以在语言间切换,参看 'keymap'。你也可以专门映射一个键来进行键盘切换。如果你选 31 | 择这么做,参看 |:map|。 32 | 33 | 为了你的方便起见,为了避免直接键盘切换,当你需要键入普通模式的命令时,你可以使 34 | 用 'langmap' 选项: 35 | > 36 | :set langmap=ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ, 37 | фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz 38 | 39 | 这是 utf-8 编码的,如果你的 'encoding' 不是,你无法正常阅读。你也必须在一行内 40 | 输入整个命令,上面的文字换了行,但只是为了方便阅读起见。 41 | 42 | =============================================================================== 43 | 3. 本地化 *russian-l18n* 44 | 45 | 如果你希望把消息,帮助文件,菜单,和其他项目翻译成俄语,你需要安装 RuVim 语言 46 | 包。多种代码页的该软件可以从这里得到: 47 | 48 | http://www.sourceforge.net/projects/ruvim/ 49 | 50 | 请你确定你的 Vim 至少是 6.2.506 或以上的版本,并且如果要自动安装,请使用 ruvim 51 | 0.5 或以上的版本。Vim 必须在编译时加入 |+gettext| 特性,才能使用户界面的项目被 52 | 翻译。 53 | 54 | 下载了 RuVim 项目的软件包以后,把它解压到 $VIMRUNTIME 目录。我们建议使用 UTF-8 55 | 包。 56 | 57 | 要看到俄语的文档,请将 'helplang' 选项设为 "ru"。 58 | 59 | =============================================================================== 60 | 4. 已知漏洞 *russian-issues* 61 | 62 | -- 如果你在 Win32 控制台使用俄语的消息翻译,那你也许会看 "vim --help"、 63 | "vim --version" 命令和 Win32 控制窗口的标题使用了错误的代码页。这是由 GNU 64 | gettext 库的一个问题造成的,将来的 gettext 的发布也许能解决这个问题。 65 | 66 | =============================================================================== 67 | vim:tw=78:ts=8:noet:ft=help:norl: 68 | -------------------------------------------------------------------------------- /doc/sponsor.cnx: -------------------------------------------------------------------------------- 1 | *sponsor.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年3月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: Dasn、tocer 6 | 7 | 8 | 9 | 赞 助 VIM 的 开 发 *sponsor* 10 | 11 | 修正程序中的漏洞和给程序增加新的功能需要付出很多时间和辛劳。为了表明你对这份努 12 | 力的感谢,而且激励开发人员继续开发 Vim,请您考虑资助一下。 13 | 14 | 捐款将主要用于帮助乌干达的儿童。参见 |uganda|。但捐款也将激励开发团队继续开发 15 | Vim! 16 | 17 | 有关赞助的最新消息请访问 Vim 网站: 18 | 19 | http://www.vim.org/sponsor/ 20 | 21 | 更多的说明可以在 |sponsor-faq| 里找到。 22 | 23 | 24 | VIM 的 注 册 用 户 *register* 25 | 26 | 您可以通过资助至少 10 欧元的方式成为 Vim 的注册用户。这与赞助 Vim 类似,参见上 27 | 面的 |sponsor|。增加注册这种方式主要是考虑到您的老板或会计可能更愿意去注册一个 28 | 软件,而不喜欢 "赞助" 和 "捐赠" 的方式。 29 | 30 | 更多的说明可以在 |register-faq| 里找到。 31 | 32 | 33 | 投 票 选 出 您 希 望 实 现 的 "功 能" *vote-for-features* 34 | 35 | 备注: 自从 |Bram| 2023 年过世后,功能投票已经停办。下面的链接仍然可用,但不再 36 | 更新。所以现在那里只是提供 2023 年夏天的历史剪影。 37 | 38 | 投票的结果出现在以下页面,这是大家都能读到的: 39 | http://www.vim.org/sponsor/vote_results.php 40 | 41 | 另外,一旦您资助的总额超过了 100 欧元,您的名字就会出现在 "Vim 英雄堂" (Vim 42 | hall of honour) 里: http://www.vim.org/sponsor/hall_of_honour.php,不过您需 43 | 要先在帐户页面里启动这项设置。 44 | 45 | 46 | 如 何 资 助 *send-money* 47 | 48 | 信用卡 使用 PayPal,参见 PayPal 网站: 49 | https://www.paypal.com/ 50 | 接收赞助的电邮地址是: 51 | donate@vim.org 52 | 接受注册的电邮地址是: 53 | register@vim.org 54 | 建议使用欧元,但也接受其它币种。 55 | 欧洲国家建议使用银行转帐,成本稍低。 56 | 57 | 其它方法 见 |iccf-donations|。 58 | 请在转帐的备注信息里注明 "Vim sponsor" 或 "Vim registration"。 59 | 60 | 61 | 常 见 问 题 解 答 *sponsor-faq* *register-faq* 62 | 63 | 为什么我应该资助? 64 | 65 | 如果没有您对 Vim 工作的欣赏,开发团队不会这么有动力修正漏洞并增加新功能。他们 66 | 会考虑干点别的。 67 | 68 | 69 | 我应该资助多少数额? 70 | 71 | 这取决于您。您多给一些,就可以救助更多的儿童。下面的建议可供参考,个人用户在家 72 | 里应用: 每年 10 欧元。专业应用: 每年 30 欧元。 73 | 74 | 75 | 我怎样成为 Vim 的赞助者或 Vim 的 注册用户? 76 | 77 | 通过上面 |send-money| 解释的方法进行资助,并写上您的电邮地址。钱款收到之后,您 78 | 会收到一个唯一的注册码。这个注册码可以被用来得到一个额外的可以选择您的捐助是否 79 | 可见的页面。在 "我的帐户" ("My Account") 里有一个链接指向那个页面。 80 | 81 | 82 | 赞助和注册有什么不同? 83 | 84 | 名字不同。如果您的老板不喜欢 "赞助" 或 "捐赠",那就用 "注册" 的形式。结果是一 85 | 样的。 86 | 87 | 88 | 我应当如何汇款? 89 | 90 | 参见: |send-money|。关注网站以获得最新消息: 91 | http://www.vim.org/sponsor/ 92 | 93 | 94 | 为什么你不用 SourceForge 的捐赠系统? 95 | 96 | SourceForge 会把 5% 的捐赠留给他们自己。如果您想支持 SourceForge,可以直接资助 97 | 他们。 98 | 99 | 100 | 我付不起钱,可以继续使用 Vim 么? 101 | 102 | 可以。 103 | 104 | 105 | 我没有注册 Vim,我能使用全部的功能吗? 106 | 107 | 可以。 108 | 109 | 110 | 我发现了一个漏洞 (bug),我必须注册才能报告么? 111 | 112 | 不需要。您永远可以提供改进 Vim 的建议。发表改进的意见请使用开发者邮件列表 113 | |maillist|,报告漏洞参见 |bugs|。 114 | 115 | 116 | 关于慈善软件? 117 | 118 | 目前,Vim 的资助总是到乌干达 |uganda|。不论您赞助 Vim 还是 ICCF 都是一样。 119 | 120 | 121 | 我已经捐了 $$$,那么请加入 XYZ 新功能! 122 | 123 | 开发者的工作和您的捐助没有直接的关系。否则,就变成了您为他们的工作付钱,而我们 124 | 应该为这些捐助缴税。如果您想雇开发者中的一位做一些别的工作,直接和他/她联系, 125 | 请不要使用捐助系统。 126 | 127 | 128 | 捐助可以免税么? 129 | 130 | 这取决于您的国家。赞助乌干达 |Uganda| 的儿童在荷兰、德国、加拿大,还有美国是免 131 | 税的。见 ICCF 的网站 http://iccf-holland.org/donate.html。 132 | 133 | 134 | 你能寄给我发票么? 135 | 136 | 对不起,因为您捐助的金钱和我们完成的工作并没有关联。但寄收据是可以的。 137 | 138 | 139 | vim:tw=78:ts=8:noet:ft=help:norl: 140 | -------------------------------------------------------------------------------- /doc/uganda.cnx: -------------------------------------------------------------------------------- 1 | *uganda.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年5月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: Dasn 6 | 7 | *uganda* *Uganda* *copying* *copyright* *license* 8 | 简介: 9 | *iccf* *ICCF* 10 | Vim 是慈善软件,您可以任意地使用和复制,但还是希望您能够捐助那些需要帮助的乌干 11 | 达儿童。请看下方的 |kcc|,或者通过下面几个镜像地址访问 ICCF 的主页以获取更多地 12 | 信息: 13 | 14 | https://iccf-holland.org/ 15 | https://www.vim.org/iccf/ 16 | https://www.iccf.nl/ 17 | 18 | 您也可以资助 Vim 的开发。见 |sponsor|。无论哪种方式,钱都会送往乌干达的。 19 | 20 | Vim 的文档是以开放式发行许可证 (Open Publication License) 发布的,见 21 | |manual-copyright|。 22 | 23 | === 许可证开始 === 24 | (译者注: 本翻译只供参考。我们不承担任何错漏之处引起的法律责任。VIM 许可证必须 25 | 以英文形式完整出现。如有疑义,一律以英文原文为准。) 26 | 27 | VIM 许可证 28 | 29 | I) 可以任意发布没有修改的 Vim 的拷贝,但是必须保证包含本许可证。您也可以发布 30 | 未经修改的部分 Vim,同样也必须包含这份许可证。发布由未经修改的 Vim 源代码 31 | 所编译出的 Vim 可执行文件,外加您自己的应用实例和 Vim 脚本也是允许的。 32 | 33 | II) 在满足以下全部四个条件的前提下,您可以发布经过修改 (或扩充) 的 Vim 版本, 34 | 包括可执行文件 和/或 源代码: 35 | 1) 本许可证必须包含在内,并且不能被修改。 36 | 2) 经过修改的 Vim 必须以下述五种方式之一发布: 37 | a) 如果您本人对 Vim 做了改动,您必须在发布版本里清楚地说明如何与您联系。 38 | 当 Vim 的维护者 (以任何方式) 向您索取您所发布的 Vim 时,您必须把所做 39 | 的改动包括源代码无偿地提供出来。维护者保留把这些改动加入 Vim 正式版本 40 | 的权利。至于维护者怎样处理这些改动,以及用什么许可证发布,可以协商。 41 | 如果没有协商,那么,本许可证,或者它更新的版本,同样适用于您做出的改 42 | 动。Vim 现在的几位维护者可见: https://github.com/orgs/vim/people。如 43 | 果维护者发生变动,会在合适的地方 (很可能是 vim.sf.net、www.vim.org 44 | 和/或 comp.editors) 公布,当完全不能与维护者联系时,发送变更的约定自 45 | 动终止。一旦维护者确认收到了您所做的修改,您就不必再次发送了。 46 | 47 | b) 如果您得到的是一个修改过的 Vim,并且它是在条件 a) 下发布的,那么您可 48 | 以不加改动地在条件 I) 下发布它;如果您又做了额外的改动,则这些改动受 49 | 到 a) 款条文的约束。 50 | 51 | c) 在您发布的经过修改的 Vim 的每一份拷贝里,提供所有的变更部分,包括源代 52 | 码。提供的形式可以采用上下文风格的差异比较记录 (context diff)。您可以 53 | 为添加的新代码选择许可证,但是这些更改和为其选择的许可证不能限制他人 54 | 对 Vim 正式版本作出自己的改动。 55 | 56 | d) 在满足以下全部三个条件的前提下,您可以继续发布带有条件 c) 所提及之变 57 | 更的经过修改的 Vim,而不必在发布时提供更改部分的源代码: 58 | - 这些变更所附带的许可证允许您把这些变更无偿地并且没有任何限制地提供 59 | 给 Vim 的维护者,而且允许 Vim 的维护者无偿地并且没有任何限制地把这 60 | 些更改加入到 Vim 的正式版本中。 61 | - 从您最后一次发布更改的 Vim 之日起,您要保存这些改动至少三年时间。在 62 | 这期间,维护者或别人 (以任何方式) 向您要求提供这些变更时,您必须提 63 | 供给他。 64 | - 您要在发布版本中清楚地说明如何与您联系,这个联系方式必须保证自最后 65 | 一次发布相应的经过修改的 Vim 之日起至少三年有效,或尽可能长。 66 | e) 当这些变更以 GPL (GNU General Public License,GNU 通用公共许可证) 发 67 | 布时,您可以在 GPL 版本 2,或更高版本的 GPL 下发布修改过的 Vim。 68 | 3) 必须添加一条改动的信息。至少要放在 "version" 命令的输出和启动画面里,好 69 | 让用户知道自己用的是一个修改过的 Vim。当以 2)e) 条件发布时,只有不与变 70 | 更适用的许可证冲突,这个信息的添加才是必要的。 71 | 4) 在 2)a) 和 2)d) 条件里要求的联系方式不能随便更改或删除,除非是作者自己 72 | 作出的更正。 73 | 74 | III) 如果您发布一个更改过的 Vim,强烈建议您对变更部分使用 Vim 的许可证,并且对 75 | 维护者提供变更部分并开放源代码。最好的方式是通过电子邮件或者把文件放到服 76 | 务器上,通过电子邮件传送 URL。如果只修改了很少的部分 (例如,只是一个修改 77 | 过的 Makefile),那么传送一个上下文风格的差异比较记录 (context diff) 就可 78 | 以了。电子邮件的地址是 79 | 80 | IV) 不允许从 Vim 的源代码的发行版本或其中部分的源代码里删除本许可证,即使来自 81 | 更改过的版本也是如此。您可能想用这份许可证代替以前版本的 Vim 里的许可证, 82 | 这可以由您自行决定。 83 | 84 | === 许可证结束 === 85 | 86 | 备注: 87 | 88 | - 如果您在 Vim 中找到了乐趣,请阅读剩下的部分,并且考虑一下是不是可以帮助乌干 89 | 达的儿童。用这种方式来表达您的喜悦之情。 90 | 91 | - 如果您想更好地支持 Vim 的开发工作,请考虑成为一名 |sponsor|。无论哪种方式, 92 | 钱都会送往乌干达的。 93 | 94 | - Richard Stallman 说,Vim 的许可证与 GNU GPL 兼容。在他看过之后,我做过很少改 95 | 动,但这不应该有什么影响。 96 | 97 | - 如果您在连接时所用的库是以 GPL 发放的,那么即使您没有修改 Vim,未来的发布版 98 | 本也必须采用 GPL 许可证。 99 | 100 | - 一旦一项变更以 GPL 发放,那么这使得以后所有的改动都以 GPL 或与 GPL 兼容的许 101 | 可证发放。 102 | 103 | - 如果您发布一个经过修改的 Vim,您可以在 "configure" 的 "--with-modified-by" 104 | 参数里加入您的名字和联系方式,或者直接修改宏 MODIFIED_BY。 105 | 106 | - 本许可证适用于 Vim 的源代码。不过,Vim 包含的若干运行时文件可能适用不同的许 107 | 可证条件;在每个相应文件的头部会特别指明。 108 | 109 | ============================================================================== 110 | 基巴莱儿童中心 *kcc* *Kibaale* *charity* 111 | 112 | 基巴莱儿童中心 (Kibaale Children's Centre 简称 KCC) 位于基巴莱。基巴莱是东非乌 113 | 干达南部的一个小镇,靠近坦桑尼亚。这里属于拉卡伊地区。大多数人是农民。虽然人们 114 | 很穷,但通常食物很充足。这是世界上受艾滋病影响最严重的地区,有人说这里是艾滋病 115 | 的发源地。据过去估计,有 10% - 30% 的乌干达人是 HIV (人类免疫缺陷病毒,即艾滋 116 | 病病毒。译者) 的携带者。由于父母双亡,这里有许多孤儿。在这个仅有 35 万人口地 117 | 区,却有大约 6 万儿童失去了双亲或单亲。尽管 AIDS 现在基本得到控制,这种状况还 118 | 在继续。 119 | 120 | 孩子们需要很多帮助。KCC 一直很努力地提供一些帮助,比如: 食物、医疗和教育。食物 121 | 和医疗使他们保持健康,而教育可以让他们在以后的生活里照顾自己。KCC 是一个以基督 122 | 教为基础的组织,但是他们为任何宗教信仰的孩子提供帮助。 123 | 124 | 解决问题的关键是这一地区的教育。然而在伊迪·阿明总统执政期间以及后来的国内战争 125 | 的几年时间里,这一问题被忽视了。现在政局已经稳定,孩子们和他们的父母有必要学会 126 | 怎样照顾自己,以及如何避免感染。饥饿的人和生病的人也同样需要帮助,但我们最主要 127 | 的目的是让他们远离疾病,教他们怎样种植健康的食物。 128 | 129 | 大多数孤儿都住在亲戚家里,由叔叔和稍大一点的姐姐照顾他们。因为家庭很大,所以收 130 | 入 (即使有的话也) 很少。一个孩子如果能得到健康的食物就很幸运了。衣服、医疗、受 131 | 教育,这些都是奢望。于是,为了帮助这些可怜的孩子,一套捐助程序启动了。一个孩子 132 | 可以通过人们的捐助来收养。每月捐助几美元,由 KCC 来管理,就可以给孩子们生活必 133 | 需品,保持健康,以及让他们上学。KCC 还会做所有其它对孩子和抚养他们的家庭有必要 134 | 的事情。 135 | 136 | 除了直接帮助孩子外,孩子们的成长环境也有待改善。KCC 帮助学校改进他们的教学方 137 | 法。在中心有一个示范学校,老师们可以在那里得到培训。同时,也进行医疗健康的人员 138 | 培训,展开卫生教育活动,每个家庭还被鼓励建造合适的洗手间。我帮忙建设了生产水泥 139 | 板的地方,水泥板可以用来做一个很好的洗手间。它们的出售价格低于成本价。 140 | 141 | 我们还建了一个诊所,可以给孩子和他们的家庭提供一些医疗帮助。2020 年开始新添了 142 | 一间产房并有 24/7 服务。如果需要,提供病人转往医院的交通工具。接种疫苗的程序也 143 | 已经启动,传染病肆虐的时候也可以提供帮助 (麻疹和霍乱曾经是一个问题)。 144 | *donate* 145 | 从 1994 年夏天到 1995 年夏天,我作为志愿者在中心工作了整整一年的时间。其间,我 146 | 帮助参与了中心的扩建,并从事水和卫生设备方面的工作。我觉得 KCC 所提供的这些帮 147 | 助真的是很有用。我回到荷兰后,还想继续支持 KCC。于是我筹措资金组织了这个捐助项 148 | 目。请考虑下面几种捐助方式: 149 | 150 | 1、捐助一个读小学的孩子: 每月 17 欧元 (或更多)。 151 | 2、捐助一个读中学的孩子: 每月 25 欧元 (或更多)。 152 | 3、捐助诊所: 每月或每季度,数额不限。 153 | 4、一次性捐赠。 154 | 155 | 相对于其它资助儿童的组织,这笔钱的数额相对很低。这是因为款项直接进入中心,其中 156 | 不到 5% 的捐款用于管理,对于一个小型的志愿者组织来说,做到这一点并不难。如果您 157 | 想捐助一名儿童,那么您应该有至少捐助一年的准备。 158 | 159 | 您怎么知道这些钱用到了该用的地方?首先,以我个人 (Vim 的作者) 的名义向您保证。 160 | 我信任在中心工作的人,并且对他们个人非常了解。再者,中心是世界宣明会 (World 161 | Vision),拯救儿童基金会 (Save the Children Fund) 合作捐资建成的,并受到过它们 162 | 的审视,现在由 Pacific Academy Outreach Society 监管。我们几乎每年都自费到中心 163 | 去查看进展状况,从 1993 年开始,我本人先后访问过中心很多次,在 ICCF 的网站上有 164 | 相关报道。 165 | 166 | 如果您还有别的问题,请发送电邮至: 。 167 | 168 | 中心的地址: 169 | Kibaale Children's Centre 170 | p.o. box 1658 171 | Masaka, Uganda, East Africa 172 | 173 | 捐资地址: *iccf-donations* 174 | 175 | 查看 ICCF 的网站以获取最新的信息!ICCF 的 URL 可以参见: |iccf| 176 | 177 | 178 | 美国: 可以使用下面提到的方法。 179 | 如果必须要寄支票,可寄到我们的加拿大伙伴: 180 | https://www.kuwasha.net/ 181 | 182 | 加拿大: 联系位于加拿大萨里 (Surrey) 市的 Kuwasha。他们会接待 Kibaale 183 | 儿童在加拿大的捐助者。Kuwasha 把 100% 的钱汇到乌干达的项目中。 184 | 您可以直接给他们汇款一次性的捐赠。 185 | 关于赞助的信息,参见他们的网站: https://www.kuwasha.net/ 186 | 如果您向 Kuwasha 捐赠,您会收到一份纳税收据,可以在报税的时候 187 | 把它和报税单一并交上。 188 | 189 | 荷兰: 请汇款至在 Amersfoort 的 "Stichting ICCF Holland" 的账户,如果 190 | 您住在荷兰,可以减税。ING 银行,IBAN: NL95 INGB 0004 5487 74 191 | 192 | 德国: 可以在捐赠时得到税款返还。查阅 ICCF 网站获取更多的信息: 193 | https://iccf-holland.org/germany.html 194 | 195 | 欧洲: 请尽量通过银行汇款,swift 代码和 IBAN 号见下方的 "其它" 一节。 196 | 其它方式应该也可以,请询问提供捐助信息的单位。 197 | 198 | 信用卡: 您可以通过 PayPal 来使用信用卡进行捐资,这是 Internet 上应用最 199 | 广的一个结帐系统,用起来很简单。下面的链接提供详情: 200 | https://www.paypal.com/en_US/mrb/pal=XAC62PML3GF8Q 201 | 捐款的电邮地址: 202 | Bram@iccf-holland.org 203 | 204 | 其它: 请汇款至下面几个帐户之一: 205 | ING bank: IBAN: NL95 INGB 0004 5487 74 206 | Swift code: INGBNL2A 207 | 收款人的名字是 "stichting ICCF Holland", Amersfoort 208 | 不接受支票。 209 | 210 | 211 | vim:tw=78:ts=8:noet:ft=help:norl: 212 | -------------------------------------------------------------------------------- /doc/usr_01.cnx: -------------------------------------------------------------------------------- 1 | *usr_01.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年3月 2 | 3 | VIM 用户手册 - by Bram Moolenaar 4 | 译者: Nek_in 5 | 6 | 关于本手册 7 | 8 | 本章介绍 vim 的手册本身。读者可以通过本章来了解本手册是如何解释 Vim 命令的。 9 | 10 | |01.1| 手册的两个部分 11 | |01.2| 安装了 Vim 之后 12 | |01.3| 教程使用说明 13 | |01.4| 版权声明 14 | 15 | 下一章: |usr_02.txt| Vim 初步 16 | 目录: |usr_toc.txt| 17 | 18 | ============================================================================== 19 | *01.1* 手册的两个部分 20 | 21 | Vim 的手册分成两个部分: 22 | 23 | 1. 用户手册 24 | 面向任务的使用说明书,由简入繁,能像书一样从头读到尾。 25 | 26 | 2. 参考手册 27 | 详细描述 Vim 的每一个命令的详细资料。 28 | 29 | 本手册使用的符号请参见: |notation| 30 | 31 | 32 | 跳 转 33 | 34 | 文本包含两部分内容之间的超级链接,允许你快速地在一个编辑任务的描述和它所涉及的 35 | 命令和选项的详细说明之间跳转。可以使用如下两个命令实现这个功能: 36 | 37 | 按 CTRL-] 跳转到当前光标下的单词的相关主题 38 | 按 CTRL-O 回跳 (重复这个操作可以回跳多次) 39 | 40 | 大部分链接放在两根竖线之间,如: |bars|。坚线本身可能被隐藏或不可见;见下。另 41 | 外,'number' 形式的选项名,用双引号括住的命令 ":write" 或者其它任何单词都可以 42 | 用作一个超级链接。不妨做如下试验: 把光标移动到 CTRL-] 上,并按下 CTRL-]。 43 | 44 | 其它主题可以用 ":help" 找到;请参见 |help.txt|。 45 | 46 | 坚线和星号在使用 |conceal| 功能时通常已被隐藏,它们也同时使用 |hl-Ignore|,使 47 | 文本色和背景色相同。要让它们重新可见: > 48 | :set conceallevel=0 49 | :hi link HelpBar Normal 50 | :hi link HelpStar Normal 51 | 52 | ============================================================================== 53 | *01.2* 安装了 Vim 之后 54 | 55 | 本手册大部分内容都假定 Vim 已经被正常安装了。如果还没有,或者运行不正常 (例 56 | 如,找不到文件或 GUI 模式下菜单没有显示出来等)。请先阅读关于安装的章节: 57 | |usr_90.txt|。 58 | *not-compatible* 59 | 本手册还经常假定 Vim 运行在 Vi 兼容选项关闭的模式下。对大部分命令而言,这无关 60 | 紧要,但有时却是很重要的。例如,多级撤销 (undo) 功能就是这样。有一个简单的方法 61 | 可以保证你的 Vim 设置是正常的 - 拷贝 Vim 自带的 vimrc 范例。在 Vim 里进行操 62 | 作,你就无需知道这个文件在什么地方。不同系统的操作方法分别如下: 63 | 64 | 对于 Unix: > 65 | :!cp -i $VIMRUNTIME/vimrc_example.vim ~/.vimrc 66 | 对于 MS-Windows: > 67 | :!copy $VIMRUNTIME/vimrc_example.vim $VIM/_vimrc 68 | 对于 Amiga: > 69 | :!copy $VIMRUNTIME/vimrc_example.vim $VIM/.vimrc 70 | 71 | 如果这个文件已经存在,你最好备份一下。 72 | 73 | 现在启动 Vim,'compatible' 选项应该已经关闭。你可以用以下命令检查一下: 74 | > 75 | :set compatible? 76 | < 77 | 如果 Vim 报告 "nocompatible",则一切正常;如果返回 "compatible" 就有问题。这时 78 | 你需要检查一下为什么会出现这个问题。一种可能是 Vim 找不到你的配置文件。用如下 79 | 命令检查一下: 80 | > 81 | :scriptnames 82 | < 83 | 如果你的文件不在列表中,检查一下该文件的位置和文件名。如果它在列表中,那么一定 84 | 是还有某个地方把 'compatible' 选项设回来了。 85 | 86 | 参考 |vimrc| 和 |compatible-default| 可以获得更多信息。 87 | 88 | 备注: 89 | 本手册是关于普通形态的 Vim 的,Vim 还有一种形态叫 "evim" (easy vim), 90 | 那也是 Vim,不过被设置成 "点击并输入" 风格,就像 Notepad 一样。它总是 91 | 处于 "插入" 模式,感觉完全不同于通常形态下的 Vim。由于它比较简陋,将不 92 | 在本手册中描述。详细信息请参考 |evim-keys|。 93 | 94 | ============================================================================== 95 | *01.3* 教程使用说明 *tutor* *vimtutor* 96 | 97 | 除了阅读文字 (烦!),你还可以用 vimtutor (Vim 教程) 学习基本的 Vim 命令,这是 98 | 一个 30 分钟 2 个章节的教程,它能教会你大部分基本的 Vim 功能。 99 | 100 | 在 Unix 中,如果 Vim 安装正常,你可以从命令行上运行以下命令: 101 | > 102 | vimtutor 103 | < 104 | 在 MS-Windows 中,你可以在 "Program/Vim 9.1" 菜单中找到这个命令,或者在安装目 105 | 录 (在 Vim 里运行 `:echo $VIMRUNTIME` 可以改到这个目录) 中运行 vimtutor.bat 程 106 | 序。 107 | 108 | 这个命令会建立一份教程文件第 1 章的拷贝,你可以任意修改它而不用担心会损坏原始 109 | 的文件。要继续第 2 章的拷贝,可用以下命令: > 110 | vimtutor -c 2 111 | < 112 | 这个教材有各种语言的版本。要检查你需要的版本是否可用,使用相应语言的双字母 113 | 缩写。例如,对于法语版本: 114 | > 115 | vimtutor fr 116 | < 117 | 在 Unix 上,如果你更喜欢 Vim 的 GUI 版本,可用 "gvimtutor" 或 "vimtutor -g" 来 118 | 代替 "vimtutor"。 119 | 120 | 对于 OpenVMS 而言,如果已经正确安装了 Vim,VMS 提示行上可以启动 vimtutor: > 121 | 122 | @VIM:vimtutor 123 | 124 | 也可以加入可选的双字母语言代码,同上。 125 | 126 | 127 | 在非 Unix 系统中,你还要做些工作: 128 | 129 | 1. 拷贝教程文件。你可以用 Vim 来完成这个工作 (Vim 知道文件的位置) 130 | > 131 | vim --clean -c 'e $VIMRUNTIME/tutor/tutor1' -c 'w! TUTORCOPY' -c 'q' 132 | < 133 | 这个命令在当前路径下建立一个 "TUTORCOPY" 的文件。要使用其它语言的版本, 134 | 在文件名后加上双字母的语言缩写作为扩展名。对于法语: 135 | > 136 | vim --clean -c 'e $VIMRUNTIME/tutor/tutor1.fr' -c 'w! TUTORCOPY' -c 'q' 137 | 138 | 2. 用 Vim 编辑这个被拷贝的文件 139 | > 140 | vim --clean -c "set nocp" TUTORCOPY 141 | < 142 | --clean 参数用于保证 Vim 使用良好的缺省值启动。 143 | 144 | 3. 学习完成后删除临时拷贝文件 145 | > 146 | del TUTORCOPY 147 | < 148 | ============================================================================== 149 | *01.4* 版权声明 *manual-copyright* 150 | 151 | Vim 用户手册和参考手册的版权 (1988) 归 Bram Moolenaar 所有。这份材料只可以在符 152 | 合开放出版物版权协议 (Open Publication License) 1.0 或以后版本的条件下发布。这 153 | 份协议的最新版本可以在如下地址上找到: 154 | https://opencontent.org/openpub/ 155 | 156 | 对此文档作出贡献的人员必须同意这份声明。 157 | *frombook* 158 | 这份文档的一部分来自 Steve Oualline 的《Vi IMproved - Vim》(New Riders出版, 159 | ISBN: 0735710015)。开放出版物版本协议同样适用于这本书。被选入的部分经过剪裁 160 | (例如去掉插图,根据 Vim 6.0 和之后的新特性进行修改,并修正一些错误)。某些部分 161 | 省略了 |frombook| 标记,这并不表示这些部分不是来自这本书。 162 | 163 | 非常感谢 Steve Oualline 和 New Riders 编写并出版了这本书并在 OPL 协议下发行 164 | 它!它对写这份手册起到了非常大的作用。它不只是提供了文字描述,还确定了这份手册 165 | 的基调和风格。 166 | 167 | 如果你通过销售这份手册赚了钱,我们强烈建议你把部分利润捐给乌干达的艾滋病受害 168 | 者。(参见 |iccf|) 169 | 170 | (译者注: 这里是对原文协议的翻译,中文翻译的版权,请参阅 vimcdoc 的 LICENSE 文 171 | 件) 172 | ============================================================================== 173 | 174 | 下一章: |usr_02.txt| Vim 初步 175 | 176 | 版权: 参见 |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: 177 | -------------------------------------------------------------------------------- /doc/usr_06.cnx: -------------------------------------------------------------------------------- 1 | *usr_06.txt* 适用于 Vim 9.1 版本。 最近更新: 2022年8月 2 | 3 | VIM 用户手册 - by Bram Moolenaar 4 | 译者: Nek_in 5 | 6 | 使用语法高亮 7 | 8 | 9 | 黑白的文字让人厌倦了,增加一些色彩能为你的文件带来生气。这不但看起来漂亮, 10 | 还能够提高你的工作效率。本章介绍如何使用不同颜色显示不同文本并把它打印出来。 11 | 12 | |06.1| 功能激活 13 | |06.2| 颜色显示不出来或者显示出错误的颜色怎么办? 14 | |06.3| 使用不同的颜色 15 | |06.4| 是否使用色彩 16 | |06.5| 带颜色打印 17 | |06.6| 深入阅读 18 | 19 | 下一章: |usr_07.txt| 编辑多个文件 20 | 前一章: |usr_05.txt| 选项设置 21 | 目录: |usr_toc.txt| 22 | 23 | ============================================================================== 24 | *06.1* 功能激活 25 | 26 | 一切从一个简单的命令开始: > 27 | 28 | :syntax enable 29 | 30 | 大多数情况下,这会让你的文件带上颜色。Vim 会自动检测文件的类型,并调用合适的语 31 | 法高亮。一下子注释变成蓝色,关键字变成褐色,而字符串变成红色了。这使你可以很容 32 | 易浏览整个文档。很快你就会发现,黑白的文本真的会降低你的效率! 33 | 34 | 如果你希望总能看到语法高亮,把 ":syntax enable" 命令加入到 |vimrc| 文件中。 35 | 36 | 如果你想语法高亮只在支持色彩的终端中生效,你可以在 |vimrc| 文件中这样写: > 37 | 38 | if &t_Co > 1 39 | syntax enable 40 | endif 41 | 42 | 如果你只想在 GUI 版本中有效,可以把 ":syntax enable" 放入你的 |gvimrc| 文件。 43 | 44 | ============================================================================== 45 | *06.2* 颜色显示不出来或者显示出错误的颜色怎么办? 46 | 47 | 有很多因素会让你看不到颜色: 48 | 49 | - 你的终端不支持彩色。 50 | 这种情况下,Vim 会用粗体,斜体和下划线区分不同文字,但这不好看。你可能 51 | 会希望找一个支持彩色的终端。对于 Unix,我推荐 XFree86 项目的 xterm: 52 | |xfree-xterm|。 53 | 54 | - 你的终端其实支持颜色,可是 Vim 不知道。 55 | 确保你的 $TERM 设置正确。例如,当你使用一个支持彩色的 xterm 终端: > 56 | 57 | setenv TERM xterm-color 58 | < 59 | 或者 (基于你用的控制台终端) > 60 | 61 | TERM=xterm-color; export TERM 62 | < 63 | 终端名必须与你使用的终端一致。如果这还是不行,参考一下 |xterm-color|, 64 | 那里介绍了一些使 Vim 显示彩色的方法 (不仅是 xterm)。 65 | 66 | - 文件类型无法识别。 67 | Vim 不可能识别所有文件,而且有时很难说一个文件是什么类型的。试一下这个 68 | 命令: > 69 | 70 | :set filetype 71 | < 72 | 如果结果是 "filetype=",那么问题就是出在文件类型上了。你可以手工指定文 73 | 件类型: > 74 | 75 | :set filetype=fortran 76 | < 77 | 要知道哪些类型是有效的,查看一下 $VIMRUNTIME/syntax 目录。对于 GUI 版 78 | 本,你还可以使用 Syntax 菜单。设置文件类型也可以通过 |modeline|,这种 79 | 方式使得该文件每次被编辑时都被高亮。例如,下面这行可用于 Makefile (把 80 | 它放在接近文件首和文件末的地方) > 81 | 82 | # vim: syntax=make 83 | < 84 | 你可能知道怎么检测自己的文件类型,通常的方法是检查文件的扩展名 (就是点 85 | 后面的内容)。|new-filetype| 说明如何告知 Vim 进行那种文件类型的检查。 86 | 87 | - 你的文件类型没有语法高亮定义。 88 | 你可以找一个相似的文件类型并人工设置为那种类型。如果觉得不好,你可以自 89 | 己写一个,参见 |mysyntaxfile|。 90 | 91 | 92 | 或者颜色是错的: 93 | 94 | - 彩色的文字难以辨认。 95 | Vim 自动猜测你使用的背景色。如果是黑的 (或者其它深色的色彩),它会用浅 96 | 色作为前景色。如果是白的 (或者其它浅色),它会使用深色作为前景色。如果 97 | Vim 猜错了,文字就很难认了。要解决这个问题,设置一下 'background' 选 98 | 项。对于深色: > 99 | 100 | :set background=dark 101 | < 102 | 而对于浅色: > 103 | 104 | :set background=light 105 | < 106 | 这两个命令必须在 ":syntax enable" 命令前调用,否则不起作用。如果要在这 107 | 之后设置背景,可以再调用一下 ":syntax reset" 使得 Vim 重新进行缺省颜色 108 | 的设置。 109 | 110 | - 在自下往上滚屏的过程中颜色显示不对。 111 | Vim 在分析文本的时候不对整个文件进行处理,它只分析你要显示的部分。这 112 | 样能省不少时间,但也会因此带来错误。一个简单的修正方法是敲 CTRL-L。 113 | 或者往回滚动一下再回来。要彻底解决这个问题,请参见 |:syn-sync|。有些 114 | 语法定义文件有办法自己找到前面的内容,这可以参见相应的语法定义文件。 115 | 例如,|tex.vim| 中可以查到 Tex 语法定义。 116 | 117 | ============================================================================== 118 | *06.3* 使用不同颜色 *:syn-default-override* 119 | 120 | 如果你不喜欢默认的色彩方案,你可以选另一个色彩方案。在 GUI 版本中可以使用 121 | Edit/Color 菜单。你也可以使用这个命令: > 122 | 123 | :colorscheme evening 124 | 125 | "evening" 是色彩方案的名称。还有几种备选方案可以试一下。在 $VIMRUNTIME/colors 126 | 中可以找到这些方案。 127 | 128 | 等你确定了一种喜欢的色彩方案,可以把 ":colorscheme" 命令加到你的 |vimrc| 文件 129 | 中。 130 | 131 | 你可以自己编写色彩方案,方法如下: 132 | 133 | 1. 选择一种接近你理想的色彩方案。把这个文件拷贝到你自己的 Vim 目录中。在 134 | Unix 上,可以这样: > 135 | 136 | !mkdir ~/.vim/colors 137 | !cp $VIMRUNTIME/colors/morning.vim ~/.vim/colors/mine.vim 138 | < 139 | 在 Vim 中完成的好处是可以利用 $VIMRUNTIME 变量。 140 | 141 | 2. 编辑这个色彩方案,常用的有下面的这些条目: 142 | 143 | term 黑白终端的属性 144 | cterm 彩色终端的属性 145 | ctermfg 彩色终端的前景色 146 | ctermbg 彩色终端的背景色 147 | gui GUI 版本属性 148 | guifg GUI 版本的前景色 149 | guibg GUI 版本的背景色 150 | 151 | 例如,要用绿色显示注释: > 152 | 153 | :highlight Comment ctermfg=green guifg=green 154 | < 155 | 属性是 "bold" (粗体) 和 "underline" (下划线) 可以用于 "cterm" 和 "gui"。如 156 | 果你两个都想用,可以用 "bold,underline"。详细信息请参考 |:highlight| 命令。 157 | 158 | 3. 告诉 Vim 总使用你这个色彩方案。把如下语句加入你的 |vimrc| 中: > 159 | 160 | colorscheme mine 161 | 162 | 如果你要测试一下常用的色彩组合,用如下命令: > 163 | 164 | :runtime syntax/colortest.vim 165 | 166 | 这样你会看到不同的颜色组合。你可以很容易的看到哪一种可读性好而且漂亮。不过这些 167 | 不是仅有的可用颜色。可以指定 #rrggbb 十六进制颜色,也可以为十六进制颜色在 168 | |v:colornames| 里定义新颜色名,如: > 169 | 170 | let v:colornames['mine_red'] = '#aa0000' 171 | 172 | 如果你想编写别人都能用的色彩方案,注意 仅当颜色尚不存在时添加定义: > 173 | 174 | call extend(v:colornames, {'mine_red': '#aa0000'}, 'keep') 175 | 176 | 这使色彩方案的用户可在载入你的色彩方案之前,覆盖该颜色的准确定义,例如,在 177 | |.vimrc| 文件里: > 178 | 179 | runtime colors/lists/css_colors.vim 180 | let v:colornames['your_red'] = v:colornames['css_red'] 181 | colorscheme yourscheme 182 | 183 | 作为色彩方案作者,应该可以依赖用于 GUI 颜色的颜色名。它们定义在 184 | `colors/lists/default.vim`。每次运行 colorscheme 命令时都载入所有这些在 185 | |'runtimepath'| 上找到的文件。vim 发布提供的官方列表应该已包含所有的 X11 颜色 186 | (之前在 rgb.txt 中定义)。 187 | 188 | ============================================================================== 189 | *06.4* 是否使用色彩 190 | 191 | 使用色彩显示文本会影响效率。如果你觉得显示得很慢,可以临时关掉这个功能: > 192 | 193 | :syntax clear 194 | 195 | 当你开始编辑另一个文件 (或者同一个文件),色彩会重新生效。 196 | 197 | 如果你要完全关闭这个功能: > 198 | 199 | :syntax off 200 | 201 | 这个命令会停止对所有缓冲区的所有语法高亮。详见 |:syntax-off|。 202 | 203 | *:syn-manual* 204 | 如果你想只对特定的文件采用语法高亮,可以使用这个命令: > 205 | 206 | :syntax manual 207 | 208 | 这个命令激活语法高亮功能,但不会在你开始编辑一个缓冲区时自动生效 (译者注: Vim 209 | 中,每个被打开的文件对应一个缓冲区,后面的章节中你会接触到这方面的内容)。要在 210 | 当前缓冲区中使用高亮,需要设置 'syntax' 选项: > 211 | 212 | :set syntax=ON 213 | < 214 | ============================================================================== 215 | *06.5* 带颜色打印 *syntax-printing* 216 | 217 | 在 MS-Windows 版本上,你可以用如下命令打印当前文件: > 218 | 219 | :hardcopy 220 | 221 | 这个命令会启动一个常见的打印对话框,你可以通过它选择打印机并作一些必要的设置。 222 | 如果你使用的是彩色打印机,那么打印出来的色彩将与你在 Vim 中看到的一样。但如果 223 | 你使用的是深色的背景,它的颜色会被适当调整,以便在白色地打印纸上看起来比较舒 224 | 服。 225 | 226 | 下面几个选项可以改变 Vim 的打印行为: 227 | 'printdevice' 228 | 'printheader' 229 | 'printfont' 230 | 'printoptions' 231 | 232 | 要仅打印一定范围内的行,可以用可视模式选择需要打印的行再执行打印命令,例如: > 233 | 234 | v100j:hardcopy 235 | 236 | "v" 启动可视模式,"100j" 向下选中 100 行,然后执行 ":hardcopy" 打印这些行。当 237 | 然,你可以用其它命令选中这 100 行。 238 | 239 | 如果你有一台 PostScript 打印机,上面的方法也适合 Unix 系统。否则,你必须做一些 240 | 额外的处理: 你需要先把文件转换成 HTML 类型,然后用浏览器打印。 241 | 242 | 如下命令把当前文件转换成 HTML 格式: > 243 | 244 | :TOhtml 245 | 246 | 如果不行: > 247 | 248 | :source $VIMRUNTIME/syntax/2html.vim 249 | 250 | 你发现它会嘎吱嘎吱执行一阵子,(如果文件很大,这可能要花点时间)。之后,Vim 会打 251 | 开一个新的窗口并显示 HTML 代码。现在把这个文件存下来 (存在哪都不要紧,反正最后 252 | 你要删掉它的): > 253 | 254 | :write main.c.html 255 | 256 | 用你喜欢的浏览器打开这个文件,并通过它打印这个文件。如果一切顺利,这个输出应该 257 | 与 Vim 中显示的一样。要了解更详细的信息,请参见 |2html.vim|。处理完后别忘了删 258 | 掉那个 HTML 文件。 259 | 260 | 除了打印,你还可以把这个 HTML 文件,放到 WEB 服务器上,让其他人可以通过彩色文 261 | 本阅读。 262 | 263 | ============================================================================== 264 | *06.6* 深入阅读 265 | 266 | |usr_44.txt| 自定义语法高亮 267 | |syntax| 关于本话题的全部细节 268 | 269 | ============================================================================== 270 | 271 | 下一章: |usr_07.txt| 编辑多个文件 272 | 273 | 版权: 参见 |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: 274 | -------------------------------------------------------------------------------- /doc/usr_09.cnx: -------------------------------------------------------------------------------- 1 | *usr_09.txt* 适用于 Vim 9.1 版本。 最近更新: 2019年12月 2 | 3 | VIM 用户手册 - by Bram Moolenaar 4 | 译者: Nek_in 5 | 6 | 使用 GUI 版本 7 | 8 | 9 | Vim 能在一般的终端中很好地工作。gVim 则提供了图形用户界面 (GUI)。它可以完成相 10 | 同,甚至更多的功能。GUI 能提供菜单,工具条,滚动条和其它东西。本章介绍 GUI 这 11 | 些额外的功能。 12 | 13 | |09.1| GUI 版本的组件 14 | |09.2| 使用鼠标 15 | |09.3| 剪贴板 16 | |09.4| 选择模式 17 | 18 | 下一章: |usr_10.txt| 做大修改 19 | 前一章: |usr_08.txt| 分割窗口 20 | 目录: |usr_toc.txt| 21 | 22 | ============================================================================== 23 | *09.1* GUI 版本的组件 24 | 25 | 你可以在你的桌面上放一个启动 gvim 的图标。此外,下面的任一个命令也可以启动 26 | gvim: 27 | > 28 | gvim file.txt 29 | vim -g file.txt 30 | 31 | 如果这样不行,可能是因为你的 Vim 不支持 GUI 版本特性。你需要先安装一个合适的版 32 | 本。 33 | 执行命令后,Vim 会打开一个窗口,并显示文件 "file.txt"。窗口的样子取决于 34 | Vim 的版本。一般是下面这个样子 (尽可能地用 ASCII 码展示): 35 | 36 | +----------------------------------------------------+ 37 | | file.txt + (~/dir) - VIM X | <- 窗口标题 38 | +----------------------------------------------------+ 39 | | File Edit Tools Syntax Buffers Window Help | <- 菜单栏 40 | +----------------------------------------------------+ 41 | | aaa bbb ccc ddd eee fff ggg hhh iii jjj | <- 工具栏 42 | | aaa bbb ccc ddd eee fff ggg hhh iii jjj | 43 | +----------------------------------------------------+ 44 | | file text | ^ | 45 | | ~ | # | 46 | | ~ | # | <- 滚动条 47 | | ~ | # | 48 | | ~ | # | 49 | | ~ | # | 50 | | | V | 51 | +----------------------------------------------------+ 52 | 53 | 最大的一片空间是文件的内容。这部分与终端上看到的是一样的,只是颜色和字体可能有 54 | 一点差别。 55 | 56 | 57 | 窗 口 标 题 58 | 59 | 窗口最顶上是窗口标题。这由你的窗口系统绘制。Vim 会在这个标题上显示当前文件的相 60 | 关信息。首先显示的是文件名,然后是一个特殊字符,最后是用括号括住的目录名。下面 61 | 是这些特殊字符的含义: 62 | 63 | - 文件不能被修改 (例如帮助文件) 64 | + 已经被修改过 65 | = 文件只读 66 | =+ 文件只读,但仍被修改过 67 | 68 | 如果没有显示任何特殊字符,表示这是一个普通的,没有改过的文件。 69 | 70 | 71 | 菜 单 栏 72 | 73 | 你知道菜单是怎么工作的,是吧? Vim 有些通用的菜单,外加一些特别的。逐个看看, 74 | 猜测一下这些菜单都可以用来干什么。另一个相关的子菜单是 Edit/Global,你可以在那 75 | 里找到这些菜单项: 76 | 77 | Toggle Toolbar 使工具条可见/不可见 78 | Toggle Bottom Scrollbar 使底部的滚动条可见/不可见 79 | Toggle Left Scrollbar 使左边的滚动条可见/不可见 80 | Toggle Right Scrollbar 使右边的滚动条可见/不可见 81 | 82 | 在大多数系统里,你可以把菜单 "撕下来"。选中菜单最上面的菜单栏,就是那个看起来 83 | 像条虚线的。这样你可以得到一个分离的菜单,里面包括了所有菜单项。它会一直挂在那 84 | 里,直到你关闭它。 85 | 86 | 87 | 工 具 栏 88 | 89 | 这里包括使用最频繁的操作的图标。希望这些图标功能显而易见。另外,每个图标都支持 90 | "工具提示" (把鼠标移上去停一会儿就能看见这个提示) 91 | 92 | "Edit/Global Settings/Toggle Toolbar" 菜单项可以关闭工具条。如果你从来都不使用 93 | 工具条,可以在 vimrc 文件中加上: 94 | > 95 | :set guioptions-=T 96 | 97 | 这个命令从 'guioptions' 中删除 "T" 标记。其它 GUI 部件也可以通过这种方法激活或 98 | 关闭。参见这个选项的相关帮助。 99 | 100 | 101 | 滚 动 条 102 | 103 | 默认情况下,右边会有一个滚动条,它的作用是很明显的。当你分割窗口的时候,每个窗 104 | 口都会有自己的滚动条。 105 | 你可以通过 "Edit/Global Settings/Toggle Bottom Scrollbar" 来启动一个水平滚 106 | 动条。这在比较模式或没有设置 'wrap' 时非常有用 (后面有更多描述)。 107 | 108 | 在使用垂直分割的时候,只有右边的窗口有滚动条,但当你把光标移到左边的窗口上,右 109 | 边的滚动条会对这个窗口起作用,这需要一些时间去适应。 110 | 当你使用垂直分割的时候,可以考虑把滚动条放在左边。这可以通过菜单激活,或者 111 | 使用 'guioptions' 选项: 112 | > 113 | :set guioptions+=l 114 | 115 | 这是在 'guioptions' 中增加 'l' 标志位。 116 | 117 | ============================================================================== 118 | *09.2* 使用鼠标 119 | 120 | 标准是好东西。在微软的 Windows 操作系统中,你可以用标准模式选中文本。X Windows 121 | 也有一套使用鼠标的标准。非常不幸,这两套标准是不同的。 122 | 幸运的是,你可以定制 Vim。你可以让你的鼠标行为像 X Windows 或者像微软 123 | Windows 的鼠标。下面的命令使鼠标用起来像 X Windows: 124 | > 125 | :behave xterm 126 | 127 | 而如下命令使鼠标用起来像微软 Windows: 128 | > 129 | :behave mswin 130 | 131 | 在 UNIX 操作系统中,默认的鼠标行为是 xterm。而默认的微软 Windows 系统的鼠标行 132 | 为是在安装的时候选定的。要了解这两种行为的详细信息,请参考 |:behave|。下面是一 133 | 些摘要: 134 | 135 | XTERM 鼠 标 行 为 136 | 137 | 左键单击 定位光标 138 | 左键拖动 在可视模式下选中文本 139 | 中键单击 从剪贴板中粘贴文本 140 | 右键单击 把选中的文本扩展到当前的光标位置 141 | 142 | 143 | 微软 Windows 鼠标行为 144 | 145 | 左键单击 定位光标 146 | 左键拖动 在选择模式下选中文本 (参见 |09.4|) 147 | 按住 Shift,左键单击 把选中的文本扩展到当前的光标位置 148 | 中键单击 从剪贴板中粘贴文本 149 | 右键单击 显示一个弹出式菜单 150 | 151 | 152 | 可以进一步定制鼠标。请参见下面的选项: 153 | 154 | 'mouse' 鼠标的使用模式 155 | 'mousemodel' 鼠标单击的效果 156 | 'mousetime' 双击的间隔允许时间 157 | 'mousehide' 输入的时候隐藏鼠标 158 | 'selectmode' 鼠标启动可视模式还是选择模式 159 | 160 | ============================================================================== 161 | *09.3* 剪贴板 162 | 163 | |04.7| 节已经介绍过剪贴板的基本使用了。这里有一个重要的地方要解释一下: 对于 164 | X-windows 系统,有两个地方可以在程序间交换文本,而 MS-Windows 不是这样的。 165 | 166 | 在 X-Windows,有一个 "当前选择区" 的概念。它表示正被选中的文本。在 Vim 中,这 167 | 表示可视区 (假定你正使用默认的设置)。不需要任何其它操作,你就可以把这些文本贴 168 | 到别的程序中。 169 | 例如,你用鼠标在本文中选中一些文本。Vim 会自动切换到可视模式,并高亮这些文 170 | 本。现在启动另一个 gvim,(由于没有指定文件名,它会显示出一个空窗口)。点击鼠标 171 | 中键。被选中的文本就会被贴进来。 172 | "当前选择区" 会一直保持有效直到你选中其它文本。在另一个 gvim 中粘贴文本 173 | 后,在这个窗口中选中一些文字,你会发现上一个窗口中选中的文字显示的方法跟原来有 174 | 些区别了,这表示这些文字已经不是 "当前选择区" 了。 175 | 176 | 你不一定要用鼠标来选中文字,用键盘的 "可视" 命令也能达到相同的效果。 177 | 178 | "真" 剪 贴 板 179 | 180 | 对于另一个交换文本的地方,我们称之为 "真" 剪贴板以避免与上面的 "当前选择区" 混 181 | 淆。通常 "当前选择区" 和 "真" 剪贴板都称为剪贴板,你需要习惯这些名称。 182 | 要把文字拷贝到真剪贴板,在一个 gvim 中选中一些文本,然后执行菜单命令 183 | Edit/Copy。这样文字就被拷贝到真剪贴板了。剪贴板的内容是不可见的,除非你使用特 184 | 别的显示程序,例如 KDE 的 klipper 程序。 185 | 现在,切换到另一个 gvim,把光标停在某个位置,然后执行菜单命令 Edit/Paste 186 | 菜单。你会看到真剪贴板中的内容被插入到当前的光标位置。 187 | 188 | 189 | 使 用 两 种 剪 贴 板 190 | 191 | 这种同时使用 "当前选择区" 和 "真剪贴板" 的操作方式听起来很乱。但这是很有用的。 192 | 我们通过一个例子来说明。用 gvim 打开一个文件并执行如下命令: 193 | 194 | - 在可视模式下选中两个词 195 | - 使用 Edit/Copy 菜单把这些词拷到剪贴板 196 | - 再用可视模式选中另一个词 197 | - 执行 Edit/Paste 菜单命令。这样第二次选中的词会被前面剪贴板中的词代替。 198 | - 把鼠标移到另一个地方按中键,你会发现你刚被覆盖的单词被粘贴到新的位置。 199 | 200 | 如果你小心使用 "当前选择区" 和 "真剪贴板" 两个工具,你可以完成很多很有用的工 201 | 作。 202 | 203 | 204 | 使 用 键 盘 205 | 206 | 如果你不喜欢使用鼠标,你可以通过两个寄存器来使用 "当前选择区" 和 "真剪贴板" 两 207 | 个剪贴板。"* 寄存器用于表示当前选择区。 208 | 要使文本变成 "当前选择区",只要使用可视模式即可。例如,要选中一整行只要输入 209 | "V"。 210 | 要拷贝当前选择区的内容: 211 | > 212 | "*P 213 | 214 | 注意这里 "P" 是大写,表示把文字拷贝到光标的前面。 215 | 216 | "+ 寄存器用于真剪贴板。例如,要把当前光标位置到行末的文本拷到真剪贴板: 217 | > 218 | "+y$ 219 | 220 | 记得吧,"y" 是 yank,这是 Vim 的拷贝命令。 221 | 要把真剪贴板的内容拷到光标前面: 222 | > 223 | "+P 224 | 225 | 这与 "当前选择区" 一样,只是用 (+) 寄存器取代了 (*) 寄存器。 226 | 227 | ============================================================================== 228 | *09.4* 选择模式 229 | 230 | 现在介绍一些在 MS-Windows 中比在 X-Windows 中更常被使用的东西 (但在两个系统上 231 | 都可用)。你已经了解可视模式了。选择模式与可视模式相似,也是用来选中文字的。但 232 | 有一个显著区别: 当输入文本的时候,在选择模式下,被选中的文字将被替换成新输入的 233 | 文字。 234 | 235 | 要启用选择模式,先要激活它 (对于 MS-Windows,可能已经激活了,不过多做一次也没 236 | 什么): 237 | > 238 | :set selectmode+=mouse 239 | 240 | 现在用鼠标选中一些文本,这些文本会好像可视模式一样被高亮。现在敲入一个字母。被 241 | 选中的文本被删除,替换成新的字母。现在已经是插入模式了,你可以继续输入。 242 | 243 | 由于输入普通文本导致选中的文字被删除,这时你不能使用 "hjkl","w" 等移动命令。 244 | 这时可以使用 "Shift" 加功能键。 (shift 键加左箭头) 使光标左移。选中的 245 | 文字像可视模式一样被扩展或者减少。其它箭头起的作用你也可以猜到了, 和 246 | 也一样。 247 | 248 | 你可以通过 'selectmode' 选项修改选择模式的工作方式。 249 | 250 | ============================================================================== 251 | 252 | 下一章: |usr_10.txt| 做大修改 253 | 254 | 版权: 参见 |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: 255 | -------------------------------------------------------------------------------- /doc/usr_26.cnx: -------------------------------------------------------------------------------- 1 | *usr_26.txt* 适用于 Vim 9.1 版本。 最近更新: 2005年3月 2 | 3 | VIM 用户手册 - by Bram Moolenaar 4 | 译者: Chimin Yen 5 | 6 | 重复 7 | 8 | 9 | 编辑工作往往不是杂乱无章的。同一个修改动作常常会被重复多次。在本章中,我们将解 10 | 释几种有用的重复修改动作的方法。 11 | 12 | |26.1| 可视模式下的重复 13 | |26.2| 加与减 14 | |26.3| 改动多个文件 15 | |26.4| 在外壳脚本里使用 Vim 16 | 17 | 下一章: |usr_27.txt| 查找命令及模式 18 | 前一章: |usr_25.txt| 编辑带格式的文本 19 | 目录: |usr_toc.txt| 20 | 21 | ============================================================================== 22 | *26.1* 可视模式下的重复 23 | 24 | 可视模式在反复修改一段文本方面十分方便。你可以看见高亮的文本,从而确定是否改对 25 | 了地方。但选择文本也得打几个字。"gv" 命令再次选择上次选过的文本,让你对同一段 26 | 文本再作别的修改。 27 | 假定你有几行文本,你要把其中的 "2001" 改成 "2002",以及 "2000" 改成 "2001": 28 | 29 | The financial results for 2001 are better ~ 30 | than for 2000. The income increased by 50%,~ 31 | even though 2001 had more rain than 2000. ~ 32 | 2000 2002 ~ 33 | income 45,403 66,234 ~ 34 | 35 | 首先把 "2001" 改成 "2002"。在可视模式下选择这几行文本,并执行: > 36 | 37 | :s/2001/2002/g 38 | 39 | 现在用 "gv" 命令再次选择同一文本。光标在哪儿都没关系。然后用 ":s/2000/2001/g" 40 | 命令作第二项修改。 41 | 很明显,你可以多次重复这些动作。 42 | 43 | ============================================================================== 44 | *26.2* 加与减 45 | 46 | 当你反复地把一个数改成另一个时,你常遇到定值的偏移。在上例中,每个年份都加了 47 | 一。与其为每个要修改的年份都键入一个替换命令,不如利用 CTRL-A 命令。 48 | 在上面这段文本中搜索年份: > 49 | 50 | /19[0-9][0-9]\|20[0-9][0-9] 51 | 52 | 现在按 CTRL-A。找到的年份增加了一: 53 | 54 | The financial results for 2002 are better ~ 55 | than for 2000. The income increased by 50%,~ 56 | even though 2001 had more rain than 2000. ~ 57 | 2000 2001 ~ 58 | income 45,403 66,234 ~ 59 | 60 | 用 "n" 命令找到下一个年份,并按 "." 重复 CTRL-A 命令 (键入 "." 会快一点儿)。为 61 | 所有找到的年份重复 "n" 和 "."。 62 | 提示: 设定 'hlsearch' 选项以突显那些你要修改的数字,然后你可以提前观察并修 63 | 改得快些。 64 | 65 | 你可以在 CTRL-A 之前附加数字来增加一个大于一的数。假定你有这么个列表: 66 | 67 | 1. item four ~ 68 | 2. item five ~ 69 | 3. item six ~ 70 | 71 | 把光标移到 "1." 上并键入: > 72 | 73 | 3 CTRL-A 74 | 75 | 那个 "1." 就变成了 "4."。同样,你可以用 "." 命令对其它数字重复这项修改。 76 | 77 | 再看一个例子: 78 | 79 | 006 foo bar ~ 80 | 007 foo bar ~ 81 | 82 | 在这些数字上执行 CTRL-A 产生了以下结果: 83 | 84 | 007 foo bar ~ 85 | 010 foo bar ~ 86 | 87 | 7 加 1 等于 10?这是因为 Vim 根据首位出现的 "0" 而误以为 "007" 是个八进位数 88 | 字。这种表示法常用于 C 程序。如果你不要首位为 "0" 的数字被处理成八进位数字,请 89 | 用这个命令: > 90 | 91 | :set nrformats-=octal 92 | 93 | CTRL-X 命令用于减数字,用法与加数字类似。 94 | 95 | ============================================================================== 96 | *26.3* 改动多个文件 97 | 98 | 假定你有个变量名为 "x_cnt" 而你要把他改为 "x_counter"。这个变量在多个 C 文件都 99 | 被用到了。你需要在所有文件中作此改动。你得这么做。 100 | 把所有相关文件放进参数列表: > 101 | 102 | :args *.c 103 | < 104 | 这个命令会找到所有的 C 文件并编辑其中的第一个。现在你可以对所有这些文件执行替 105 | 代命令: > 106 | 107 | :argdo %s/\/x_counter/ge | update 108 | 109 | 命令 ":argdo" 把另一个命令当作其参数。而后者将对参数列表内所有的文件执行。 110 | 作为参数的替代命令 "%s" 作用于所有文本行。它用 "\" 来查找 "x_cnt"。 111 | "\<" 和 "\>" 用来指定仅匹配那些完整的词,而不是 "px_cnt" 或 "x_cnt2"。 112 | 替代命令的标志位中包含 "g",用以置换同一行文本内出现的所有的匹配 "x_cnt"。 113 | 标志位 "e" 用于避免因文件中找不到 "x_cnt" 而出现错误信息。否则 ":argdo" 命令就 114 | 会在遇到第一个找不到 "x_cnt" 的文件时中断。 115 | 字符 "|" 分隔两条命令。后面的 "update" 命令将那些有改动的文件存盘。如果没有 116 | "x_cnt" 被改成 "x_counter",这个命令什么也不做。 117 | 118 | 还有一个 ":windo" 命令,用于在所有窗口内执行其参数所规定的命令。以及 ":bufdo" 119 | 命令,对所有缓冲区执行其参数所规定的命令。使用中要小心,因为你在缓冲区列表中的 120 | 文件数量可能超过你能想像的。请用 ":buffers" 命令 (或 ":ls") 来检查缓冲区列表。 121 | 122 | ============================================================================== 123 | *26.4* 在外壳脚本里使用 Vim 124 | 125 | 假定你要在很多文件内把字符串 "-person-" 改成 "Jones",然后把它们打印出来。你该 126 | 怎么做?一种方法是键入许许多多命令。另一种是写个外壳脚本来完成这件工作。 127 | 作为一个可视的交互式的编辑器,Vim 在执行普通模式命令时表现得极为出色。然而 128 | 在批量处理时,普通模式命令无法产生简洁的带有注释的命令文件;在此,你该转而利用 129 | Ex 模式。该模式为你提供一种友好的命令行界面,方便你把命令写进一个批处理文件。 130 | ("Ex 命令" 无非是命令行 (:) 命令的另一个名称。) 131 | 以下就是你所需要的 Ex 模式命令: > 132 | 133 | %s/-person-/Jones/g 134 | write tempfile 135 | quit 136 | 137 | 你把这些命令放进文件 "change.vim" 里。现在就用这个外壳脚本在批量模式下运行编辑 138 | 器: > 139 | 140 | for file in *.txt; do 141 | vim -e -s $file < change.vim 142 | lpr -r tempfile 143 | done 144 | 145 | 循环 for-done 是一个外壳结构,用来重复执行循环结构内的两行命令,而变量 $file 146 | 则在每次循环时被设成不同的文件名。 147 | 脚本第二行的作用是对文件 $file 运行 Vim 且在 Ex 模式下 (参数 -e),并从文件 148 | "change.vim" 读取命令。参数 -s 告诉 Vim 运行在安静模式下。换言之,不要持续不断 149 | 的发出 :prompt,或针对那个问题发出的任何别的提示。 150 | 命令 "lpr -r tempfile" 打印执行中产生的文件 "tempfile" 并把它删除 (是参数 151 | -r 的作用)。 152 | 153 | 154 | 从 标 准 输 入 读 取 155 | 156 | Vim 能从标准输入读取文本。由于通常从那里读取的是命令,你得告诉 Vim 你读的是文 157 | 本。这需要在通常是文件名的地方传送一个参数 "-"。例如: > 158 | 159 | ls | vim - 160 | 161 | 这个命令让你编辑 "ls" 命令的输出结果,而不必先把那些输出文本存入一个文件。 162 | 如果你从标准输入读取文本,那么你可以用参数 "-S" 来读取脚本: > 163 | 164 | producer | vim -S change.vim - 165 | 166 | 167 | 普 通 模 式 脚 本 168 | 169 | 如果你真的要在脚本内利用普通模式命令,你可以这样来用: > 170 | 171 | vim -s script file.txt ... 172 | < 173 | 注意: 174 | 当 "-s" 不与 "-e" 一起用时,它的意思是不同的。此时,它的意思是把文件 175 | "script" 里的命令当作普通模式命令来执行。而与 "-e" 一起用时,它的意思 176 | 是保持安静,并不会把下一个参数视为文件名。 177 | 178 | 文件 "script" 里的命令就像你键入它们那样得到执行。别忘了换行符被解释成按下回车 179 | 键 。在普通模式下该键把光标移到下一行。 180 | 要创建这么一个脚本你可以编辑这个脚本文件,键入那些命令。你得想象每个命令会 181 | 产生什么样的结果。这可不那么容易。另一种方法是在你手动执行那些命令时把它们记录 182 | 下来。你可以采用下面的方法: > 183 | 184 | vim -w script file.txt ... 185 | 186 | 所有键入的字符都将被写进文件 "script"。如果你犯了个小错误,不妨继续输入。但要 187 | 记得事后更正一下这个脚本文件。 188 | 参数 "-w" 会将新键入的命令附加在一个已存在的脚本文件末尾。这在你需要一点儿 189 | 一点儿记录该脚本时是很不错的。但当你要从零开始重新记录你的脚本时,你则需要用 190 | "-W" 参数。该参数重写任何已存在的文件。 191 | 192 | ============================================================================== 193 | 194 | 下一章: |usr_27.txt| 查找命令和模式 195 | 196 | 版权: 参见 |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: 197 | -------------------------------------------------------------------------------- /doc/usr_31.cnx: -------------------------------------------------------------------------------- 1 | *usr_31.txt* 适用于 Vim 9.1 版本。 最近更新: 2020年9月 2 | 3 | VIM 用户手册 - by Bram Moolenaar 4 | 译者: lang2 5 | 6 | 利用 GUI 7 | 8 | 9 | Vim 可以很好地在终端内工作,但是 GUI 也有其优点。比如: 一个使用文件的命令可以 10 | 利用文件浏览器,需要作选择时可以利用对话框。使用快捷键可以更方便的使用菜单。 11 | 12 | |31.1| 文件浏览器 13 | |31.2| 确认 14 | |31.3| 菜单快捷键 15 | |31.4| Vim 窗口位置及大小 16 | |31.5| 杂项 17 | 18 | 后一章: |usr_32.txt| 撤销树 19 | 前一章: |usr_30.txt| 编辑程序 20 | 目录: |usr_toc.txt| 21 | 22 | ============================================================================== 23 | *31.1* 文件浏览器 24 | 25 | 在使用 File/Open... 菜单的时候你会看到一个文件浏览器。这会使你更容易找到要编辑 26 | 的文件。但是如果你想把窗口分割并编辑另一个文件呢?没有一个菜单项是做这个的。你 27 | 当然可以先用 Window/Split 然后再用 File/Open...,但这样适得其反。 28 | 大多数时候你使用 Vim 都是键入命令的,同样,打开一个文件浏览器也可以。为了让 29 | split 命令使用文件浏览器,在它前面加上 "browse" 就行了: > 30 | 31 | :browse split 32 | 33 | 选中一个文件后 ":split" 命令就会与其一起被执行。如果你取消文件对话框就什么都不 34 | 会发生。当前窗口也不会被分割。 35 | 你也可以指定一个文件名作为参数。这将告诉浏览器从那里开始查找文件。例如: > 36 | 37 | :browse split /etc 38 | 39 | 文件浏览器将以 "/etc" 作为起始目录。 40 | 41 | ":browse" 命令几乎可被添加在任何打开文件的命令前。 42 | 如果没有指定目录,Vim 会自己决定从哪里开始浏览。缺省情况 Vim 会从上次同样的 43 | 目录开始。这样当你用 ":browse split" 命令并选中了一个 "/usr/local/share" 里的 44 | 文件,下次你在用 ":browse" 时,浏览将从 "/usr/local/share" 开始。 45 | 用 'browsedir' 选项可以改变浏览的启动目录。可能的选项值包括: 46 | 47 | last 使用上次的目录 (缺省) 48 | buffer 使用当前缓冲区所在的目录 49 | current 使用当前目录 50 | 51 | 例如,当你在 "/usr" 目录内编辑文件 "/usr/local/share/readme" 时,那么命令: > 52 | 53 | :set browsedir=buffer 54 | :browse edit 55 | 56 | 会从 "/usr/local/share" 开始浏览,类似地: > 57 | 58 | :set browsedir=current 59 | :browse edit 60 | 61 | 会从 "/usr" 开始浏览。 62 | 63 | 备注: 64 | 为了避免使用鼠标,多数文件浏览器提供键盘操作。这些操作因系统而异,这里 65 | 不作解释。可能的情况下 Vim 使用系统的标准浏览器。请参阅你所用系统的文 66 | 档。 67 | 68 | 当你不是使用 GUI 版本时,你也可以使用文件浏览窗口来选择文件。然而,":browse" 69 | 命令就无效了。参阅 |netrw-browse|。 70 | 71 | ============================================================================== 72 | *31.2* 确认 73 | 74 | Vim 会保护你的文件不被意外的覆盖或者其它的信息丢失。如果你要作一些可能有危险的 75 | 事,Vim 会以一个错误信息提醒你并建议在命令后加上 ! 来确认你希望进行该操作。 76 | 为了避免重新输入一个带有 ! 的命令,你可以要求 Vim 用一个对话框来向你询问。 77 | 你就可以选择 "OK" 或 "Cancel" 来告诉 Vim 你的要求。 78 | 例如,你正在编辑一个文件并做了一些改动。你要开始编辑另一个文件: > 79 | 80 | :confirm edit foo.txt 81 | 82 | Vim 会弹出一个类似下面的对话框: 83 | 84 | +-----------------------------------+ 85 | | | 86 | | ? Save changes to "bar.txt"? | 87 | | | 88 | | YES NO CANCEL | 89 | +-----------------------------------+ 90 | 91 | 你可以作选择了。如果你希望保存变动,选择 "YES"。如果你想放弃变动: "NO"。如果你 92 | 想放弃编辑新文件的操作而返回来看看自己都做了那些改动用 "CANCEL"。 你会回到原来 93 | 的文件,你所做的改动也都还在。 94 | 95 | 就像 ":browse" 一样,":confirm" 命令也可以被加在多数编辑其它文件的命令之前。你 96 | 还可以把它们两个联起来用: > 97 | 98 | :confirm browse edit 99 | 100 | 如果当前缓冲区被改动的话这个命令会产生一个对话框。接着会弹出一个文件浏览器来选 101 | 择将要编辑的文件。 102 | 103 | 备注: 104 | 在对话框中你可以使用键盘来作选择操作。通常来说 键和光标键可以改 105 | 变选项。键入 会确认选项。但这也跟你用的系统有关。 106 | 107 | 当你不是使用 GUI 版本的时候,":confirm" 也是有效的。Vim 不会弹出一个对话框,而 108 | 是将询问显示在 Vim 窗口的底部并提示你键入选择。 > 109 | 110 | :confirm edit main.c 111 | < Save changes to "Untitled"? ~ 112 | [Y]es, (N)o, (C)ancel: ~ 113 | 114 | 你可以键入单键来作出选择。不用键入 ,这和其它命令行的输入不同。 115 | 116 | ============================================================================== 117 | *31.3* 菜单快捷键 118 | 119 | 所有的 Vim 命令都是用键盘来完成的。在不知道命令名称的情况下,使用菜单会简单 120 | 些。但是你就得把手从键盘上移开去抓鼠标。 121 | 通常菜单用键盘也可以操作。这决定于你所使用的系统,但多数情况下是这样工作 122 | 的: 将 键和菜单项中带下划线的字母连用。例如, ( 加 w) 弹出 123 | Window 菜单。 124 | 在 Window 菜单下,"split" 菜单项中的 p 下面划了线。放开 键然后按 p 就 125 | 可以选中它了。 126 | 127 | 在用 键选中菜单后,你可以用光标键来在菜单内移动。 选择一个子菜 128 | 单, 关闭之。 也用来关闭菜单。 选中一个菜单项。 129 | 130 | 使用 键来操作菜单和使用 键的映射会出现冲突。'winaltkeys' 可以用来 131 | 告诉 Vim 如何对待 键。 132 | 缺省值 "menu" 是一个明智的选择: 如果该键组合是一个菜单快捷键那么就不能被作 133 | 为映射。所有其它的键都可以。 134 | "no" 表示不使用 键组合来操作菜单。这样你就必须使用鼠标。所有 135 | 键组合都可以被用作键盘映射。 136 | "yes" 表示 Vim 会使用 键组合来操作菜单。另外的 键组合也可以用 137 | 作其它用途。 138 | 139 | ============================================================================== 140 | *31.4* Vim 窗口位置及大小 141 | 142 | 要查看当前 Vim 窗口在屏幕上的位置可以用: > 143 | 144 | :winpos 145 | 146 | 这只对 GUI 有效。输出可能是这样的: 147 | 148 | Window position: X 272, Y 103 ~ 149 | 150 | 位置是以屏幕像素为单位的。你可以通过数字来将 Vim 窗口移动到别处。例如,将其向 151 | 左移动一百个像素: > 152 | 153 | :winpos 172 103 154 | < 155 | 备注: 156 | 报告的窗口位置和窗口被移动的位置可能会有小的出入。这是由窗口周围的边框 157 | 引起的。边框是被窗口管理器加上的。 158 | 159 | 你可以在你的启动脚本中使用这个命令来将窗口定位到一个指定的位置。 160 | 161 | Vim 窗口的大小是以字符数目计算的。因此它和所使用的字体的大小有关。你可以查看当 162 | 前的窗口大小: > 163 | 164 | :set lines columns 165 | 166 | 要改变窗口大小只要改变 'lines' 和/或 'columns' 选项的值即可: > 167 | 168 | :set lines=50 169 | :set columns=80 170 | 171 | 取得窗口大小的操作在终端和在 GUI 上都可以。但是设定大小在绝大多数终端里都是不 172 | 可能的。 173 | 174 | 在启动 X-Window 版本的 gvim 时你可以在命令行指定窗口的位置和大小: > 175 | 176 | gvim -geometry {width}x{height}+{x-offset}+{y-offset} 177 | 178 | {width} 和 {height} 的单位是字符。{x-offset} 和 {y-offset} 的单位是像素。例: > 179 | 180 | gvim -geometry 80x25+100+300 181 | 182 | ============================================================================== 183 | *31.5* 杂项 184 | 185 | 你可以使用 gvim 来编辑一个 e-mail。在你的 e-mail 程序里你得选择 gvim 作为其编 186 | 辑程序。当你尝试这种配置的时候,你会发现行不通: 邮件程序认为编辑已经结束了,可 187 | 实际上 gvim 还在运行着! 188 | 这里的情况是由于 gvim 启动时会将自己从外壳分离出来的缘故。如果你是从终端启 189 | 动 gvim 的话这当然没有问题,你还可以在外壳里作其它事。但如果你的确希望等待 190 | gvim 结束的话,你必须阻止这个分离动作。"-f" 参数就是用来做这个的: > 191 | 192 | gvim -f file.txt 193 | 194 | "-f" 代表前台 (foreground)。这样 Vim 就会挂起它启动所在的外壳,直到你编辑完毕 195 | 并退出为止。 196 | 197 | 198 | 推 迟 启 动 GUI 199 | 200 | 在 Unix 上你可以先在终端里启动 Vim。当你在一个外壳里完成各种不同任务的时候这很 201 | 有方便。如果当你在编辑某个文件时决定你想使用 GUI,你可以这样做: > 202 | 203 | :gui 204 | 205 | Vim 就会打开 GUI 窗口并不再使用终端。你可以继续在终端里作其它事情。"-f" 参数在 206 | 这里也可以用来将 GUI 放置在前台: ":gui -f"。 207 | 208 | 209 | GVIM 启 动 文 件 210 | 211 | 当 gvim 启动时,它会读取 gvimrc 文件。这和启动 Vim 时用到的 vimrc 文件类似。 212 | gvimrc 文件可以被用来为 GUI 设定专用的选项和命令。例如,你可以设定 'lines' 的 213 | 值来指定窗口的大小: > 214 | 215 | :set lines=55 216 | 217 | 在终端里使用是没有用的,因为它的大小是固定的 (除了那些支持调整大小的 xterm)。 218 | Vim 在 vimrc 文件相同的地方找寻 gvimrc 文件。通常来说在 Unix 上是 219 | "~/.gvimrc"; MS-Windows 上是 "$VIM/_gvimrc"。$MYGVIMRC 环境变量设为该值,这样 220 | 你可以用下面的命令编辑此文件,如果有的话: > 221 | 222 | :edit $MYGVIMRC 223 | < 224 | 如果出于某种原因你不想使用通常的 gvimrc 文件,你可以利用 "-U" 参数来指定另 225 | 外的一个: > 226 | 227 | gvim -U thisrc ... 228 | 229 | 这使你可以用 gvim 来做另外一类编辑。例如你可以用另外的字体大小。 230 | 要完全跳过读取 gvimrc 文件: > 231 | 232 | gvim -U NONE ... 233 | 234 | ============================================================================== 235 | 236 | 下一章: |usr_32.txt| 撤销树 237 | 238 | 版权: 参见 |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: 239 | -------------------------------------------------------------------------------- /doc/usr_32.cnx: -------------------------------------------------------------------------------- 1 | *usr_32.txt* 适用于 Vim 9.1 版本。 最近更新: 2010年7月 2 | 3 | VIM 用户手册 - by Bram Moolenaar 4 | 译者: Willis 5 | 6 | 撤销树 7 | 8 | 9 | Vim 提供了多层撤销功能。如果你撤销了一些改变然后又进行了一些新的改变,你就在撤 10 | 销树里建立了一个分支。本文本讨论如何在分支间来回移动。 11 | 12 | |32.1| 撤销到文件写入时的状态 13 | |32.2| 为每次改变进行编号 14 | |32.3| 撤销树内任意跳转 15 | |32.4| 时间旅行 16 | 17 | 后一章: |usr_40.txt| 创建新的命令 18 | 前一章: |usr_31.txt| 利用 GUI 19 | 目录: |usr_toc.txt| 20 | 21 | ============================================================================== 22 | *32.1* 撤销到文件写入时的状态 23 | 24 | 有时你做了一些改变,然后发现还是想恢复到最近写入文件时的状态。没问题,用下面的 25 | 命令就可以: > 26 | 27 | :earlier 1f 28 | 29 | 这里,"f" 代表 "file" (文件)。 30 | 31 | 可以重复此命令,回到更遥远的过去。使用不同于 1 的计数值可以回去得快一些。 32 | 33 | 如果回去太久了,可以这样往前: > 34 | 35 | :later 1f 36 | 37 | 注意 这些命令真的是依据时间序列进行的。如果你在撤销一些改变后又进行过改变,这 38 | 一点很有区别。下一节有所解释。 39 | 40 | 另外也请 注意 我们说的是文本写入。要把撤销信息写入文件见 |undo-persistence|。 41 | 42 | ============================================================================== 43 | *32.2* 为每次改变进行编号 44 | 45 | |02.5| 一节,我们只讨论了单线的撤销/重做。其实,可以出现分支。当你撤销了一些改 46 | 变,又进行了一些新的改变,新的改变构成了撤销树的一个分支。 47 | 48 | 让我们从文本 "one" 开始。第一个要做的改变是附加 " too"。然后移动到第一个 'o' 49 | 上并修改为 'w'。这时我们有了两个改变,分别编号为 1 和 2,而文本有三个状态: 50 | 51 | one ~ 52 | | 53 | 改变 1 54 | | 55 | one too ~ 56 | | 57 | 改变 2 58 | | 59 | one two ~ 60 | 61 | 如果我们撤销一次改变,回到 "one too",然后把 "one" 换成 "me",我们就在撤销树里 62 | 建立了一个分支: 63 | 64 | one ~ 65 | | 66 | 改变 1 67 | | 68 | one too ~ 69 | / \ 70 | 改变 2 改变 3 71 | | | 72 | one two me too ~ 73 | 74 | 现在你可以用 |u| 命令来撤销。如果你做两次,你得到的是 "one"。用 |CTRL-R| 来重 75 | 做,你会到达 "one too"。多做一次 |CTRL-R| 又把你带到 "me too"。现在我们看到, 76 | 撤销/重做使用最近使用的分支,在树内上下移动。 77 | 78 | 这里重要的是改变发生的顺序。这里说的改变不考虑撤销和重做。每次改变后,你会得到 79 | 一个新的文本状态。 80 | 81 | 注意 只有改变被编号,上面显示的文本没有标识符。通常,通过它上方的改变号来引用 82 | 它。但有时也通过他下方的某个改变之一来引用。特别是在树内往上移动的时候,这样你 83 | 可以知道哪个改变刚刚被撤销掉。 84 | 85 | ============================================================================== 86 | *32.3* 撤销树内任意跳转 87 | 88 | 那么你现在怎么能到 "one two" 呢?你可以用这个命令: > 89 | 90 | :undo 2 91 | 92 | 文本现在成为了 "one two",因为它在改变号 2 之下。用 |:undo| 命令可以跳转到树内 93 | 任何改变之下的文本。 94 | 95 | 现在再进行一项改变: 把 "one" 改成 "not": 96 | 97 | one ~ 98 | | 99 | 改变 1 100 | | 101 | one too ~ 102 | / \ 103 | 改变 2 改变 3 104 | | | 105 | one two me too ~ 106 | | 107 | 改变 4 108 | | 109 | not two ~ 110 | 111 | 现在你又改了主意想回到 "me too" 了。用 |g-| 命令。它在时间点上往后退,也就是 112 | 说,它不是在树内上下移动,而是回到之前所在的改变。 113 | 114 | 你可以重复 |g-|,这样你会看到文本的变化过程: 115 | me too ~ 116 | one two ~ 117 | one too ~ 118 | one ~ 119 | 120 | 用 |g+| 时间点上往前进: 121 | one ~ 122 | one too ~ 123 | one two ~ 124 | me too ~ 125 | not two ~ 126 | 127 | |:undo| 用于你知道你要跳转到哪个改变的场合。|g-| 和 |g+| 用于你不知道具体要到 128 | 达的改变号的情况。 129 | 130 | 你可以在 |g-| 和 |g+| 之前加上计数来重复执行。 131 | 132 | ============================================================================== 133 | *32.4* 时间旅行 134 | 135 | 如果你在文本上工作了一段时间,撤销树变得相当大。这时你可能想回到几分钟之前的文 136 | 本上。 137 | 138 | 要看撤销树里有什么分支,用: > 139 | 140 | :undolist 141 | < number changes time ~ 142 | 3 2 16 seconds ago 143 | 4 3 5 seconds ago 144 | 145 | 这里你可以看到每个分支上叶结点的编号,还有改变发生的时间。假定我们在改变号 4 146 | 下方的 "not two" 那里,你可以这样回到十秒前: > 147 | 148 | :earlier 10s 149 | 150 | 取决于改变发生了多长时间,你回到达树内的某个位置。|:earlier| 命令参数可以用 151 | "m" 代表分钟,"h" 代表小时,"d" 代表天。用一个很大的数,你可以一路回到很久以 152 | 前: > 153 | 154 | :earlier 100d 155 | 156 | 要 (再次) 进入未来世界,用 |:later| 命令: > 157 | 158 | :later 1m 159 | 160 | 参数可以用 "s"、"m" 和 "h",和 |:earlier| 完全类似。 161 | 162 | 要看到更多的细节,或者要对信息进行操作,可以用 |undotree()| 函数。要看看它返回 163 | 什么: > 164 | 165 | :echo undotree() 166 | 167 | ============================================================================== 168 | 169 | 下一章: |usr_40.txt| 创建新的命令 170 | 171 | 版权: 参见 |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: 172 | -------------------------------------------------------------------------------- /doc/usr_43.cnx: -------------------------------------------------------------------------------- 1 | *usr_43.txt* 适用于 Vim 9.1 版本。 最近更新: 2017年8月 2 | 3 | VIM 用户手册 - by Bram Moolenaar 4 | 译者: lang2 5 | 6 | 使用文件类型 7 | 8 | 9 | 当你在编辑某一类型文件时,例如一个 C 程序或者一个外壳脚本,你通常重复使用同样 10 | 的设置和键盘映射。很快你就会对每一次都要手动设置这些感到厌烦。这一章就告诉你如 11 | 果自动化这些设置。 12 | 13 | |43.1| 为一类文件编写的插件 14 | |43.2| 添加一个文件类型 15 | 16 | 下一章: |usr_44.txt| 自定义语法高亮 17 | 前一章: |usr_42.txt| 添加新的菜单 18 | 目录: |usr_toc.txt| 19 | 20 | ============================================================================== 21 | *43.1* 为一类文件编写的插件 *filetype-plugin* 22 | 23 | 如何使用文件类型插件已经在 |add-filetype-plugin| 这里讨论过了。不过你很可能对 24 | 缺省的最基本的设定不满意。假定对于所有 C 文件你希望将 'softtabstop' 选项定为 4 25 | 并定义一个插入三行注释的键盘映射。下面的两步可以做到: 26 | 27 | *your-runtime-dir* 28 | 1. 创建你自己的运行时目录。在 Unix 上通常是 "~/.vim"。在这个目录下创建 29 | "ftplugin" 目录: > 30 | 31 | mkdir ~/.vim 32 | mkdir ~/.vim/ftplugin 33 | < 34 | 如果你不是 Unix 用户的话,看看 'runtimepath' 选项的值就知道 Vim 在哪里找 35 | "ftplugin" 目录了: > 36 | 37 | set runtimepath 38 | 39 | < 通常你应该使用该列表中的第一个目录名 (第一个逗号之前的那个)。如果你不喜欢缺 40 | 省值的话,你也可以在 |vimrc| 文件里把自己的目录名加到 'runtimepath' 选项的 41 | 最前面。 42 | 43 | 2. 创建 "~/.vim/ftplugin/c.vim" 文件,并加入以下内容: > 44 | 45 | setlocal softtabstop=4 46 | noremap c o/**************/ 47 | let b:undo_ftplugin = "setl softtabstop< | unmap c" 48 | 49 | 现在试着编辑一个 C 文件。你就会注意到 'softtabstop' 选项的值已经被设为 4 了。 50 | 但是当你编辑另外的文件的时候就会被复位到 0。那是因为用了 ":setlocal" 命令。这 51 | 样,对 'softtabstop' 选项的设置仅对本缓冲区有效。一旦你编辑另外一个文件,该选 52 | 项的值就会被设定成那个缓冲区的缺省值,或者最近一次被 ":set" 命令设定的值。 53 | 54 | 同样地,键盘映射 "\c" 在编辑另外一个缓冲区时就不起作用了。":map " 命令 55 | 建立了一个仅对当前缓冲区有效的映射。其它映射命令 ":map!",":vmap" 等也是如此。 56 | 映射中的 || 被 "maplocalleader" 变量的值所替代。 57 | 58 | b:undo_ftplugin 的设定用于文件类型被设成其它值的时候。那种情况下你会想撤销自己 59 | 的首选项。此 b:undo_ftplugin 变量作为命令执行。小心字符串里有特殊含义的字符, 60 | 如反斜杠。 61 | 62 | 在下面这个目录里你可以找到一些文件类型插件的例子: > 63 | 64 | $VIMRUNTIME/ftplugin/ 65 | 66 | 进一步关于为某一类文件编写插件的知识可以在这里读到: |write-plugin|。 67 | 68 | ============================================================================== 69 | *43.2* 添加一个文件类型 70 | 71 | 如果你正在使用一种 Vim 不认识的文件,这一节告诉你怎么将这种文件介绍给 Vim。你 72 | 需要一个自己的运行时目录。参阅上面的 |your-runtime-dir|。 73 | 74 | 创建一个文件 "filetype.vim" 并加入一个为你的文件类型编写的自动命令。(关于自动 75 | 命令的阐述在 |40.3|。) 例: > 76 | 77 | augroup filetypedetect 78 | au BufNewFile,BufRead *.xyz setf xyz 79 | augroup END 80 | 81 | 这样所有以 ".xyz" 结尾的文件将被认为 "xyz" 类型的文件。":augroup" 命令将该自动 82 | 命令加入到 "filetypedetect" 组。这样做的作用是: 当用户用 ":filetype off" 命令 83 | 的命令时,所有文件类型检测的自动命令都被忽略掉。"setf" 命令将 'filetype' 选项 84 | 设为该命令的参数,除非该选项已经被设置过。该命令保证 'filetype' 不会被重复设 85 | 定。 86 | 87 | 你可以使用各种各样的模式来匹配你的文件名。也可以包括目录名。见 88 | |autocmd-patterns|。例如,"/usr/share/scripts/" 目录下的文件都是 "ruby" 文件, 89 | 但没有文件扩展名。加入如下一行就可以了: > 90 | 91 | augroup filetypedetect 92 | au BufNewFile,BufRead *.xyz setf xyz 93 | au BufNewFile,BufRead /usr/share/scripts/* setf ruby 94 | augroup END 95 | 96 | 然而,如果你编辑一个叫做 /usr/share/scripts/README.txt 的文件,那可不是 ruby 97 | 文件。使用以 "*" 结尾的模式的不妥之处就在于它会匹配过多的文件。为了避免这种情 98 | 况,把那个 filetype.vim 文件放到位于 'runtimepath' 最后的那个目录。以 Unix 为 99 | 例,你可以用 "~/.vim/after/filetype.vim"。 100 | 现在你可以把文本文件的检测加入 ~/.vim/filetype.vim: > 101 | 102 | augroup filetypedetect 103 | au BufNewFile,BufRead *.txt setf text 104 | augroup END 105 | 106 | 'runtimepath' 首先找到该文件。最后才是 ~/.vim/after/filetype.vim: > 107 | 108 | augroup filetypedetect 109 | au BufNewFile,BufRead /usr/share/scripts/* setf ruby 110 | augroup END 111 | 112 | Vim 会在每一个 'runtimepath' 列出的目录中查找 "filetype.vim" 文件。先是 113 | ~/.vim/filetype.vim。匹配 *.txt 文件的自动命令是在那里定义的。接着 Vim 找到 114 | $VIMRUNTIME 中的 filetype.vim,因为该目录在 'runtimepath' 的中部。最后才找到 115 | ~/.vim/after/filetype.vim,然后其中检测 ruby 文件的自动命令才被添加到系统中。 116 | 现在你在编辑 /usr/share/scripts/README.txt 时,自动命令是以其被定义的次序一 117 | 一检测的。因为匹配 *.txt 模式,这样就会执行 "setf text" 命令,将文件类型设定为 118 | "text"。之后 ruby 文件的模式也匹配了,"setf ruby" 被执行。但是因为 'filetype' 119 | 已经被设为 "text" 了,后者就什么作用也不起了。 120 | 当你编辑文件 /usr/share/scripts/foobar 同样的自动命令被检测。但只有 ruby 文 121 | 件的那个匹配,因此 "setf ruby" 命令将 'filetype' 设为 ruby。 122 | 123 | 124 | 依 内 容 而 定 125 | 126 | 如果你的文件无法以其文件名决定类型,你可以通过其内容来确定。例如,很多脚本文件 127 | 都是这样开始的: 128 | 129 | #!/bin/xyz ~ 130 | 131 | 为了认出这个脚本,在你的运行时目录 (和你的 filetype.vim 在同一个目录) 下创建一 132 | 个 "scripts.vim" 文件。类似这样: > 133 | 134 | if did_filetype() 135 | finish 136 | endif 137 | if getline(1) =~ '^#!.*[/\\]xyz\>' 138 | setf xyz 139 | endif 140 | 141 | 先用 did_filetype() 可以避免你无谓的检查已经被检测出文件类型的文件。这样就不必 142 | 浪费时间了: "setf" 一点作用也没有。 143 | scripts.vim 文件被缺省的 filetype.vim 文件中的一个自动命令调用。因此,检测 144 | 的次序是: 145 | 146 | 1. 'runtimepath' 内 $VIMRUNTIME 之前目录中的 filetype.vim 文件 147 | 2. $VIMRUNTIME/filetype.vim 的前部 148 | 3. 'runtimepath' 内所有的 script.vim 文件 149 | 4. $VIMRUNTIME/filetype.vim 余下的部分 150 | 5. 'runtimepath' 内 $VIMRUNTIME 之后目录中的 filetype.vim 文件 151 | 152 | 如果这样对你还是不够的话,加入一个匹配所有文件的自动命令然后调用一个脚本或者执 153 | 行一个函数来检查文件的内容。 154 | 155 | ============================================================================== 156 | 157 | 下一章: |usr_44.txt| 自定义语法高亮 158 | 159 | 版权: 参见 |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: 160 | -------------------------------------------------------------------------------- /doc/usr_50.cnx: -------------------------------------------------------------------------------- 1 | *usr_50.txt* 适用于 Vim 9.1 版本。 最近更新: 2022年8月 2 | 3 | VIM 用户手册 - by Bram Moolenaar 4 | 译者: Willis 5 | 6 | 高级 Vim 脚本编写 7 | 8 | 9 | |50.1| 例外 10 | |50.2| 带可变数目参数的函数 11 | |50.3| 恢复视窗 12 | 13 | 下一章: |usr_51.txt| 创建插件 14 | 前一章: |usr_45.txt| 选择你的语言 (locale) 15 | 目录: |usr_toc.txt| 16 | 17 | ============================================================================== 18 | *50.1* 例外 19 | 20 | 让我们从一个例子开始: > 21 | 22 | try 23 | read ~/templates/pascal.tmpl 24 | catch /E484:/ 25 | echo "Sorry, the Pascal template file cannot be found." 26 | endtry 27 | 28 | 如果该文件不存在的话,`read` 命令就会失败。这段代码可以捕捉到该错误并向用户给 29 | 出一个友好的信息,而不是一个一般的出错信息。 30 | 31 | 在 `try` 和 `endtry` 之间的命令产生的错误将被转变成为例外。例外以字符串的形式 32 | 出现。当错误发生时,该字符串包含出错信息。而每一个出错信息都有一个对应的错误 33 | 码。在上面的例子中,我们捕捉到的错误包括 "E484:"。Vim 确保这个错误码始终不变 34 | (文字可能会变,例如被翻译)。 35 | 36 | 除了使出错信息更友好之外,Vim 也会继续执行 `:endtry` 之后的命令。否则,一旦遇 37 | 到未捕获的错误,脚本/函数/映射的执行会立即中止。 38 | 39 | 当 `read` 命令引起其它错误时,模式 "E484:" 不会被匹配。因此该例外不会被捕获, 40 | 结果是一个一般的出错信息而且执行被中止。 41 | 42 | 你可能想这样做: > 43 | 44 | try 45 | read ~/templates/pascal.tmpl 46 | catch 47 | echo "Sorry, the Pascal template file cannot be found." 48 | endtry 49 | 50 | 这意味着所有的错误都将被捕获。然而这样你就完全无法得到那些指出不同问题的错误信 51 | 息,比如说 "E21: Cannot make changes, 'modifiable' is off"。捕获所有错误请三思 52 | 而后行! 53 | 54 | 另一个有用的机制是 `finally` 命令: > 55 | 56 | var tmp = tempname() 57 | try 58 | exe ":.,$write " .. tmp 59 | exe "!filter " .. tmp 60 | :.,$delete 61 | exe ":$read " .. tmp 62 | finally 63 | delete(tmp) 64 | endtry 65 | 66 | 这个例子将自光标处到文件尾的所有行通过过滤器 "filter"。该程序的参数是文件名。 67 | 无论过滤器是否正常工作、`try` 和 `finally` 之间发生了什么错误、或者用户按 68 | CTRL-C 中断了过滤器,`delete(tmp)` 命令始终被执行。这可以确保你在任何情况下不 69 | 会留下一个临时文件。 70 | 71 | `finally` 本身并不捕获例外,错误仍然会中止后续行的执行。 72 | 73 | 关于例外处理更多的讨论可以阅读参考手册: |exception-handling|。 74 | 75 | ============================================================================== 76 | *50.2* 带可变数目参数的函数 77 | 78 | Vim 允许你定义参数个数可变的函数。下面的例子给出一个至少有一个参数 (start),但 79 | 可以多达 20 个附加参数的函数: > 80 | 81 | def Show(start: string, ...items: list) 82 | 83 | 函数中的变量 "items" 会是包含额外参数的列表。用法就像普通的列表,如: > 84 | 85 | def Show(start: string, ...items: list) 86 | echohl Title 87 | echo "start is " .. start 88 | echohl None 89 | for index in range(len(items)) 90 | echon $" Arg {index} is {items[index]}" 91 | endfor 92 | echo 93 | enddef 94 | 95 | 可以这样调用: > 96 | 97 | Show('Title', 'one', 'two', 'three') 98 | < start is Title Arg 0 is one Arg 1 is two Arg 2 is three ~ 99 | 100 | 上例中 `echohl` 命令被用来给出接下来的 `echo` 命令如何高亮输出。`echohl None` 101 | 终止高亮。`echon` 命令除了不输出换行符外,和 `echo` 一样。 102 | 103 | 如果调用时只给出一个参数,"items" 列表会为空。 104 | `range(len(items))` 返回索引的列表,可以在其上用 `for` 循环,这方面后面会继续 105 | 解释。 106 | 107 | ============================================================================== 108 | *50.3* 恢复视窗 109 | 110 | 有时你想跳转到别处,作些修改,然后跳回到原先的位置和视图。例如要修改文件头部的 111 | 一部分。可用两个函数实现: > 112 | 113 | var view = winsaveview() 114 | # 移动并作修改 115 | winrestview(view) 116 | 117 | ============================================================================== 118 | 119 | 下一章: |usr_51.txt| 创建插件 120 | 121 | 版权: 参见 |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: 122 | -------------------------------------------------------------------------------- /doc/vietnamese.cnx: -------------------------------------------------------------------------------- 1 | *vietnamese.txt* 适用于 Vim 9.1 版本。 最近更新: 2025年3月 2 | 3 | 4 | VIM 参考手册 by Phạm Bình An 5 | 6 | 7 | Vim 的越南语言支持 *vietnamese* *Vietnamese* 8 | 9 | 1. 介绍 |vietnamese-intro| 10 | 2. 越南语键盘映射表 |vietnamese-keymap| 11 | 3. 本地化 |vietnamese-l10n| 12 | 13 | =============================================================================== 14 | 1. 介绍 15 | *vietnamese-intro* 16 | Vim 支持越南语有下列方式: 17 | 18 | - 内建的 |vietnamese-keymap|,可在 |Insert-mode| 和 |search-commands| 里用美国 19 | 键盘布局键入越南语字符。 20 | - 越南语的本地化,见 |vietnamese-l10n| 21 | 22 | =============================================================================== 23 | 2. 越南语键盘映射表 24 | *vietnamese-keymap* 25 | 可用系统原生的键盘切换程序或 Vim 发布包含的越南语键盘映射表之一来切换语言,如 26 | 下 > 27 | :set keymap=vietnamese-telex_utf-8 28 | < 29 | 更多信息可见 |'keymap'|。 30 | 31 | 使用后者,即使没有越南语输入法引擎 (IME) 或者要 Vim 独立于系统范围的键盘设置 32 | 时 (置位 'imdisable' 时) 还能输入越南语。也可用 |:map| 某个键来切换键盘。 33 | 34 | Vim 带有以下越南语键盘映射表: 35 | - *vietnamese-telex_utf-8* Telex 输入法,|UTF-8| 编码。 36 | - *vietnamese-viqr_utf-8* VIQR 输入法,|UTF-8| 编码。 37 | - *vietnamese-vni_utf-8* VNI 输入法,|UTF-8| 编码。 38 | 39 | *vietnamese-ime_diff* 40 | 因为这些键盘映射表设计目标是尽量精简,它们不支持对应输入法的完整功能。下面描述 41 | 其中的区别: 42 | 43 | - 只能一次键入单个字符,先输入基础字符,再输入附加符号。例如,要用 44 | |vietnamese-vni_utf-8| 键入 `nến`,应键入 `ne61n`,而不是 `nen61` 或 `ne6n1` 45 | - 对于多于 1 个附加符号的字符,需要键入元音标记,然后是调号标记。例如,要用 46 | |vietnamese-telex_utf-8| 键入 `ồ`,应键入 `oof`,而不是 `ofo`。 47 | - 用 |vietnamese-telex_utf-8| 时,所有键入的字母必须大写才能产生带附加符号的大 48 | 写字符。如 `Ừ` 必须键入 `UWF`。 49 | - 用 |vietnamese-telex_utf-8| 时,加入来自 VNI 的转义字符 `\`,这样删除了容易 50 | 引起二义性的令人困惑的为了键入 `oo` 的 `ooo` 输入。例如,要键入单词 51 | `Đoòng`,应键入 `DDo\ofng`。 52 | - 不支持 Simple Telex (v1 和 v2),包括 `w[]{}` 风格。 53 | - 不支持 Telex 里用 `z` 或 VNI 和 VIQR 里用 `0` 删除附加符号。 54 | 55 | =============================================================================== 56 | 3. 本地化 57 | *vietnamese-l10n* 58 | Vim 可使用越南语的 |messages|。要看到越南语的消息,可运行命令 |:language| 并带 59 | 越南语 locale 名作为参数。例如 > 60 | :language vi_VN 61 | < 或 > 62 | :language vi_VN.utf-8 63 | < 64 | 注意 越南语 locale 名可能取决于系统。详见 |mbyte-first|。 65 | 66 | |vimtutor| 也有越南语版本。要以越南语启动 Vimtutor,在终端运行命令: > 67 | vimtutor vi 68 | < 69 | =============================================================================== 70 | vim:tw=78:ts=8:noet:ft=help:norl: 71 | -------------------------------------------------------------------------------- /doc/workshop.cnx: -------------------------------------------------------------------------------- 1 | *workshop.txt* 适用于 Vim 9.1 版本。 最近更新: 2020年1月 2 | 3 | 4 | VIM 参考手册 by Bram Moolenaar 5 | 译者: Willis 6 | 7 | 8 | Sun Visual WorkShop 特性 *workshop* *workshop-support* 9 | 10 | 2019 年 1 月的 8.1.0763 补丁删除了 WorkShop 的支持。此产品已有很长时间不能用, 11 | 而且被 |NetBeans| 所替代。 12 | 13 | 14 | vim:tw=78:ts=8:noet:ft=help:norl: 15 | -------------------------------------------------------------------------------- /guides.txt: -------------------------------------------------------------------------------- 1 | VIMCDOC TRANSLATION GUIDE 2 | 3 | 4 | 本文件用来作为一个翻译文档时的指南。包括必须统一的条目以及参考。任何意见和建议 5 | 请和 Willis (yianwillis@gmail.com) 联系。 6 | 7 | https://github.com/yianwillis/vimcdoc 8 | 9 | ============================================================================== 10 | Compulsory Rules ~ 11 | 12 | 1. 不能改动原文件的格式!不能改变各文本的颜色!请打开语法高亮,并使用 13 | > 14 | :syntax on 15 | :set list 16 | :set listchars=tab:>-,trail:- 17 | < 18 | 命令来显示所有的字符用来帮助排板。 19 | 同时,VIM 在帮助文件中使用了很多标记字符,用来帮助语法高亮。 20 | > 21 | :hi Ignore guifg=color 22 | :hi Ignore ctermfg=color 23 | < 24 | 可以使它们被显示出来 (使用比较醒目的 color) 25 | 26 | 2. 一些 VIM 的专用术语必须统一。参阅 dict.txt 中的 Compulsory 区。 27 | 28 | 3. 如果你不熟悉 VIM 帮助: 在 | | * * < > 等等之间的文本是 vim 用来 hyperlink 29 | 的。不用翻译。 30 | 31 | 4. 各文件之间的衔接: VIM 文档各文件之间互相参阅, 例如在每个 usr_??.txt 的最后 32 | 都将给出前后的文件主题, 翻译时请参考已经存在的文件, 以确保各个文件中的说法 33 | 一致。 34 | 35 | 5. 所有文档应当使用 unix 行结束符。 36 | > 37 | :set ff=unix 38 | < 39 | 6. 当在 Vim 文档中出现全大写字母以表示某节的开始时,在翻译的中文字之间加入空 40 | 格。例如: 41 | DELETING VARIABLES 42 | => 43 | 删 除 变 量 44 | 45 | 7. 行宽: Vim 帮助文件有固定的行宽--78,对于英文文本,Vim 可以自动排版,可是这 46 | 对中文文本无效。所以,请在翻译时注意手动调整行宽,不要超过78。 47 | 48 | 8. 编码:所有翻译后的文本使用 UTF-8 编码。为保持最大兼容性,请在翻译完文档后, 49 | 运行以下命令确保帮助文档能在 enc=euc-cn 环境下查看。 50 | 51 | $ iconv -f utf-8 -t euc-cn file.txt >/dev/null 52 | 53 | 9. 翻译日期:每个文档的第一行均有一个 Last Change: 翻译为 “最近更新” 然后使用 54 | 译文的更新日期。 55 | 56 | 10. 标点符号不能出现在行首。对引号一律使用 *英文引号* 。 57 | 58 | 11. 关于 note, Note 的翻译:视情况而定,可译为 “注意” 或 “备注”,之后_必须_ 59 | 是英文 ':' 或空格。以便 Vim 正确地分割 keyword。 60 | 61 | ============================================================================== 62 | Recommended Rules ~ 63 | 64 | 1. 译者: 译者可将自己的名字 (nickname,etc) 置于文件中原文作者的名字下面一行。 65 | 格式为 译者: (英文标点)名字。但应同时给出本项目网址: 66 | http://github.com/yianwillis/vimcdoc 67 | 68 | 2. 这个项目翻译的目标是 Vim 最新版本文档,如果你还在使用较老的版本,请到 Vim 69 | 主页下载,不然文档中介绍新功能可能不适用。 70 | 注意: 非 Vim 官方发行的 plugin 的文档目前不在翻译之列。 71 | 72 | 3. 标点符号:建议在不改变原文的意思前提下 "尽量" 使用中文标点。有些地方的标点 73 | 有特殊的功能,不能翻译为中文。例如 regexp 中的'.' 74 | 75 | 4. 中英文混合:因为英文本身带有空格,而中文没有,建议在混合中英文时加入空格。 76 | 如同上面条目 2 中提到 Vim 的名字时。这样比较清楚。 77 | 78 | 79 | ============================================================================== 80 | Using AAP ~ 81 | 82 | 你可以使用 AAP 来 commit 你的翻译结果。 建议 Vimdoc 翻译的成员使用 AAP。 AAP 83 | 是跨平台的,在 Linux/BSD 和 Windows 平台都可以使用。 84 | 85 | 1. 以下是 lang2 在 translate mailinglist 中发的一份用法。 86 | 87 | Download AAP from http://www.a-a-p.org 88 | 89 | > In an effort to make my life (an hopefully others) 90 | > easier :-), I've been playing with Bram's new toy - aap 91 | > for a while. I am now coming to a stage where it can be 92 | > used to more or less replace those Makefiles. 93 | > 94 | > I've checked in three file: 95 | > data/common.aap 96 | > data/doc/main.aap 97 | > data/doc/vim2html.pl 98 | > 99 | > These at this moment only handles automatic updating 100 | > of the HTML version of the translation for both sites 101 | > (wandys have to patch the recipe for cosoft). I've tested 102 | > it with pi_gzip.txt (forgot to mention this) and it 103 | > looks OK so far. 104 | > 105 | > I'd like to suggest you to install aap (http://www.a-a-p.org) 106 | > and give it a try. It won't hurt you. After the installation, 107 | > the first thing you have to do to use it is to modify the 108 | > common.aap to use your own sf handle. Then goto data/doc and try this: 109 | > - 'aap' will tell you what you can do 110 | > - 'aap ' will check in your change to that file 111 | > and generate HTML version and copy it to the remote server. 112 | > 113 | > Quite easy isn't it? 114 | 115 | 2. 在 Windows 平台上要注意的问题。 116 | (1) AAP 安装完毕后,记得要把 AAP 可执行文件的路径和其下的子目录 bin 加到环境 117 | 变量 PATH 中。在我这里,是这两个目录: 118 | > 119 | C:\Program Files\Aap\Exec; C:\Program Files\Aap\Exec\bin 120 | < 121 | (2) lang2 编写的脚本里面用到几个命令行软件:tar,gzip, 一般情况下,Windows 用 122 | 户没有这些软件,不过没关系,可以很方便的使用 AAP 下载。直接在 Dos 窗口中 123 | 执行: 124 | > 125 | aap --install tar 126 | aap --install gzip 127 | < 128 | 软件自动安装在 AAP 子目录 bin 下面。 129 | 130 | (3) 还有一个软件 NSIS 需要安装。它是用来制作 vim 文档的 Windows 安装程序的。 131 | 它的网址是 http://nsis.sf.net 。记住:安装完毕后,也要把的路径加到环境变 132 | 量 PATH 中,只有这样,脚本才能使用这个软件。 133 | 134 | (4) 如果想发布软件,需要输入下面的命令: 135 | > 136 | aap release 137 | < 138 | 会生成两个软件包,*nix 和 Windows 的安装包 139 | 140 | vim:tw=78:ts=8:ft=help:norl: 141 | -------------------------------------------------------------------------------- /hooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | vim --clean -ec "helptags doc|q" - 4 | git add doc/tags-cn 5 | -------------------------------------------------------------------------------- /plugin/vimcdoc.vim: -------------------------------------------------------------------------------- 1 | " Vim plugin to set the default help language to Chinese 2 | " Maintainer: Willis (http://vimcdoc.sf.net) 3 | " Last Change: 2008 Dec 12 4 | 5 | if exists("g:loaded_vimcdoc") 6 | finish 7 | endif 8 | let g:loaded_vimcdoc = 1 9 | 10 | if version >= 603 11 | set helplang=cn 12 | endif 13 | 14 | " vim: ts=8 sw=2 15 | -------------------------------------------------------------------------------- /syntax/help_cn.vim: -------------------------------------------------------------------------------- 1 | " Vim syntax extention file for Chinese help 2 | scriptencoding utf-8 3 | " Language: Vim help file 4 | " Maintainer: lang2 (http://vimcdoc.sf.net) 5 | " Last Change: 2005 March 6 | " Usage: copy this file to $VIMRUNTIME/syntax 7 | 8 | syn match helpHeadlineCn "^\([^\u0000-\u00ff]\|[A-Z]\)\(\s[^\u0000-\u00ff -.()_:]\|[A-Z0-9 ]\)*\ze\(\s\+\*\|$\)" 9 | syn match helpVimCn "VIM \(参考\|用户\)手册.*" 10 | syn keyword helpNoteCn 注意 备注 11 | syn match helpNoteCn /注意\|备注\|警告/ 12 | syn match helpYizheCn /译者/ 13 | syn region helpNotViCn start="{没有" start="{仅" end="}" contains=helpLeadBlank,helpHyperTextJump 14 | 15 | hi link helpHeadlineCn helpHeadline 16 | hi link helpVimCn helpVim 17 | hi link helpNoteCn helpNote 18 | hi link helpNotViCn helpNotVi 19 | hi link helpYizheCn Identifier 20 | 21 | " Special highlighting for syntax highlighting groups in syntax.cnx help file. 22 | " Adopted from Vim distribution's syntax/help.vim. 23 | if has('textprop') && expand('%:p') =~ '[/\\]doc[/\\]syntax.cnx' 24 | " highlight groups with their respective color 25 | import 'dist/vimhelp.vim' 26 | call vimhelp.HighlightGroups() 27 | endif 28 | 29 | " vim: ts=8 sw=2 30 | -------------------------------------------------------------------------------- /vimcdoc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # vimcdoc.sh: vimcdoc Linux install/uninstall script 4 | # 5 | # Usage: (run it as root) 6 | # './vimcdoc.sh -i' to install vimcdoc and set helplang 7 | # './vimcdoc.sh -I' to install vimcdoc only 8 | # './vimcdoc.sh -u' to uninstall vimcdoc 9 | # 10 | # Author: wandys (wandys@users.sf.net) 11 | # lang2 (lang2@users.sf.net) 12 | 13 | if [ $# -ne 1 ]; then 14 | echo "Usage: $0 {-i|-I|-u}" 15 | exit 1 16 | fi 17 | 18 | tmpdir="${TMPDIR:-/tmp}" 19 | vim --cmd ":exec 'normal i' . \$VIM | wq! $tmpdir/vimrt.$$" > /dev/null 2>&1 20 | if [ -e $tmpdir/vimrt.$$ ]; then 21 | VIM_PATH=`cat $tmpdir/vimrt.$$`/vimfiles 22 | rm $tmpdir/vimrt.$$ 23 | else 24 | echo 'Error: No vim found on this system.' 25 | exit 1 26 | fi 27 | 28 | VIMCDOC_PATH_LINK=`echo $VIM_PATH|sed 's:vim.*$:doc/vimcdoc:'` 29 | VIMCDOC_PATH=$VIMCDOC_PATH_LINK-`cat VERSION` 30 | CNTAGS=tags-cn 31 | DIST_FILES="README.md 32 | guides.txt 33 | LICENSE 34 | VERSION 35 | AUTHORS 36 | dict.txt" 37 | VIMCDOC_INST='vimcdoc.sh' 38 | install_dist_files=0 39 | 40 | if [ `whoami` = 'root' ]; then 41 | install_dist_files=1 42 | else 43 | VIM_PATH=$HOME/.vim 44 | fi 45 | 46 | case $1 in 47 | -[iI]) 48 | if [ $install_dist_files -eq 1 ]; then 49 | for i in $DIST_FILES; do 50 | if [ ! -d $VIMCDOC_PATH ]; then 51 | rm -f $VIMCDOC_PATH 52 | mkdir $VIMCDOC_PATH 53 | fi 54 | echo "install -m 644 $i $VIMCDOC_PATH/$i" 55 | install -m 644 $i $VIMCDOC_PATH/$i 56 | done 57 | echo "install -m 755 $VIMCDOC_INST $VIMCDOC_PATH/$VIMCDOC_INST" 58 | install -m 755 $VIMCDOC_INST $VIMCDOC_PATH/$VIMCDOC_INST 59 | ln -sf $VIMCDOC_PATH $VIMCDOC_PATH_LINK 60 | fi 61 | cd doc 62 | for i in *.cnx; do 63 | if [ ! -d $VIM_PATH/doc ]; then 64 | rm -f $VIM_PATH/doc 65 | mkdir -p $VIM_PATH/doc 66 | fi 67 | echo "install -m 644 $i $VIM_PATH/doc/$i" 68 | install -m 644 $i $VIM_PATH/doc/$i 69 | done 70 | echo "install -m 644 $CNTAGS $VIM_PATH/doc/$CNTAGS" 71 | install -m 644 $CNTAGS $VIM_PATH/doc/$CNTAGS 72 | cd .. 73 | if [ ! -d $VIM_PATH/syntax ]; then 74 | rm -f $VIM_PATH/syntax 75 | mkdir -p $VIM_PATH/syntax 76 | fi 77 | echo "install -m 644 syntax/help_cn.vim $VIM_PATH/syntax/help_cn.vim" 78 | install -m 644 syntax/help_cn.vim $VIM_PATH/syntax/help_cn.vim 79 | if [ $1 = "-i" ]; then 80 | if [ ! -d $VIM_PATH/plugin ]; then 81 | rm -f $VIM_PATH/plugin 82 | mkdir -p $VIM_PATH/plugin 83 | fi 84 | echo "install -m 644 plugin/vimcdoc.vim $VIM_PATH/plugin/vimcdoc.vim" 85 | install -m 644 plugin/vimcdoc.vim $VIM_PATH/plugin/vimcdoc.vim 86 | fi 87 | echo 'Done.' 88 | ;; 89 | 90 | -u) 91 | if [ $install_dist_files -eq 1 ]; then 92 | rm -rf $VIMCDOC_PATH $VIMCDOC_PATH_LINK 93 | fi 94 | if [ -d $VIM_PATH/doc ]; then 95 | cd $VIM_PATH/doc 96 | rm -f *.cnx $CNTAGS 97 | fi 98 | rm -f $VIM_PATH/syntax/help_cn.vim 99 | rm -f $VIM_PATH/plugin/vimcdoc.vim 100 | echo 'Done.' 101 | ;; 102 | 103 | *) 104 | echo "Usage: $0 {-i|-u}" 105 | exit 1 106 | ;; 107 | esac 108 | 109 | # vim:ts=4:sw=4: 110 | # EOF 111 | --------------------------------------------------------------------------------