找回密码
 注册创意安天

VIM一些常用的技巧 zz

[复制链接]
发表于 2009-7-28 15:33 | 显示全部楼层 |阅读模式
swordlea

版主

发贴: 652
积分: 0
来自: 论坛神游夜
注册日期: 2006-05-16
  发表时间: 2006-09-16 00:00:28  

--------------------------------------------------------------------------------
VIM一些常用的技巧

***************************************************************************
1、在visual模式下选中几行,然后输入 2> ,则选中的行会全部缩进两个tab;
***************************************************************************
2.文件浏览
:Ex : 开启目录浏览器,注意首字母E是大写的
:Sex : 在一个分割的窗口中开启目录浏览器
:ls : 显示当前buffer的情况
:cd .. : 进入父目录
:args : 显示目前打开的文件
:lcd %:h : 更改到当前文件所在的目录译释; ◎◎
lcd是紧紧改变当前窗口的工作路径,
% 是代表当前文件的文件名,
加上 扩展成全名(就是带了路径),
加上 :h析取出路径
***************************************************************************
3、大小写转换
guu : 行小写
gUU : 行大写
g~~ : 行翻转(当然指大小写啦)
译释 : g 是大小写转换命令(greate),u/U/~是三种转换形式(小写/大写/翻转),
# 最后一个重复则表示该转换是对于一行而言的
***************************************************************************
4、 标记和移动
'. : 跳到最后修改的那一行 ◎◎◎
`. : 不仅跳到最后修改的那一行,还要定位到修改点
: 依次沿着你的跳转记录向回跳 (从最近的一次开始)
: 依次沿着你的跳转记录向前跳
:ju(mps) : 列出你跳转的足迹
***************************************************************************
5. 交换
xp : 交换两个字符位置
ddp : 上下两行调换
J : 上下两行合并
dG : 删除到文尾 (行)
d$ : 从当前位置删除到行尾
y$ : 从当前位置复制到行尾,如果要粘贴到其他地方 p 就可以了
nyy : 在命令状态下,表示拷贝从光标行起的下n行内容,
p表示paste,可刚复制的内容粘贴在光标处的下面
***************************************************************************
5. 替换
J : 将两行结合成一行
U : 撤销行操作
r : 单个字符替换用,
R : 覆盖多个字符用,
s : 用多个字符替换一个字符用,
S : 整行替换用,
:%s/old_word/new_word/g ◎◎◎
在整个文件中替换特定字符串

:s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
:s/\/bb/g 将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词
:%s/aa/bb/g 将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/^/#/ 将从12行到23行的行首加入 # 字符
:%s= *$== 将所有行尾多余的空格删除
:g/^\s*$/d 将所有不包含字符(空格也不包含)的空行删除.

c+v+tab: 输入特殊字符,或者 \t (制表符)
***************************************************************************
6. 寄存器使用
将光标移到第n行,按下 mk
将光标移到第m行,按下 "ay'k
即将第n到m的行存到a寄存器,以此类推,b,c........寄存器等
这样就可以将你常用的需要复用的内容粘贴到不同的寄存器中以备用
想粘贴到某处,直接将光标移到某地,按下 'ap 即可,以此类推,b,c........寄存器等
X/Windows 的剪贴板的内容是存在寄存器+中,"+P

***************************************************************************
7. 80i=^ESC 80a=^ESC 一次可以输入80个字符 =
***************************************************************************
8. :%s= *$== : 删除行尾空白
***************************************************************************
9. :s/__date__/=strftime("%c"/ : 插入时间串
***************************************************************************
10.
zt : 把当前光标处设置为顶部
zz : 把当前光标处设置为中部
zb : 把当前光标处设置为底部
***************************************************************************
11.
x: dl (删除当前光标下的字母)
X: dh (删除光标左边的字母)
D: d$ (删除到行尾)
C: c$ (修改到行尾)
s: cl (修改一个字符)
S: c$ (修改一整行)
r: 删除一个字符并且插入一个换行符
.: 重复上一次修改(真正重复的是命令)
yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
y2fa 表示拷贝从当前光标到光标后面的第二个a字符之间的内容.
dfa 表示删除从当前光标到光标后面的第一个a字符之间的内容.
'. 它移动光标到上一次的修改行.
`. 它移动光标到上一次的修改点.
****************************************************************************
12 注释
在vimc文件中设置
vnoremap . :normal .
示例如下:
假设你有如下几行代码需要注释:
this_object.set_height(1.60);
this_object.set_weight(100);
this_object.run();
你先移到第一行,输入 I// (就是ESC键),将第一行注释。 (;注释汇编)
然后移到第二行,按 V 进行 line visual mode,按 j
其它方向移动键选好要注释的所有代码行,
最后按 .
*****************************************************************************
13 寄存器
". 存放上次插入的文本
有什么用?呵,例如,你输入了一段文本,在另一个地方也
要有相同的内容,你输完后,一般要选择并复制一下吧?
而用这个,直接移到需要插入的地方,i. 即可。
"% 是当前编辑文件全名
呵,vim 中,% 就是代表当前编辑文件名的变量,好记吧?
不过,一般直接用 % 就行,例如":!cat %",vim 会自动
扩展。
Last search pattern register "/
上次搜索的内容。例如,我要搜索一个单词 linuxforum,但我
比较懒,先输入 /linux,发现出现很多个 linux,多次按 n 无果,
难道要重新输入 /linuxforum ? 不用,只需要 //forum 即可。
呵,聪明的你一定想到了,用命令行历史也可以调来,按 ctrl-p 或 ctrl-n
即可上下翻阅。这样也可以嘛,也比较快捷,但要查找 forumlinux 呢?
用 ctrl-r 的话只需 /forum/ 。

******************************************************************************
14 _vimrc / .vimrc 的設定:
set nu/set number :显示行号
set hls ;设置 hlsearch 查找高亮
set ic ;ignore case 查找不区分大小写
set incsearch ;输入的时候即开始查找并跳跃
syntax on ;语法高亮
set gfn=Courier_New:h14 ;這就是代表用 Courier_New 這個字型,
且字型大小是 14 (h 表示字的高度)。
abbr hw homework ;简写
cabbr hw homework ;只針對命令列輸入指令才要作簡寫取代.
iabbr hw homework ;只在編輯模式(插入狀態)生效
:una hw :取消這些簡寫,:cuna 和 una
:set :看到目前的設定狀況
:set all :細部所有的設定
<---- 以上言论仅代表本人立场 ---->



__________________
- Is life always this hard,or it just when you're a kid?
- Always like this.  
   

不累的王

普通会员

发贴: 339
积分: 0
来自:
注册日期: 2006-05-26
  发表时间: 2006-09-22 16:00:33  

--------------------------------------------------------------------------------

俺也收集了一些实用的~~~

//扔掉 UE !!
:%!xxd 16进制显示方式

//编辑命令历史
:CTRL_f

z_CR
z._CR
z-_CR

CTRL_L 重新绘制屏幕
% 寻找相匹配的括号
:r !command 外部命令结果插入当前位置
K 在Man中查寻当前位置
V 加亮整行
CTRL_e 上移一行
CTRL_y 下移一行

///////////////////////
// Session
///////////////////////
:mks[ession][!] [file] 记录
vim -S Session.vim 读取

///////////////////////
// 多窗
///////////////////////
CTRL_w,n 开新窗
CTRL_w,c 关闭当前窗口
CTRL_w,s 上下分屏
CTRL_w,v 左右分屏
CTRL_w,[hjkl] 窗口间移动
CTRL_w,[-+<>] 改变窗口大小
CTRL_w,_ 当前窗口的高度最大化
CTRL_w,[HJKL] 改变窗口位置
:ls 列出所有打开的文件

///////////////////////
// 复制
///////////////////////
"xY x是英文字母,Y为复制动作
"xP 同上,P为粘贴动作

5"ayy 複製五行內容至 a 緩衝區。
5"Ayy 再複製五行附在 a 內容之後,現在 a 中有十行內容了!

:reg<TAB> 列出所有缓冲区内容

///////////////////////
// 查找
///////////////////////
/
?
* 查找光标所在单词
#
g* 同 * ,但部份符合即可。
g# 同 # ,但部份符合即可。

///////////////////////
// 行内查找
///////////////////////
在本行内,查找某个字符。
(注意,不是查找字符串!)
f
F
t
T
, 下一个匹配结果
; 同上

///////////////////////
// 书签
///////////////////////
mx x 代表 26 個小寫英文字母。
`x 回到書籤原設定位置。
` (Tab 鍵上面那一個)。
'x 回到書籤設定行行首。
' (Enter 鍵隔壁那一個)。

vim 對於書籤的擴充功能
小写字母 只作用於單一檔案內。
大写字母 可作用於編輯中之各檔案間。
數目字 可作用於前次編輯的十個檔案。

:marks 得知目前所有書籤的列表。
<---- 以上言论仅代表本人立场 ---->



__________________


  “……机器人罗诺,现在我要对你下达最新指令了。”
  “是,主人。我都等了三万年了呢。”
  “你还记得回地球的航路吧?”



   

swordlea

版主

发贴: 652
积分: 0
来自: 论坛神游夜
注册日期: 2006-05-16
  发表时间: 2006-09-23 16:37:48  

--------------------------------------------------------------------------------
G
A
不错!
:wq
<---- 以上言论仅代表本人立场 ---->



__________________
- Is life always this hard,or it just when you're a kid?
- Always like this.  
   

swordlea

版主

发贴: 652
积分: 0
来自: 论坛神游夜
注册日期: 2006-05-16
  发表时间: 2006-09-23 17:50:41  

--------------------------------------------------------------------------------
再补充一个有用的:
///////////////////////
// 键盘宏
///////////////////////
qX: 定义宏,X为字母或数字,同时开始键盘记录,再次按q停止记录
@X:播放宏
N@@:重复播放宏,N为数字,指定播放次数,如没有N,只播放一次。

<---- 以上言论仅代表本人立场 ---->



__________________
- Is life always this hard,or it just when you're a kid?
- Always like this.  
   

不累的王

普通会员

发贴: 339
积分: 0
来自:
注册日期: 2006-05-26
  发表时间: 2006-09-23 18:46:46  

--------------------------------------------------------------------------------

其实 Vi 是很流行的

大家接电话之前都要先说声 "Vi, 您好..."




<---- 以上言论仅代表本人立场 ---->



__________________


  “……机器人罗诺,现在我要对你下达最新指令了。”
  “是,主人。我都等了三万年了呢。”
  “你还记得回地球的航路吧?”



   

esoul
普通会员

发贴: 64
积分: 0
来自:
注册日期: 2006-05-24
  发表时间: 2006-10-15 00:33:59  

--------------------------------------------------------------------------------
很好,谢谢!
我只会最基本的命令
<---- 以上言论仅代表本人立场 ---->


   

不累的王

普通会员

发贴: 339
积分: 0
来自:
注册日期: 2006-05-26
  发表时间: 2006-12-07 13:06:47  

--------------------------------------------------------------------------------
///////////////////////
// 折叠
///////////////////////

有很多方法可以生成代码折叠
我通常使用的如下:

首先 shift + v 加亮 n 行代码

然后
zf 生成折叠
zo 打开折叠
zc 关闭以打开的折叠

代码折叠不会保存,每次重新打开文件就消失了
可以这样
:mk view 保存代码折叠
再次打开时
:load view 加载以前的代码折叠

以上,我们发现了 Vim 中具备的'现代编辑器特性'...
<---- 以上言论仅代表本人立场 ---->



__________________


  “……机器人罗诺,现在我要对你下达最新指令了。”
  “是,主人。我都等了三万年了呢。”
  “你还记得回地球的航路吧?”



   

不累的王

普通会员

发贴: 339
积分: 0
来自:
注册日期: 2006-05-26
  发表时间: 2006-12-13 11:26:03  

--------------------------------------------------------------------------------
///////////////////////
// Tab 长度
///////////////////////
第一行设置tab键为4个空格,第二行设置当行之间交错时使用4个空格

set tabstop=4
set shiftwidth=4

这样用Vim缩进时就不用按4下空格了  
<---- 以上言论仅代表本人立场 ---->



__________________


  “……机器人罗诺,现在我要对你下达最新指令了。”
  “是,主人。我都等了三万年了呢。”
  “你还记得回地球的航路吧?”



   

andy

普通会员

发贴: 104
积分: 0
来自:
注册日期: 2006-05-17
  发表时间: 2006-12-13 17:53:44  

--------------------------------------------------------------------------------
还有就是用VI时不要忘了按Ctrl+S呀!
<---- 以上言论仅代表本人立场 ---->


   

Donald Knuth
普通会员

发贴: 9
积分: 0
来自:
注册日期: 2007-01-27
  发表时间: 2007-01-27 17:45:40  

--------------------------------------------------------------------------------

UE最后的防线已然崩溃...
现在俺可以说UE能做的VIM没有不能做的了...

矩形块选择:

<C_V> {motion}
<---- 以上言论仅代表本人立场 ---->


   

Donald Knuth
普通会员

发贴: 9
积分: 0
来自:
注册日期: 2007-01-27
  发表时间: 2007-01-27 17:46:59  

--------------------------------------------------------------------------------


列选择模式

请自己动一下脑筋~~


<---- 以上言论仅代表本人立场 ---->


   

Donald Knuth
普通会员

发贴: 9
积分: 0
来自:
注册日期: 2007-01-27
  发表时间: 2007-01-27 17:52:28  

--------------------------------------------------------------------------------
如果在 Windows 下使用,请先编辑配置文件,将 Ctrl_v 设置注释掉...
<---- 以上言论仅代表本人立场 ---->


   

高德纳
普通会员

发贴: 13
积分: 0
来自:
注册日期: 2007-01-29
  发表时间: 2007-01-29 00:08:07  

--------------------------------------------------------------------------------


Donald Knuth 提到:
如果在 Windows 下使用,请先编辑配置文件,将 Ctrl_v 设置注释掉...


上帝呀,我坚信楼上的是vim铁杆粉丝,粉丝中的粉丝,铁杆中的铁杆——原来杆中杆指的就是楼上的丫。
<---- 以上言论仅代表本人立场 ---->



__________________
世界秃顶级计算机科学家  
   

Donald Knuth
普通会员

发贴: 9
积分: 0
来自:
注册日期: 2007-01-27
  发表时间: 2007-04-04 16:07:10  

--------------------------------------------------------------------------------
当然了,因为VIM是完美的么

vi引证
最后,这里有关vi的认证:vi是完美的
论证:VI在罗马数字中是六,小于六的自然数可以整除6的是1,2,3, 6=1X2X3; 而6有可以表示为6=1+2+3,可见VI是个完美的数字,从而VI也是完美的。

对于vim
罗马数字中VIM可能表示为(1000-(5+1))=994,而刚好等于2×496+2,而496刚好可以被1,2,4,8,16,31,62,124,248等整除,而且1+2+4+8+16+31+62+124+248=496
因此496是个更完美的数字,可见vim比vi更加完美了。





此贴由Donald Knuth在 2007-04-04 16:07 编辑过。
<---- 以上言论仅代表本人立场 ---->
您需要登录后才可以回帖 登录 | 注册创意安天

本版积分规则

Archiver|手机版|小黑屋|创意安天 ( 京ICP备09068574,ICP证100468号。 )

GMT+8, 2024-12-23 03:35

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表