pi_netrw

pi_netrw.txt 适用于 Vim 9.0 版本。 最近更新: 2022年7月

NETRW 参考手册 作者: Charles E. Campbell

译者: Willis Author: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> Copyright: Copyright (C) 2017 Charles E Campbell netrw-copyright The VIM LICENSE applies to the files in this package, including netrw.vim, pi_netrw.txt, netrwFileHandlers.vim, netrwSettings.vim, and syntax/netrw.vim. Like anything else that's free, netrw.vim and its associated files are provided *as is* and comes with no warranty of any kind, either expressed or implied. No guarantees of merchantability. No guarantees of suitability for any purpose. By using this plugin, you agree that in no event will the copyright holder be liable for any damages resulting from the use of this software. Use at your own risk! netrw dav ftp netrw-file rcp scp davs http netrw.vim rsync sftp fetch network

1. 内容 netrw-contents {{{1

1. 内容.................................................. netrw-contents 2. netrw 初步............................................ netrw-start 3. netrw 参考手册........................................ netrw-ref 外 部 程 序 及 协 议................................ netrw-externapp 读 取............................................... netrw-read 写 入............................................... netrw-write 执 行............................................... netrw-source 目 录 列 表......................................... netrw-dirlist 改 变 用 户 名 和 密 码............................. netrw-chgup 变 量 与 设 置...................................... netrw-variables 路 径............................................... netrw-path 4. 基于网络的文件传输.................................... netrw-xfer NETRC............................................... netrw-netrc 密 码............................................... netrw-passwd 5. 激活.................................................. netrw-activate 6. 透明远程文件编辑...................................... netrw-transparent 7. Ex 命令............................................... netrw-ex 8. 变量和选项............................................ netrw-var 9. 目录浏览.............................................. netrw-browse 浏览简介............................................ netrw-intro-browse 快速参考: 映射...................................... netrw-browse-maps 快速参考: 命令...................................... netrw-browse-cmds 显示横幅............................................ netrw-I 把目录加入书签...................................... netrw-mb 浏览................................................ netrw-cr 压缩当前树列表目录.................................. netrw-s-cr 水平分割窗口方式浏览................................ netrw-o 在新标签页中浏览.................................... netrw-t 垂直分割窗口方式浏览................................ netrw-v 修改文件权限........................................ netrw-gp 改变列表方式.(瘦 宽 长 树).......................... netrw-i 切换到收入书签的目录................................ netrw-gb 切换到较早访问的目录................................ netrw-u 切换到较迟访问的目录................................ netrw-U 通过特殊处理程序定制浏览............................ netrw-x 删除书签............................................ netrw-mB 删除文件或目录...................................... netrw-D 目录探索命令........................................ netrw-explore 使用星号和模式进行探索.............................. netrw-star 显示文件信息........................................ netrw-qf 编辑文件或目录隐藏列表.............................. netrw-ctrl-h 编辑排序序列........................................ netrw-S 强制作为文件或目录对待.............................. netrw-gd netrw-gf 向上一层............................................ netrw-- 隐藏文件或目录...................................... netrw-a 改进浏览............................................ netrw-ssh-hack 列出书签和历史...................................... netrw-qb 建立新目录.......................................... netrw-d 使浏览目录成为当前目录.............................. netrw-cd 标记文件............................................ netrw-mf 撤销文件标记........................................ netrw-mF 用位置列表标记文件.................................. netrw-qL 用快速修复列表标记文件.............................. netrw-qF 用正则表达式标记文件................................ netrw-mr 带标记文件: 任意外壳命令............................ netrw-mx 带标记文件: 任意外壳命令,整块...................... netrw-mX 带标记文件: 任意命令................................ netrw-mv 带标记文件: 参数列表................................ netrw-ma netrw-mA 带标记文件: 缓冲区列表.............................. netrw-cb netrw-cB 带标记文件: 压缩及解压缩............................ netrw-mz 带标记文件: 复制.................................... netrw-mc 带标记文件: 比较.................................... netrw-md 带标记文件: 编辑.................................... netrw-me 带标记文件: grep.................................... netrw-mg 带标记文件: 按后缀隐藏或显示........................ netrw-mh 带标记文件: 移动.................................... netrw-mm 带标记文件: 打印.................................... netrw-mp 带标记文件: 执行.................................... netrw-ms 带标记文件: 设置目标目录............................ netrw-mt 带标记文件: 建立标签................................ netrw-mT 带标记文件: 用书签作为目标目录...................... netrw-Tb 带标记文件: 用历史作为目标目录...................... netrw-Th 带标记文件: 撤销标记................................ netrw-mu netrw 浏览器变量.................................... netrw-browser-var netrw 浏览和选项不兼容性............................ netrw-incompatible netrw 设置窗口...................................... netrw-settings-window 获取文件............................................ netrw-O 预览窗口............................................ netrw-p 前次窗口............................................ netrw-P 刷新列表............................................ netrw-ctrl-l 反转排序顺序........................................ netrw-r 给文件或目录换名.................................... netrw-R 选择排序风格........................................ netrw-s 选择编辑窗口........................................ netrw-C 10. 问题和修正............................................ netrw-problems 11. 调试 netrw 自身....................................... netrw-debug 12. 历史.................................................. netrw-history 13. TODO ................................................. netrw-todo 14. 鸣谢.................................................. netrw-credits

2. netrw 初步 netrw-start {{{1

netrw 使得读写文件和通过本地或网络进行和浏览变得容易! 首先,确信你打开了插件。这样,你需要至少在 <.vimrc> 里设置: (或者参见 netrw-activate ) set nocp " 不设置 'compatible' filetype plugin on " 允许使用插件 (见 'cp':filetype-plugin-on ) netrw 支持用 url "透明" 地编辑其它机器上的文件 (见 netrw-transparent )。考虑 一个例子,假设你在其它机器上有一个帐号;如果 scp 可用的话,尝试 vim scp://hostname/path/to/file 想使 ssh/scp 更容易使用么?察看 netrw-ssh-hack ! 如果你只有 ftp,没有 ssh/scp 怎么办?也很容易;尝试 vim ftp://hostname/path/to/file 想使 ftp 更容易使用么?检查你的 ftp 是不是支持叫 <.netrc> 的文件 -- 通常,它在 你的主目录里,读写权限的设置只限用户自己可读 (也就是,没有组、世界、其它用户等 的权限),其形式是以下这样的行 machine HOSTNAME login USERID password "PASSWORD" machine HOSTNAME login USERID password "PASSWORD" ... default login USERID password "PASSWORD" Windows 的 ftp 不支持 .netrc;不过,可以在 .vimrc 里这样做: let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\MyUserName\MACHINE' Netrw 会用 URL 的主机名来代替 "MACHINE",从而,你可以为每个网站分别提供一个文 件: c:\Users\MyUserName\MachineName,来指定 userid password 还有浏览 -- 你只想在编辑文件前四处看看。在自己机器上浏览,只要 "编辑" 目录: vim . vim /home/userid/path 要在远端机器上浏览,也就是 "编辑" 目录 (但要确保目录名后面跟上 "/"): vim scp://hostname/ vim ftp://hostname/path/to/dir/ 详情可见 netrw-browse ! 除了 scp 和 ftp 以外,还支持更多其他的协议!关于如何在 netrw 和 vim 中使用这些 外部应用,见下一节, netrw-externapp 。 禁 止 载 入 netrw-noload 如果你想使用插件,但由于某种原因不想用 netrw,那你需要禁止调入 netrw 插件本身 和自动调入的部分。为此,在 <.vimrc> 里加入如下两行: :let g:loaded_netrw = 1 :let g:loaded_netrwPlugin = 1

3. netrw 参考手册 netrw-ref {{{1

除了 netrw-start 提到的 scp 和 ftp 以外,netrw 还支持几个协议。包括 dav、 fetch、http、...。可以参阅 netrw-externapp 的列表。每个协议和一个变量关 联,该变量指定支持协议的缺省命令。 外 部 程 序 及 协 议 netrw-externapp {{{2 协议 变量 缺省值 -------- ---------------- ------------- dav: g:netrw_dav_cmd = "cadaver" 如果 cadaver 可执行 dav: g:netrw_dav_cmd = "curl -o" 否则,如果 curl 可执行 fetch: g:netrw_fetch_cmd = "fetch -o" 如果 fetch 可用 ftp: g:netrw_ftp_cmd = "ftp" http: g:netrw_http_cmd = "elinks" 如果 elinks 可用 http: g:netrw_http_cmd = "links" 否则,如果 links 可用 http: g:netrw_http_cmd = "curl" 否则,如果 curl 可用 http: g:netrw_http_cmd = "wget" 否则,如果 wget 可用 http: g:netrw_http_cmd = "fetch" 否则,如果 fetch 可用 http: g:netrw_http_put_cmd = "curl -T" rcp: g:netrw_rcp_cmd = "rcp" rsync: g:netrw_rsync_cmd = "rsync" (见 g:netrw_rsync_sep ) scp: g:netrw_scp_cmd = "scp -q" sftp: g:netrw_sftp_cmd = "sftp" file: g:netrw_file_cmd = "elinks" 或 "links" g:netrw_http_xcmd : http://... 协议的选项字符串由此字符串指定,而且 可以独立修改。缺省地,http 处理命令的选项参数是 elinks : "-source >" links : "-dump >" curl : "-L -o" wget : "-q -O" fetch : "-o" 例如,如果你的系统有 elinks 而你想看渲染后的页面内容 (而不是缺省的显示 源代码),可以在 .vimrc 里加上 let g:netrw_http_xcmd= "-dump >" g:netrw_http_put_cmd: 此选项指定可执行文件和任何必须的选项。此命令在 url 上执行 PUT 操作。 读 取 netrw-read netrw-nread {{{2 一般的,普通的编辑命令都可以使用 URL 形式,例如 :e ftp://[user@]machine/path Netrw 也支持 Nread 命令: :Nread ? 给出帮助 :Nread "machine:file" 使用 rcp :Nread "machine file" 使用 ftp 并用 <.netrc> :Nread "machine id password file" 使用 ftp :Nread "dav://machine[:port]/file" 使用 cadaver :Nread "fetch://[user@]machine/file" 使用 fetch :Nread "ftp://[user@]machine[[:#]port]/file" 使用 ftp 并用 <.netrc> :Nread "http://[user@]machine/file" 使用 http 用 wget 方法 :Nread "rcp://[user@]machine/file" 使用 rcp :Nread "rsync://[user@]machine[:port]/file" 使用 rsync :Nread "scp://[user@]machine[[:#]port]/file" 使用 scp :Nread "sftp://[user@]machine/file" 使用 sftp 写 入 netrw-write netrw-nwrite {{{2 普通的保存命令都可以使用 URL 形式,例如 :w ftp://[user@]machine/path Netrw 也支持 Nwrite 命令: :Nwrite ? 给出帮助 :Nwrite "machine:file" 使用 rcp :Nwrite "machine file" 使用 ftp 并用 <.netrc> :Nwrite "machine id password file" 使用 ftp :Nwrite "dav://machine[:port]/file" 使用 cadaver :Nwrite "ftp://[user@]machine[[:#]port]/file" 使用 ftp 并用 <.netrc> :Nwrite "rcp://[user@]machine/file" 使用 rcp :Nwrite "rsync://[user@]machine[:port]/file" 使用 rsync :Nwrite "scp://[user@]machine[[:#]port]/file" 使用 scp :Nwrite "sftp://[user@]machine/file" 使用 sftp 不支持 http: 协议! 执 行 脚 本 netrw-source {{{2 普通的执行脚本命令都可以使用 URL 形式,例如 :so ftp://[user@]machine/path Netrw 也支持 Nsource 命令: :Nsource ? 给出帮助 :Nsource "dav://machine[:port]/path" 使用 cadaver :Nsource "fetch://[user@]machine/path" 使用 fetch :Nsource "ftp://[user@]machine[[:#]port]/path" 使用 ftp w/ <.netrc> :Nsource "http://[user@]machine/path" 使用 http 用 wget 方法 :Nsource "rcp://[user@]machine/path" 使用 rcp :Nsource "rsync://[user@]machine[:port]/path" 使用 rsync :Nsource "scp://[user@]machine[[:#]port]/path" 使用 scp :Nsource "sftp://[user@]machine/path" 使用 sftp 目 录 列 表 netrw-trailingslash netrw-dirlist {{{2 要浏览一个目录以得到文件列表,只需编辑该目录: :e scp://[user]@hostname/path/ :e ftp://[user]@hostname/path/ 对于远程目录列表 (也就是使用 scp 或 ftp 的那些),结尾的 "/" 是必需的 ( 它告诉 netrw 对该参数使用目录方式浏览而不是去下载文件)。 Nread 命令也可完成 (再说一次,结尾的斜杠是必需的): :Nread [protocol]://[user]@hostname/path/ netrw-login netrw-password 改 变 用 户 名 和 密 码 netrw-chgup netrw-userpass {{{2 使用 ftp 的尝试会提示你输入用户名字和密码。它们被存在全局变量 g:netrw_uids:netrw_passwd 里。下一次使用 ftp 就会再次使用这两 个字符串来简化 ftp 将来的应用。不过,如果你要使用别的用户名和/或密码, 先调用 NetUserPass() 。为了解决输入密码的问题,检查一下你的 ftp 是否 支持在你的主目录下的 <.netrc> 文件。另见 netrw-passwd (如果你用 ssh/scp 但希望知道 scp 如何能不输入密码,见 netrw-ssh-hack )。 :NetUserPass [uid [password]] -- 如果需要,提示 :call NetUserPass() -- 提示 uid 和 password :call NetUserPass("uid") -- 提示 password :call NetUserPass("uid","password") -- 设置全局 uid 和 password (相关主题: ftp netrw-userpass netrw-start ) NETRW 变 量 和 设 置 netrw-variables {{{2 (另见: netrw-browser-var : netrw 浏览器选项变量 netrw-protocol : 文件传输协议选项变量 netrw-settings : 附加文件传输选项 netrw-browser-options : 这些选项影响如何浏览目录 ) netrw 提供很多变量,方便你根据自己的喜好定制 netrw。一个查阅这些变量的方法是 :NetrwSettings (见 netrw-settings ),它显示你当前的 netrw 设置。大多数设置在 下面描述,还有的在 netrw-browser-optionsnetrw-externapp 那里: b:netrw_lastfile 最近一次通过网络读写的文件,该变量局部于缓冲区 (用于支持无参数的 :Nw ) g:netrw_bufsettings netrw 缓冲区使用的设置 (缺省) noma nomod nonu nowrap ro nobl g:netrw_chgwin 指定后续文件编辑使用的窗口号 (另见 netrw-C ) (缺省) -1 g:Netrw_funcref 指定 netrw 编辑文件时调用的函数。先编辑文件,然后调用 此函数引用 ( Funcref )。 该变量也可包含函数引用的列表。 (缺省) 无 (g:Netrw... 中的大写是必需的,因为它保存函函数引用) 示例: 放入 .vimrc;影响所有文件打开 fun! MyFuncRef() endfun let g:Netrw_funcref= function("MyFuncRef") g:Netrw_UserMaps 指定函数或函数的 List ,可用于设置用户指定的映射和功 能。 见 netrw-usermaps g:netrw_ftp 如果不存在,用缺省的 ftp =0 使用缺省的 ftp (uid password) =1 使用替代的 ftp 方法 (user uid password) 如果你的 ftp 使用有问题,尝试修改此值,看看另一个 ftp 方法是否适合你的设置。 g:netrw_ftp_options 缺省使用,这些选项的目的是关闭交互揭示,并且避免初 始连接时自动重新登录。但是,看来不是所有 ftp 的实现都 支持 (例如 ncftp)。 ="-i -n" g:netrw_ftpextracmd 缺省: 不存在 如果此变量存在,那么它包含的任何字符串将被加入到发送给 ftp 客户的命令中。一个例子: ="passive" g:netrw_ftpmode ="binary" (缺省) ="ascii" g:netrw_ignorenetrc =0 (linux、cygwin 缺省) =1 如果你有 <.netrc> 文件但不能工作,设置此变量可以忽 略该文件。(Windows + cmd.exe 缺省) g:netrw_menu =0 关闭 netrw 菜单 =1 (缺省) 打开 netrw 菜单 g:netrw_nogx 如果此变量存在,"gx" 映射不可用 (见 netrw-gx ) g:netrw_uid (ftp) 用户名, 可用于同一 vim 会话中 s:netrw_passwd (ftp) 密码, 可用于同一 vim 会话中 g:netrw_preview =0 (缺省) 在横向分割的窗口中显示预览窗口 =1 在纵向分割的窗口中显示预览窗口以相同方式影响 "前次 窗口" (见 netrw-P )。 g:netrw_alto 变量可用于提供额外的分割控制: g:netrw_preview g:netrw_alto 结果 0 0 :aboveleft 0 1 :belowright 1 0 :topleft 1 1 :botright 要控制大小,可见 g:netrw_winsize g:netrw_scpport = "-P" : 设置 scp 端口的选项 g:netrw_sshport = "-p" : 设置 ssh 端口的选项 g:netrw_sepchr =\0xff =\0x01 如果 enc == euc-jp (也许也适用于其它编码,请让 我知道) 内部用来分隔文件名和优先码。 见 netrw-p12 g:netrw_silent =0 : 正常方式完成传输 =1 : 安静方式完成传输 g:netrw_use_errorwindow =2: netrw 的消息会使用弹出窗口 移动鼠标并暂停会关闭弹出窗口 (如果弹出窗口可用,这是缺省值) =1 : netrw 的消息会使用分开的单行窗口。该窗口提供了 消息的可靠传送。 (如果弹出窗口不可用,这是缺省值) =0 : netrw 的消息使用 echoerr;这种方式下不是所有消息 都保证能看到,但不需要退出窗口。 g:netrw_win95ftp =1 如果使用 Win95,删除四个操作系统在传输时 "提供" 的 拖尾行 =0 强制正常的 ftp 行为 (不删除拖尾的行) g:netrw_cygwin =1 假设在 windows 上的 scp 是 cygwin 的版本。同时允许 用带时间和大小排序的 ls 进行网络浏览 (windows 的缺 省值) =0 假设在 windows 上的 scp 接受 windows 风格的路径网络 浏览使用 dir 而不是 ls 如果使用 unix,忽略此选项 g:netrw_use_nt_rcp =0 不要使用 WinNT、Win2000 和 WinXP 的 rcp =1 使用 WinNT 二进制模式的 rcp (缺省) 路 径 netrw-path {{{2 对于多数协议,文件路径通常相对于用户目录。不过,有的协议里路径可以相对于一些相 关的目录。 例如: vim scp://user@host/somefile 例如: vim scp://user@host/subdir1/subdir2/somefile 其中 "somefile" 在 "user" 的主目录。如果你想要文件相对于根目录的路径,使用完整 路径: 例如: vim scp://user@host//somefile 例如: vim scp://user@host//subdir1/subdir2/somefile

4. 基于网络的文件传输 netrw-xfer {{{1

Vim 下基于网络的文件传输是用基于 Vim 脚本的插件技术实现的 (<netrw.vim>)。目 前,它支持基于网络的读写,并支持 rcp、scp、ftp 或者 ftp+<.netrc>、scp、fetch、 dav/cadaver、rsync、 或者 sftp。 目前,http 只支持通过 wget 或者 fetch 读取。 <netrw.vim> 是一个标准插件,它起到 Vim 和若干文件传输程序的粘结剂作用。它使用 自动命令事件 (BufReadCmd、FileReadCmd、BufWriteCmd) 来拦截貌似 url 的文件名的 读写。 例如 vim ftp://hostname/path/to/file 冒号前面的字符序列指定所使用的协议;在这个例子里,就是 ftp。 <netrw.vim> 脚本然后构成一个或多个命令 (一般是 ftp),然后用外部程序去执行 (ftp,scp 等) 来完成实际的文件传输/协议。文件被先读写到一个临时文件里 (在 Unix/Linux 上,/tmp/...),<netrw.vim> 脚本会清理该文件。 现在,说说 Jan Minář 的 "FTP 用户名和密码披露问题": 首先,ftp 不是安全协议。用 户名和密码在因特网上是明码传输的;任何网络嗅探器都可以截取;这不是 netrw 的问 题,是 ftp 的问题。如果你很介意这点,请使用 scp 或 sftp。 只要远端宿主不变。netrw 会重用同一 vim 会话的用户名和密码。 Jan 也许不很清楚 netrw 对 ftp 的处理方式: 正常情况下,一个 "ftp 会话" 会执行多 个命令,他也许认为用户名/密码信息应该只在单个 ftp 会话中保留。但是,netrw 的每 个 ftp 操作都是在单独的 "ftp 会话" 中进行的: 只在所谓单个 "ftp 会话" 中记住用 户名/密码,就跟完全不记住用户名/密码一样。依我愚见,如果这样去,譬如说,浏览远 程的目录,用户很快就会厌烦的。 不过,很感谢 Jan M. 指出许多 netrw (包括 vim 本身) 处理 "特意构造" 文件名的漏 洞。 shellescape()fnameescape() 函数就是为此由 Bram Moolenaar 实现来处 理这些问题的,netrw 也做了相应的修改,调用了这些函数。不过,我的建议还是,如果 所谓的 "文件名" 看来像 vim 的命令而你不放心,不要打开这些文件。 netrw-putty netrw-pscp netrw-psftp 你可以通过修改变量修改任何实现协议的外部应用程序 (例如,scp 使用 g:netrw_scp_cmd 变量,缺省是 "scp -q")。 例如,考虑 PuTTY 的使用: let g:netrw_scp_cmd = '"c:\Program Files\PuTTY\pscp.exe" -q -batch' let g:netrw_sftp_cmd= '"c:\Program Files\PuTTY\psftp.exe"' (备注: 有报告说 windows 7 的 putty v0.6 的 "-batch" 选项不工作,那个系统最好不 要那么改) netrw-p8 介绍更多,如 putty、pscp、psftp 等。 ftp,一个古老的协议,看来被很多实现所支持。不幸的是,很多实现都有问题 (例如, 在文件尾部加入垃圾字符)。所以,如果有这样的问题,用户可以自己决定写一个 NetReadFixup() 函数来在从 ftp 读文件后进行清理。有些 Unix 系统 (例如, FreeBSD) 提供了一个叫 "fetch" 的工具,它使用 ftp 协议,但是没有这样的问题,而 且更方便 <netrw.vim> 的使用。所以,只要 "fetch" 可用 (也就是可以执行),最好用 它来用来实现 ftp://... 的传输。 对于 rcp、scp、sftp 和 http 协议,你可能希望基于网络的文件传输尽可能透明;例如 vim rcp://[user@]machine/path vim scp://[user@]machine/path 如果你的 ftp 支持 <.netrc>,那么也可以透明的使用 ftp,因为需要的机器名字,用户 名和密码都定义在这个文件里。你的 ftp 必须自己能理解并使用 <.netrc> 文件。可以 这样, vim ftp://[user@]machine[[:#]portnumber]/path Windows 提供的 ftp (通常在 c:\Windows\System32\ftp.exe) 接受选项 -s:filename (filename 应该是也必须是完整路径),该文件包含 ftp 启动时自动执行的 ftp 命令。 用这个功能,你可以为一个网站输入用户名和密码: userid password netrw-windows-netrc netrw-windows-s 如果 g:netrw_ftp_cmd 包含 -s:[path/]MACHINE,那么 (只适用于 Windows),netrw 会用当前要 ftp 连接的机器名来替代 MACHINE,这样你就可以有多个 machine.ftp 文 件,包含不同的登录名和密码。例如: let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\Myself\MACHINE' vim ftp://myhost.somewhere.net/ 会使用文件 C:\Users\Myself\myhost.ftp 通常,ftp 需要查询用户需要的用户名和密码。后者通常不会被显示出来;也就是,输入 的密码显示的是星号。netrw 会保留用户名和密码,以便以后从相同机器的读写不需要再 提示输入。 netrw-urls +=================================+============================+============+ | 读 | 写 | 使用 | +=================================+============================+============+ | DAV: | | | | dav://host/path | | cadaver | | :Nread dav://host/path | :Nwrite dav://host/path | cadaver | +---------------------------------+----------------------------+------------+ | DAV + SSL: | | | | davs://host/path | | cadaver | | :Nread davs://host/path | :Nwrite davs://host/path | cadaver | +---------------------------------+----------------------------+------------+ | FETCH: | | | | fetch://[user@]host/path | | | | fetch://[user@]host:http/path | 不可用 | fetch | | :Nread fetch://[user@]host/path| | | +---------------------------------+----------------------------+------------+ | FILE: | | | | file:///* | file:///* | | | file://localhost/* | file://localhost/* | | +---------------------------------+----------------------------+------------+ | FTP: (*3) | (*3) | | | ftp://[user@]host/path | ftp://[user@]host/path | ftp (*2) | | :Nread ftp://host/path | :Nwrite ftp://host/path | ftp+.netrc | | :Nread host path | :Nwrite host path | ftp+.netrc | | :Nread host uid pass path | :Nwrite host uid pass path | ftp | +---------------------------------+----------------------------+------------+ | HTTP: wget is executable: (*4) | | | | http://[user@]host/path | 不可用 | wget | +---------------------------------+----------------------------+------------+ | HTTP: fetch is executable (*4) | | | | http://[user@]host/path | 不可用 | fetch | +---------------------------------+----------------------------+------------+ | RCP: | | | | rcp://[user@]host/path | rcp://[user@]host/path | rcp | +---------------------------------+----------------------------+------------+ | RSYNC: | | | | rsync://[user@]host/path | rsync://[user@]host/path | rsync | | :Nread rsync://host/path | :Nwrite rsync://host/path | rsync | | :Nread rcp://host/path | :Nwrite rcp://host/path | rcp | +---------------------------------+----------------------------+------------+ | SCP: | | | | scp://[user@]host/path | scp://[user@]host/path | scp | | :Nread scp://host/path | :Nwrite scp://host/path | scp (*1) | +---------------------------------+----------------------------+------------+ | SFTP: | | | | sftp://[user@]host/path | sftp://[user@]host/path | sftp | | :Nread sftp://host/path | :Nwrite sftp://host/path | sftp (*1) | +=================================+============================+============+ (*1) 要指出绝对路径,用 scp://machine//path。 (*2) 如果 <.netrc> 存在,假设你的 ftp 客户端会使用之。不然,该脚本提示 输入用户名和密码。 (*3) 对于 ftp,"machine" 可以是 machine#port 或者 machine:port,如果需 要使用不同于标准 ftp 的端口的话。 (*4) 对于 http:...,如果 wget 可用,就使用之。不然,如果 fetch 可用, 就使用之。 :Nread 和 :Nwrite 这几个 ex 命令都能接受多个文件名。 NETRC netrw-netrc <.netrc> 文件通常位于你的主目录,它包含的内容是你想用的和机器名对应的用户名和 密码。 <.netrc> 文件典型的语法如下显示。Unix 上的 ftp 通常支持 <.netrc>;而 Windows 上的 ftp 通常不支持。 machine {full machine name} login {user-id} password "{password}" default login {user-id} password "{password}" 你的 ftp 客户端必须自己会使用 <.netrc>,如果 <.netrc> 文件存在,ftp 传输就不会 询问用户名字和密码。 注意: 既然这个文件包含密码明码,要确保没人能够读到这个文件!许多程序拒绝使用 能给别人读取的 .netrc 文件。当然不要忘记,系统管理员总是可以读到这个文 件的!为此,对 Linux/Unix 而言: chmod 600 .netrc 虽然 Windows ftp 客户端不支持 .netrc,netrw 有一个解决方法: 见 netrw-windows-s 。 密 码 netrw-passwd 脚本试图用内建的 Vim 函数 inputsecret() 不回显地读取 ftp 的密码。参见 netrw-userpass 了解如何在设置以后修改密码。 不幸的是,netrw 没有办法自动提供密码给 scp。所以每次通过 scp 传输文件都需要重 新输入密码。不过, netrw-ssh-hack 有助于解决这个问题。

5. 激活 netrw-activate {{{1

基于网络的文件传输缺省在 'nocompatible' 模式打开时就可用。netrw 的脚本文件在 你系统的 plugin、autoload 和 syntax 目录下,而在启动 vim 时,只自动加载 plugin/netrwPlugin.vim。netrw 的主要脚本定义在 autoload/netrw.vim 中,它只有在 实际使用 netrw 时才会载入。我建议你至少在 <.vimrc> 定制文件里放上: set nocp if version >= 600 filetype plugin indent on endif 如果在 .vimrc 文件里也包括以下内容,不带文件名时启动 [g]vim 可以立即激活 netrw 以显示当前目录: " Augroup VimStartup: augroup VimStartup au! au VimEnter * if expand("%") == "" | e . | endif augroup END

6. 透明远程文件编辑 netrw-transparent {{{1

透明文件传输指通过普通的文件读写命令进行的传输 (通过 :autocmdBufReadCmdBufWriteCmdSourceCmd 事件)。这样网络文件的读写或执行就能 和本地文件一样容易。 vim ftp://[user@]machine/path ... :wq netrw-activate 进一步说明如何让你的 vim 更好地使用 netrw 这样的插件。 关于 scp: 免密码的方法,参见 netrw-ssh-hack

7. Ex 命令 netrw-ex {{{1

支持普通的读写命令。此外,还有一些额外的命令。通常你不需要使用 Nwrite 或 Nread,就像 netrw-transparent 演示的那样 (也就是,用 :e URL :r URL :w URL 等即可) -- 见 netrw-urls 。下面的解释中,{netfile} 指代指向远程文件的 URL。 :Nwrite :Nw :[range]Nw[rite] 把特定的行写到当前由 b:netrw_lastfile 指定的文件里。 (相关: netrw-write ) :[range]Nw[rite] {netfile} [{netfile}]... 把特定的行写到 {netfile} 所指定的网络文件里。 :Nread :Nr :Nr[ead] 从 b:netrw_lastfile 指定的文件里读取行到当前的缓冲区。 (相关: netrw-read ) :Nr[ead] {netfile} {netfile}... 读取 {netfile} 到当前行之后。 :Nsource :Ns :Ns[ource] {netfile} 执行 {netfile}。 启动 vim 时如要使用远程的 .vimrc,可以使用如下 (都在同一行上) (多谢 Antoine Mechelynck) 的命令 vim -u NORC -N --cmd "runtime plugin/netrwPlugin.vim" --cmd "source scp://HOSTNAME/.vimrc" (相关: netrw-source ) :call NetUserPass() NetUserPass() 如果 g:netrw_uid 和 s:netrw_passwd 不存在,该函数向用户查询。 (相关: netrw-userpass ) :call NetUserPass("userid") 该调用设置 g:netrw_uid 并且,如果密码不存在的话,向用户查询。 (相关: netrw-userpass ) :call NetUserPass("userid","passwd") 该调用设置 g:netrw_uid 和 s:netrw_passwd。用户名和密码则被 ftp 传输使用。要删除用户名和密码,只用使用空字符串 (即 "") 便可。 (相关: netrw-userpass ) :NetrwSettings netrw-settings 里描述此命令 -- 用于显示 netrw 设置和修改 netrw 行为。

8. 变量和选项 netrw-var netrw-settings {{{1

(另见: netrw-options netrw-variables netrw-protocol netrw-browser-settings netrw-browser-options ) <netrw.vim> 脚本提供若干变量,作为控制 <netrw.vim> 行为的选项。这些变量通常在 用户的 <.vimrc> 里设置: (另见: netrw-settings netrw-protocol ) netrw-options

netrw 选项

选项 含义 -------------- ----------------------------------------------- < b:netrw_col 保存当前的列号 (NetWrite 时) g:netrw_cygwin =1 假设在 windows 上的 scp 是 cygwin 的版本 (windows 的缺省值) =0 假设在 windows 上的 scp 接受 windows 风格的 路径 (其他情况的缺省值) g:netrw_ftp =0 使用缺省的 ftp (uid password) =1 使用替代的 ftp (user uid password) (见 netrw-options ) g:netrw_ftpmode ="binary" (缺省) ="ascii" (你的选择) g:netrw_ignorenetrc = 1 (缺省) 如果你有 <.netrc> 文件,但是你不想用它,就 这么设置。它唯一的作用是使得 <.netrc> 被忽 略。 b:netrw_lastfile 最近一次通过网络读写的方法/机器/路径。 b:netrw_line 保存当前的行号 (NetWrite 时) g:netrw_silent =0 正常方式的传输 =1 安静方式的传输 g:netrw_uid 保存当前 ftp 的 user-id。 g:netrw_use_nt_rcp =0 不要使用 WinNT/2K/XP 的 rcp (缺省) =1 使用 WinNT/2K/XP 二进制模式的 rcp g:netrw_win95ftp =0 使用 unix 风格连接 ftp,即使 win95/98/ME 等 =1 使用缺省的方法连接 ftp

< netrw-internal-variables 脚本里也可以使用以下的内部变量,尽管应该是暂时的。

临时变量

选项 含义 -------------- -------------------------------- < b:netrw_method 指明 rcp/ftp+.netrc/ftp 等的索引 w:netrw_method (同 b:netrw_method) g:netrw_machine 保存输入分析结果的机器名 b:netrw_fname 保存访问的文件名

< netrw-protocol netrw 支持若干协议。调用这些协议时使用下面的列出的变量,用户可以修改。

协议控制选项

选项 类型 设置 意义 --------- -------- -------------- --------------------------- < netrw_ftp 变量 =不存在 userid 由 "user userid" 设 置 =0 userid 由 "user userid" 设置 =1 userid 由 "userid" 设置 NetReadFixup 函数 =不存在 没有改变 =存在 允许用户通过 ftp 自动传输的 文件通过 NetReadFixUp() 进行 转换 g:netrw_dav_cmd 变量 ="cadaver" 如果 cadaver 可执行 g:netrw_dav_cmd 变量 ="curl -o" 否则如果 curl 可执行 g:netrw_fetch_cmd 变量 ="fetch -o" 如果 fetch 可以执行 g:netrw_ftp_cmd 变量 ="ftp" g:netrw_http_cmd 变量 ="fetch -o" 如果 fetch 可以执行 g:netrw_http_cmd 变量 ="wget -O" 不然,如果 wget 可以执行 g:netrw_http_put_cmd 变量 ="curl -T" g:netrw_list_cmd 变量 ="ssh USEPORT HOSTNAME ls -Fa" g:netrw_rcp_cmd 变量 ="rcp" g:netrw_rsync_cmd 变量 ="rsync" g:netrw_rsync_sep 变量 ="/" 用于分隔终端名和文件规格 g:netrw_scp_cmd 变量 ="scp -q" g:netrw_sftp_cmd 变量 ="sftp"

< netrw-ftp g:netrw_..._cmd 选项 ( g:netrw_ftp_cmdg:netrw_sftp_cmd ) 指定如何处理特 定的协议 (rcp、ftp 等) 的外部程序,也可以包含需要的命令行选项 (如指定 passive 模式的 -p)。例如: let g:netrw_ftp_cmd= "ftp -p" g:netrw_list_cmd 提供浏览支持: 其中的 HOSTNAME 子串会被替代为当前请求的机器 名。 两个选项 ( g:netrw_ftpnetrw-fixup ) 都提供解决特定 ftp 问题的帮助。为了 更好的理解如何在 ftp 有问题的时候使用这些选项,以下是 netrw 如何进行 ftp 读取 的一点讨论。 对于 ftp,netrw 通常用以下几种格式之一构造命令行,并写到临时文件里: 如果 g:netrw_ftp 不存在或者不是 1 如果 g:netrw_ftp 存在且为 1 ---------------------------------- ------------------------------ open machine [port] open machine [port] user userid password userid password [g:netrw_ftpmode] password [g:netrw_ftpextracmd] [g:netrw_ftpmode] get filename tempfile [g:netrw_extracmd] get filename tempfile

< g:netrw_ftpmodeg:netrw_ftpextracmd 是可选的。 netrw 然后通过过滤命令执行上述命令行: :%! {g:netrw_ftp_cmd} -i [-n] 其中 g:netrw_ftp_cmd 通常是 "ftp", -i 告诉 ftp 不要交互 -n 意味着不要用 netrc,它用于方法 #3 (ftp 不用 <.netrc>) 如果 <.netrc> 存在,就不需要想用户查询用户名和密码。传输完毕后,保存文件到临时 文件里。这时,从临时文件里读取的内容被读到被请求的主编辑会话窗口中,并删除临时 文件。 如果你的 ftp 不支持 "user" 命令,而是立即需要输入用户名,那么试试把 "let netrw_ftp=1" 放到你的 <.vimrc> 里。 netrw-cadaver 要解决不受信任的服务器弹出 SSL 认证对话框的问题,你可以下载该认证,并把它放到 /usr/ssl/cert.pem 里。此操作使该服务器被认为是 "可信任的"。 netrw-fixup netreadfixup 如果你的 ftp 因某种原因产生不需要的行 (例如 AUTH 消息),你需要写一个 NetReadFixup() 函数: function! NetReadFixup(method,line1,line2) " a:line1: 当前文件的第一行新行 " a:line2: 当前文件的最后一行新行 if a:method == 1 "rcp elseif a:method == 2 "ftp + <.netrc> elseif a:method == 3 "ftp + machine,uid,password,filename elseif a:method == 4 "scp elseif a:method == 5 "http/wget elseif a:method == 6 "dav/cadaver elseif a:method == 7 "rsync elseif a:method == 8 "fetch elseif a:method == 9 "sftp else " 报错 endif endfunction 如果 NetReadFixup() 函数存在,它就会被调用,这样你就可以订制自己的读取进程。一 个进一步的例子可以看看 <netrw.vim> 如何处理 Windows 95 ftp 的函数。不知何种原 因,Windows 95 的 ftp 在传输结束以后加了四个空行,所以应该自动把它们删除。这里 是 <netrw.vim> 自己的一些代码: if has("win95") && g:netrw_win95ftp fun! NetReadFixup(method, line1, line2) if method == 3 " ftp (无 <.netrc>) let fourblanklines= line2 - 3 silent fourblanklines .. "," .. line2 .. "g/^\s*/d" endif endfunction endif (相关主题: ftp netrw-userpass netrw-start )

9. 浏览 netrw-browsing netrw-browse netrw-help {{{1

netrw-browser netrw-dir netrw-list 浏 览 简 介 netrw-intro-browse {{{2 (快速参考: netrw-quickmaps netrw-quickcoms ) netrw 支持本地系统和远端机器上的目录浏览;浏览包括列出文件和目录、进入目录、编 辑那里的文件、删除文件/目录、建立新目录和移动 (换名) 文件和目录,复制文件和目 录,等等。还可以对文件进行标记,并对标记的文件执行任何系统命令!netrw 浏览器实 现以前探索器里的映射和命令的更一般的版本以支持远程目录,不过具体细节 (比如使用 的全局变量名) 肯定有所不同。要浏览一个目录,简单地 "编辑" 之便可! vim /your/directory/ vim . vim c:\your\directory\ (相关主题: netrw-cr netrw-o netrw-p netrw-P netrw-t netrw-mf netrw-mx netrw-D netrw-R netrw-v ) netrw 远程文件和目录浏览器能处理两个协议: ssh 和 ftp。url 如果使用 ftp 协议, netrw 远程浏览时就同时使用 ftp。相反,如果指定其它协议,该协议将用于文件传输, 而 ssh 协议会被用来进行远程浏览。 要使用 netrw 的远程目录浏览器,只要读入带拖尾斜杠的 "文件" 就可以,它被解释为 列出目录的请求: vim [protocol]://[user@]hostname/path/ 其中 [protocol] 一般是 scp 或 ftp。例如: vim ftp://ftp.home.vim.org/pub/vim/ 对于本地目录,拖尾的斜杠是不必要的。不过因为很容易忘记,这里不厌其烦再重复一 遍: 要浏览远程目录,URL 必须以斜杠结尾! 如果要避免 ssh 或 scp 在远程目录列表时反复输入密码的麻烦,见 netrw-ssh-hack 。要避免 ftp 密码的输入,见 netrw-netrc (如果你的 ftp 支持的 话)。 改变浏览器显示文件的方式有以下几个途径: * 要改变列表风格,按 "i" 键 ( netrw-i )。 目前支持四种风格: 瘦、长、宽和树状。 要使改变永久化,见 g:netrw_liststyle 。 * 要隐藏文件 (不想再显示那些 xyz~ 文件?) 见 netrw-ctrl-h 。 * 按 s 来对文件按名字、时间或大小排序。 要知道 netrw 可以做的一切事情,见 netrw-browse-cmds netrw-getftype netrw-filigree netrw-ftype 在列出本地文件时, getftype() 函数被用来加上一个附綴,来表示文件类型: directory : / executable : * fifo : | links : @ sockets : = 附綴也影响 g:netrw_sort_sequence 。 快 速 帮 助 netrw-quickhelp {{{2 (按 ctrl-] 可选择主题) 浏览简介........................................ netrw-intro-browse 快速参考: 映射................................ netrw-quickmap 快速参考: 命令................................ netrw-browse-cmds 隐藏 编辑隐藏列表.................................. netrw-ctrl-h 隐藏文件或目录................................ netrw-a 按后缀隐藏或显示.............................. netrw-mh 隐藏点文件.................................... netrw-gh 列表风格 选择列表风格 (瘦/长/宽/树状).................. netrw-i 相关的设置变量................................ g:netrw_liststyle 执行列表的外壳命令............................ g:netrw_list_cmd 快速文件信息.................................. netrw-qf 如何排序 选择排序风格 (名字/时间/大小)................. netrw-s 编辑排序序列.................................. netrw-S 排序选项...................................... g:netrw_sort_options 相关的设置变量................................ g:netrw_sort_sequence 反转排序顺序.................................. netrw-r netrw-quickmap netrw-quickmaps 快 速 参 考 : 映 射 netrw-browse-maps {{{2 ---- -------- ---- 映射 简要解释 链接 ---- -------- ---- <F1> netrw 给出帮助 <cr> netrw 进入目录或者打开文件 netrw-cr <del> netrw 试图删除文件/目录 netrw-del <c-h> 编辑文件隐藏列表 netrw-ctrl-h <c-l> netrw 刷新目录列表 netrw-ctrl-l <c-r> 使用 gvim 服务器浏览 netrw-ctrl-r <c-tab> 收缩/打开 netrw/explore 窗口 netrw-c-tab - netrw 往上一层目录 netrw-- a 循环切换普通显示方式、 netrw-a 隐藏方式 (不显示匹配 g:netrw_list_hide 的文件) 和 显示方式 (只显示匹配 g:netrw_list_hide 的文件) cd 使浏览中的目录成为当前目录 netrw-cd C 设置编辑窗口 netrw-C d 建立新目录 netrw-d D 试图删除文件/目录 netrw-D gb 切换到收入书签的目录 netrw-gb gd 强制作目录处理 netrw-gd gf 强制作文件处理 netrw-gf gh 快速隐藏/显示点文件 netrw-gh gn 置顶光标下的目录 netrw-gn gp 修改只限本地文件的权限 netrw-gp i 在瘦、长、宽和树状列表方式循环 netrw-i I 切换横幅的显示 netrw-I mb 把当前目录加入书签 netrw-mb mc 把带标记文件复制到标记目标目录中 netrw-mc md 对带标记文件进行比较 (不超过 3 个) netrw-md me 把带标记文件放到参数列表中并编辑之 netrw-me mf 标记文件 netrw-mf mF 撤销文件标记 netrw-mF mg 给带标记文件应用 vimgrep netrw-mg mh 切换带标记文件的后缀在隐藏列表中的存在与否 netrw-mh mm 把带标记文件移动到标记目标目录中 netrw-mm mp 打印带标记文件 netrw-mp mr 用外壳风格的 regexp 标记文件 netrw-mr mt 使当前浏览目录成为标记文件的目标目录 netrw-mt mT 对带标记文件应用 ctags netrw-mT mu 撤销所有带标记文件的标记 netrw-mu mv 对带标记文件应用任意 vim 命令 netrw-mv mx 对带标记文件应用任意 外壳 命令 netrw-mx mx 对带标记文件整块应用任意外壳命令 netrw-mX mz 对带标记文件压缩/解压缩 netrw-mz o 用水平分割在新浏览窗口中进入光标所在的文件/目录 netrw-o O 获取光标指定的文件 netrw-O p 预览文件 netrw-p P 在前次使用的窗口中浏览 netrw-P qb 列出书签内的目录和历史 netrw-qb qf 显示文件信息 netrw-qf qF 用快速修复列表标记文件 netrw-qF qL 用 location-list 标记文件 netrw-qL r 反转排序顺序 netrw-r R 给指定的文件或目录换名 netrw-R s 选择排序风格: 按名字、时间或文件大小 netrw-s S 指定按名排序时的后缀优先级 netrw-S t 在新标签页里进入光标所在的文件/目录 netrw-t u 切换到较早访问的目录 netrw-u U 切换到较迟访问的目录 netrw-U v 用垂直分割在新浏览窗口中进入光标所在的文件/目录 netrw-v x 用指定程序阅读文件 netrw-x X 用 system() 执行光标所在的文件 netrw-X % 在 netrw 当前目录打开新文件 netrw-% netrw-mouse netrw-leftmouse netrw-middlemouse netrw-rightmouse <leftmouse> (仅限于 gvim) 选择鼠标所在的单词,就像按了 <cr> 一样 (即编辑文件、改变目录) <middlemouse> (仅限于 gvim) 等价于鼠标所在的单词上按 P;见 netrw-P <rightmouse> (仅限于 gvim) 删除鼠标所在的文件/目录 <2-leftmouse> (仅限于 gvim) 当: * 在 netrw 选择的文件中, * g:netrw_retmap == 1 * 用户没有在 netrw 自动载入之前已经定义 <2-leftmouse> 映射, 那么双击鼠标左键返回到 netrw 浏览器窗口。见 g:netrw_retmap<s-leftmouse> (仅限于 gvim) 同 mf,标记文件。拖动按住 shift 的鼠标左 键可以标记多个文件。(见 netrw-mf ) (浏览时要禁用鼠标键: g:netrw_mousemaps ) netrw-quickcom netrw-quickcoms 快 速 参 考 : 命 令 netrw-explore-cmds netrw-browse-cmds {{{2 :NetrwClean[!]............................................ netrw-clean :NetrwSettings............................................ netrw-settings :Explore[!] [dir] 探索当前文件所在的目录................. netrw-explore :Hexplore[!] [dir] 水平分割并探索......................... netrw-explore :Lexplore[!] [dir] 切换左浏览器........................... netrw-explore :Nexplore[!] [dir] 垂直分割并探索 (译者注: 应为转到下一个匹配的文件)..... netrw-explore :Pexplore[!] [dir] 垂直分割并探索 (译者注: 应为转到前一个匹配的文件)..... netrw-explore :Rexplore 返回浏览器............................. netrw-explore :Sexplore[!] [dir] 分割并探索目录......................... netrw-explore :Texplore[!] [dir] 建立新标签页并探索..................... netrw-explore :Vexplore[!] [dir] 垂直分割并探索......................... netrw-explore 显 示 横 幅 netrw-I 按 "I" 可以切换横幅显示的打开与关闭。 另见: g:netrw_banner 把 目 录 加 入 书 签 netrw-mb netrw-bookmark netrw-bookmarks {{{2 用下面的命令可以很方便地把当前浏览目录加入 "书签" mb .netrwbook 书签可以跨 vim 会话使用,因为它们被作为 List 保存在叫 .netrwbook 的文件里, 该文件通常存在用户的 'runtimepath' 中的第一个目录;所保存的项目已经排序。 如果有带标记的文件和/或目录,mb 会把它们加入书签列表。 netrw-:NetrwMB 另外,可用 :NetrwMB 来把文件或目录加入书签。 :NetrwMB[!] [files/directories] 没有 !: 把文件/目录加入 netrw 的书签系统 没有参数并且在 netrw 缓冲区里: 如果有带标记的文件 : 把带标记的文件加入书答 否则 : 把光标下的文件加入书答 没有参数并且不在 netrw 缓冲区里 : 把当前打开的文件加入书答 有参数 : 对每个参数用 glob() 展开并加入书签 带有 !: 从 netrw 的书签系统里删除文件/目录 :NetrwMB 命令可在 netrw 缓冲区之外使用 (一旦在会话中激活了 netrw)。 ".netrwbook" 文件用来在 netrw (和 vim) 未激活时记录书签。缺省,它保存在用户 'runtimepath' 的第一个目录里。 相关主题: netrw-gb 如果回到 (go) 书签 netrw-mB 如何删除书签 netrw-qb 如何列出书签 g:netrw_home 控制 .netrwbook 保存的位置 浏 览 netrw-enter netrw-cr {{{2 浏览很简单: 移动光标到感兴趣的文件或目录上,按 <cr> (回车键) 就可以选择该文件 或目录。如果还是目录,列出其内容,如果是文件,使用原来读请求中给出的协议来打开 该文件。 警 告: 有四种列表的形式 (见 netrw-i )。netrw 假设两个或更多的空格定界长列表 和宽列表格式下的文件和目录名。所以如果你的文件或目录名本身内嵌或拖尾两个或更 多的空格,用 "瘦" 格式来选择文件。 g:netrw_browse_split 选项缺省为零。可以修改它,使文件的打开在新窗口或标签页 里进行。如果该选项为一,分割会以水平方式进行,如果为二,分割以垂直方式进行。如 果为三,<cr> 使得文件在新标签页里出现。 如果是用图形界面 (gvim),可以按 <leftmouse> 选择文件。此外,如果 * g:netrw_retmap == 1 (其缺省值为 0) * 在 netrw 选择的文件中, * 用户没有在 netrw 载入之前已经定义 <2-leftmouse> 映射 那么双击鼠标左键返回到 netrw 浏览器窗口。 为了试图加快浏览速度,尤其是可能需要输入密码的远程浏览速度,netrw 会保留和重用 上次得到的目录列表缓冲区。 g:netrw_fastbrowse 变量控制此行为;可以选择慢速浏 览 (没有目录缓冲区列表重用),中速浏览 (只对远程目录重用目录缓冲区列表) 和快速 浏览 (尽可能重用目录缓冲区列表)。重用的代价是如果发生了改动 (例如在目录中出现 了新文件),列表就可能不是最新的。此时,按 ctrl-L 可以刷新目录列表缓冲区 (见 netrw-ctrl-l )。 netrw-s-cr 压缩当前树列表目录 如果打开树列表风格 (见 netrw-i ) 并且使用 gvim,<s-cr> 映射可用来压缩 (关闭) 光标所在的目录。 否则,可以重新映射用户自己选择的键组合来达到同样的效果: nmap <buffer> <silent> <nowait> YOURKEYCOMBO <Plug>NetrwTreeSqueeze 把此行放在$HOME/ftplugin/netrw/netrw.vim 里;必须只为 netrw 缓冲区而生成。 相关主题: netrw-ctrl-r netrw-o netrw-p netrw-P netrw-t netrw-v 相关设置变量: g:netrw_browse_split g:netrw_fastbrowse g:netrw_ftp_list_cmd g:netrw_ftp_sizelist_cmd g:netrw_ftp_timelist_cmd g:netrw_ssh_browse_reject g:netrw_ssh_cmd g:netrw_use_noswf 水 平 分 割 窗 口 方 式 浏 览 netrw-o netrw-horiz {{{2 通常用 <cr> 方式进入文件或目录。不过,"o" 映射可以打开新窗口来浏览新目录列表或 文件。这里使用水平分割。(垂直分割可见 netrw-v ) 通常,o 键水平分割窗口并使新窗口和光标出现在上方。 相关设置变量: g:netrw_alto g:netrw_winsize 相关主题: netrw-ctrl-r netrw-o netrw-p netrw-P netrw-t netrw-v 相关设置变量: g:netrw_alto 控制上/下分割 g:netrw_winsize 控制初始大小 在 新 标 签 页 里 浏 览 netrw-t {{{2 通常你用 <cr> 进入文件或目录。"t" 映射允许你在新标签页里打开新的目录列表或文 件。 如果你希望在背景标签页里显示新列表,用 gT 。 相关主题: netrw-ctrl-r netrw-o netrw-p netrw-P netrw-t netrw-v 相关设置变量: g:netrw_winsize 控制初始大小 垂 直 分 割 窗 口 方 式 浏 览 netrw-v {{{2 通常用 <cr> 方式进入文件或目录。不过,"v" 映射可以打开新窗口来浏览新目录列表或 文件。这里使用垂直分割。(水平分割可见 netrw-o ) 通常,v 键垂直分割窗口并使新窗口和光标出现在左方。 只能有一个树状列表的缓冲区;因而,在子目录上按 "v" 会分割屏幕,但显示相同的缓 冲区两遍。 相关主题: netrw-ctrl-r netrw-o netrw-p netrw-P netrw-t netrw-v 相关设置变量: g:netrw_altv 控制右/左分割 g:netrw_winsize 控制初始大小 用 GVIM 服 务 器 浏 览 netrw-ctrl-r {{{2 可以建立浏览专用的 gvim,和用来编辑的 gvim 区隔。netrw 浏览器上对文件 (不是目 录) 用 <c-r> 映射,会使用 gvim 服务器 (见 g:netrw_servername )。后续的 <cr> (见 netrw-cr ) 会重用该服务器来编辑文件。 相关主题: netrw-ctrl-r netrw-o netrw-p netrw-P netrw-t netrw-v 相关设置变量: g:netrw_servername : 设置服务器名 g:netrw_browse_split : 控制 <cr> 如何打开文件 改 变 列 表 方 式 (瘦 长 宽 树 ) netrw-i {{{2 "i" 映射在瘦、长、宽和树形列表格式之间循环。 瘦列表格式只给出文件和目录名。 对于远程目录,长格式基于通过 ssh 执行的 "ls" 命令结果,对于本地目录,则显示文 件名、文件大小 (字节计) 和最近修改日期和时间。使用长格式时,netrw 不能识别带拖 尾空格的文件名。这样的文件只能用瘦列表格式。 宽列表格式使用两个或多个连续的空格来给文件名定界;使用此格式时,netrw 不能识别 内嵌或拖尾带有两个或多个连续的空格的文件名。不过,瘦格式可以处理这些文件。这种 宽列表方式最为紧凑。 树形列表格式列出顶层目录,然后是文件和目录,它们的前面有一个或多个 "|",指示目 录深度。可以在目录名上按 <cr> 来打开或关闭目录。 可以设置缺省的列表方式: 见 g:netrw_liststyle 。例如可在 .vimrc 中加入 let g:netrw_liststyle= 3 树形列表就成为缺省方式了。 一个使用 netrw 树形显示的典型方式是: vim . (反复按 i 直到树形显示出现) 找到一个文件 v (垂直分割窗口并编辑文件) ctrl-w h (回到 netrw 列表) P (在前次窗口编辑新选文件) ctrl-w h (回到 netrw 列表) P (在前次窗口编辑新选文件) ...等等... 相关设置变量: g:netrw_liststyle g:netrw_maxfilenamelen g:netrw_timefmt g:netrw_list_cmd 改 变 文 件 权 限 netrw-gp {{{2 "gp" 会询问光标所在文件的新权限。目前,只适用于本地文件。 相关设置变量: g:netrw_chgperm 切 换 到 收 入 书 签 的 目 录 netrw-gb {{{2 要切换回收入书签的目录,用 {cnt}gb 可以使用计数来引用任何书签项目。 注意 netrw-qb 同时显示书签和历史;要转到历史的某个位置,见 netrw-unetrw-U 。 相关主题: netrw-mB 如何删除书签 netrw-mb 如何建立书签 netrw-qb 如何列出书签 切 换 到 较 早 访 问 的 目 录 netrw-u netrw-updir {{{2 每次你切换到新目录时 (当前会话里新出现),netrw 会把该目录保存在最近访问过的目 录历史列表里 (除非 g:netrw_dirhistmax 为零;缺省该值为 10 个项目)。用 "u" 映 射可以切换到较早访问的目录 (前任)。相反的操作见 netrw-U 。 "u" 映射也接受计数,回到若干个位置前的历史。为你方便起见,qb (见 netrw-qb ) 列出历史编号,可用于此处的计数。 .netrwhist 参见 g:netrw_dirhistmax ,说明如何控制保存的历史总数。".netrwhist" 文件在 netrw (和 vim) 未激活时记录历史。它缺省存放在用户 'runtimepath' 的第一个目录 里。 相关主题: netrw-U 切换到较迟访问的目录 g:netrw_home 控制 .netrwhist 何处存放 切 换 到 较 迟 访 问 的 目 录 netrw-U netrw-downdir {{{2 用 "U" 映射可以切换到较迟访问的目录 (后任)。和 "u" 映射相反。(见 netrw-u ) 用 qb 映射可以同时列出书签和历史。(见 netrw-qb ) "U" 映射也接受计数,回到若干个位置后的历史。 参见 g:netrw_dirhistmax ,说明如何控制保存的历史总数。 更 改 树 置 顶 目 录 netrw-ntree :Ntree netrw-gn {{{2 可以为树列表指定新的树置顶目录 :Ntree [dirname] 如果没有 "dirname",使用当前行 (跳过开头的深度信息)。 如果有 "dirname",使用指定的目录名。 "gn" 映射获取光标下的单词并用之改变树列表的置顶。 NETRW 清 理 netrw-clean :NetrwClean {{{2 使用 :NetrwClean 可以很容易地从用户主目录中删除 netrw;更准确的说,从 'runtimepath' 的第一个目录中删除之。 使用 :NetrwClean! 则会从 'runtimepath' 的所有目录中删除。当然,你必须要有正 确的写入/删除权限才能这么做。 不管哪种形式,netrw 都会先确认你是否真的要这么做。如果 netrw 没有权限删除某文 件,它会报错。 netrw-gx 通 过 特 殊 处 理 程 序 定 制 浏 览 netrw-x netrw-handler {{{2 (另见 netrw_filehandler ) html、gif、jpeg、(word/office) 文档等若干类型的文件最好用特殊处理程序 (也即, 你机器的操作系统上的特定工具程序) 来察看。netrw 允许你调用这些特殊的处理程 序: * 探索时,按 "x" 键 * 编辑时,在光标所在的特殊文件名上按 gx ( g:netrw_nogx 变量存在时后者不可用) netrw 用下面的方法决定使用哪个特殊处理程序: * 如果存在 g:netrw_browsex_viewer ,尝试用它来察看文件。包含可用设置的示例 (把它放在 <.vimrc> 里): :let g:netrw_browsex_viewer= "kfmclient exec" :let g:netrw_browsex_viewer= "xdg-open" 如果 g:netrw_browsex_viewer == '-',那么取而代之的是调用 netrwFileHandlers#Invoke() (见 netrw_filehandler )。 如果你想用的察看器不支持远程 URL 目录的处理,可把 g:netrw_browsex_support_remote 设为 0。 * 对 Windows 32 或 64 来说,使用 URL 和 FileProtocolHandler dll。 * 对 Gnome (带 gnome-open) 来说: 使用 gnome-open。 * 对 KDE (带 kfmclient) 来说: 使用 kfmclient。 * 对 Mac OS X 来说: 使用 open。 * 否则,使用 netrwFileHandler 插件。 这些方法使用文件的后缀名来决定 "处理" 这些文件的合适的应用程序。这样就可以处理 OpenOffice (*.sfx)、可视文件 (*.jpg、*.gif 等) 和 PostScript (*.ps、 *.eps)。 gx 映射延伸到所有缓冲区;在单词上应用 "gx" 使用 netrw 在其上使用特殊处理程序 (就像在 netrw 缓冲区里使用 "x" 一样)。也可用可视模式 (见 visual-start ) 选择 文本来应用特殊处理程序。通常,gx 使用 expand("<cfile>") 来获取光标下的文本; 通过 g:netrw_gx 变量 (选项包括 "<cword>"、"<cWORD>") 可以改变 expand() 使 用的参数。注意 expand("<cfile>") 取决于 'isfname' 设置。 此外,也可用可视选择 (见 visual-block ) 然后按 gx 来选择 gx 使用的文本。 相关设置变量: g:netrw_gx 控制 gx 如何获取光标下的文本 g:netrw_nogx 编辑时屏蔽 gx 映射 g:netrw_suppress_gx_mesg 控制 gx 对浏览器消息的抑制 netrw_filehandler g:netrw_browsex_viewer 如果存在且为 "-",netrw 试图通过 vim 函数来处理特殊文 件。"x" 映射根据文件扩展名来对文件应用一个函数。当然能够调用的前提是该处理函数 本身必须已经存在! 例如 mypgm.html x -> NFH_html("scp://user@host/some/path/mypgm.html") 用户可以编写他们自己的 netrw 文件处理函数来对更多后缀进行特殊处理。参 见 <autoload/netrwFileHandlers.vim> 的例子来了解如何建立文件处理函数。 例如: " NFH_suffix(filename) fun! NFH_suffix(filename) ..对文件名进行特殊处理.. endfun 这些函数需要在你的 .vim/plugin (vimfiles\plugin) 目录下的某个文件里定义。Vim 的函数名不能包含标点符号 (除了下划线以外)。要支持包含这类字符的后缀,netrw 会 先按照下表对后缀进行转换: @ -> AT ! -> EXCLAMATION % -> PERCENT : -> COLON = -> EQUAL ? -> QUESTION , -> COMMA - -> MINUS ; -> SEMICOLON $ -> DOLLAR + -> PLUS ~ -> TILDE 因而,对于下例: file.rcs,v -> NFH_rcsCOMMAv() 如果你需要更多的转换,请给我发电子邮件: NcampObell@SdrPchip.AorgM-NOSPAM 提出要求 (先去掉内嵌的 NOSPAM)。 相关设置变量: g:netrw_browsex_viewer 删 除 书 签 netrw-mB {{{2 要删除书签,用 {cnt}mB 如果有带标记的文件,mB 会从书签列表中删除之 。 此外,还可用 :NetrwMB! (见 netrw-:NetrwMB )。 :NetrwMB! [文件/目录] 相关主题: netrw-gb 如何回到 (go) 书签 netrw-mb 如何建立书签 netrw-qb 如何列出书签 删 除 文 件 或 目 录 netrw-delete netrw-D netrw-del {{{2 如果没有用 netrw-mf 标记过文件: (局部标记文件列表) 文件和目录的删除涉及如下操作: 移动光标到要删除的文件/目录,然后按 "D"。目 录必须为空才能成功删除。如果所谓的目录是指向目录的软链接。要成功删除该目 录,netrw 需要发出两个请求。删除前 netrw 会给出确认。用 "V" 命令 (可视选 择) 然后按 "D" 可以选择行范围。 如果用 netrw-mf 标记过文件: (局部标记文件列表) 带标记文件 (含空目录) 会被删除;还是一样,在实际操作之前,你会被询问以确认 删除动作。 进一步,可以删除匹配模式的文件。 * 用 :MF 模式 (见 netrw-:MF );然后按 "D"。 * 用 mr (见 netrw-mr ) 提示你输入模式。使得匹配文件被标记。然后按 "D"。 如果你的 vim 版本有 7.4 patch#1107 补丁, g:netrw_localrmdir 不再用于删除目 录;而使用 vim 带 "d" 选项的 delete() 代替。请注意 "D" 映射只能删除空目录。 而 delete() 也能删除普通文件。 g:netrw_rm_cmdg:netrw_rmf_cmdg:netrw_rmdir_cmd 变量用以控制如何删 除远程的文件和目录。g:netrw_rm_cmd 用于文件,缺省值为: g:netrw_rm_cmd: ssh HOSTNAME rm :netrw_rmdir_cmd 变量用于删除目录。缺省值为: g:netrw_rmdir_cmd : ssh HOSTNAME rmdir 如果用 g:netrw_rmdir_cmd 删除目录失败,netrw 会再尝试一次用 g:netrw_rmf_cmd 变 量进行删除。缺省值为: g:netrw_rmf_cmd : ssh HOSTNAME rm -f 相关主题: netrw-d 相关设置变量: g:netrw_localrmdir g:netrw_rm_cmd g:netrw_rmdir_cmd g:netrw_ssh_cmd netrw-explore netrw-hexplore netrw-nexplore netrw-pexplore netrw-rexplore netrw-sexplore netrw-texplore netrw-vexplore netrw-lexplore 目 录 探 索 命 令 {{{2 :[N]Explore[!] [dir]... 探索当前文件所在的目录 :Explore :[N]Hexplore[!] [dir]... 水平分割 并探索 :Hexplore :[N]Lexplore[!] [dir]... 切换左浏览器 :Lexplore :[N]Sexplore[!] [dir]... 分割并探索当前文件所在的目录 :Sexplore :[N]Vexplore[!] [dir]... 垂直分割 并探索 :Vexplore :Texplore [dir]... 建立新标签页并探索 :Texplore :Rexplore ... 返回到浏览器 :Rexplore 用于 :Explore **/模式 : (另见 netrw-starstar ) :Nexplore............. 转到下一个匹配的文件 :Nexplore :Pexplore............. 转到前一个匹配的文件 :Pexplore netrw-:Explore :Explore 会打开当前文件目录上的本地目录浏览器 (或者如果指定, [dir] 目录)。 只有该文件被修改且 'hidden' 未置位时才会分割窗口,否则浏览窗口使用 该窗口。通常使用水平分割。 :Explore! 类似于 :Explore,但使用垂直分割。 netrw-:Hexplore :Hexplore [dir] 执行 :Explore,用 :belowright 水平分割。 :Hexplore! [dir] 执行 :Explore,用 :aboveleft 水平分割。 netrw-:Lexplore :[N]Lexplore [dir] 在当前标签页上左侧切换一个全高的浏览器窗口。如果 [dir] 省 略,在当前目录上打开 netrw 窗口;不管从哪个窗口执行本命令,:Lexplore [dir] 会在左侧浏览器上显示指定目录。 缺省 :Lexplore 会将未初始化的 g:netrw_chgwin 值设为 2;从而,编辑 会首选在 window#2 进行。 [N] 指定 g:netrw_winsize ,只适用于新建的 :Lexplore 窗口。 喜欢此方法的常常也喜欢树风格的显示;见 g:netrw_liststyle 。 :[N]Lexplore! [dir] 类似于 :Lexplore,但全高的探索器窗口开在右侧,未初始化的 g:netrw_chgwin 设为 1 (例如,编辑会首选在最左侧进行)。 另见: netrw-C g:netrw_browse_split g:netrw_wiw netrw-p netrw-P g:netrw_chgwin netrw-c-tab g:netrw_winsize netrw-:Sexplore :Sexplore 调用本地目录浏览器前总分割窗口。和 Explore 相同,通常使用水平分割。 :Sexplore! [dir] 类似于 :Sexplore,但使用垂直分割。 netrw-:Texplore :Texplore [dir] 在生成浏览窗口前先执行 :tabnew netrw-:Vexplore :Vexplore [dir] 执行 :Explore,用 :leftabove 垂直分割。 :Vexplore! [dir] 执行 :Explore,用 :rightbelow 垂直分割。 可选的参数是: [N]: 此参数会代替 g:netrw_winsize 来指定新浏览器窗口应有的行数和列数。 否则,如果用户指定 g:netrw_winsize 变量,用来设置新浏览器窗口应有的行 数和列数。 [dir]: 缺省这些浏览器命令使用当前文件的目录。不过你可以显式提供使用的目录 (路 径)。 :Explore /some/path netrw-:Rexplore :Rexplore 此命令和其它的有所不同,它不一定会打开浏览器窗口。 返回浏览器 当用在 netrw 浏览器窗口的文件上按 <cr> 等方式编辑文件时,在编辑文件 时调用的 :Rexplore 会重新显示上次在此窗口上显示的 netrw 浏览器窗 口。 从浏览器上返回 相反地,编辑目录时调用 :Rexplore 会返回到使用此窗口的上次的文件编辑 状态。 <2-leftmouse> 映射 (只有在 gvim 和有相应支持的终端才存在) 的行为和 :Rexplore 相同。 另见: g:netrw_alto g:netrw_altv g:netrw_winsize netrw-star netrw-starpat netrw-starstar netrw-starstarpat netrw-grep 使 用 星 号 和 模 式 进 行 探 索 {{{2 Explore、Sexplore、Hexplore 或 Vexplore 使用以下四种风格的路径时,Explore 生成 本地文件系统生成满足要求的的文件列表。这些探索模式不适用于远程文件浏览。 */filepat 当前目录满足文件模式 filepat 的文件 **/filepat 当前目录或之下满足文件模式的文件 *//pattern 当前目录内容包含模式 pattern 的文件 (使用 vimgrep) **//pattern 当前目录或之下内容包含模式 pattern 的文件 (使用 vimgrep) 光标会被放在列表的第一个文件上。用 :Nexplore 可以访问该列表后面的文件,也可 用 :Pexplore 访问列表前面的文件。Explore 会更新目录并把光标放在合适的位置。 简单的 :Explore 会清除探索列表。 如果控制台或 GUI 产生的 shift-up 或 shift-down 序列能够被识别,也许你会发现 shift-下箭头 和 shift-上箭头 更方便。netrw 提供它们的映射,如下: <s-down> == Nexplore,而 <s-up> == Pexplore。 考虑下例 :Explore */*.c :Nexplore :Nexplore :Pexplore 状态行的右侧会显示 "Match 3 of 20" 这样的消息。 相关设置变量: g:netrw_keepdir g:netrw_browse_split g:netrw_fastbrowse g:netrw_ftp_browse_reject g:netrw_ftp_list_cmd g:netrw_ftp_sizelist_cmd g:netrw_ftp_timelist_cmd g:netrw_list_cmd g:netrw_liststyle 显 示 文 件 信 息 netrw-qf {{{2 把光标放在文件名上,按 "qf" 会显示文件的大小和最近的修改时间。目前,此功能只适 用于本地文件。 编 辑 文 件 或 目 录 的 隐 藏 列 表 netrw-ctrl-h netrw-edithide {{{2 "<ctrl-h>" 映射显示请求以允许用户改变 g:netrw_list_hide 包含的文件/目录隐藏 列表。隐藏列表包含一个或多个逗号分隔的模式列表。可以隐藏 (也就是不显示) 或只显 示满足这些模式的文件和/或目录 (见 netrw-a )。 "gh" 映射 (见 netrw-gh ) 在普通的隐藏列表和隐藏 "." 开始的文件或目录间快速切 换。 示例, let g:netrw_list_hide= '\(^\|\s\s\)\zs\.\S\+' 效果上,它使得 netrw-gh 命令的结果成为初始的设置。具体来说: \(^\|\s\s\) : 如果下面的模式开始本行,-或-出现在两个连续的空白之后 \zs : 开始隐藏匹配 \. : 以句号开始 \S\+ : 后跟一个或多个非空白字符 相关设置变量: g:netrw_hide g:netrw_list_hide 相关主题: netrw-a netrw-gh netrw-mh netrw-sort-sequence 编 辑 排 序 序 列 netrw-S netrw-sortsequence {{{2 如果 "排序风格" 为 name,用此排序序列可决定优先次序 (g:netrw_sort_sequence)。 排序序列里,通常按后缀名安排名字列表的优先级,但其实任何模式都可以用。用逗号定 界模式。缺省的排序序列是 (在一行上): Unix 上: '[\/]$,\<core\%(\.\d\+\)\=,\.[a-np-z]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$, \.info$,\.swp$,\.bak$,\~$' 其它: '[\/]$,\.[a-np-z]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$, \.swp$,\.bak$,\~$' 单独的 * 包含其它模式没有覆盖的所有文件名。用 g:netrw_sort_sequence 变量 (手动 或在 <.vimrc> 里设置) 可以修改排序序列,"S" 映射也可以完成。 相关主题: netrw-s netrw-S 相关设置变量: g:netrw_sort_sequence g:netrw_sort_options 用 SYSTEM() 执 行 光 标 所 在 的 文 件 netrw-X {{{2 光标停留在可执行文件上时按 X 时,会用文件名给出提示,要求输入参数。按 [return] 后 netrw 会调用 system() 执行该命令和给定参数。结果用 :echomsg 显示, :messages 可以重新显示结果。Ansi 转义序列会被去掉。 见 cmdline-window 如何编辑参数的指示。 强 制 作 为 文 件 或 目 录 对 待 netrw-gd netrw-gf {{{2 远端符号链接 (即通过 ssh 或 ftp 列出的) 有一个问题,不容易知道它们实际链接到文 件还是目录。 强制作为文件: 用 gf 强制作为目录: 用 gd 向 上 一 层 netrw-- {{{2 要到上一层的目录,按 "-" 或在列表的 ../ 目录项上按 <cr>。 netrw 用 g:netrw_list_cmd 命令执行目录列表操作,其中 HOSTNAME 被用户提供的 url 的宿主名替换。netrw 提供的缺省命令是: ssh HOSTNAME ls -FLa 其中的 HOSTNAME 将根据读取操作的请求设为 [user@]hostname。很自然地,用户可以自 行设置以覆盖此命令。NetList 函数实现远程浏览,它期待拖尾斜杠能标记目录名。 隐 藏 文 件 或 目 录 netrw-a netrw-hiding {{{2 netrw 的浏览机制提供三种使用隐藏列表的方法: 忽略此列表、隐藏匹配的文件、还有只 显示匹配的文件。 如果没有用 netrw-mf 标记过文件: 用户可以用 "a" 映射在这三种方式间切换。 g:netrw_list_hide 变量保存逗号分隔的正则表达式列表 (例如 ^.*\.obj$,^\.),以 指定隐藏列表。(另见 netrw-ctrl-h ) 要设置隐藏列表,可以用 <c-h> 映射。例如, 要隐藏 "." 开头的文件,可以用 <c-h> 映射来设置隐藏列表为 '^\..*' (你也可以在 <.vimrc> 里设置 g:netrw_list_hide= '^\..*')。然后用 "a" 键就可以显示所有文件、 隐藏匹配文件或只显示匹配文件。 示例: \.[ch]$ 这个隐藏列表命令会隐藏/显示所有的 *.c 和 *.h 文件。 示例: \.c$,\.h$ 这个隐藏列表命令也会隐藏/显示所有的 *.c 和 *.h 文件。 不要忘记用 "a" 映射来选择你想要的 (普通/隐藏/显示) 模式! 如果用 netrw-mf 标记过文件,那么此命令会: 如果显示所有文件或非隐藏文件: 修改 g:netrw_list_hide 列表,加入带标记文件,并只显示非隐藏文件。 否则,如果只显示隐藏文件: 修改 g:netrw_list_hide 列表,删除带标记文件,并只显示非隐藏文件。 netrw-gh netrw-hide 有一个快捷键,按 gh 可以切换是否隐藏句号 (点) 开始的文件。 相关设置变量: g:netrw_list_hide g:netrw_hide 相关主题: netrw-a netrw-ctrl-h netrw-mh netrw-gitignore Netrw 提供帮助函数 'netrw_gitignore#Hide()',和 g:netrw_list_hide 一起使用时 自动隐藏 git-ignore 的文件。 'netrw_gitignore#Hide' 搜索下面文件中的模式: './.gitignore' './.git/info/exclude' 全局 gitignore 文件: `git config --global core.excludesfile` 系统 gitignore 文件: `git config --system core.excludesfile` 忽略不存在的文件。 从存在的文件中提取 git-ignore 模式,转换为隐藏文件的模式。例如,'.gitignore' 文件中 '*.log' 转换为 '.*\.log'。 要使用此函数,简单地把其输出赋值给 g:netrw_list_hide 选项。 例如: let g:netrw_list_hide= netrw_gitignore#Hide() 在 netrw 里隐藏 git-ignore 文件。 例如: let g:netrw_list_hide= netrw_gitignore#Hide('my_gitignore_file') 函数可以接受使用 git-ignore 模式的额外文件。 例如: let g:netrw_list_hide= netrw_gitignore#Hide() .. '.*\.swp$' 混合 'netrw_gitignore#Hide' 和定制的模式。 改 进 目 录 浏 览 netrw-listhack netrw-ssh-hack {{{2 不断要求输入密码很讨厌,远程目录的浏览尤其受这个问题影响。 对 Linux/Unix 系统而言,Rob Flickenger 所著的 "Linux Server Hacks - 100 industrial strength tips & tools" (O'Reilly, ISBN 0-596-00461-3) 一书给出如 何设置无需密码的 ssh 和 scp 的使用方式的提示,也包括相关安全问题的讨论。该书 曾经可从 http://hacks.oreilly.com/pub/h/66 得到,但现在该地址已经被重定向到某 个 "hackzine" 网站。基于该文章和我与 Ben Schmidt 的通信,我试图给一个小结: 1. 在本地机器 (ssh 客户端) 上生成 公钥/私钥 对: ssh-keygen -t rsa (按照提示,把该文件存到 ~/.ssh/id_rsa) 2. 如果不要 passphrase,提示 passphrase 时只要按 <CR> 即可 (两次)。如 果需要 passphrase,你要使用 ssh-agent,从而每个会话期间只需输入一次 passphrase。如果不用 passphrase,只要简单地登录到你的本地机器上或者 用任何方式得到密钥文件就足够可以访问任何使用该密钥提供授权登录的 ssh 服务器。 3. 这会建立两个文件: ~/.ssh/id_rsa ~/.ssh/id_rsa.pub 4. 在目标机器 (ssh 服务器) 上: cd mkdir -p .ssh chmod 0700 .ssh 5. 在你的本地机器 (ssh 客户端) 上: (在一行上输入) ssh {serverhostname} cat '>>' '~/.ssh/authorized_keys2' < ~/.ssh/id_rsa.pub 或者,对于 OpenSSH 而言,(在一行上输入) ssh {serverhostname} cat '>>' '~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub 你可以这样测试 ssh {serverhostname} 你应该可以登录到服务器机器而无须任何进一步的输入。 如果你决定使用 passphrase: ssh-agent $SHELL ssh-add ssh {serverhostname} ssh-add 时,你会被提示输入密钥 passphrase,但之后 ssh 就无须再输入了。要用于 vim,你可以用 ssh-agent vim 然后在 vim 中,用 :!ssh-add 另一个方案是在要执行 vim 的终端上应用 ssh-agent: ssh-agent xterm & 然后需要的时候执行 ssh-add。 vim 邮件列表上也有人提到 Windows 上的 Pageant 有助于避免不断要求输入密码的麻 烦。 Kingston Fung 写下另一个避免不断要求输入密码的方法: 要避免每次使用 scp 都输入密码的需要,你在文档里给出了一个设置无密码 ssh 帐 号的技巧。我有个更好的方法: 我可以使用普通有密码的 ssh 帐号来访问内容,而 无须每次都输入密码。既安全又方便。我试了 ssh 公钥验证和 ssh-agent,这么做 就可以用了!这里是具体操作的链接: http://www.ibm.com/developerworks/library/l-keyc2/ http://sial.org/howto/openssh/publickey-auth/ Ssh 小提示: Thomer Gil 提供的加速 netrw+ssh 的提示: http://thomer.com/howtos/netrw_ssh.html Alex Young 关于加速ssh 的若干提示: http://usevim.com/2012/03/16/editing-remote-files/ 列 出 书 签 和 历 史 netrw-qb netrw-listbookmark {{{2 按 "qb" (query bookmarks,查询书签) 会列出书签里记录的目录和目录遍历的历史。 相关主题: netrw-gb 如何回到 (go) 书签 netrw-mb 如何建立书签 netrw-mB 如何删除书签 netrw-u 如何切换到历史堆栈里先前的目录 netrw-U 如何切换到历史堆栈里后来的目录 建 立 新 目 录 netrw-d {{{2 用 "d" 映射可以在远端 (取决于全局变量 g:netrw_mkdir_cmd) 或本地 (取决于全局变 量 g:netrw_localmkdir) 建立目录。netrw 会要求新目录的名字。这时单输入 <CR> 可 以中止目录建立过程。试图建立已经存在的本地目录 (可以是文件或目录) 会被检测到并 进行报告,然后忽略。 相关主题: netrw-D 相关设置变量: g:netrw_localmkdir g:netrw_mkdir_cmd g:netrw_remote_mkdir netrw-% 使 浏 览 目 录 成 为 当 前 目 录 netrw-cd netrw-curdir {{{2 g:netrw_keepdir 缺省为 1。该设置意味着当前目录不会跟踪浏览目录。(这么做是为 于和 v6 版本的文件探索器后向兼容) 设置 g:netrw_keepdir 为 0 告诉 netrw 使 vim 的当前目录跟踪 netrw 的浏览目录。 不过,保持缺省为 1 的 g:netrw_keepdir 设置意味着 netrw 维护它自己的当前目录的 概念。要想使两个目录相同,可用 "cd" 映射 (按 cd)。该映射会把 Vim 概念的当前目 录设为当前的浏览目录。 netrw-cd : 本映射名从 "c" 改成了 cd (见 netrw-cd )。 这个改动使 netrw-cbnetrw-cB 映射成为可能。 相关设置变量: g:netrw_keepdir 标 记 文 件 netrw-:MF netrw-mf {{{2 (另见 netrw-mr ) netrw 提供了几种标记文件的方式: * 把光标移到文件名上按 "mf" 就可以标记文件。 * gvim 中,更可以用 <s-leftmouse> 来标记文件。(见 netrw-mouse ) * :MF 命令接受文件列表 (针对本地目录,列表可能包含通配符 -- 见 glob() ) :MF *.c (备注 :MF 用 <f-args> 以便在空白内断开行) * 用 argument-list 标记文件 ( netrw-mA ) * 基于 location-list 标记文件 ( netrw-qL ) * 基于快速修复 ( netrw-qF ) ( quickfix-error-lists ) 下面的 netrw 映射使用带标记文件: netrw-a 隐藏标记文件/目录 netrw-D 删除标记文件/目录 netrw-ma 移动标记文件名到 arglist netrw-mA 移动 arglist 文件名到标记文件列表 netrw-mb 附加标记文件到书签 netrw-mB 从书签中删除标记文件 netrw-mc 复制标记文件到目标 netrw-md 给标记文件应用 vimdiff netrw-me 编辑标记文件 netrw-mF 撤销文件标记 netrw-mg 在标记文件上应用 vimgrep netrw-mm 移动标记文件到目标 netrw-mp 打印标记文件 netrw-ms Netrw 会执行标记文件 netrw-mtnetrw-mmnetrw-mc 设定目标 netrw-mT 用标记文件生成标签 netrw-mv 在标记文件上应用 vim 命令 netrw-mx 在标记文件上应用外壳命令 netrw-mX 在标记文件上整块应用外壳命令 netrw-mz 压缩/解压标记文件 netrw-O 获取标记文件 netrw-R 为标记文件换名 用标记文件相同的方式可以撤销文件的标记,也就是,把光标移到带标记的文件上按 "mf"。这也适用于 gvim 的 <s-leftmouse>。按 "mu" 可以一次撤销所有标记 (见 netrw-mu )。 标记的文件使用 "netrwMarkFile" 高亮组高亮,该组缺省链接到 "Identifier" (见 group-name 下的 Identifier)。可以把以下代码 highlight clear netrwMarkFile hi link netrwMarkFile ..随便什么.. 加入 $HOME/.vim/after/syntax/netrw.vim 来改变高亮组设置。 如果鼠标功能打开且在 Vim 里可用,可用 <s-leftmouse> 来标记一个或多个文件。多个 文件的标记可通过按住 shift 拖动鼠标左键实现。(见 netrw-mouse ) markfilelist global_markfilelist local_markfilelist 所有的标记文件都进入全局标记文件列表;只有唯一的这样的列表。此外,每个 netrw 缓冲区都有自己缓冲区局部的标记文件列表;因为 netrw 缓冲区和特定的目录相关联, 这意味着每个目录都有自己的局部标记文件列表。操作标记文件的命令分别使用两个标记 文件列表中的一个。 已知问题: 如果使用树模式 ( g:netrw_liststyle ) 而多个目录上有相同的文件名,标 记其中一个文件会高亮所有这样的文件,就像它们都被标记了一样。不过, markfilelist 只包含你实际选择的文件。这个问题不太可能得到修正。 撤 销 文 件 标 记 netrw-mF {{{2 (另见 netrw-mfnetrw-mu ) "mF" 命令撤销当前缓冲区所有文件的标记。也可用 mf ( netrw-mf ) 来撤销特定的己标 记文件的标记。 用 位 置 列 表 标 记 文 件 netrw-qL {{{2 (另见 netrw-mf ) "qL" 可以把 location-list 转换为标记文件的列表。然后用 me ( netrw-me ) 这样 的命令就可以编辑它们。 用 快 速 修 复 列 表 标 记 文 件 netrw-qF {{{2 (另见 netrw-mf ) "qF" 可以把 quickfix-error-lists 转换为标记文件的列表。然后用 me ( netrw-me ) 这样的命令就可以编辑它们。例如,可以调用 :vimgrep 来生成快速修 复错误列表。 用 正 规 表 达 式 标 记 文 件 netrw-mr {{{2 (另见 netrw-mf ) 也可以用 "mr" 来标记文件;netrw 会给出提示,"Enter regexp: "。此时,你可以输入 一个外壳风格的正则表达式,比如 *.c$ (见 glob() )。glob() 不能用于远程文件,所 以 netrw 把 "*" 转换成 ".*" (见 regexp ) 并依此匹配文件。将来,我可能会考虑提 供选项来使用 regexp 而不是 glob()-风格的表达式 (另一个选项)。 见 cmdline-window 关于更多如何编辑正则表达式的指示。 带 标 记 文 件 ,任 意 VIM 命 令 netrw-mv {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用局部标记文件列表) "mv" 映射会使 netrw 在本地标记文件列表的每个文件上分别执行任意的 vim 命令: * 1split * sil! keepalt e file * 执行 vim 命令 * sil! keepalt wq! 给出提示 "Enter vim command: " 让用户给出要使用的 vim 命令。 见 cmdline-window 关于更多如何编辑命令的指示。 带 标 记 文 件 ,任 意 外 壳 命 令 netrw-mx {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用局部标记文件列表) 激活 "mx" 映射后,netrw 会询问用户应用于所有带标记文件的 (外部) 命令。命令中所 有的 "%" 被带标记文件的每个名字依次替代。如果命令中没有 "%",那么命令后附加一 个空格和一个带标记文件名。 示例: (标记文件) mx Enter command: cat 结果是一系列外壳命令: cat 'file1' cat 'file2' ... 带 标 记 文 件 ,任 意 外 壳 命 令 ,整 块 netrw-mX {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用全局标记文件列表) 激活 'mX' 映射后,netrw 会请用户给出某个 (外部) 命令,应用在全局标记文件列表上 的所有带标记文件。"整块" 的意思是一个命令一次执行在所有文件上: command files 此方法可用于,例如,选择所有文件打个 tarball 包: (标记文件) mX Enter command: tar cf mynewtarball.tar 此例中会执行的命令是: tar cf mynewtarball.tar 'file1' 'file2' ... 带 标 记 文 件 : 参 数 列 表 netrw-ma netrw-mA (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用全局标记文件列表) ma 可以从标记文件列表移动文件名到参数列表。 mA 可以从参数列表移动文件名到标记文件列表。 另见: netrw-cb netrw-cB netrw-qF argument-list :args 带 标 记 文 件 : 缓 冲 区 列 表 netrw-cb netrw-cB (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用全局标记文件列表) cb 可以从标记文件列表移动文件名到缓冲区列表。 cB 可以从缓冲区列表移动文件名到标记文件列表。 另见: netrw-ma netrw-mA netrw-qF buffer-list :buffers 带 标 记 文 件 : 压 缩 与 解 压 缩 netrw-mz {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用局部标记文件列表) 对任何压缩过的带标记文件,"mz" 会对它们解压。 对任何被解压的带标记文件,"mz" 会用 g:netrw_compress 指定的命令对它们进行压 缩。缺省,使用 "gzip"。 对于解压,netrw 使用一个后缀到相应解压工具的 Dictionary ;见 g:netrw_decompress 。 记住可以用正则表达式来标记多个文件 (见 netrw-mr );这对压缩与解压缩大量文件特 别有用。 相关设置变量: g:netrw_compress g:netrw_decompress 带 标 记 文 件 : 复 制 netrw-mc {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用全局标记文件列表) 用 mt 选择目标目录 ( netrw-mt )。然后改变目录,选择文件 (见 netrw-mf ),然后 按 "mc"。从当前窗口 (执行 mf 的地方) 复制到目标。 如果没有用 netrw-mt 设置目标目录,netrw 会让你输入要复制到的目录。 也可以复制目录及其内容 (只限本地) 来目标目录。 相关设置变量: g:netrw_localcopycmd g:netrw_localcopycmdopt g:netrw_localcopydircmd g:netrw_localcopydircmdopt g:netrw_ssh_cmd 带 标 记 文 件 : 比 较 netrw-md {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用全局标记文件列表) 用 vimdiff 来显示选择文件的差异 (为此,可以选择两到三个文件)。 带 标 记 文 件 : 编 辑 netrw-me {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用全局标记文件列表) "me" 命令把带标记文件放在 arglist 上,然后开始编辑它们。用 :Rexplore 可以 回到浏览器窗口。 ( :n:p 可以编辑 arglist 的下一个和上一个文件) 带 标 记 文 件: GREP netrw-mg {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用全局标记文件列表) "mg" 命令在带标记文件上应用 :vimgrep 。 该命令会询问需要的模式;你可以输入: /pattern/[g][j] ! /pattern/[g][j] pattern 用 /pattern/,从 vimgrep 产生的 quickfix 列表 (见 :copen:cnext:cprevious:cclose ) 的首个项目开始编辑。使用的是 :vimgrep ,因而不带 'g' 时每行只加到快速修复列表上一次,带 'g' 时加入每个匹配。 用 /pattern/j,"mg" 可以缩减当前的标记文件列表,只包含给定模式的那些标记文件。 因此可以用 mr ...文件模式... mg /内容模式/j 来得到同时满足文件名匹配文件模式且内容限定在指定内容模式的标记文件列表。 带 标 记 文 件 : 按 后 缀 隐 藏 或 显 示 netrw-mh {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用局部标记文件列表) "mh" 命令提取带标记文件的后缀,然后在隐藏列表中切换它们的存在与否。请 注意 据 此,带有相同后缀的文件多次出现会使得每个文件都切换一次此后缀的存在与否 (所以偶 数个相同后缀的带标记文件和不选任何文件的作用是一样的)。 相关主题: netrw-a g:netrw_list_hide 带 标 记 文 件 : 移 动 netrw-mm {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用全局标记文件列表) 警 告: 移动文件比复制文件要危险。被移动的文件先被复制然后被删除;如果 复制操作失败但删除操作成功,该文件就丢失了。你要么用不太重要的文件先试 试,要么用 mc 和 D 先进行复制然后再删除。请自行负责! 用 mt 选择目标目录 ( netrw-mt )。然后改变目录,选择文件 (见 netrw-mf ),然后 按 "mm"。从当前窗口 (执行 mf 的地方) 移动到目标。 相关设置变量: g:netrw_localmovecmd g:netrw_ssh_cmd 带 标 记 文 件 : 打 印 netrw-mp {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用局部标记文件列表) "mp" 命令使 netrw 对带标记文件应用 :hardcopy 命令。具体地,它在一个单行的窗 口上打开每个文件,执行 hardcopy,然后关闭这个单行窗口。 带 标 记 文 件 : 执 行 netrw-ms {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用局部标记文件列表) "ms" 命令使 netrw 执行带标记文件 (使用 vim 的 :source 命令) 带 标 记 文 件 : 设 置 目 标 目 录 netrw-mt {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) 设置带标记文件复制/移动的目标 (见 netrw-mcnetrw-mm ): * 如果光标在文件名上,使用 netrw 窗口当前显示的目录作为复制/移动目标。 * 同样,如果光标在横幅处,使用 netrw 窗口当前显示的目录作为复制/移动目标。 除非目标已经是当前目录,此时,键入 "mf" 撤销该目标。 * 但如果光标在一个目录名上,使用该目录作为复制/移动目标。 * 可用 :MT [directory] 命令来设置目标 netrw-:MT 此命令使用 <q-args> ,所以接受里带空格的目录名,不需转义。 * 在打开鼠标的 vim 或 gvim 里,可用 <c-leftmouse> 选择目标 每个 vim 会话只有一个复制/移动目标;也就是说,该目标是一个脚本变量 (见 s:var ),并且由所有 (同一 vim 实例中的) netrw 窗口共享。 使用菜单和 gvim 时,netrw 提供 "Targets" 菜单项,可用来从书签和历史的选项中选 取目标。 相关主题: 标记文件........................................... netrw-mf 用正则表达式标记文件............................... netrw-mr 带标记文件: 用书签作为目标目录..................... netrw-Tb 带标记文件: 用历史作为目标目录..................... netrw-Th 带 标 记 文 件 : 建 立 标 签 netrw-mT {{{2 (关于如何标记文件,见 netrw-mfnetrw-mr ) (使用全局标记文件列表) "mT" 映射为带标记文件应用 g:netrw_ctags 定义的命令 (缺省是 "ctags")。对于远 程浏览,为了建立一个标签文件,netrw 会使用 ssh (见 g:netrw_ssh_cmd ),所以要 能在远程系统使用此命令,ssh 必须存在。对于本地系统,见 ctags 说明如何得到可 用的版本。我自己用 hdrtags,目前可从 http://www.drchip.org/astronaut/src/index.html 获得,并在我的 <.vimrc> 中 有 let g:netrw_ctags= "hdrtag" 如果为一组远程的文件建立了标签,产生的 tags 文件被 "获取";也即,一个备份被传 输到本地系统的目录。然后这个本地的 tags 文件被修改,使得它可以在网上使用。具体 地,tags 里的文件名被修改,每个路径前面加上了用于获取的 netrw 兼容的 URL。如果 用户随后用某个转到标签的动作 ( tags ),netrw 就可以用该 URL 来编辑想要的文件, 并转到对应的标签上。 相关设置变量: g:netrw_ctags g:netrw_ssh_cmd 带 标 记 文 件 : 用 书 签 作 为 目 标 目 录 netrw-Tb {{{2 设置带标记文件复制/移动的目标。 netrw-qb 映射给出书签 (和历史) 的列表。可以用 [count]Tb (缺省计数: 1) 从中选 取一个书签作为标记文件的目标。 相关主题: 复制文件到目标..................................... netrw-mc 列出书签和历史..................................... netrw-qb 带标记文件: 设置目标目录........................... netrw-mt 带标记文件: 用历史作为目标目录..................... netrw-Th 标记文件........................................... netrw-mf 用正则表达式标记文件............................... netrw-mr 移动文件到目标..................................... netrw-mm 带 标 记 文 件 : 用 历 史 作 为 目 标 目 录 netrw-Th {{{2 设置带标记文件复制/移动的目标。 netrw-qb 映射给出历史 (和书签) 的列表。可以用 [count]Th (缺省计数: 0,即当前 目录) 从中选取一个历史项作为标记文件的目标。 相关主题: 复制文件到目标..................................... netrw-mc 列出书签和历史..................................... netrw-qb 带标记文件: 设置目标目录........................... netrw-mt 带标记文件: 用书签作为目标目录..................... netrw-Tb 标记文件........................................... netrw-mf 用正则表达式标记文件............................... netrw-mr 移动文件到目标..................................... netrw-mm 带 标 记 文 件 : 撤 销 标 记 netrw-mu {{{2 (见 netrw-mfnetrw-mF ) "mu" 映射撤销当前所有带标记文件的标记。此命令和 "mF" 不同之处在于后者只撤销当 前目录下的文件,而 "mu" 撤销全局和所有缓冲区局部的标记文件的标记。 (见 netrw-mF ) netrw-browser-settings NETRW 浏 览 器 变 量 netrw-browser-options netrw-browser-var {{{2 (如果你对 netrw 文件传输设置感兴趣,见 netrw-optionsnetrw-protocol ) <netrw.vim> 浏览器提供你可以修改的以变量形式出现的设置。把这些设置放在 <.vimrc> 里,你就可以定制浏览的偏好。(另见: netrw-settings ) ---- ---- 变量 解释 ---- ---- g:netrw_altfile 有些人喜欢 CTRL-^ 返回最返的编辑文件。要选择 此行为,设置此参数为 1。 其他的人喜欢 CTRL-^ 返回 netrw 浏览缓冲区。 要选择此行为,设置此参数为 0。 缺省: =0 g:netrw_alto 置位此变量后,分割后的新窗口出现在下方而不是 上方 (见 netrw-o ) 缺省: =&sb (见 'sb' ) g:netrw_altv 置位此变量后,分割后的新窗口出现在右方而不是 左方 (见 netrw-v ) 缺省: =&spr (见 'spr' ) g:netrw_banner 显示/关闭横幅 =0: 关闭横幅 =1: 显示横幅1 (缺省) 注意: 关闭横幅是新功能,可能会引起问题。 g:netrw_bannerbackslash 如果此变量存在且非零,横幅显示时使用反斜杠而不 是斜杠。 g:netrw_browse_split 浏览时,<cr> 这样打开文件: =0: 重用同一个窗口 (缺省) =1: 先水平分割窗口 =2: 先垂直分割窗口 =3: 在新标签页中打开文件 =4: 同 "P" (即打开前次窗口) 注意 可用 g:netrw_preview 来进行垂直分割 而不是水平分割。 =[servername,标签页号,窗口号] 给出 List 就像这样,用名为 "servername" 的远程服务器进行编辑。使用给定的标签页号和 窗口号来执行编辑 (见 clientservernetrw-ctrl-r ) 此选项不影响 :Lexplore 窗口的生成。 相关主题: g:netrw_alto g:netrw_altv netrw-C netrw-cr netrw-ctrl-r g:netrw_browsex_viewer 指定查阅器的用户偏好: "kfmclient exec" "gnome-open" 如果使用了 "-" 那么 netrwFileHandler() 将寻找处理该扩展名的脚 本/函数 (见 netrw_filehandler )。 g:netrw_browsex_support_remote 指定的查阅器是否支持远程 URL。 (见 netrw-handler )。 g:netrw_chgperm Unix/Linux: "chmod PERM FILENAME" Windows: "cacls FILENAME /e /p PERM" 用以改变文件的访问权限。 g:netrw_clipboard =1 缺省,netrw 会试图保持剪贴板的值不变。但有些用 户报告说这样有速度问题;因此,此选项如果设为 零,这些用户可以停止 netrw 对剪贴板内容的保存 和恢复 (后者只在必要时才进行)。这意味着如果正 常的 netrw 操作 (不小心) 改变了剪贴板,不会恢 复到之前的状态。 g:netrw_compress ="gzip" 用此命令压缩带标记文件 g:Netrw_corehandler 可用来指定 netrw 浏览器的 "x" 命令处理 <core> 文件的额外处理。如果定义, g:Netrw_corehandler 指定一个或多个函数引用 (见 Funcref )。 (g:Netrw... 中的大写是必需的,因为它保存函函数 引用) g:netrw_ctags ="ctags" 建立标签使用的缺省外部程序 g:netrw_cursor = 2 (缺省) 本选项控制 netrw 使用的 'cursorline' (cul) 和 'cursorcolumn' (cuc) 设置: 值 瘦-长-树 宽 =0 u-cul u-cuc u-cul u-cuc =1 u-cul u-cuc cul u-cuc =2 cul u-cuc cul u-cuc =3 cul u-cuc cul cuc =4 cul cuc cul cuc =5 U-cul U-cuc U-cul U-cuc =6 U-cul U-cuc cul U-cuc =7 cul U-cuc cul U-cuc =8 cul U-cuc cul cuc 其中 u-cul : 用户使用的 'cursorline' 初始设置 u-cuc : 用户使用的 'cursorcolumn' 初始设置 U-cul : 用户使用的 'cursorline' 当前设置 U-cuc : 用户使用的 'cursorcolumn' 当前设置 cul : 局部设置的 'cursorline' cuc : 局部设置的 'cursorcolumn' "初始设置" 是 netrw 上次看到 g:netrw_cursor >= 5 或 netrw 最初运行的时 候的 'cuc''cul' 设置 g:netrw_decompress = { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"} 映射后缀到解压程序的字典。 g:netrw_dirhistmax =10: 控制过去历史最大数量。零关闭之。 (相关: netrw-qb netrw-u netrw-U ) g:netrw_dynamic_maxfilenamelen =32: 支持动态决定 g:netrw_maxfilenamelen 的值,它影响本地 文件的长列表。 g:netrw_errorlvl =0: 最低显示的错误级别 0: 备注 1: 警告 2: 错误 g:netrw_fastbrowse =0: 慢速浏览; 不会重用目录列表; 总是重新获取目录列表。 =1: 中速浏览; 只有远程浏览才重用目录列表。 (缺省值) =2: 快速目录浏览; 只获取没有浏览过的目录列表 (或在用 netrw-ctrl-l 时)。 快速浏览意味着保留旧目录列表的缓冲区,这样就不 需要重新获取了。该特性对远程浏览特别有意义。不 过,如果加入或者删除文件,旧的目录列表就不再是 最新的。此时可用 netrw-ctrl-l 刷新目录列表。 本选项提供用户机会来选择准确性 (即最新的列表) 和速度的权衡。 g:netrw_ffkeep (缺省: 不存在) 如果此变量存在且为零,netrw 不会保存和恢复 'fileformat' g:netrw_fname_escape =' ?&;%' 远程读取/写入前用于文件名。 g:netrw_ftp_browse_reject ftp 可能会生成一些错误和警告信息,它们会作为 "目录" 和 "文件" 出现在列表里。使用本模式来删 除这些内嵌的消息。缺省值为: '^total\s\+\d\+$\| ^Trying\s\+\d\+.*$\| ^KERBEROS_V\d rejected\| ^Security extensions not\| No such file\| : connect to address [0-9a-fA-F:]* : No route to host$' g:netrw_ftp_list_cmd 传递给 ftp 用于列出目录的选项。缺省为: unix 或置位 g:netrw_cygwin 时: "ls -lF" 否则 "dir" g:netrw_ftp_sizelist_cmd 传递给 ftp 用于列出目录并按文件大小排序的选 项。 缺省: unix 或置位 g:netrw_cygwin 时: "ls -slF" 否则 "dir" g:netrw_ftp_timelist_cmd 传递给 ftp 用于列出目录并按文件最后修改时间 排序的选项。 缺省: unix 或置位 g:netrw_cygwin 时: "ls -tlF" 否则 "dir" g:netrw_glob_escape ='[]*?`{~$' (unix) ='[]*?`{$' (windows 应用 glob() 前,目录名中的这些字符被转义 g:netrw_gx ="<cfile>" 此选项控制 gx ( netrw-gx ) 如果选择光标下的文 本。可用值见 expand() g:netrw_hide 受 "a" 映射控制 (见 netrw-a ) =0 : 显示全部 =1 : 显示非隐藏文件 =2 : 只显示隐藏文件 缺省: =1 g:netrw_home 书签和历史保存的主目录 (分别存为 .netrwbook 和 .netrwhist)。 Netrw 在该字符串上使用 expand() 。 缺省: 'runtimepath' 的第一个目录 g:netrw_keepdir =1 (缺省) 浏览目录时不影响当前目录。 =0 浏览目录时设置当前目录为该目录。 当前的浏览目录保存在 b:netrw_curdir 里 (另见 netrw-cd ) g:netrw_keepj ="keepj" (缺省) netrw 试图使 :jumps 表不受影 响。 ="" netrw 不用 :keepjumps ,但位置的保 存/恢复是例外。 g:netrw_list_cmd 列出远程目录的命令 缺省: (如果 ssh 可执行) "ssh HOSTNAME ls -FLa" g:netrw_list_cmd_options 如果此变量存在,其内容被附加到 g:netrw_list_cmd 里。例如, "2>/dev/null" 在 unix 系统上可用来去掉横幅。 g:netrw_liststyle 设置缺省的列表风格: = 0: 瘦列表 (每个文件一行) = 1: 长列表 (每个文件一行,带有时间信息和文件 长度) = 2: 宽列表 (多个文件,分列显示) = 3: 树型风格列表 g:netrw_list_hide 逗号分隔的隐藏文件的模式列表 模式是正则表达式 (见 regexp ) 对 git-ignore 文件有特殊支持: 可加入帮助函数 'netrw_gitignore#Hide()' 的输出来自动隐藏所有 的 git-ignore 文件。 更多详情可见 netrw-gitignore 。 示例: let g:netrw_list_hide= '.*\.swp$' let g:netrw_list_hide= netrw_gitignore#Hide() .. '.*\.swp$' 缺省: "" g:netrw_localcopycmd ="cp" Linux/Unix/MacOS/Cygwin =expand("$COMSPEC") Windows 把带标记文件 ( netrw-mf ) 复制到目标目录 ( netrw-mtnetrw-mc ) g:netrw_localcopycmdopt ='' Linux/Unix/MacOS/Cygwin =' \c copy' Windows g:netrw_localcopycmd 的选项 g:netrw_localcopydircmd ="cp" Linux/Unix/MacOS/Cygwin =expand("$COMSPEC") Windows 复制目录到目标目录。 ( netrw-mcnetrw-mt ) g:netrw_localcopydircmdopt =" -R" Linux/Unix/MacOS/Cygwin =" /c xcopy /e /c /h/ /i /k" Windows g:netrw_localcopydircmd 的选项 g:netrw_localmkdir ="mkdir" Linux/Unix/MacOS/Cygwin =expand("$COMSPEC") Windows 建立本地目录的命令 g:netrw_localmkdiropt ="" Linux/Unix/MacOS/Cygwin =" /c mkdir" Windows g:netrw_localmkdir 的选项 g:netrw_localmovecmd ="mv" Linux/Unix/MacOS/Cygwin =expand("$COMSPEC") Windows 把带标记文件 ( netrw-mf ) 移动到目标目录 ( netrw-mtnetrw-mm ) g:netrw_localmovecmdopt ="" Linux/Unix/MacOS/Cygwin =" /c move" Windows g:netrw_localmovecmd 的选项 g:netrw_localrmdir ="rmdir" Linux/Unix/MacOS/Cygwin =expand("$COMSPEC") Windows 删除目录的命令 (rmdir) 此选项只用于 7.4 之前或不带 patch#1107 补丁的 vim 版本。否则,使用带 "d" 选项的 delete() g:netrw_localrmdiropt ="" Linux/Unix/MacOS/Cygwin =" /c rmdir" Windows g:netrw_localrmdir 的选项 g:netrw_maxfilenamelen =32 缺省之所以选为该值,使为了使长列表能在 80 列内显示。如果你的屏幕更宽或者文件或目录名 可能长于 32 个字节,可以设置此选项使列表按列排 列 g:netrw_mkdir_cmd 用 ssh 建立远程目录的命令 (另见 g:netrw_remote_mkdir ) 缺省: "ssh USEPORT HOSTNAME mkdir" g:netrw_mousemaps =1 (缺省) 打开鼠标按钮的功能 浏览时: leftmouse : 打开文件/目录 shift-leftmouse : 标记文件 middlemouse : 同 P rightmouse : 删除文件/目录 =0: 关闭鼠标映射 g:netrw_nobeval 不存在 (缺省) 如果此变量存在,不进行气泡计算 (见 'ballooneval' ) g:netrw_sizestyle 未定义: 实际字节 (缺省) ="b" : 实际字节 (缺省) ="h" : 人类可读 (例如 5k、4m、3g) 以 1000 为底 ="H" : 人类可读 (例如 5K、4M、3G) 以 1024 为底 长列表 ( netrw-i ) 和查询文件的映射 ( netrw-qf ) 会使用指定风格显示文件大小。 g:netrw_usetab 如果此变量存在且非零,<tab> 映射支持 Lexplore 的缩/放或打开 netrw 窗口。 (见 netrw-c-tab ) g:netrw_remote_mkdir 用 ftp 建立本地目录的命令 (另见 g:netrw_mkdir_cmd ) 缺省: "mkdir" g:netrw_retmap 如果存在且为一,那么: * 如果在 netrw 选择的文件中, * 没有定义过普通模式的 <2-leftmouse> 映射, 那么 <2-leftmouse> 会被映射以方便地回到 netrw 浏览器窗口。 示例: 点击一次,选择并打开文件,双击返回 备注: 你也可以选择这么做: * let g:netrw_retmap= 1 (译者注: 0?), * nmap <silent> 你的选择 <Plug>NetrwReturn 来让其它的映射,而不是 <2-leftmouse> 执行返回 的任务。 也可以用 :Rexplore 命令完成同样的功能。 缺省: =0 g:netrw_rm_cmd 删除远程文件的命令 缺省: "ssh USEPORT HOSTNAME rm" g:netrw_rmdir_cmd 删除远程目录的命令 缺省: "ssh USEPORT HOSTNAME rmdir" g:netrw_rmf_cmd 删除远程软链接的命令 缺省: "ssh USEPORT HOSTNAME rm -f" g:netrw_servername 此变量提供 netrw-ctrl-r 所用的服务器名。 缺省: "NETRWSERVER" g:netrw_sort_by 按 "name" (名字)、"time" (时间)、"size" (大小) 或 "exten" (扩展名) 排序。 缺省: "name" g:netrw_sort_direction 排序方向: "normal" (普通) 或 "reverse" (反 转) 缺省: "normal" g:netrw_sort_options 排序是通过 :sort 命令进行的;此变量的值会附 加到排序命令之后。例如,在 .vimrc 里加上以下内 容就可以忽略大小写: let g:netrw_sort_options="i" 缺省: "" g:netrw_sort_sequence 按名字排序时,先按逗号分隔的此模式序列排序。 注意 模式须考虑表示文件类型的任何附綴。 缺省: '[\/]$,*,\.bak$,\.o$,\.h$, \.info$,\.swp$,\.obj$' g:netrw_special_syntax 如果为真,特定文件会以特殊语法出现在浏览器 中: netrwBak : *.bak netrwCompress: *.gz *.bz2 *.Z *.zip netrwCoreDump: core.\d\+ netrwData : *.dat netrwDoc : *.doc,*.txt,*.pdf, *.pdf,*.docx netrwHdr : *.h netrwLex : *.l *.lex netrwLib : *.a *.so *.lib *.dll netrwMakefile: [mM]akefile *.mak netrwObj : *.o *.obj netrwPix : *.bmp,*.fit,*.fits,*.gif, *.jpg,*.jpeg,*.pcx,*.ppc *.pgm,*.png,*.psd,*.rgb *.tif,*.xbm,*.xcf netrwTags : tags ANmenu ANtags netrwTilde : * netrwTmp : tmp* *tmp netrwYacc : *.y 此外, 'suffixes' 提到的组也会加入特殊文件高 亮组。 这些语法高亮组缺省被链接到 netrwGray 或 Folded (见 hl-Folded ),但你可以在 <.vimrc> 放上这样的行 hi link netrwCompress Visual 来定义自己的偏好。此外,还可以把设定存放在 .vim/after/syntax/netrw.vim. 以下情况下 netrw 设置 netrwGray 高亮模式 * netrwGray 之前没有定义过 * gui 在运行 例如,我自己使用深色背景的色彩方案,在 .vim/after/syntax/netrw.vim 里有以下设置: hi netrwCompress term=NONE cterm=NONE gui=NONE ctermfg=10 guifg=green ctermbg=0 guibg=black hi netrwData term=NONE cterm=NONE gui=NONE ctermfg=9 guifg=blue ctermbg=0 guibg=black hi netrwHdr term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1 hi netrwLex term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1 hi netrwYacc term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1 hi netrwLib term=NONE cterm=NONE gui=NONE ctermfg=14 guifg=yellow hi netrwObj term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red hi netrwTilde term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red hi netrwTmp term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red hi netrwTags term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red hi netrwDoc term=NONE cterm=NONE gui=NONE ctermfg=220 ctermbg=27 guifg=yellow2 guibg=Blue3 hi netrwSymLink term=NONE cterm=NONE gui=NONE ctermfg=220 ctermbg=27 guifg=grey60 g:netrw_ssh_browse_reject ssh 有时产生你不想要的行、消息、标题和任何你 不希望看作是 "目录" 和 "文件" 的内容。 此模式可用于删除这些内嵌的信息。缺省值为: '^total\s\+\d\+$' g:netrw_ssh_cmd 可以用此值代替 ssh,用于执行列表,删除文件等 这些远程动作的可执行命令。 缺省: ssh g:netrw_suppress_gx_mesg =1 : 浏览器有时生成通常不需要的消息,混杂在页 面之中。 不过,比如使用 links 时,这些消息正是浏览器产 生的。如果设置此选项为 0,netrw 不会抑制浏览器 消息。 g:netrw_tmpfile_escape =' &;' 对所有的临时文件使用 escape() 来转义这些字符。 g:netrw_timefmt 指定代替 %c 的 strftime() 的格式字符串 缺省值 "%c",根据我的 strftime() 项目的 man 页 面,是 "建议使用的本地 locale 日期时间的表现方 式";不过,不是所有人都满意。一些选择: "%a %d %b %Y %T"、 " %a %Y-%m-%d %I-%M-%S %p" 缺省: "%c" g:netrw_use_noswf netrw 通常避免给浏览器缓冲区写入交换文件。不 过,在有些系统上,看来这么做引起讨厌的 ml_get 错误;如果你看到 ml_get 错误,尝试在 .vimrc 中 放入 let g:netrw_use_noswf= 0 缺省: 1 g:netrw_winsize 指定 "o" (见 netrw-o )、"v" (见 netrw-v )、 :Hexplore:Vexplore 建立的新窗口的初始 大小。g:netrw_winsize 是整数,指定当前 netrw 缓冲区窗口大小的百分比,来设定新窗口的大小。 如果 g:netrw_winsize 小于零,其绝对值用来指定 新窗口的绝对行数和列数。 如果 g:netrw_winsize 为零,使用正常分割方式 (如 'equalalways' 生效,等等)。 缺省: "50" (代表 50%) g:netrw_wiw =1 指定收缩 netw/Lexplore 窗口使用的最小窗口宽 度 (见 netrw-c-tab )。 g:netrw_xstrlen 控制 netrw 如何计算包含多字节字符的字符串的长 度 (来自 N Weibull、T Mechelynck) =0: 使用 Vim 的内建 strlen() =1: 代码点的个数 (拉丁 a + 组合用扬抑符是两个 代码点) (缺省) =2: 占空间的代码点个数 (拉丁 a + 组合用扬抑符 是一个占空间的代码点;硬制表符是一个;宽和 窄的 CJK 都是一个;等等) =3: 虚拟长度 (制表符在 1 到 'tabstop' 之间, 宽 CJK 是 2 而不是 1,阿拉伯语 alif 在 lam 之前是零,否则为 1,等等) g:NetrwTopLvlMenu 指定顶层子菜单名;缺省为 "Netrw."。 如果你想改变,在 .vimrc 里进行。 NETRW 浏 览 和 选 项 不 兼 容 性 netrw-incompatible {{{2 netrw 的设计中,对用户选项的处理是先保存它们,设置和 netrw 需要兼容的选项值, 然后恢复原有的值。但 autochdir 选项: :set acd 是有问题的。autochdir 设置当前目录为编辑文件所在的目录;这显然也适用于目录。换 而言之,autochdir 设置当前目录为包含该 "文件" 的目录 (即使该 "文件" 本身也是目 录)。 NETRW 设 置 窗 口 netrw-settings-window {{{2 使用 NetrwSettings.vim 插件, :NetrwSettings 会弹出一个窗口来显示用作 netrw 设置的许多变量。你可以修改这里列出的所有值;保 存文件时,设置的值就会被应用。在任何行上按 "?" 就可以得到每个变量功能的帮助。 (另见: netrw-browser-var netrw-protocol netrw-variables ) 获 取 文 件 netrw-obtain netrw-O {{{2 如果没有带标记文件: 浏览远程目录时,用户可用 O 键获取光标所在的文件 (即在本地机器上保存备份, 但不编辑)。 如果有带标记文件: 获取带标记文件 (即传输一个备份到本地机器,但不用来编辑)。 此操作只支持 ftp 和 scp (既然只有它们能用作浏览,这应该不是问题)。这时 状态行的右侧会显示 "Obtaining filename" 这样的消息。传输完成后,状态行复原。 netrw 也可以用本地浏览器 "获得" 文件。netrw 显示的目录不一定和 Vim 的 "当前目 录" 一致,除非用户的 <.vimrc> 里把 g:netrw_keepdir 设为 0。在本地浏览器里选 择文件 (光标移动到该文件名上) 然后按 "O" 就可以 "获得" 该文件;也就是把它复制 到 Vim 的当前目录。 相关主题: * 察看当前目录可用 :pwd * 使得当前浏览目录成为当前目录可见 netrw-cd * 要自动使得当前浏览目录总成为当前目录可见 g:netrw_keepdir netrw-newfile netrw-createfile 在 NETRW 当 前 目 录 打 开 新 文 件 netrw-% {{{2 要在 netrw 当前目录打开一个新文件,按 "%"。此映射询问用户新的文件名;然后在 netrw 当前目录 (即 b:netrw_curdir) 就会建立以此命名的的空文件。 如果使用 Lexplore ( netrw-:Lexplore ),新文件在 g:netrw_chgwin 窗口中生成。 相关主题: netrw-d 预 览 窗 口 netrw-p netrw-preview {{{2 用 "p" 键可以使用预览窗口来预览光标所在的文件名。屏幕会被分割以同时显示浏览器 (光标还在那里) 和文件 (见 :pedit )。缺省,进行水平分割;如果先设置好 g:netrw_preview 就可以进行垂直分割。 一组有意思的 netrw 设置是: let g:netrw_preview = 1 let g:netrw_liststyle = 3 let g:netrw_winsize = 30 它们会: 1. 使垂直分割成为缺省的文件预览方式 2. 使 "树形" 成为缺省的列表方式 3. 打开垂直预览窗口时,目录列表只用 30% 列;窗口其余部分用于预览窗口。 相关: 如果你喜欢这个想法,你可能对 :Lexplore ( netrw-:Lexplore ) 或 g:netrw_chgwin 也会感兴趣 另见: g:netrw_chgwin netrw-P 'previewwindow' CTRL-W_z :pclose 前 次 窗 口 netrw-P netrw-prvwin {{{2 要使用上次使用 (最近访问) 的窗口编辑光标下的文件或目录 (见 :he CTRL-W_P ),按 "P"。如果只有一个窗口,该窗口被水平分割 (缺省)。 如果多于一个窗口,重用上次使用的窗口以显示选择的文件/目录。如果前次窗口相关联 的缓冲区被修改而且该缓冲区只有这个窗口,用户会被询问是否要先保存该缓冲区 (yes (是)、no (否) 或 cancel (取消))。 相关动作 netrw-cr netrw-o netrw-t netrw-v 相关设置变量: g:netrw_alto 控制上/下分割 g:netrw_altv 控制右/左分割 g:netrw_preview 控制水平/垂直分割 g:netrw_winsize 控制初始大小 另见: g:netrw_chgwin netrw-p 刷 新 列 表 netrw-refresh netrw-ctrl-l netrw-ctrl_l {{{2 要刷新本地或远程目录列表,按 ctrl-l (<c-l>) 或在列表的 ./ 目录项上按 <cr>。用 ":e ." 也可以刷新本地目录。 反 转 排 序 顺 序 netrw-r netrw-reverse {{{2 用 "r" 键可以在正常和反转两种排序顺序之间切换。 相关主题: netrw-s 相关设置变量: g:netrw_sort_direction 给 文 件 或 目 录 换 名 netrw-move netrw-rename netrw-R {{{2 如果没有用 netrw-mf 标记过文件: 换名文件和目录涉及以下操作: 移动光标到要移动 (换名) 的文件/目录,然后 按 "R"。你会被询问要把文件/目录换什么名字。用 "V" 命令 (可视选择) 可以选择 行范围,然后按 "R";每个文件会依次询问要换成什么名字。 如果用 netrw-mf 标记过文件: 带标记文件会被移动 (换名);和上面一样,你会被询问文件/目录要移动到的位置。 如果你对换名询问的回答是 "s/frompattern/topattern/",则会对标记文件列表的 每个后续文件通过取得名字,执行替换,把替换结果作为要换的名字来进行换名。 作为一个例子: mr [query: reply with *.c] R [query: reply with s/^\(.*\)\.c$/\1.cpp/] 此例会标记所有的 *.c 文件便执行换名为 *.cpp 文件。Netrw 会保护你不会没有确 认就覆盖本地文件,但不适用于远程文件。 ctrl-X 字符对文件换名有特殊意义: <c-x> : 单个 ctrl-x 告知 netrw 忽略响应在最后的 '/' 和 ctrl-x 之 间的部分。 <c-x><c-x> : 一对连续 ctrl-x 告知 netrw 忽略字符串在两个 ctrl-x 之前的 所有部分。 警 告: 注意 移动文件是一个危险的操作;复制更安全。因为远程文件的 "移动" 实际上是 复制 + 删除 -- 如果复制失败但删除成功,该文件就会丢失。 后果自负。 g:netrw_rename_cmd 变量实现远程换名。缺省值为: ssh HOSTNAME mv 使用瘦风格时,用 V ( linewise-visual ) 可以给若干文件和目录同时换名。 见 cmdline-editing 关于更多如何编辑命令行的指示;尤其是 <ctrl-f> (开始命令行 窗口编辑) 和 <ctrl-c> (使用光标下的命令行) 可以和 R 命令配合使用。 选 择 排 序 风 格 netrw-s netrw-sort {{{2 可以选择排序风格,使之按 name (名字)、time (时间) 或 size (文件大小) 排序。 "s" 映射允许你在这三个选择之间循环;目录列表会自动更新以反映选择的风格。 相关主题: netrw-r netrw-S 相关设置变量: g:netrw_sort_by g:netrw_sort_sequence 设 置 编 辑 窗 口 netrw-editwindow netrw-C netrw-:NetrwC {{{2 用 "C" 映射选择一个 netrw 窗口用以编辑,此映射使用 :NetrwC [win#] 命令,也可以 设置 g:netrw_chgwin 为要选择的窗口号。此后,选择文件以进行编辑 ( netrw-cr ) 时都用该窗口。 * C : 单独使用,选择当前 netrw 缓冲区所在的窗口用于后续 netrw-cr 的 编辑。C 映射只可用于 netrw 缓冲区。 * [count]C : 计数用作窗口号,用于后继的 netrw-cr 的编辑。 * :NetrwC 设置 g:netrw_chgwin 为当前窗口 * :NetrwC win# 设置 g:netrw_chgwin 为指定窗口号 用 let g:netrw_chgwin= -1 可以恢复缺省的编辑行为 (即使用当前窗口进行后续的编辑)。 相关主题: netrw-cr g:netrw_browse_split 相关设置变量: g:netrw_chgwin 缩 放 NETRW 或 LEXPLORE 窗 口 netrw-c-tab {{{2 <c-tab> 键切换 netrw 或 :Lexplore 窗口的宽度,但仅当 :netrw_usetab 存在且 非零时才有效 (当然,它还需要终端支持能区别 <c-tab> 和普通的 <tab>)。 * 如果当前窗口是 netrw 窗口,切换宽度 (在 g:netrw_wiw 和它的原始宽度之间) * 否则如果当前标签页有 :Lexplore 窗口,切换其宽度 * 否则打开新 :Lexplore 窗口 如果 g:netrw_usetab 存在且为零,或已有 <c-tab> 映射存在,不重新映射 <c-tab>。也可以使用 <c-tab> 以外的映射: (但 g:netrw_usetab 还必须设置) nmap <unique> (随便什么) <Plug>NetrwShrink 相关主题: :Lexplore 相关设置变量: g:netrw_usetab 用 户 定 义 映 射 netrw-usermaps {{{1 可以自定义用户映射。指定变量, g:Netrw_UserMaps ,来保存键映射字符串和函数名的 列表的 List : [["键映射序列","示例用户映射函数"],...] netrw 为 netrw 缓冲区设置映射时,如果 g:Netrw_UserMaps 存在,调用内部函数 netrw#UserMaps(islocal)。此函数遍历 g:Netrw_UserMaps 列表的所有项目: * 设置映射: nno <buffer> <silent> 键映射序列 :call s:UserMaps(islocal,"示例用户映射函数") * 如果函数调用返回字符串 "refresh",刷新 * 如果返回的字符串不是 "",执行该字符串 (:exe 返回结果) * 如果返回的是列表,对返回列表里的每个字符串执行上述两项 用户函数接受一个参数;就像这样 fun! ExampleUserMapFunc(islocal) 其中,如果是本地目录的系统调用,a:islocal 为 1,如果是远程目录的系统调用,为 0。 netrw-call netrw-expose netrw-modify 用 netrw#Expose("varname") 来访问 netrw 内部 (局部于脚本) 变量。 用 netrw#Modify("varname",newvalue) 来改变 netrw 内部变量。 用 netrw#Call("funcname"[,args]) 来调用 netrw 内部函数和指定所需参数。 示例: 得到 netrw 标记文件列表的备份: let netrwmarkfilelist= netrw#Expose("netrwmarkfilelist") 示例: 修改 netrw 标记文件列表的值: call netrw#Modify("netrwmarkfilelist",[]) 示例: 通过映射 gu 来清除 netrw 标记文件列表 " ExampleUserMap: {{{2 fun! ExampleUserMap(islocal) call netrw#Modify("netrwmarkfilelist",[]) call netrw#Modify('netrwmarkfilemtch_{bufnr("%")}',"") let retval= ["refresh"] return retval endfun let g:Netrw_UserMaps= [["gu","ExampleUserMap"]]

10. 问题和修正 netrw-problems {{{1

(本节可能会不断增长,视乎我得到的反馈而定) (另见 netrw-debug ) netrw-p1 P1. 我用 windows 95,我的 ftp 每次读取之后多了额外的四个空行。 {{{2 见 netrw-fixup ,在 <.vimrc> 文件里加入下行: let g:netrw_win95ftp= 1 netrw-p2 P2. 我用 windows,用 ftp 进行网络浏览不能按时间或大小排序 -或- 远程 {{{2 系统是 Windows 服务器;为什么我不能按时间或大小排序? Windows 的 ftp 只有基本的 ls 的支持 (即,不支持排序的选项)。它 也不支持 -F 以给出类型字符 (ABC/ 代表 "ABC 是目录")。 netrw 使用 dir 得到的瘦长两种列表。如果你认为自己的 ftp 支持完 整功能的 ls,在 <.vimrc> 加入下行: let g:netrw_ftp_list_cmd= "ls -lF" let g:netrw_ftp_timelist_cmd= "ls -tlF" let g:netrw_ftp_sizelist_cmd= "ls -slF" 还有一个办法,如果你在 Windows 上安装了 cygwin,在 <.vimrc> 加 入下行: let g:netrw_cygwin= 1 如果远端系统使用 Windows,这个问题也会出现。在此情形下, g:netrw_ftp_[time|size]list_cmds 诸命令如上所示,但远端系统不 会因而正确地修改它的列表方式。 netrw-p3 P3. 我尝试 rcp://user@host/ (或任何不是 ftp 的协议) 但 netrw 使用 {{{2 ssh!我不要这样... netrw 有两个方法进行远程目录浏览: ssh 和 ftp。除非你指定 ftp, 使用的只能是 ssh。 如果你需要下载文件 (不是目录列表),netrw 会使用你要求的任何协 议。 netrw-p4 P4. 我喜欢缺省使用长格式的列表。 {{{2 在 .vimrc 里放入: let g:netrw_liststyle=1 netrw-browser-var 说明你可以改变的更多设置。 netrw-p5 P5. 本地浏览时,时间显示不正常 {{{2 你系统的 strftime() 是否接受 "%c" 以产生类似于下面的格式: "Sun Apr 27 11:49:23 1997"?如果不是,执行 "man strftime" 寻找 什么选项可以完成类似的功能。然后在 .vimrc 里放入: let g:netrw_timefmt= "%X" (其中 X 是找到的选项) netrw-p6 P6. 我想让当前目录和我的浏览同步。如何进行? {{{2 在 .vimrc 里放入: let g:netrw_keepdir= 0 netrw-p7 P7. 我在文件名中使用中文 (或其它非 ascii) 字符,netrw (Explore、 {{{2 Sexplore、Hexplore 等) 却不能显示这些文件名! (取自 Wu Yongwei 在 Vim 邮件列表上的回答) 我现在明白你的问题了。你的代码页不是 936,对么?Vim 看来只能打 开在当前代码页中合法的文件名,这和许多其它不使用 Unicode 版本 的 Windows API 的应用程序一样。这是操作系统上的问题。如果系统 locale 使用 UTF-8 就不应该有这个问题,例如现代的 Linux 的各种 发布就是如此。 (...又多一个理由鼓励大家使用 utf-8!) netrw-p8 P8. 我看到错误 "你的系统无法执行 ssh" -- 我该怎么办? {{{2 (Dudley Fox) 我知道的多数人在 windows 上 用 putty 的 ssh。这是 一个免费的 ssh/telnet 应用。更多的情况可见: http://www.chiark.greenend.org.uk/~sgtatham/putty/ 还有: (Marlin Unruh) 我也用这个程序。它是一个单独的可执行文件,所以 可以复制到 Windows\System32 文件夹并建立一个快捷方式。 (Dudley Fox) 你也可以考虑 plink,听起来它和你要找的很接近。 plink 是 putty 程序包中的一个应用。 http://the.earth.li/~sgtatham/putty/0.58/htmldoc/Chapter7.html#plink (Vissale Neang) 你可以试试 OpenSSH 的 windows 版本,可以在这里 得到: http://sshwindows.sourceforge.net/ 它并不需要 Cygwin 包。 (Antoine Mechelynck) 对于单独需要在直接的 Windows 环境工作的 Unix 风格的程序,我推荐从 sourceforge 的 GnuWin32 项目获取,如 果有的话: http://gnuwin32.sourceforge.net/ 和 Cygwin 不同,后者建立一个在 Windows 之上的 Unix 风格的模拟 机,而 GnuWin32 使用 Windows 系统调用来重写 Unix 工具,它的程 序也能在 cmd.exe "Dos 窗口" 中正常运行。 (dave) 下载 WinSCP并用它连到服务器上。Preferences > Editors 选 项里设置 gvim 为你的编辑器: - 点击 "Add..." - 设置外部编辑器 (如果需要,调整实际的路径并加上引号和 最后的 !.!): "c:\Program Files\Vim\vim82\gvim.exe" !.! - 确认下面框中的文件类型为 {asterisk}.{asterisk} (即所 有文件),或任何你期望的类型 (cec: 把 {asterisk} 换成 * ;我这么写是因为不然的话,helptags 系统认为它是一 个标签) - 确认它在列表框的顶端 (如若不然,点击它再点击 "Up") 如果使用 Norton Commander 风格,你只要按 <F4> 来使用本地的 gvim 来编辑文件。 (Vit Gottwald) 如何生成公钥/私钥并把公钥存在服务器上: http://www.chiark.greenend.org.uk/~sgtatham/putty/0.60/htmldoc/Chapter8.html#pubkey-gettingready (8.3 Getting ready for public key authentication) 'pscp' 如何使用私钥: http://www.chiark.greenend.org.uk/~sgtatham/putty/0.60/htmldoc/Chapter5.html (5.2.4 Using public key authentication with PSCP) (Ben Schmidt) 我发现 cwRsync 所带的 ssh 太好了,现在我在自己用 的大多数 Windows 系统上都安装了 cwRsync 或 cwRsyncServer。对只 需要在 Windows 上 ssh 的人来说,我推测同一作者提供的 COPSSH 可 能更好,而且它还带有 cwRsync 没有的 sftp 等等工具。虽然它可能 ... (译者注: 下文缺) (cec) 要正确地使用的以上的建议,你需要在 .vimrc 中修改以下用户 可设的变量: g:netrw_ssh_cmd g:netrw_list_cmd g:netrw_mkdir_cmd g:netrw_rm_cmd g:netrw_rmdir_cmd g:netrw_rmf_cmd 第一个 ( g:netrw_ssh_cmd ) 是最重要的;多数其它的变量在缺省情 况下使用和 g:netrw_ssh_cmd 相同的值。 netrw-p9 netrw-ml_get P9. 我在浏览,切换目录,哦!出现了 ml_get 错误,我不得不杀掉 vim。 {{{2 有什么解决方法? netrw 通常避免给临时目录缓冲区写入交换文件。不过,在有些系统 上,看来这么做引起 ml_get 错误;尝试在 <.vimrc> 中设置 g:netrw_use_noswf 为零: let g:netrw_use_noswf= 0 netrw-p10 P10. "[something] is a directory" 和 {{{2 "Press ENTER or type command to continue" 这些提示烦死我了... "[something] is a directory" 提示是 Vim 发出的,不是 netrw,看 来没有办法绕过它。再加上缺省的 cmdHeight 为 1,此消息导致了 "Press ENTER..." 提示。所以: 阅读 hit-enter ; 我也建议你在 <.vimrc> 文件里设置 'cmdheight' 为 2 (或更高)。 netrw-p11 P11. 我想要有两个窗口;一个瘦的在左边,我的编辑窗口在右边。应该怎么 {{{2 做? 你可能想在一个边窗运行 netrw。如果这样,":[N]Lexplore" 可能就是你 所想要的。可选的 "[N]" 可以让你指定想要的 :Lexplore 开始的列数 (关于此参数如何工作,见 g:netrw_winsize )。 之前的方法: * 在 <.vimrc> 放入: let g:netrw_altv = 1 * 编辑当前目录: :e . * 选择某个文件,按 v * 按照自己需要调整窗口大小 (见 CTRL-W_<CTRL-W_> )。如果 使用 gvim,可用鼠标拖动分割栏。 * 想编辑新文件时,用 ctrl-w h 回到 netrw 浏览器,选择文件,然 后按 P (见 CTRL-W_hnetrw-P )。如果使用 gvim,在浏览器 窗口按 <leftmouse> 然后用 <middlemouse> 来选择文件。 netrw-p12 P12. 我的目录排序不对,或者有不想要的字符出现在列出的文件名里,或者 {{{2 宽列表中名字的对齐有问题... 这可能是编码的问题,我自己通常使用 utf-8,但其实只用 ascii (也就 是 32-126 的字符)。多字节编码每个字符使用两个 (或更多) 字节。你可 能需要改变 g:netrw_sepchr 和/或 g:netrw_xstrlen netrw-p13 P13. 我是 Windows + putty + ssh 的用户,每次我试图浏览时,目录没有 {{{2 结尾的 "/",所以 netrw 当成文件传输而不试图当成子目录浏览。怎么 办? (mikeyao) 如果你在 Windows 上用 ssh 和 putty 访问 vim,尝试 pscp/psftp 加上 plink 的组合。pscp/psftp 用于连接,而 plink 用于 执行服务器端的命令。例如: 列出文件和 'ls' 目录。 以下是我使用的设置: " 列出文件。这是关键设置。如果没有设置好,只能得到空白缓冲区。 let g:netrw_list_cmd = "plink HOSTNAME ls -Fa" " 如果没有把 putty 目录加到系统目录中,必须指定 scp/sftp 命令的位 " 置。例如: "let g:netrw_sftp_cmd = "d:\\dev\\putty\\PSFTP.exe" "let g:netrw_scp_cmd = "d:\\dev\\putty\\PSCP.exe" netrw-p14 P14. 我想加快 Nwrite 和 scp/ssh 风格连接的写操作。怎么做?(Thomer {{{2 M. Gil) ssh 的 ControlMaster 和 ControlPath (见 ssh_config man 帮助页) 可 用来使多个 ssh 连接共享同一个网络连接。这可减少每个文件写入的加密 握手协议,有时这可提升速度一个数量级以上。 (见 http://thomer.com/howtos/netrw_ssh.html) (此段文字得到许可) 在你的 ~/.ssh/config 中加入: # 可把 "*" 改为你关心的终端名 Host * ControlMaster auto ControlPath /tmp/%r@%h:%p 然后建立一个到此终端的 ssh 连接,并保持之: ssh -N host.domain.com 现在用 Vim 的 Netrw 远程打开文件,享受极速吧: vim scp://host.domain.com//home/user/.bashrc netrw-p15 P15. 如何用双击而不是 netrw 通常的单击来打开文件或目录?(Ben Fritz) {{{2 首先,关闭 netrw 的映射 let g:netrw_mousemaps= 0 然后在 $HOME/.vim/after/ftplugin/netrw.vim 中创建只适用 netrw 缓 冲区的映射: nmap <buffer> <2-leftmouse> <CR> 注意 设置 g:netrw_mousemaps 为零关闭所有 netrw 的鼠标映射,不只是 <leftmouse> 的。 (见 g:netrw_mousemaps ) netrw-p16 P16. Windows 里编辑远程文件 (如 :e ftp://hostname/path/file) 时,得 {{{2 到 E303 信息,抱怨不能打开交换文件。 (romainl) 看来你从一个受保护的目录下启动 Vim。从你的 $HOME 或其它 可写的目录下启动 netrw。 netrw-p17 P17. Netrw 自己关闭了缓冲区。 {{{2 如何重现此问题? 1. :Explore,访问目录,打开文件 2. :Explore,打开其它文件 3. 第一步打开的缓冲区被关闭。 期待结果是什么?实际看到了什么? 我期待两个缓冲区同时存在,但实际只看见了最后那个。 (Lance) 问题出在 .vimrc 里的 "set autochdir"。 (drchip) 置位 'acd' 时我能重现此问题。不过,缓冲区不是真的关闭; ":ls!" 还能显示它们 (但 ":ls" 不会)。 netrw-P18 P18. 如何本地编辑只能通过 ssh 访问的其它服务器上的文件? {{{2 见 http://stackoverflow.com/questions/12469645/ "Using Vim to Remotely Edit A File on ServerB Only Accessible From ServerA" netrw-P19 P19. 目录列表中如何得到行号? {{{2 通过 g:netrw_bufsettings 可以控制 netrw 缓冲区设置;试试在 .vimrc 里放上 let g:netrw_bufsettings="noma nomod nu nobl nowrap ro nornu" 如果喜欢相对行号,试试 let g:netrw_bufsettings="noma nomod nonu nobl nowrap ro rnu" netrw-P20 P20. 如何使 gvim 启动时显示目录列表? {{{2 在 .vimrc 里放上以下代码片断: augroup VimStartup au! au VimEnter * if expand("%") == "" && argc() == 0 && \ (v:servername =~ 'GVIM\d*' || v:servername == "") \ | e . | endif augroup END 如果你特别想要,可以用 Lexplore 来代替 "e"。 此代码片断假定你打开客户-服务器功能 (即 "huge" vim 版本)。 netrw-P21 P21. 我建立的目录 (或文件) 使用了带重音的字符,但 netrw 不让我进入 {{{2 该目录/读取文件: 可能是外壳或操作系统使用了和 vim (netrw) 不同的编码。将来 vim 支持 "systemencoding" 的补丁也许可以解决这个问题;现在,只要让 netrw 使用合适的编码就可以了。例如: au FileType netrw set enc=latin1 netrw-P22 P22. 试图复制或移动文件时出错: {{{2 **error** (netrw) tried using g:netrw_localcopycmd<cp>; it doesn't work! 怎么回事? Netrw 使用若干系统级的命令来完成任务 (见 g:netrw_localcopycmd , g:netrw_localmovecmd , g:netrw_localrmdir , g:netrw_mkdir_cmd )。 可能需要在 .vimrc 里适当地调整部分这些命令。另一个困难源于这些命令 使用了 vim 的本地目录,但它和 netrw 显示的浏览目录可能有所不同 (见 g:netrw_keepdir )。

11. 调试 netrw 自身 netrw-debug {{{1

第一步: 确定你遇到的问题是否所以通过获取最新的 (通常是开发版本) netrw 得到解 决,最新版本在: http://www.drchip.org/astronaut/vim/index.html#NETRW <netrw.vim> 脚本通常安装的系统位置是: /usr/local/share/vim/vim8x/plugin/netrwPlugin.vim /usr/local/share/vim/vim8x/autoload/netrw.vim (见 :echo &rtp 的输出) 在启动时自动被加载 (假设 :set nocp)。如果你案头了新版本的 netrw,它位于 $HOME/.vim/plugin/netrwPlugin.vim $HOME/.vim/autoload/netrw.vim 第二步: 假定你安装了最新版本的 netrw,确定你的问题是否真的由 netrw 引起。新建 一个叫 netrw.vimrc 的文件,包含以下内容: set nocp so $HOME/.vim/plugin/netrwPlugin.vim 然后这样执行 netrw: vim -u netrw.vimrc --noplugins -i NONE [some path here] 执行任何你想要的 netrw 命令,然后检查问题是否存在。此过程回避了由于个人 .vimrc 设置,.viminfo 文件和其它插件引起的问题。如果问题不再出现,你需要自己找到什么 .vimrc 设置引起了和 netrw 或其它相关插件的冲突。 第三步: 如果问题仍然存在,这样获取 netrw 的调试跟踪: 1. 先从这里取得 <Decho.vim> 脚本: http://www.drchip.org/astronaut/vim/index.html#DECHO 或者 http://vim.sourceforge.net/scripts/script.php?script_id=120 Decho.vim 以 "vimball" 形式出现;见 vimball-intro 。应该编辑 Decho.vba.gz 文件并这样执行: vim Decho.vba.gz :so % :q 2. 要打开 netrw 中的调试跟踪,修改 <netrw.vim> 文件如下: vim netrw.vim :DechoOn :wq 要恢复到正常的非调试行为,修改 <netrw.vim> 如下: vim netrw.vim :DechoOff :wq 此命令由 <Decho.vim> 提供,它会注释掉所有 Decho 调试语句 (Dfunc()、 Dret()、Decho()、Dredir())。 3. 然后启动 vim 进行文件传输或者进行浏览以重现错误。一系列消息应该在一 个单独的标签页或服务器 vim 窗口出现,提示 <netrw.vim> 进行网络文件 读写的一系列步骤。 修改 netrw.vimrc 文件以包含 Decho 插件: set nocp so $HOME/.vim/plugin/Decho.vim so $HOME/.vim/plugin/netrwPlugin.vim 应该继续这样运行 vim vim -u netrw.vimrc --noplugins -i NONE [some path here] 以避免此插件和众多选项以及其它插件纠缠在一起。 要保存文件: 在 linux 下,输出会在单独的运行服务器窗口中;那里,只需 这样保存文件 :w! DBG 在不支持客户服务器的 vim 下,调试输出则会出现在另一个标签页中: :tabnext :set bt= :w! DBG 进一步,最好你能键入 :Dsep <command> 其中的 <command> 是你将要键入的命令,这样就容易把调试跟踪的哪部分和 哪条命令对应赶来。 请把该信息发送到 <netrw.vim> 的维护者,还请包括使用的操作系统和 vim 版本 (见 :version ) (先去掉内嵌的 NOSPAM) NcampObell@SdrPchip.AorgM-NOSPAM

12. 历史 (英文) netrw-history {{{1

v171: Oct 09, 2020 * included code in s:NetrwOptionsSafe() to allow 'bh' to be set to delete when rather than hide when g:netrw_fastbrowse was zero. * Installed g:netrw_clipboard setting * Installed option bypass for 'guioptions' a/A settings * Changed popup_beval() to popup_atcursor () in netrw#ErrorMsg (lacygoill). Apparently popup_beval doesn't reliably close the popup when the mouse is moved. * VimEnter() now using win_execute to examine buffers for an attempt to open a directory. Avoids issues with popups/terminal from command line. (lacygoill) Jun 28, 2021 * (zeertzjq) provided a patch for use of xmap,xno instead of vmap,vno in netrwPlugin.vim. Avoids entanglement with select mode. Jul 14, 2021 * Fixed problem addressed by tst976; opening a file using tree mode, going up a directory, and opening a file there was opening the file in the wrong directory. Jul 28, 2021 * (Ingo Karkat) provided a patch fixing an E488 error with netrwPlugin.vim (occurred for vim versions < 8.02) v170: Mar 11, 2020 * (reported by Reiner Herrmann) netrw+tree would not hide with the ^\..* pattern correctly. * (Marcin Szamotulski) NetrwOptionRestore did not restore options correctly that had a single quote in the option string. Apr 13, 2020 * implemented error handling via popup windows (see popup_beval() ) Apr 30, 2020 * (reported by Manatsu Takahashi) while using Lexplore, a modified file could be overwritten. Sol'n: will not overwrite, but will emit an E37 (although one cannot add an ! to override) Jun 07, 2020 * (reported by Jo Totland) repeatedly invoking :Lexplore and quitting it left unused hidden buffers. Netrw will now set netrw buffers created by :Lexplore to bh =wipe. v169: Dec 20, 2019 * (reported by amkarthik) that netrw's x ( netrw-x ) would throw an error when attempting to open a local directory. v168: Dec 12, 2019 * scp timeout error message not reported, hopefully now fixed (Shane Xb Qian) v167: Nov 29, 2019 * netrw does a save&restore on @* and @+. That causes problems with the clipboard. Now restores occurs only if @* or @+ have been changed. * netrw will change @* or @+ less often. Never if I happen to have caught all the operations that modify the unnamed register (which also writes @*). * Modified hiding behavior so that "s" will not ignore hiding. v166: Nov 06, 2019 * Removed a space from a nmap for "-" * Numerous debugging statement changes v163: Dec 05, 2017 * (Cristi Balan) reported that a setting ('sel') was left changed * (Holger Mitschke) reported a problem with saving and restoring history. Fixed. * Hopefully I fixed a nasty bug that caused a file rename to wipe out a buffer that it should not have wiped out. * (Holger Mitschke) amended this help file with additional g:netrw_special_syntax items * Prioritized wget over curl for g:netrw_http_cmd v162: Sep 19, 2016 * (haya14busa) pointed out two syntax errors with a patch; these are now fixed. Oct 26, 2016 * I started using mate-terminal and found that x and gx ( netrw-x and netrw-gx ) were no longer working. Fixed (using atril when $DESKTOP_SESSION is "mate"). Nov 04, 2016 * (Martin Vuille) pointed out that @+ was being restored with keepregstar rather than keepregplus. Nov 09, 2016 * Broke apart the command from the options, mostly for Windows. Introduced new netrw settings: g:netrw_localcopycmdopt g:netrw_localcopydircmdopt g:netrw_localmkdiropt g:netrw_localmovecmdopt g:netrw_localrmdiropt Nov 21, 2016 * (mattn) provided a patch for preview; swapped winwidth() with winheight() Nov 22, 2016 * (glacambre) reported that files containing spaces weren't being obtained properly via scp. Fix: apparently using single quotes such as with 'file name' wasn't enough; the spaces inside the quotes also had to be escaped (ie. 'file\ name'). * Also fixed obtain ( netrw-O ) to be able to obtain files with spaces in their names Dec 20, 2016 * (xc1427) Reported that using "I" ( netrw-I ) when atop "Hiding" in the banner also caused the active-banner hiding control to occur Jan 03, 2017 * (Enno Nagel) reported that attempting to apply netrw to a directory that was without read permission caused a syntax error. Jan 13, 2017 * (Ingo Karkat) provided a patch which makes using netrw#Call() better. Now returns value of internal routines return, for example. Jan 13, 2017 * (Ingo Karkat) changed netrw#FileUrlRead to use :edit instead of :read . I also changed the routine name to netrw#FileUrlEdit. Jan 16, 2017 * (Sayem) reported a problem where :Lexplore could generate a new listing buffer and window instead of toggling the netrw display. Unfortunately, the directions for eliciting the problem weren't complete, so I may or may not have fixed that issue. Feb 06, 2017 * Implemented cb and cB. Changed "c" to "cd". (see netrw-cb , netrw-cB , and netrw-cd ) Mar 21, 2017 * previously, netrw would specify (safe) settings even when the setting was already safe for netrw. Netrw now attempts to leave such already-netrw-safe settings alone. (affects s:NetrwOptionRestore() and s:NetrwSafeOptions(); also introduced s:NetrwRestoreSetting()) Jun 26, 2017 * (Christian Brabandt) provided a patch to allow curl to follow redirects (ie. -L option) Jun 26, 2017 * (Callum Howard) reported a problem with :Lexpore not removing the Lexplore window after a change-directory Aug 30, 2017 * (Ingo Karkat) one cannot switch to the previously edited file (e.g. with CTRL-^) after editing a file:// URL. Patch to have a "keepalt" included. Oct 17, 2017 * (Adam Faryna) reported that gn ( netrw-gn ) did not work on directories in the current tree v157: Apr 20, 2016 * (Nicola) had set up a "nmap <expr> ..." with a function that returned a 0 while silently invoking a shell command. The shell command activated a ShellCmdPost event which in turn called s:LocalBrowseRefresh(). That looks over all netrw buffers for changes needing refreshes. However, inside a :map-<expr> , tab and window changes are disallowed. Fixed. (affects netrw's s:LocalBrowseRefresh()) * g:netrw_localrmdir not used any more, but the relevant patch that causes delete() to take over was #1107 (not #1109). * expand() is now used on g:netrw_home ; consequently, g:netrw_home may now use environment variables * s:NetrwLeftmouse and s:NetrwCLeftmouse will return without doing anything if invoked when inside a non-netrw window Jun 15, 2016 * gx now calls netrw#GX() which returns the word under the cursor. The new wrinkle: if one is in a netrw buffer, then netrw's s:NetrwGetWord(). Jun 22, 2016 * Netrw was executing all its associated Filetype commands silently; I'm going to try doing that "noisily" and see if folks have a problem with that. Aug 12, 2016 * Changed order of tool selection for handling http://... viewing. (Nikolay Aleksandrovich Pavlov) Aug 21, 2016 * Included hiding/showing/all for tree listings * Fixed refresh (^L) for tree listings v156: Feb 18, 2016 * Changed =~ to =~# where appropriate Feb 23, 2016 * s:ComposePath(base,subdir) now uses fnameescape() on the base portion Mar 01, 2016 * (gt_macki) reported where :Explore would make file unlisted. Fixed (tst943) Apr 04, 2016 * (reported by John Little) netrw normally suppresses browser messages, but sometimes those "messages" are what is wanted. See g:netrw_suppress_gx_mesg Apr 06, 2016 * (reported by Carlos Pita) deleting a remote file was giving an error message. Fixed. Apr 08, 2016 * (Charles Cooper) had a problem with an undefined b:netrw_curdir. He also provided a fix. Apr 20, 2016 * Changed s:NetrwGetBuffer(); now uses dictionaries. Also fixed the "No Name" buffer problem. v155: Oct 29, 2015 * (Timur Fayzrakhmanov) reported that netrw's mapping of ctrl-l was not allowing refresh of other windows when it was done in a netrw window. Nov 05, 2015 * Improved s:TreeSqueezeDir() to use search() instead of a loop * NetrwBrowse() will return line to w:netrw_bannercnt if cursor ended up in banner Nov 16, 2015 * Added a <Plug>NetrwTreeSqueeze ( netrw-s-cr ) Nov 17, 2015 * Commented out imaps -- perhaps someone can tell me how they're useful and should be retained? Nov 20, 2015 * Added netrw-ma and netrw-mA support Nov 20, 2015 * gx ( netrw-gx ) on a URL downloaded the file in addition to simply bringing up the URL in a browser. Fixed. Nov 23, 2015 * Added g:netrw_sizestyle support Nov 27, 2015 * Inserted a lot of <c-u>s into various netrw maps. Jan 05, 2016 * netrw-qL implemented to mark files based upon location-list s; similar to netrw-qF . Jan 19, 2016 * using - call delete(directoryname,"d") - instead of using g:netrw_localrmdir if v7.4 + patch#1107 is available Jan 28, 2016 * changed to using winsaveview() and winrestview() Jan 28, 2016 * s:NetrwTreePath() now does a save and restore of view Feb 08, 2016 * Fixed a tree-listing problem with remote directories v154: Feb 26, 2015 * (Yuri Kanivetsky) reported a situation where a file was not treated properly as a file due to g:netrw_keepdir == 1 Mar 25, 2015 * (requested by Ben Friz) one may now sort by extension Mar 28, 2015 * (requested by Matt Brooks) netrw has a lot of buffer-local mappings; however, some plugins (such as vim-surround) set up conflicting mappings that cause vim to wait. The "<nowait>" modifier has been included with most of netrw's mappings to avoid that delay. Jun 26, 2015 * netrw-gn mapping implemted * :Ntree NotADir resulted in having the tree listing expand in the error messages window. Fixed. Jun 29, 2015 * Attempting to delete a file remotely caused an error with "keepsol" mentioned; fixed. Jul 08, 2015 * Several changes to keep the :jumps table correct when working with g:netrw_fastbrowse set to 2 * wide listing with accented characters fixed (using %-S instead of %-s with a printf() Jul 13, 2015 * (Daniel Hahler) CheckIfKde() could be true but kfmclient not installed. Changed order in netrw#BrowseX(): checks if kde and kfmclient, then will use xdg-open on a unix system (if xdg-open is executable) Aug 11, 2015 * (McDonnell) tree listing mode wouldn't select a file in a open subdirectory. * (McDonnell) when multiple subdirectories were concurrently open in tree listing mode, a ctrl-L wouldn't refresh properly. * The netrw:target menu showed duplicate entries Oct 13, 2015 * (mattn) provided an exception to handle windows with shellslash set but no shell Oct 23, 2015 * if g:netrw_usetab and <c-tab> now used to control whether NetrwShrink is used (see netrw-c-tab ) v153: May 13, 2014 * added another g:netrw_ffkeep usage {{{2 May 14, 2014 * changed s:PerformListing() so that it always sets ft=netrw for netrw buffers (ie. even when syntax highlighting is off, not available, etc) May 16, 2014 * introduced the netrw-ctrl-r functionality May 17, 2014 * introduced the netrw-:NetrwMB functionality * mb and mB ( netrw-mb , netrw-mB ) will add/remove marked files from bookmark list May 20, 2014 * (Enno Nagel) reported that :Lex <dirname> wasn't working. Fixed. May 26, 2014 * restored test to prevent leftmouse window resizing from causing refresh. (see s:NetrwLeftmouse()) * fixed problem where a refresh caused cursor to go just under the banner instead of staying put May 28, 2014 * (László Bimba) provided a patch for opening the :Lexplore window 100% high, optionally on the right, and will work with remote files. May 29, 2014 * implemented :NetrwC (see netrw-:NetrwC ) Jun 01, 2014 * Removed some "silent"s from commands used to implemented scp://... and pscp://... directory listing. Permits request for password to appear. Jun 05, 2014 * (Enno Nagel) reported that user maps "/" caused problems with "b" and "w", which are mapped (for wide listings only) to skip over files rather than just words. Jun 10, 2014 * g:netrw_gx introduced to allow users to override default "<cfile>" with the gx ( netrw-gx ) map Jun 11, 2014 * gx ( netrw-gx ), with 'autowrite' set, will write modified files. s:NetrwBrowseX() will now save, turn off, and restore the 'autowrite' setting. Jun 13, 2014 * added visual map for gx use Jun 15, 2014 * (Enno Nagel) reported that with having hls set and wide listing style in use, that the b and w maps caused unwanted highlighting. Jul 05, 2014 * netrw-mv and netrw-mX commands included Jul 09, 2014 * g:netrw_keepj included, allowing optional keepj Jul 09, 2014 * fixing bugs due to previous update Jul 21, 2014 * (Bruno Sutic) provided an updated netrw_gitignore.vim Jul 30, 2014 * (Yavuz Yetim) reported that editing two remote files of the same name caused the second instance to have a "temporary" name. Fixed: now they use the same buffer. Sep 18, 2014 * (Yasuhiro Matsumoto) provided a patch which allows scp and windows local paths to work. Oct 07, 2014 * gx (see netrw-gx ) when atop a directory, will now do gf instead Nov 06, 2014 * For cygwin: cygstart will be available for netrw#BrowseX() to use if its executable. Nov 07, 2014 * Began support for file://... urls. Will use g:netrw_file_cmd (typically elinks or links) Dec 02, 2014 * began work on having mc ( netrw-mc ) copy directories. Works for linux machines, cygwin+vim, but not for windows+gvim. Dec 02, 2014 * in tree mode, netrw was not opening directories via symbolic links. Dec 02, 2014 * added resolved link information to thin and tree modes Dec 30, 2014 * (issue#231) :ls was not showing remote-file buffers reliably. Fixed. v152: Apr 08, 2014 * uses the 'noswapfile' option (requires {{{2 vim 7.4 with patch 213) * (Enno Nagel) turn 'rnu' off in netrw buffers. * (Quinn Strahl) suggested that netrw allow regular window splitting to occur, thereby allowing 'equalalways' to take effect. * (qingtian zhao) normally, netrw will save and restore the 'fileformat' ; however, sometimes that isn't wanted Apr 14, 2014 * whenever netrw marks a buffer as ro, it will also mark it as nomod. Apr 16, 2014 * sftp protocol now supported by netrw#Obtain(); this means that one may use "mc" to copy a remote file to a local file using sftp, and that the netrw-O command can obtain remote files via sftp. * added [count]C support (see netrw-C ) Apr 18, 2014 * when g:netrw_chgwin is one more than the last window, then vertically split the last window and use it as the chgwin window. May 09, 2014 * SavePosn was "saving filename under cursor" from a non-netrw window when using :Rex. v151: Jan 22, 2014 * extended :Rexplore to return to buffer {{{2 prior to Explore or editing a directory * (Ken Takata) netrw gave error when clipboard was disabled. Sol'n: Placed several if has("clipboard") tests in. * Fixed ftp://X@Y@Z// problem; X@Y now part of user id, and only Z is part of hostname. * (A Loumiotis) reported that completion using a directory name containing spaces did not work. Fixed with a retry in netrw#Explore() which removes the backslashes vim inserted. Feb 26, 2014 * :Rexplore now records the current file using w:netrw_rexfile when returning via :Rexplore Mar 08, 2014 * (David Kotchan) provided some patches allowing netrw to work properly with windows shares. * Multiple one-liner help messages available by pressing <cr> while atop the "Quick Help" line * worked on ShellCmdPost, FocusGained event handling. * :Lexplore path: will be used to update a left-side netrw browsing directory. Mar 12, 2014 * netrw-s-cr : use <s-cr> to close tree directory implemented Mar 13, 2014 * (Tony Mechylynck) reported that using the browser with ftp on a directory, and selecting a gzipped txt file, that an E19 occurred (which was issued by gzip.vim). Fixed. Mar 14, 2014 * Implemented :MF and :MT (see netrw-:MF and netrw-:MT , respectively) Mar 17, 2014 * :Ntree [dir] wasn't working properly; fixed Mar 18, 2014 * Changed all uses of set to setl Mar 18, 2014 * Commented the netrw_btkeep line in s:NetrwOptionSave(); the effect is that netrw buffers will remain as 'bt' =nofile. This should prevent swapfiles being created for netrw buffers. Mar 20, 2014 * Changed all uses of lcd to use s:NetrwLcd() instead. Consistent error handling results and it also handles Window's shares * Fixed netrw-d command when applied with ftp * https: support included for netrw#NetRead() v150: Jul 12, 2013 * removed a "keepalt" to allow ":e #" to {{{2 return to the netrw directory listing Jul 13, 2013 * (Jonas Diemer) suggested changing a <cWORD> to <cfile>. Jul 21, 2013 * (Yuri Kanivetsky) reported that netrw's use of mkdir did not produce directories following the user's umask. Aug 27, 2013 * introduced g:netrw_altfile option Sep 05, 2013 * s:Strlen() now uses strdisplaywidth() when available, by default Sep 12, 2013 * (Selyano Baldo) reported that netrw wasn't opening some directories properly from the command line. Nov 09, 2013 * :Lexplore introduced * (Ondrej Platek) reported an issue with netrw's trees (P15). Fixed. * (Jorge Solis) reported that "t" in tree mode caused netrw to forget its line position. Dec 05, 2013 * Added <s-leftmouse> file marking (see netrw-mf ) Dec 05, 2013 * (Yasuhiro Matsumoto) Explore should use strlen() instead s:Strlen() when handling multibyte chars with strpart() (ie. strpart() is byte oriented, not display-width oriented). Dec 09, 2013 * (Ken Takata) Provided a patch; File sizes and a portion of timestamps were wrongly highlighted with the directory color when setting `:let g:netrw_liststyle=1` on Windows. * (Paul Domaskis) noted that sometimes cursorline was activating in non-netrw windows. All but one setting of cursorline was done via setl; there was one that was overlooked. Fixed. Dec 24, 2013 * (esquifit) asked that netrw allow the /cygdrive prefix be a user-alterable parameter. Jan 02, 2014 * Fixed a problem with netrw-based ballon evaluation (ie. netrw#NetrwBaloonHelp() not having been loaded error messages) Jan 03, 2014 * Fixed a problem with tree listings * New command installed: :Ntree Jan 06, 2014 * (Ivan Brennan) reported a problem with netrw-P . Fixed. Jan 06, 2014 * Fixed a problem with netrw-P when the modified file was to be abandoned. Jan 15, 2014 * (Matteo Cavalleri) reported that when the banner is suppressed and tree listing is used, a blank line was left at the top of the display. Fixed. Jan 20, 2014 * (Gideon Go) reported that, in tree listing style, with a previous window open, that the wrong directory was being used to open a file. Fixed. (P21) v149: Apr 18, 2013 * in wide listing format, now have maps for {{{2 w and b to move to next/previous file Apr 26, 2013 * one may now copy files in the same directory; netrw will issue requests for what names the files should be copied under Apr 29, 2013 * Trying Benzinger's problem again. Seems that commenting out the BufEnter and installing VimEnter (only) works. Weird problem! (tree listing, vim -O Dir1 Dir2) May 01, 2013 * :Explore ftp://... wasn't working. Fixed. May 02, 2013 * introduced g:netrw_bannerbackslash as requested by Paul Domaskis. Jul 03, 2013 * Explore now avoids splitting when a buffer will be hidden. v148: Apr 16, 2013 * changed Netrw's Style menu to allow direct {{{2 choice of listing style, hiding style, and sorting style

13. Todo (英文) netrw-todo {{{1

07/29/09 : banner : g:netrw_banner can be used to suppress the suppression banner. This feature is new and experimental, so its in the process of being debugged. 09/04/09 : "gp" : See if it can be made to work for remote systems. : See if it can be made to work with marked files.

14. 鸣谢 netrw-credits {{{1

Vim editor by Bram Moolenaar (谢了,Bram!) dav 提供支持: C Campbell fetch 提供支持: Bram Moolenaar 和 C Campbell ftp 提供支持: C Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> http 提供支持: Bram Moolenaar <bram@moolenaar.net> rcp rsync 提供支持: C Campbell (Erik Warendorph 提供建议) scp 提供支持: raf <raf@comdyn.com.au> sftp 提供支持: C Campbell inputsecret()、BufReadCmd、BufWriteCmd 由 C Campbell 提供 Jérôme Augé -- 也使用新的缓冲区方法操作 ftp+.netrc Bram Moolenaar -- 显然写了 vim 本身,还有 :e 和 v:cmdarg 的使 用,fetch 等 Yasuhiro Matsumoto -- 指出 undo+0r 的问题和解决方法 Erik Warendorph -- 提供若干建议 (g:netrw_..._cmd 变量,rsync 等) Doug Claar -- 提供能成功通过 ftp 操作的测试的修改

模式行: {{{1

vim:tw=78:ts=8:ft=help:noet:norl:fdm=marker