分享
 
 
 

VIM-小技巧,大改变(和盘托出,无所保留)

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

1. 已经在编辑状态(insert mode)了,如何快速执行 normal mode 的命令?

在编辑文本时,需要快速定位到某个位置,如下一个 d 的位置,难道要

<ESC>、fd、i 这般繁琐吗?

其实,使用 Ctrl-O 就可以临时切换到 normal mode, 执行一个命令后自动返回 insert mode。

于是上述命令序列可以改为:

Ctrl-O、fd 即可。

Ctrl-O 要按两个键呢,很麻烦,于是来个 keymap

" make ` functions <C-O> in insert mode

inoremap ` <C-O>

nnoremap ` i`<ESC>

在 normal mode 下按 ` (左上角那个),会正常插入 `,

而在 insert mode 下则相当于按 Ctrl-O,

于是上述命令序列又可简化为

`fd 即可。

在 insert mode 想粘贴剪贴板内容时,可以输入 `P,爽吧?

这样就可以在 insert mode 下天马行空,不用再按 <ESC>和a 切来切去了。

2. vim 的剪贴板怎么怪怪的?

用 y 命令拷贝的文本怎么不能在 X/Windows 的其它应用中使用呢?

事实上,vim 有多个所谓寄存器来寄存剪切的内容。

平时是不是只用 y <motion> 和 p 命令呢?

其实这时使用的是 unamed 寄存器(对应寄存器*,不知对否?),即没有给定名称的,

而给定名称的,可以加前缀 "r 使用。

例如,将当前行放到寄存器a中,输入: "aY

将另一行(先移到其它行)放到寄存器b中,输入: "bY

粘贴寄存器a,输入:"aP

粘贴寄存器b,输入:"bP

好了,扯远了,X/Windows 的剪贴板的内容是存在寄存器+中,不信,自己试试:"+P

能不能将简单的 y 和 p命令与系统剪贴板联系起来呢?

就这句,浪费了我许多口水:)

set clipboard+=unnamed " set clipboard

3. 我不要每次都输入 this_object.set_...

呵,在 C 的结构或 C++ 的对象设置时,那个结构名或对象名总是重复 n 次要输入,挺烦的:(

添加这两句到配置文件中吧:

" Ctrl-F to yank line upstairs

inoremap <silent> <C-F> <C-O>:exe "norm! kly0jPD"<CR>

这是在编辑模式中使用的,怎么个用法?举个例子吧(括号内是我的注释):

(在编辑模式下,先输入这句:)

this_object.set_height(1.80);

( ^)

( |)

(用<tab>啊,空格啊移到箭头所示处,即h处,然后按Ctrl-F)

(自动补全成:)

this_object.set_

(于是你可以继续输入"weight(100);" 了)

不知大家明白没有,不明白的先试试:)

4. 我想注释一堆 C++ 代码

当然,这有许多种我不知道的方法,我的通用方法为,先在配置文件里添加:

vnoremap . :normal .<CR>

呵,一句就够了,示例如下:

假设你有如下几行代码需要注释:

this_object.set_height(1.60);

this_object.set_weight(100);

this_object.run();

你先移到第一行,输入 I//<ESC> (<ESC>就是ESC键),将第一行注释。

然后移到第二行,按 V 进行 line visual mode,按 j 或其它方向移动键选好要注释的所有代码行,

最后按: .

是不是很神奇?

呵,说白了,这只是在 visual mode 里使用 redo 的功能而已,有点跑题了。

当然,殊途是同归的,只是路的长远而已。

这是条通用的路,可以用在很多地方。

回到主题,谁有更直接的办法注释一堆 C++ 代码?一堆 C 代码呢(用/* */ 风格) ?

5. vi 的自动完成有什么新奇的东东?

不就是根据 buffer 的内容来自动完成吗?

有些插件是可以动态地读取头文件或模块来提供自动完成的,例如 python 的 pydict。(此列表待补全:)

我想介绍的是 vi 基于字典的自动完成:

1. 增加基于字典的自动完成

set complete+=k "add dictionary complete

2. 设定字典文件,字典文件其实是个文件文件,每个单词占一行

(以下字典文件可能并不存在)

set dictionary=/usr/share/dict/words "set dictionary

3. 呵,因此我是不用什么英文字典来自动完成的,很少写英文文章,使用字典后反应很慢。

我用基于字典完成的原因是,使用编辑语言的关键字自动完成,见:

" complete from filetype syntax file

autocmd Syntax * execute "setlocal dictionary=".$VIMRUNTIME."/syntax/".getbufvar("%","current_syntax").".vim"

对应的语言语法文件必须存在才可使用,于是写新的 C 文件时,可以直接 inc<Ctrl>-N, cont<Ctrl>-N

(请大家不吝赐教,to be continued)

编辑者: zslevin (10/16/04 10:53)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有