Chinaunix首页 | 论坛 | 博客
  • 博客访问: 377193
  • 博文数量: 61
  • 博客积分: 2451
  • 博客等级: 上尉
  • 技术积分: 650
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-06 21:24
文章分类

全部博文(61)

文章存档

2012年(1)

2011年(44)

2010年(16)

分类: LINUX

2011-03-19 18:57:36

今天学到的几个vim 命令:
u 与 U 和ctrl+R
u 撤销最近一次的更改
U 撤销这行所用的更改
crtl+R 撤销u 或者 U 

tab 与 ctrl+D: tab 补全命令;ctrl+D 列出所有相关命令
替换:
:s/old/new 替换光标所在行第一次出现old 为new
:s/old/new/g 替换这行全部old为new
:num1,num2s/old/new/g 替换从num1 到 num2 行之间的所有old变成new
:%s/old/new/g :替换全文的old 为 new

:r test 将test文件的内容添加到光标下面
:r !ls  将ls命令的输出添加到光标下面
先用v 模式选择文本 然后:w test 将选中内容保存到test文件中
:!command 用于执行外部命令

set hls = set hlsearch 高亮模式搜索
set ic(ignore case) 忽略大小写
set incsearch
取消
set noic
set nohls

如果你只想在这次搜索中忽略大小写的话,只要在后面加上\c 即可

在:模式下打命令开头字母e 按下ctrl-D 就会显示出所有以e开头的命令
按tab的话会轮流去补全

By creating a ~/.vimrc, you tell Vim that you want to use it in Vim mode. If this file is
not present, Vim runs in Vi-compatibility mode and you lose access to many of the
advanced Vim features. However, you can enable the advanced features from within
Vim at any time with this command: :set nocompatible.

f 与 F 进行移动
fx 与 Fx 分别表示向右找到x和向左找到x
t 和 T 与f F 相似,但是光标停在匹配的字符前面。

上面这些命令都可以用";" 和 "," 进行重复,只是前一个往后匹配,后一个往前匹配。

J 命令 合并两行
在前面加上数字可以同时n行,如:3J 合并包括光标在内的3行。
r 命令前面可以加上数字,所以r命令不局限与替换一个字符
~ 改变大小写,大写变小写,小写变大写

通常”.”命令能够重复删除(d)操作或者那些使文本发生变化的命令操作,但是”.” 只是记录最近一次操作。不可能同时记录删除与插入的难道没有方法了?肯定不是

在你操作之前用q 开始记录

操作完后用q 停止记录

然后就可以用@ 来重复上面的一连串操作。

也可以用n@对下面n行重复上面的一连串操作。


》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

mark 标记

将光标定于要标记的位置。然后打ma 设定标记名为a 这里标记名可以是a-z 26个字母

然后你可以在编辑时按"`a"跳回这个位置,或者通过"'a" 跳到标签所标记的那行的开头。

这个对于删除复制多行文件内容很有用。

你可以在要删除到得那行做个标记 然后从某行开始删除一直到那行 "d'a" 或者复制到那行

"y'a" 


强大的过滤功能 

应用:

如果你想将文件中几行数据进行排序的话

例如:

2 xxxxxxx

1 xxxxxxx

3 xxxxxxx

在vim中排序 :把光标移动到第一行按下!3G (其中!告诉vim你要进行过滤操作,3G告诉vim 从line 1 到 line 3 进行过滤操作)然后就可以输入过滤程序的名字了 这里是sort这个程序

所以整个完整的命令是:!3Gsort 

结果:

1 xxxxxxx

2 xxxxxxx

3 xxxxxxx

看到了吧 O(∩_∩)O~

在终端xterm下时vim 中: set mouse=a 鼠标可以操作光标
关闭 set mouse=
或者将vim配置文件中set mouse=a 注释掉

将命令的输出添加到正在编辑的文件中的两种方法:
1. r !command
2. !!command

-----------------------------------------------
正在编辑时如果想编辑其他文件不用退出该文件执行如下:
:w (保存当前文件的修改)
:vi newfile (打开即将编辑的文件)
vim 就会退出上个文件的编辑打开newfile这个文件进行编辑
如果你上个文件没保存的话 vim 会提示:

E37: 已修改但尚未保存 (可用 ! 强制执行)  

用vi!newfile  (其中!强制diacard changes)

---------------------------------------------------
编辑多个文件
vim test01 test03 test03
:next (切换到下一个文件)
但是如果当前文件没保存的话会提示你
:next!强制切换到下一个文件discard 对当前文件的changes
:wnext 保存当前文件的修改切换到下一个文件
你也可以设置autowrite option 
:set autowrite 后 :next就没有提示了
关掉自动保存功能
:set noautowrite
:Next 或者 :previous 切换到前一个文件
:wNext 或者 :wprevious 同样是保存并切换
查看当前正在编辑那个文件
:args
方括号括起来的就是当前正在编辑的文件。
不管你在编辑那个文件 如果要跳到第一个文件进行编辑的话有两个命令
:rewind 和 :first (recommand 因为比较好记O(∩_∩)O~) 
跳到最后一个文件
:last
当编辑多个文件时还可以通过ctrl+^ 来跳到上个刚刚编辑过的文件进行编辑。

------------------------------------------------------
                  多个窗口
------------------------------------------------------
通过:split 是vim 将窗口一分为二 但这两个窗口编辑的是同一个文件
刚开始cursor 在top window 可以通过ctrl +ww 将光标jump到底下这个窗口,这样的话就可以参照这个文件的另一部分进行编辑文件。
同样可以用ctrl+wj 跳到下一个窗口 ctrl+wk调到上一个窗口
:q 或者 ctrl+wc跳出多窗口
命令:
:split +?file1 test01
这里相当于执行完split test01后在执行:?file1
用split新打开的文件会出现在原来编辑的文件的上方如果在split前面加上数字可以设定新打开的窗口的大小。
可以在两个窗口之间复制文件
:3split test01
这里使test01 的编辑窗口只有三行那么大

可以通过countctrl+w+ 给一个窗口增加count行数 通过countctrl+w-给一个窗口减少count行数。或者使用ctrl+w=使两个窗口的大小尽可能接近。
ctrl+w_使一个窗口增加到最大

-----------------------------------------------------------------
buffer 
-----------------------------------------------------------------
buffer 个人理解为正在编辑的窗口。
如果在split file时 在编辑一个其中文件不想看到另一个文件,或则说暂时用不到另一个文件时。可以将其隐藏起来。通过命令:hide 将其隐藏起来。隐藏不等于将其关闭并退出,要用到的时候还是可以调出的。hide起来后一些与该文件相关的such as : 标签 都不会消失而是保留的。
可以通过命令:buffers 查看。如下:
:buffers
  1 %a + "test01"                       第 6 行
  2 #h   "test02"                       第 4 行
其中第一列是buffer number 第二列 % 表示current buffer 就是你现在在编辑的 # 表示 alternative buffer (个人理解为待选择的) a 表示active  
+ 表示已经被修改过 但是没有保存
最后一列 表示 你的光标停留在哪一行。
h 表示hide

那怎么将已经hide的buffer重新召唤出来呢
通过command 
:buffer (buffer number) 或者 :buffer filename (如果你知道文件名的话)

可以通过命令
:bnext  调出下一个buffer 
:bNext  调出上一个buffer
:sbnext 相当于:split 和 :bnext
:sbNext 同上
:sbuffer buffer number 调出指定的buffer 并 split
split 有 (rewind first last )等命令 buffer 也有
只是在前面加上b 表示buffer
命令前都可以加上count  表示次数

---------------------------------------------------------------
  visual mode
===============================================================
三种visual模式:v ctrl+v shilft+v 分别针对字符,块,行
在v 模式下 选中字符 按d 删除选中的字符 按D删除选中字符所在的行
按J合并选中的行并在每行前加空格(除第一行以外)
如果不想要空格的话 按gJ合并选中的行
缩进选中文字的方法:
先选中 后用> 缩进one "shift width"
这里shift width 具体是多少个空格是可以设定的
通过选项set shiftwidth 选项来设定。
而< 是往反方向进行

这里K命令挺给力的
你在visual模式时选中命令时 可以通过按K 跳出这个命令的说明文档 相当于man command 
给力啊O(∩_∩)O~

***同时为多行插入相同的字符***
比如我要把下面几行同时注释掉:
  1. sub printstar($$) {
  2.         printf("%-20s|%-10s\n",$_[0],"*" x $_[1]);
  3. }
  4. for (sort {$hotel{$b} <=> $hotel{$a}} keys %hotel){
  5.         printstar($_,$hotel{$_});
  6. }
先按ctrl+vjjjjjj 将第一列的字符都选上 然后按I#在按esc退出插入模式
  1. #sub printstar($$) {
  2. # printf("%-20s|%-10s\n",$_[0],"*" x $_[1]);
  3. #}
  4. #for (sort {$hotel{$b} <=> $hotel{$a}} keys %hotel){
  5. # printstar($_,$hotel{$_});
哈哈 就ok了
但是如果在选择时有几行由于比较短 而为被选中的话将不会操作这几行。

ctrl+v 然后按c 删掉块选中的文字并进入插入模式同时对选中的行进行编辑 按esc后 后面的后就会和第一行有相同的插入
如果按C的话就会删除的end of line 然后进行插入。
呼呼。。。。
=============================================================

阅读(7353) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~