Vim 学习手记(四) --- 更多的编辑操作

 2010年01月12日 星期二 23:04 | 1837次浏览 | 2条评论



//纠错
如果你发现整个word键入有误, 可以使用 CTRL-W
如果发现整行键入的内容都弄乱了, 可以使用 CTRL-U 删除它来重新开始,同时这会保留光标之后的字符并且保持原有的缩进


//补全
CTRL-P  编辑时自动补全一个词
如果你自己清楚要找的东西, 你可以用以下命令来补全这样一些特殊
的文档元素:
CTRL-X CTRL-F  文件名 
CTRL-X CTRL-L  整行内容
CTRL-X CTRL-D  宏定义(也包括那些在include文件里定义的宏)
CTRL-X CTRL-I  当前文件和被当前文件include的文件
CTRL-X CTRL-K  来自一个字典文件的word
CTRL-X CTRL-T  来自一个thesaurus的word
CTRL-X CTRL-]  tags
CTRL-X CTRL-V  Vim的命令行


CTRL-A  编辑器会插入你上一次在insert模式下录入的内容
CTRL-@  命令基本与 CTRL-A 一样, 不同是它在插入之后会退出Insert模式.
CTRL-Y  命令会插入当前光标之上的一行中相同位置字符
CTRL-E  与CTRL-Y相似, 不过它插入的是当前行之下的那一行中同列的字符
CTRL-R {register}  可以在当前位置插入指定寄存器 register 的内容
CTRL-O {command}  可以在Insert模式下执行任何一个Normal模式下的命令


CTRL-V  可以保证你键入的下一个字符被原封不动地被录入 , 如  插入一个escape字符:       CTRL-V<Esc>
你也可以使用CTRL-V {digits}来插入一个由{digits}指定其ASCII码的字符
要用十六进制来表示你的ASCII, 在CTRL-V后面附加一个"x"
你也可以用"o"让Vim把接下来的数字视为8进制的
接下来的两个方法还可以让你键入一个16bit或32bit的数字:
CTRL-V u1234
CTRL-V U12345678


//特殊字符
有一些字符在键盘上没有对应的键. 比如表示版权的字符. 要在Vim中输入这些字符可以使用 digraphs, 它用两个字符来表示一个有意义的符号
:digraphs  可以让你查看都有哪些digraphs可用
要输入一个?号, 可以通过键入:  CTRL-K Co

你也可以定义你自己的digraphs
:digraph a" |d
这个定义是说CTRL-K a"会实际插入一个?字符


//缩写
:iabbrev ad advertisement  自定义缩写( 将 ad 设置为 advertisement 的缩写)
可以用":iab"代替完整的命令名":iabbrev"

:iabbrev       用于 Insert 模式下的缩写定义
:cabbrev       用于 命令行 模式下的缩写定义
:abbreviate    用于 Insert和命令行 模式下的缩写定义

:abbreviations  列出已定义的缩写

:unabbreviate ad   删除缩写ad
:abclear           移除所有的缩写


//格式化文本 ------------------------------------------

如果你设置了'textwidth'选项, Vim就会自动换行.一行最多有30个字符. 可以使用下面的设置:
:set textwidth=30

gq  重新格式化
一个使用"gq"时非常常用的文本对象是段,试一下命令:
gqap
"ap"意为"a-paragraph"

//对齐文本
要让一个范围的行居中, 使用下面的命令:
:{range}center [width]
[width]是一个用于指定行宽的可选参数. 如果不指明[width], 它的默认值取自'textwidth'. (如果'textwidth'的值是0, 就取80)

:{range}right [margin]  右对齐
:{range}left [margin]  左对齐

左右对齐
Vim并没有一个内置的命令来使文本左右对齐. 不过, 有一个不错的
宏包可以实现它一功能. 要使用该宏包, 执行下面的命令:
:runtime macros/justify.vim

//缩进和制表符 
'autoindent'选项可以自动插入缩进:
:set autoindent
接下来的新行将会沿用其前一行中所使用的缩进

增加缩进
要增加一行的缩进量, 使用">"操作符命令.用">>"命令, 这会增加当前行的缩进量
每次缩进量增减的单位由选项'shiftwidth'指定. 其默认值是8
设置该选项:
:set shiftwidth=4

可以通过'softtabstop'选项:
:set softtabstop=4
让一个制表符只插入4个字符宽度的缩进
这里还是建议把'tabstop'设置为8. 毕竟这是大众标准


//处理长文本行
如果没法使用滚动条或者有你也不想用它 , 你可以用下面的命令来左右移动:
zh   向右滚动   
4zh  向右滚动4个字符   
zH   向右滚动半个窗口的宽度   
ze   向右移动使当前光标成为最右端的可见字符   
zl   向左滚动   
4zl  向左滚动4个字符   
zL   向左滚动半个窗口
zs   向左移动使当前光标成为最左边的可见字符


//word的绕行显示
有时候在生成被另一个程序读取的文件时, 可能会要求一段内容不能有断行. 但使用'nowrap'的话又不能看到整个句子的全貌.
 'wrap'选项打开的话, 又可能会把一个 ""词"" 从中间硬生生折到下一行去显示, 让你看起来很费劲.
一个好办法是仍然打开'wrap', 同时打开'linebreak'选项.这样Vim就会在适当的地方折叠显示长的文本行. 同时文本的内容本身不受影响

相关选项:
'breakat'指定了可以断行的字符.
'showbreak'可以指定一个字符串显示在接续显示的行的开头.
把'textwidth'设置为0可以避免自动断行.


//移动可视屏幕行
"j"和"k"命令可以上下移动文本行. 这两个命令作用于长的文本行
时每次移动的屏幕显示的行可能会多于1行
要精确地每次只移动一个屏幕显示行, 使用"gj"和"gk"命令,如果一个长行需要折叠显示, 这两个命令就会只移动一个屏幕显示行.

//合并多行文本
如果你的每段文本现在都是以空行分隔的, 下面的命令可
以把每个段放到同一行上:
:g/./,/^$/join
   
:g/./  一个全局命令, 查找那些至少有一个字符的行.   
,/^$/  指定一个范围, 从当前行开始(非空行)直到一个空行.
join  ":join"命令把指定范围内的行连为一行.


//编辑表格
   假设你正在编辑这面这样的一个四栏表格:
                          Display
nice table        test 1       test 2 test 3
input A           0.534
input B           0.913
   现在需要在第3栏里输入数字. 最普通的做法是移到第二行去, 使用命令"A", 然后输入一些空格, 对齐位置后输入你的数字.

对于这类编辑任务有一个特殊的选项:
:set virtualedit=all
现在你可以把光标移到空无一物的虚位置上去了. 这叫"虚空白"
下面的命令使光标移动命令的行为恢复到正常状态:
:set virtualedit=

当要将一个制表符替换掉时,使用"r" 命令可能会弄乱整个内容
"gr"命令总是让被替换的文本占据它所应有的屏幕空间.空出的间隙会以额外的空格或制表符来填充

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !
Ford Guo

回复 Ford Guo  2010年01月14日 星期四 16:06

显示行号也很实用的,
我最常用的还是:0,$ s/xxx/yyyy/g
:)

0条回复

李华堂

回复 李华堂  2010年01月13日 星期三 09:44

那几个补全还是很有用的,另外,左右移动的话用< or >效果刚刚的

0条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号