📄 usr_25.cnx
字号:
*25.4* 对长行的处理有时你会编辑一个比窗口列数宽的文件。当发生这种情况时,Vim将把文件折行显示以便适应屏幕显示。 如果你将 'wrap' 选项设置为关闭,文件中的每一行都将在屏幕上仅作为一行显示。这时行尾会超出屏幕右端从而无法看到。 当你把光标移动到一个无法看到的字符时,Vim将滚动文本来显示它。这就好像在文本的水平方向移动视口一样。 默认情况下,Vim 并不在 GUI 中显示水平滚动条。如果你想启用它,使用下面的命令: > :set guioptions+=b一个水平滚动条将出现在 Vim 窗口的底部。如果你没有滚动条或者你不想使用它,可以用下面这些命令来滚动文本。光标将停留在同样的地方,但在必要时会回移到可见文本区。 zh 向右滚动 4zh 向右滚动四个字符 zH 向右滚动半个窗口宽度 ze 向右滚动使光标处于行尾 zl 向左滚动 4zl 向左滚动四个字符 zL 向左滚动半个窗口宽度 zs 向左滚动使光标处于行首让我们试着用一行文本来演示一下。光标停留在 "which" 的 "w" 处。那行上方的 "当前窗口" 标示当前可见的文本。下方的 "窗口" 指示了执行了左边的命令后可见的文本区域。 |<-- 当前窗口 -->| some long text, part of which is visible in the window~ ze |<-- 窗口 -->| zH |<-- 窗口 -->| 4zh |<-- 窗口 -->| zh |<-- 窗口 -->| zl |<-- 窗口 -->| 4zl |<-- 窗口 -->| zL |<-- 窗口 -->| zs |<-- 窗口 -->|在 关 闭 折 行 情 况 下 移 动当 'wrap' 选项被关闭,文本将在水平方向卷动。你可以通过以下命令来使光标移动到你可以看到的一个字符处。这样超出窗口左右两端的文本将被忽略。这些命令将不会使文本卷动: g0 移动到当前行的第一个可见字符 g^ 移动到当前行的第一个非空白的可见字符 gm 移动到当前行的中点 g$ 移动到当前行的最后一个可见字符 |<-- 窗口 -->| some long text, part of which is visible ~ g0 g^ gm g$断 词 *edit-no-break*当你为另一个程序准备文本时,你或许需要使段落没有一处换行。使用 'nowrap' 选项的一个弊端是你看不见你正在处理的整个句子。当 'wrap' 选项开启时,会发生会断词,从而难以阅读。 编辑此类段落时,一个好的解决方法是设置 'linebreak' 选项。这样,Vim 将会在一个适当的地方折行显示,同时仍保持文件中的文本不变。 没有设置 'linebreak' 选项时的文本看起来可能是这样: +---------------------------------+ |letter generation program for a b| |ank. They wanted to send out a s| |pecial, personalized letter to th| |eir richest 1000 customers. Unfo| |rtunately for the programmer, he | +---------------------------------+使用如下命令之后: > :set linebreak看起来会是这样: +---------------------------------+ |letter generation program for a | |bank. They wanted to send out a | |special, personalized letter to | |their richest 1000 customers. | |Unfortunately for the programmer,| +---------------------------------+相关选项:'breakat' 指定了可以用来作为插入换行地点的字符。'showbreak' 指定了一个用于显示在折行显示行的行首的字符串。设置 'textwidth' 的值为零来避免一个段落被拆分。通 过 可 见 行 移 动使用 "j" 和 "k" 命令可以移动到下一行和上一行。当作用于一个长行时,这通常意味着要一次移动许多屏幕行。 使用 "gj" 和 "gk" 命令可以只移动一个屏幕行。当一个行没有折行时,它们和"j" 和 "k"命令所起的作用一样。当一个行折行时,它们将在屏幕上显示的上一行和下一行的一个字符之间移动。 下面这些移动命令的键映射也许对你有用: > :map <Up> gk :map <Down> gj变 段 为 行如果你想把文本导入类似 MS-Word 的程序中,每个段落就要变成一个单行。如果你的段落是由空行分隔开的,下面这个命令就可以要把一个段转化为一个单行: > :g/./,/^$/join这看起来挺复杂。让我们把它分解开: :g/./ 一个 ":global" 命令,用来搜索至少含一个字符的所有行。 ,/^$/ 一个范围,从当前行开始(非空行)到一个空行。 join ":join" 命令把范围内的行连接成一行。从下面这段含有八行,且在第三十列换行的文本开始: +----------------------------------+ |A letter generation program | |for a bank. They wanted to | |send out a special, | |personalized letter. | | | |To their richest 1000 | |customers. Unfortunately for | |the programmer, | +----------------------------------+你将得到下面两行: +----------------------------------+ |A letter generation program for a | |bank. They wanted to send out a s| |pecial, personalized letter. | |To their richest 1000 customers. | |Unfortunately for the programmer, | +----------------------------------+Note 当分隔段落的行是含有空格和/或制表符的空白行而不是空行时,这行命令将不起作用。下列的命令对于空白行仍起作用: >> :g/\S/,/^\s*$/join要使最后一段也被连接,这行命令需要文件的结尾仍有一个空白行或空行。==============================================================================*25.5* 编辑表格设想你正在编辑一个含有四列的表格: nice table test 1 test 2 test 3 ~ input A 0.534 ~ input B 0.913 ~你需要在第三列输入数字。你可以先移动到第二行,键入 "A",键入一大堆空格然后输入你要输入的文本。 对于这种类型的编辑操作有一个特殊的选项: > set virtualedit=all现在你可以把光标移动到没有任何文本的位置。这叫做 "虚空间"。通过这种方法,编辑表格变得容易很多。 通过查找最后一列的标题来移动光标: > /test 3现在按下 "j",光标就到了你要输入对应 "input A" 的值的地方了。输入 "0.693",结果是: nice table test 1 test 2 test 3 ~ input A 0.534 0.693 ~ input B 0.913 ~Vim 已经自动为你填充了新文本前面的间隙。现在,要到此列的下一个域,键入 "Bj"。"B" 用来移动到间隔单词的空白的开始处。然后,用 "j" 移动到可以输入下一域的地方。 Note: 你可以把光标移动到窗口的任何地方,也可以超出行尾。但是,Vim 在你未在 该位置插入字符之前并不会插入空格。拷 贝 一 列你想增加一列,它是第三列的一个拷备并且想放在 "test 1" 列的前面。做以下七步:1. 移动光标到这一列的左上角,例如用 "/test 3"。2. 按 CTRL-V 来开启块可视模式。3. 用 "2j" 使光标向下移动两行。你现在进入了 "虚空间": "input B" 行中对应 对应列 "test 3" 的地方。4. 把光标向右移动来选择整列,外加那些你想要的列之间的空格。用 "9l" 就行。5. 用 "y" 来拷贝矩形选择区的内容。6. 把光标移动到我们需要插入新列的地方 "test 1"。7. 按下 "P"。结果应该是: nice table test 3 test 1 test 2 test 3 ~ input A 0.693 0.534 0.693 ~ input B 0.913 ~需要注意的是整个 "test 1" 列被向右移动了,同时也包括 "test 3" 列中没有文本的行。要返回到光标的非虚拟移动模式用: > :set virtualedit=虚 替 换 模 式使用 'virtualedit' 的弊端是你会 "感觉" 不太一样。当你移动光标的时候,你不能分辨超出行尾的制表符或空格。另一种可行的方法是: 虚替换模式。 设想在表格中有一个包含了制表符和其它字符的行。在第一个制表符上使用 "rx": inp 0.693 0.534 0.693 ~ | rx | V inpx0.693 0.534 0.693 ~版面被弄乱了。要避免这种情况,使用 "gr" 命令: inp 0.693 0.534 0.693 ~ | grx | V inpx 0.693 0.534 0.693 ~这里的情况是 "gr" 命令确保了新字符占据了正确的屏幕空间。额外需要的空格或制表符被插入到间隙中。然而,真正发生的是一个制表符被一个 "x" 代替, 然后空白字符被加上来使文本保持它的位置。在这个例子里是插入了一个制表符。 当你需要替换多于一个字符时,使用 "R" 命令来进入替换模式(参看 |04.9|)。这样一来,原来的版面乱套了,而且替换了不该换的字符。 inp 0 0.534 0.693 ~ | R0.786 | V inp 0.78634 0.693 ~"gR" 使用虚替换模式。这保全了版面布局: inp 0 0.534 0.693 ~ | gR0.786 | V inp 0.786 0.534 0.693 ~==============================================================================下一章: |usr_26.txt| 重复版权: 参看 |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -