Usr_23

Nvim :help 页面,生成源文件 使用 tree-sitter-vimdoc 解析器。


VIM 用户手册 - 作者 Bram Moolenaar
编辑其他文件
本章讲述编辑非普通文件的操作。使用 Vim 可以编辑压缩文件。一些文件需要通过网络访问。在一些限制下,也可以编辑二进制文件。
23.1 DOS、Mac 和 Unix 文件 23.2 网络上的文件 23.3 二进制文件 23.4 压缩文件
下一章:usr_24.txt 快速插入 前一章:usr_22.txt 查找要编辑的文件 目录:usr_toc.txt

DOS、Mac 和 Unix 文件

早期的电传打字机使用两个字符来开始一个新行。一个用于将字车移回第一个位置(回车符,<CR>),另一个用于向上移动纸张(换行符,<LF>)。当计算机出现后,存储变得昂贵。有些人决定他们不需要两个字符来表示行尾。Unix 人员决定他们可以使用 <NL> 作为行尾。苹果公司将 <CR> 作为标准。微软 Windows 人员决定保留旧的 <CR><NL>(我们在帮助文本中使用 <NL> 表示换行符)。这意味着如果您尝试将文件从一个系统移动到另一个系统,您将遇到换行问题。Vim 编辑器会自动识别不同的文件格式并为您处理所有内容。选项 'fileformats' 包含在编辑新文件时将尝试的各种格式。例如,以下命令告诉 Vim 首先尝试 Unix 格式,其次尝试 MS-DOS 格式
:set fileformats=unix,dos
您会在编辑文件时收到的消息中注意到格式。如果您编辑的是本机文件格式,您将不会看到任何内容。因此在 Unix 上编辑 Unix 文件不会产生任何提示。但是,当您编辑 dos 文件时,Vim 会通知您。
"/tmp/test" [dos] 3L, 71C
对于 Mac 文件,您将看到 "[mac]"。检测到的文件格式存储在 'fileformat' 选项中。要查看您使用的格式,请执行以下命令
:set fileformat?
Vim 使用的三个名称是
unix <NL> dos <CR><NL> mac <CR>

使用 MAC 格式

在 Unix 上,<NL> 用于换行。在行中间出现 <CR> 字符并不罕见。顺便说一句,这种情况在 Vi(和 Vim)脚本中经常发生。在 Macintosh 上,<CR> 是换行符,因此有可能在行中间出现 <NL> 字符。结果是,无法 100% 确定包含 <CR><NL> 字符的文件是 Mac 文件还是 Unix 文件。因此,Vim 假定在 Unix 上您可能不会编辑 Mac 文件,并且不检查这种类型的文件。要检查此格式,请将 "mac" 添加到 'fileformats'
:set fileformats+=mac
然后 Vim 会猜测文件格式。注意 Vim 猜测错误的情况。

覆盖格式

如果您使用旧的 Vi 并尝试编辑 MS-DOS 格式文件,您会发现每行都以 ^M 字符结尾。(^M 是 <CR>)。自动检测避免了这种情况。假设您确实想以这种方式编辑文件?那么您需要覆盖格式
:edit ++ff=unix file.txt
"++" 字符串是一个告诉 Vim 选项名称随后出现的内容,它会覆盖此单个命令的默认值。"++ff" 用于 'fileformat'。您也可以使用 "++ff=mac" 或 "++ff=dos"。这并不适用于任何选项,目前只实现了 "++ff" 和 "++enc"。完整名称 "++fileformat" 和 "++encoding" 也有效。

转换

您可以使用 'fileformat' 选项将一种文件格式转换为另一种文件格式。例如,假设您有一个名为 README.TXT 的 MS-DOS 文件,您想将其转换为 Unix 格式。首先编辑 MS-DOS 格式文件
vim README.TXT
Vim 会将其识别为 dos 格式文件。现在将文件格式更改为 Unix
:set fileformat=unix
:write
该文件已写入 Unix 格式。

23.2 网络上的文件

有人向您发送了一封电子邮件,其中提到了一个文件的 URL。例如
您可以在此处找到信息
ftp://ftp.vim.org/pub/vim/README
您可以启动一个程序来下载文件,将其保存在您的本地磁盘上,然后启动 Vim 来编辑它。还有一个更简单的方法。将光标移动到 URL 的任何字符。然后使用此命令
gf
如果幸运的话,Vim 会找出要使用哪个程序下载文件,下载它并编辑副本。要在新窗口中打开文件,请使用 CTRL-W f。如果出现问题,您将收到错误消息。URL 可能错误,您可能没有读取权限,网络连接可能已断开等。不幸的是,很难判断错误的原因。您可能需要尝试手动下载文件的方法。
通过网络访问文件可以使用 netrw 插件。目前识别以下格式的 URL
ftp:// 使用 ftp rcp:// 使用 rcp scp:// 使用 scp http:// 使用 wget(仅读取)
Vim 本身不进行通信,它依赖于您的计算机上可用的上述程序。在大多数 Unix 系统上,"ftp" 和 "rcp" 将存在。"scp" 和 "wget" 可能需要安装。
Vim 会为每个开始编辑新文件的命令检测这些 URL,例如使用 ":edit" 和 ":split"。写入命令也可以,但 http:// 除外。
有关更多信息,包括密码,请参阅 netrw

23.3 二进制文件

您可以使用 Vim 编辑二进制文件。Vim 并非专门为这种情况而设计,因此有一些限制。但是您可以读取文件,更改一个字符,然后将其写回,结果是只有一个字符被更改,并且该文件在其他方面完全相同。为了确保 Vim 不会错误地使用它的技巧,在启动 Vim 时添加 "-b" 参数
vim -b datafile
这将设置 'binary' 选项。这样做的效果是关闭意外的副作用。例如,'textwidth' 设置为零,以避免自动格式化行。并且文件始终以 Unix 文件格式读取。
二进制模式可用于更改程序中的消息。小心不要插入或删除任何字符,否则程序将无法工作。使用 "R" 进入替换模式。
文件中的许多字符将是不可打印的。要以十六进制格式查看它们
:set display=uhex
否则,可以使用 "ga" 命令查看光标下的字符的值。当光标位于 <Esc> 上时,输出如下所示
<^[> 27, 十六进制 1b, 八进制 033
文件中可能没有多少换行符。要获得一些概览,请关闭 'wrap' 选项
:set nowrap

字节位置

要查看您在文件中的哪个字节,请使用此命令
g CTRL-G
输出很详细
列 9-16 的 9-16;行 277 的 330;字 1806 的 2058;字节 10580 的 12206
最后两个数字是文件中的字节位置和字节总数。这考虑了 'fileformat' 如何更改换行符使用的字节数。要移动到文件中的特定字节,请使用 "go" 命令。例如,要移动到字节 2345
2345go

使用 XXD

一个真正的二进制编辑器以两种方式显示文本:原样显示和以十六进制格式显示。您可以通过首先使用 "xxd" 程序转换文件来在 Vim 中执行此操作。这与 Vim 一同提供。首先以二进制模式编辑文件
vim -b datafile
现在使用 xxd 将文件转换为十六进制转储
:%!xxd
文本将如下所示
0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI
0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0
0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'1.".....i.59.
现在您可以随意查看和编辑文本。Vim 将信息视为普通文本。更改十六进制不会导致可打印字符更改,反之亦然。最后使用以下命令将其转换回
:%!xxd -r
仅使用十六进制部分中的更改。忽略右侧可打印文本部分中的更改。
有关更多信息,请参阅 xxd 手册页。

23.4 压缩文件

这很简单:您可以像编辑任何其他文件一样编辑压缩文件。"gzip" 插件在您编辑文件时负责解压缩文件。并在您写入文件时重新压缩文件。目前支持以下压缩方法
.Z compress .gz gzip .bz2 bzip2
Vim 使用上述程序进行实际的压缩和解压缩。您可能需要先安装这些程序。
下一章:usr_24.txt 快速插入
版权:请参阅 manual-copyright vim:tw=78:ts=8:noet:ft=help:norl
命令索引
快速参考