OS_BEOS

*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