*os_beos.txt* For Vim version 7.1. 最近修改: 2006年2月 VIM 参考手册 by Bram Moolenaar 译者: Willis http://vimcdoc.sf.net *BeOS* *BeBox* 这是一个适用于 BeOS 预览版本 2 (也被称为 PR2) 或以后版本的 Vim 5.1 移植版本。 本文包含了 Vim 的 BeBox/BeOS 版本的特殊之处。除了本文提到的之外,和一般的 Unix |os_unix.txt| 版本的 Vim 行为大致相当。 1. 通用 |beos-general| 2. 编译 Vim |beos-compiling| 3. 终端的超时问题 |beos-timeout| 4. Unicode 还是 Latin1 |beos-unicode| 5. BeOS GUI |beos-gui| 6. $VIM 目录 |beos-vimdir| 7. 拖和放 |beos-dragndrop| 8. 单次启动还是多次启动 |beos-launch| 9. 字体 |beos-fonts| 10. meta 键修饰符 |beos-meta| 11. 鼠标键映射 |beos-mouse| 12. 色彩名称 |beos-colors| 13. 带 Perl 的编译 |beos-perl| 1. 通用 *beos-general* 一般,语法高亮用不同的前景色高亮不同的项目。这特别适用于深色背景和浅色前景的终 端窗口。有些中等灰色的背景 (比如 (r,g,b)=(168,168,168)) 也不错。如果你用缺省的 浅色背景和深色字符,那么倒转前景和背景的设置概念也许看起来会舒服许多。要这么 做,把以下的内容加到你的 .vimrc 文件里 (其中的<Esc>
需要被换成实际的 escape 字符)。
:if &term == "beos-ansi"
: set t_AB=
<Esc>
[3%dm: set t_AF=
<Esc>
[4%dm:endif
2. 编译 Vim *beos-compiling* 从 Advanced Access Preview Release (AAPR) 预览版本开始,Vim 可以用标准的 configure 脚本进行配置。要设置正确的编译器及其标志位,在外壳上应用下面的命令 行 (你可以剪贴到命令行上): CC=$BE_C_COMPILER CFLAGS="$BE_DEFAULT_C_FLAGS -O7" \ ./configure --prefix=/boot/home/config $BE_C_COMPILER 通常是 "mwcc",$BE_DEFAULT_C_FLAGS 通常是 "-I- -I." 如果已经运行过 configure,你又想加上 GUI 支持,那你必须编辑 config.mk 文件,使 得含有 GUI_xxx 的行指向 $(BEOSGUI_xxx) 而不是 $(NONE_xxx)。 或者,你也可以在 Makefile 里作此改动;这样的效果更持久一点。找找看 "NONE_"。 编译以后你需要把资源加进你的可执行程序。把以下几行加到 link.sh 脚本接近尾部的 地方 (在 "exit $exit_value" 一行之前),就可以自动执行这一任务。 rmattr BEOS:TYPE vim copyres os_beos.rsrc vim mimeset vim 同时, 建立一个不干任何事的文件 "strip": #!/bin/sh mimeset $1 exit 0 用 "make install" 安装 Vim 的时候你需要它, 现在,输入 "make" 来编译 Vim,然后 "make install" 来安装它。 如果你想手动安装 Vim,你需要把 Vim 复制到 $HOME/config/bin 里,然后建立若干指 向它的符号链接 (
{g,r,rg}
{vim,ex,view}
)。进一步,你需要把 Vim 的配置文件 vim-5.0s/{*.vim,doc,syntax}
复制到 $HOME/config/share/vim。为了完整起见,你还 需要把 nroff 的手册页面复制到 $HOME/config/man/man1。不要忘了 ctags/ctags 和 xxd/xxd! 明显地,你需要用实际没有限制的连接器实际连接 Vim。参见 http://www.metrowerks.com 了解如果购买 BeOS 的 CodeWarrior 编译器。目前还没有 其他可用的连接器。 即使你有合适的文件,以上步骤并不能包含 Perl 或者 Python 接口。|beos-perl| 3. 终端的超时问题 *beos-timeout* 因为有的 POSIX/UNIX 功能还未实现[1],终端里的带超时的读操作还没有直接的操作系 统支持。这意味着除非你设置了 :set notimeout,你不能用 :mapping 等映射多于一个 字符。|'timeout'| 要避免这个问题,我提供了一个临时解决办法。用一个额外的线程预读一个字符,从而 提供必需的带超时的输入。不过,有一个附带的后果就是 Vim 会识别到终端窗口的大小 调整。 终端里不支持功能键,因为它们产生无法识别的字符序列。 这些问题在 GUI 里并不存在。 [1]: 没有文件描述符上的 select() 例程;另外 终端输入/输出接口 VMIN 和 VTIME 的 设置也不正确。这一问题从 DR7 开始就存在,至少在 PR2 里还没有解决。 *beos-unicode* 4. Unicode 还是 Latin1 *beos-utf8* BeOS 用 Unicode 和 UTF-8 来编码文本字符串 (16-位字符编码成 8-位字符)。Vim 假定 你用 ISO-Latin1 或者其他 8-位 字符代码。这对非 ASCII 的字符会产生意外的结果。 试试命令 :digraphs 你就知道了。如果看起来一团乱,用 :set isprint=@ 可以少许改 进对 ISO-Latin1 128-255 字符的显示。如果你有合适的字体 (见后),GUI 的情况会好 些。 你可以用 /boot/bin/xtou 命令把 ISO-Latin1 文件 转换成 UTF-8 文件 (xtou -f iso1 filename) 或者相反 (xtou -t iso1 filename)。 5. BeOS GUI *beos-gui* 通常情况下,你用 gvim 或者 vim -g 启动 GUI 界面的 Vim。BeOS 的版本试图确定你是 从 Tracker 而不是终端里启动。如果是,那么总是启动 GUI。不过,如果你用 "vim - </dev/null" 或者 "vim filename &" 命令,现在的检测机制会被跳过。后者也 可以被称为一个特性,不过它之所以能工作,是因为现在还没有 BSD-风格的任务控制。 还不能正常工作的东西: - GUI 里运行外部命令还不能 100% 的工作 (同样是因为不存在 select() 的支持)。这 里有一个选择的问题,或者你想要看到命令的输出,或者你想要能够中断命令执行的能 力。我选择看到命令的输出。即使现在,有时命令还会崩溃,明显地,在 fork() 之后 putenv() 函数调用的 Be 的 malloc_internal() 里。(data access exception occurred, ec01b0ec: 90e80000 *stw r7, 0x0000 (r8)) (:!ls 通常可以, 而 :r! ls 则通常不行)。这个问题已经被报告为漏洞 # 971215-083826。 - 窗口标题。 - 从终端版本里用 :gui 启动 GUI 总会像 :gui -f 那样。我还没看到解决的方法。 - 时不时还有些小的显示问题,我希望以后能清除掉。大部分问题是因为窗口被部分挡住 引起的。有些看起来是 BeOS 自己的漏洞,因为终端上看起来也有类似的问题。 - 在窗口外面不会产生鼠标弹起的事件。这是 BeOS 的一个漏洞。如果选择文本,然后把 光标移到窗口外面,再放掉鼠标,你会注意到这点。另外一个方法是拖动滚动条的时候 做同样的事情。因为 Vim 还认为你在操作滚动条,所以它不会刷新自己。我提供了一 个临时解决的方法,这个方法在窗口激活或者去激活的时候被调用 (所以最好使用焦点 跟随光标的风格设定 (boot/bin/ffm))。 - 光标不会闪烁 (优先级很低。我都不肯定自己喜欢光标闪烁)。 6。$VIM 目录 *beos-vimdir* $VIM 代表 Vim 支持文件所在的位置。它的缺省值在编译时被确定,可以如下得到
:version
一般,它的值是 /boot/home/config/share/vim。如果你不喜欢,你可以设定 VIM 环境 变量来改变缺省的设定,或者在你的 .vimrc 里设定 'helpfile':
:if version >= 500
: set helpfile=~/vim/vim54/doc/help.txt
: syntax on
:endif
7. 拖和放 *beos-dragndrop* 你可以把文件和目录拖放在 Vim 图标上 (从而启动一个新的 Vim 会话,除非你用文件类 型应用把 Vim 设为 "单次启动") 或者放在 Vim 窗口上 (从而开始编辑文件)。拖放一个 目录则改变 Vim 的当前工作目录为此目录。|:cd| |:pwd| 如果你在拖放的时候按住 SHIFT,Vim 把当前目录改变为放置的第一个项目所在的目录。如果启动新的 Vim,那就 不需要按 shift 了: Vim 会做同样的事情。 放置文件时设置当前的参数列表。|argument-list| 8. 单次启动还是多次启动 *beos-launch* 发布时,Vim 的应用程序标志位 (在文件类型设定里) 设为多次启动。如果你愿意,你可 以把它们改为单次启动。这样,试图启动第二个 Vim 程序时会用第一个 Vim 打开相应的 文件。这在 Tracker 和命令行下都适用。后者不支持非文件 (选项) 的参数。 NB: 只有 GUI 版本 有 BApplication (从而有应用程序标志位)。这一节不适用于没有 GUI 的版本,如果你自己编译一个的话。 9. 字体 *beos-fonts* 以下方法可以设定字体
:set guifont=Courier10_BT/Roman/10
其中,第一部分是字体家族,第二部分是风格,第三部分是字体大小。在字体家族和风格 里,你可以用下划线代替空格。 等宽字体 (例如 Courier) 提供最好的效果。Vim 试图对所有的字体应用 B_FIXED_SPACING 模式,不过看起来这对比例字体没有效果 (即使 BeBook 说应该有)。 Vim 也试图用 B_ISO8859_1 编码,也被称为 ISO Latin 1 编码。这并不对所有字体适 用。比如,它适用于 Courier,但不适用于 ProFontISOLatin1/Regular (很奇怪)。你可 以通过以下命令验证这点,
:digraphs
它列出一些字符和它们的 ISO Latin 1 编码。如果,其中有 "方框" 字符,或者最后一 个字符不是加点的 y,那么这个编码不适用于这个字体。 如果你指定的字体不存在,会用系统的等宽字体代替。 标准等宽的系统字体是: ProFontISOLatin1/Regular Courier10_BT/Roman Courier10_BT/Italic Courier10_BT/Bold Courier10_BT/Bold_Italic 标准比例的系统字体是: Swis721_BT/Roman Swis721_BT/Italic Swis721_BT/Bold Swis721_BT/Bold_Italic Dutch801_Rm_BT/Roman Dutch801_Rm_BT/Italic Dutch801_Rm_BT/Bold Dutch801_Rm_BT/Bold_Italic Baskerville/Roman Baskerville/Italic Baskerville/Bold Baskerville/Bold_Italic SymbolProp_BT/Regular 为了好玩,试试其中的一些字体吧。 10. meta 键修饰符 *beos-meta* 你可以用左右的 OPTION 键来模拟 META 键修饰符。这是因为 ALT (也就是 COMMAND) 键 不会传给应用程序。 11. 鼠标键映射 *beos-mouse* Vim 把鼠标按钮分别称为 LeftMouse、MiddleMouse 和 RightMouse。如果你用缺省的鼠 标设置,这些名字反映的就是事实。Vim 用以下的映射: Button 1 -> LeftMouse, Button 2 -> RightMouse, Button 3 -> MiddleMouse。 如果你的鼠标没有三个按钮,你可以用鼠标键击和若干修饰符来定义自己的鼠标按钮。例 见 vim-5.x/macros/swapmous.vim。 |gui-mouse-mapping| 12. 色彩名称 *beos-colors* Vim 有一些内建的色彩名称。附加的名字则从 $VIMRUNTIME/rgb.txt 里取得。这个文件 基本上是 X 里的色彩数据库。为了提高效率,这个文件里的名字被缓冲存贮。 13. 带 Perl 的编译 *beos-perl* 带 Perl 支持的编译需要一点技巧。Metrowerks 编译器在找寻包含文件的位置上想法有 些与众不同。因为有些 Perl 的包含文件和有些 Vim 的头文件重名,错误的文件被包含 了。要修正这个问题,运行如下在 vim-5.0/src 目录的 Perl 脚本:
preproc.pl > perl.h
#!/bin/env perl
# Simple #include expander, just good enough for the Perl header files.
use strict;
use IO::File;
use Config;
sub doinclude
{
my $filename = $_[0];
my $fh = new IO::File($filename, "r");
if (defined $fh) {
print "/* Start of $filename */\n";
while (
<$fh>
) {if (/^#include "(.*)"/) {
doinclude($1);
print "/* Back in $filename */\n";
} else {
print $_;
}
}
print "/* End of $filename */\n";
undef $fh;
} else {
print "/* Cannot open $filename */\n";
print "#include \"$filename\"\n";
}
}
chdir $Config
{installarchlib}
."/CORE";doinclude "perl.h";
它会只用其他的 Perl 头文件来扩展 "perl.h" 头文件。 现在,你可以用 --enable-perlinterp 选项 configure 和 make Vim。不过,要提醒的 是,这会给 Vim 增加 616 千字节的大小!没有 Perl 的支持,带着缺省的特性和 GUI 的 Vim 大概是 575K 大小,而带 Perl 支持则有 1191K 之大! -Olaf Seibert [注意: 以下地址已经不能用了:]
<rhialto@polder.ubc.kun.nl>
http://polder.ubc.kun.nl/~rhialto/be vim:tw=78:ts=8:ft=help:norl:
Generated by vim2html on 2008年 03月 27日 星期四 17:04:45 CST