邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

vim常用操作笔记

普通模式下
w 跳转到下个符号或者单词 b 跳转到上个符号或者单词,对应的大写的WB,跳转的尺度会更大些,比如 I'm 小写会默认是三个,大写会默认为一个

x 删除当前字母
dw 删除下个符号或者单词 db 删除上个符号或者单词
dt+字母  df+字母 删除到某个字母


复制
ctrl+v,然后用鼠标选择要复制的,然后 y,然后p进行粘贴


替换
:s/java/php  替换当前行第一个java为php
:s/java/php/g  替换当前行所有的java为php


:1,$s/java/php 替换第一行开始到最后一行的第一个java为php
:1,$s/java/php/g 替换第一行开始到最后一行的所有 java为php

:%s/java/php 替换每一行的第一个java为php
:%s/java/php/g 替换每一行的所有 java为php



vim = vi + IMproved 
多级撤销
语法加亮和自动补全
支持多种插件
通过网络协议(HTTP/SSH)编辑文件
多文件编辑
Vim可以编辑压缩格式文件(GZIP、ZIP等)

光标移动
h 左移
l   右移
j   下移
k   上移 
^/0  移动到行首/包含缩进空格
$ 移动到行尾


单词和字符传移动
w/W 正向移动到下一个单词开头
b/B 反向移动
e/E 正向移动下一个单词结尾
ge 反向移动词尾

跳转
ctrl+f/F 下一页
ctrl+b/B 上一页
ctrl+d/u  向上或者向上翻半页
gg 跳转到文件首行
<line_number>gg/G  跳转到指定行
G 跳转到文件最后一行
g+ctrl+g/G 查看文件信息/{g}更加详细

缩进 >右  <左
>> 或者 :>  右缩进
m,n> 或者 :m>(n-m+1) m到n行缩进   :3,5> 第3行到5行进行右缩进
m>n 等价于命令 :m,m+n-1>  m行开始共n行缩进一次   :3>3 第3行起包括第3行后3行进行右缩进


删除复制和粘贴

寄存器
类型 含义 表达方式 举例 特点
无名寄存器 默认寄存器 "" "" p=p 会被最后一条覆盖
数字寄存器 "+{0-9}缓存最近10次操作 "0  "{1-9} "0p "1p 0用于复制专用1-9 用于最近9次行删除或者修改记录

有名寄存器 26英文字母命名有名寄存器 "[a-z]/[A-Z] "ayw "A会通过^J追加到" a寄存器中
黑洞寄存器 有去无回 "_ "_dw 只想删除而不想覆盖 无名寄存器


按键操作
d = delete = cut 剪贴
y = yank 约等于 copy 类似于复制
p/P = put 约等于 paste 粘贴到光标后/光标前
u=undo 撤销之前操作
ctrl+r = redo 重做/恢复之前操作

yw 复制当前光标单词
y2w 复制正向两个单词
p/P = put 约等于 paste 粘贴到光标后/光标前
yy类似于dd 复制当前光标整行


组合删除
x/X 删除光标下/前单个字符
dw  删除一个单词,光标必须在词首
d{hjkl} 删除到上下左右一个操作前的字符
d$=D 删除光标到行尾的字符
d^ 删除光标到行首的字符 

dd 删除当前整行
{n}dd  向下删除n行,包括当前行
5dw 删除正向单词五次
3w 正向移动单词三次
D3w 正向删除3w动作
2d3w 正向删除3w动作两次



插入
shift + i/a 插入模式并移动到行首/尾
a/i 光标后/前插入
[n]O/o 行前/后插入n次
[n]+i 插入模式重复n次    // 按键 3i,输入hello,world! ,然后ESC ,会再多出四个此字符串

转换
~  单词字符大小写转换
g~w 单词大小写转换
g~$ 或者 g~~ 整行大小写转换  ,前者需要光标在行首
gU/uw 单词转换成大/小写

查找
F/f{char} 反向/正向查找单个字符
t{char}  查找字符前一个字符
dt{char}/df{space} 删除光标到查找字符间字符
/{char}  命令行查找 ,n向下查找 N向上查找


替换
s/going/rolling/g  当前行所有going替换成rolling
%s/going/rolling/g   %匹配所有范围

shift+r/R 替换模式
r  单个字符替换
cw 修改单个单词
c$/C 类似于d操作 修改光标之后行内容



缓冲区与多文件编辑

缓冲区
缓冲区列表
:files 
:buffers
:ls

缓冲区列表指示状态
标记 含义
a 激活缓冲区,缓冲区被加载且显示
h 隐藏缓冲区,缓冲区被加载但不显示
% 当前缓冲区
# 交换缓冲区
= 只读缓冲区
+ 已经更改缓冲区
- 不可改缓冲区,'modfiable'选项不置位
 
vim *.php 
缓冲区列表操作
:bp 上一个缓冲区
:bn 下一个缓冲区
:bf 到第一个缓冲区
:bl 到最后一个缓冲区
:buffer Number/File_name 指定缓冲区
:ball 编辑所有缓冲区
Ctrl+^/b# 切换到前一个buffer(交换buffer)
:qall! 退出全部缓冲区
:wall! 写入全部缓冲区
:badd 添加一个缓冲区,但不设置为当前缓冲区
:bd 删除缓冲区
:n,m/%bd 删除n到m编号/所有的缓冲区文件
:bufdo{CMD} bufdo set number
:E /:bd 打开文件目录列表/返回到最初的buffer
 
 
多窗口操作(分屏)与标签分组
分屏操作
指令 含义
vim -O/on 水平/垂直分屏 n:数字,分屏的数量,o:open
ctrl+w+c/q 关闭当前窗口/最后一个窗口时退
ctrl+w s 上下分割当前打开的文件
:sp filename 上下分隔,并同时打开一个新的文件
ctrl+w v 左右分隔当前打开的文件
:vsp filename 左右分隔,并打开一个新的文件


移动分屏和尺寸移动
指令 含义
ctrl+w K 向上移动
ctrl+w J 向下移动
ctrl+w L 向右移动
ctrl+w H 向左移动
ctrl+w + 增加高度
ctrl+w - 减少高度
ctrl+w = 让所有屏的高度一致
 


宏操作案例一
文件内容显示如下
1
2


100

需要以下操作

进入普通模式
在第一行写入1
按qa + yyp + (ctrl+a) 
按q退出
按98@a,则会出现1-100的数字   


宏保存
viminfo /vimrc file
保存历史和非空寄存器
vim启动时读取
容易被覆盖



可视化模式
三种子模式
v 激活面向字符的可视模式
V/shift+v 激活面向行的可视模式
ctrl+v 激活面向列块的可视模式

gv 重选上次的高亮选区
o 切换选取

vim取消之前搜索的文字高亮

vim取消之前搜索的文字高亮

:noh

顺便记录下取消行号:set nonu


vim复制剪贴粘贴命令(转)

1. 选定文本块。使用v进入可视模式,移动光标键选定内容。 
2.复制的命令是y,即yank(提起) ,常用的命令如下: 
    y      在使用v模式选定了某一块的时候,复制选定块到缓冲区用; 
    yy    复制整行(nyy或者yny ,复制n行,n为数字); 
    y^   复制当前到行头的内容; 
    y$    复制当前到行尾的内容; 
    yw   复制一个word (nyw或者ynw,复制n个word,n为数字); 
    yG    复制至档尾(nyG或者ynG,复制到第n行,例如1yG或者y1G,复制到档尾)  
    
3. 剪切的命令是d,即delete,d与y命令基本类似,所以两个命令用法一样,包括含有数字的用法.  
    d      剪切选定块到缓冲区; 
    dd    剪切整行 
    d^    剪切至行首 
    d$     剪切至行尾 
    dw    剪切一个word 
    dG     剪切至档尾  
    
4. 粘贴的命令式p,即put(放下) 
    p      小写p代表贴至游标后(下),因为游标是在具体字符的位置上,所以实际是在该字符的后面 
    P      大写P代表贴至游标前(上) 
    整行的复制粘贴在游标的上(下)一行,非整行的复制则是粘贴在游标的前(后)

注: 
     在正则表达式中,^表示匹配字符串的开始位置,$表示匹配字符串的结束位置。 
     命令前面加数字表示重复的次数,加字母表示使用的缓冲区名称。使用英文句号"."可以重复上一个命令。 
     在复制粘贴时,另一组常用的命令是u(撤销操作),U(撤销某一行最近所有修改),Ctrl+R(重做),这些功能主要是vim中的,vi中略有差别

vim多文件和多窗口的使用
1、在同一窗口中打开多个文件:

vi a.php b.php

:n  切换到下一个文件 (n=next)
:N  切换到上一个文件

2、在不同窗口中打开多个文件:
如果已经打开一个了一个文件,

则在vi的命令输入状态下输入 :sp 另外一个文件的路径及文件名,
如此就可以在一个窗口打开多个文件了。

或者用 vi -o a.php b.php....用分割屏幕窗口方式同时打开多个文件。
可以使用 ctrl + 两次按 w 或者ctrl + w 然后按上下键在上下窗口间切换。


vim常用命令

插入:

i: 大家都知道 A: 在行末添加新文本 I: 在行首添加新文本

移动光标:

h: 向左移动一个字符 j: 移动到下一行 k: 移动到上一行l: 向右移动一个字符 $: 移动到行尾

0: 移动到行首H: 移动到屏幕顶端M: 移动到屏幕中间 L: 移动到屏幕底端

定位:

:set nu -> 显示行号 :set nonu -> 取消行号

显示 :

gg -> 到第一行 :G -> 到最后一行 :num -> 到指定第num行

删除:

:x -> 删除当前字符(类似win下的delete键)nx: 删除从当前光标开始n个字符 dd: 删除所在行

dG: 删除从光标所在行到最后一行的内容(慎用!)D: 删除光标所处位置到行尾内容

:n1,n2d -> 删除第1行到第2行的内容

复制和剪切

yy / Y: 复制某行内容 nyy / nY: 复制当前某行往下n行的内容 dd: 剪切当前行

ndd: 剪切当前行开始往下n行 p: 粘贴数据到当前行

搜索:

:/%s -> 搜索…… 按n查找下一个 :%s/old/new/g -> 全文指定替换字符 exp: :%s/i/L/g 全文替换

:n1,n2s/old/new/g -> 在n1行到n2行之间进行查找替换 exp: :47,50s/k/K/g





优惠券
广告位-淘宝
最新微语