VIM collection

来源:互联网 发布:小米电动牙刷 知乎 编辑:程序博客网 时间:2024/06/18 04:33

四、VIM常用命令

查找

按下 / 键,输入想要查询的内容,回车即可;

快捷键: n:跳到下一个匹配的内容; N:跳到上一个匹配的内容

全局查找

1
2
3
4
5
6
7
8
9
:vimgrep 搜索文本 搜索路径/**
:cn[ext]      跳到下一个匹配文本
:cp[revious]  跳到上一个匹配文本
:cnf[ile]     跳到下一个文件
:cpf[ile]     跳到上一个文件
:cr[ewind]    跳到开始位置
:cla[st]      跳到结束位置
:col[der]     iterate through historical quickfix lists
:cnew[er]     iterate through historical quickfix lists


替換(substitute)

:[range]s/pattern/string/[c,e,g,i]

range指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章,也可以 % 代表。還記得嗎? % 是目前編輯的文章,# 是前一次編輯的文章。pattern就是要被替換掉的字串,可以用 regexp 來表示。string將 pattern 由 string 所取代。cconfirm,每次替換前會詢問。e不顯示 error。gglobe,不詢問,整行替換。iignore 不分大小寫。

g 大概都是要加的,否則只會替換每一行的第一個符合字串。可以合起來用,如 cgi,表示不分大小寫,整行替換,替換前要詢問是否替換。 

删除文本中的^M

问题描述:对于换行,window下用回车换行(0A0D)来表示,Linux下是回车(0A)来表示。这样,将window上的文件拷到Unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。

· 使用命令:cat filename1 | tr -d “^V^M” > newfile;

· 使用命令:sed -e “s/^V^M//” filename > outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。

· 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:

:%s/^M$//g # 去掉行尾的^M。

:%s/^M//g # 去掉所有的^M。





替换

"s"代表替换,part1代表查找的内容,part2代表替换的内容,"%"代表所有行,"g"代表替换整行里所有的内容(如果不加"/g"则只替换每行第一个匹配part1的地方)。如:

1
2
3
4
5
6
7
8
:s/part1/part2         # 用part2替换当前行中第1个part1
:s/part1 /part2/g      # 用part2替换当前行中所有的part1
:%s/part1/part2        # 用part2替换所有行中每行第1个part1
:%s/part1/part2/g      # 用part2替换所有行中所有的part1
:2,50s/part1 /part2    # 用part2替换第2行到第50行中每行第1个part1
:2,50s/part1/part2/g   # 用part2替换第2行到第50行中所有的part1
:.,+3s/part1/part2  # 用part2替换当前行以及当前行后面的三行中每行第1个part1
:.,+3s/part1/part2/g   # 用part2替换当前行以及当前行后面的三行中所有的part1



删除包含string的所有行

:g/string/d


复制/粘贴

在VIM中y表示拷贝, d表示删除, p表示粘贴。其中拷贝与删除是与光标移动命令。

1
2
3
4
5
6
7
8
9
10
11
yw     表示拷贝从当前光标到光标所在单词结尾的内容.
dw     表示删除/剪切从当前光标到光标所在单词结尾的内容.
y0     表示拷贝从当前光标到光标所在行首的内容.
d0     表示删除/剪切从当前光标到光标所在行首的内容.
y$     表示拷贝从当前光标到光标所在行尾的内容.
d$     表示删除/剪切从当前光标到光标所在行尾的内容.
yfa    表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
dfa    表示删除/剪切从当前光标到光标后面的第一个a字符之间的内容.
yy     表示拷贝光标所在行.
dd     表示删除/剪切光标所在行.
D      表示删除/剪切从当前光标到光标所在行尾的内容.

Undo

快捷键:u

Redo

快捷键:Ctrl + R

缩进

在不同的模式中调整缩进的方法不同,如下:

插入模式:Ctrl+T增加缩进,Ctrl+D减小缩进。

命令模式:>> 右缩进,<< 左缩进,注意n<< 或 n>>是缩进多行,如4>>

可视模式:< 、 > 用于左右缩进, n< 、 n> 可做多节缩进,如 2> 。

多行注释

    1)、Ctrl+V 进入列模式,向下或向上移动光标,把需要注释的行的开头标记起来;然后按大写的I,再插入注释符(比如#);再按Esc,就会全部注释。
    2)、使用替换方式进行多行注释

          :s/^/#              # 用"#"注释当前行
          :2,50s/^ /#         # 在2~50行首添加"#"注释
          :.,+3s/^/#          # 用"#"注释当前行和当前行后面的三行
          :%s/^/#             # 用"#"注释所有行

取消注释多行文本

1. 使用vim打开要操作的文件
2. Ctrl+V,进入VISUAL BLOCK模式
3. 使用上下的方向键移动光标,选择你需要取消注释的行
4. 输入 x,删除所有的 #,同时退出visual block模式

其他多行操作

其实,VISUAL BLOCK模式不止是可以进行注释或取消注释,它是一种通用的多行操作的方法。使用它还可以进行多行的文本替换等等。


    字符映射

    使用方法: <code>:ab 替换符 原始信息</code>

    比如: :ab mail wuxianglong098@gmail.com

    代码跳转

    gd:跳转到局部变量的定义,gD:跳转到全局变量的定义

    代码执行

    如果文件可以单独执行,可以使用快捷键F5直接执行文件

    代码折叠

    全局折叠/展开:zi

    光标在折叠处时:使用 whitespace或者za 展开/折叠当前折叠,zA循环展开/折叠当前代码

    快速移动光标

    在VIM中, 移动光标和编辑是两件事, 正因为区分开来, 所以可以很方便的进行光标定位和编辑。因此能更快一点移动光标是很有用的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
w(e)      移动光标到下一个单词.
b         移动光标到上一个单词.
0         移动光标到本行最开头.
^         移动光标到本行最开头的字符处.
$         移动光标到本行结尾处.
H         移动光标到屏幕的首行.
M         移动光标到屏幕的中间一行.
L         移动光标到屏幕的尾行.
gg        移动光标到文档首行.
G         移动光标到文档尾行.
c-f       (即ctrl 键与f 键一同按下) 本命令即page down.
c-b       (即ctrl 键与b 键一同按下, 后同) 本命令即page up.
''        此命令相当有用, 它移动光标到上一个标记处, 比如用gd, * 等查找到某个单词后, 再输入此命令则回到上次停留的位置.
'.        此命令相当好使, 它移动光标到上一次的修改行.

    OK,基本的操作简单介绍到这里,如果想熟练使用,还得耐心多练练才行。。。。

/////////////////////////=== 光标定===//////////////////////////////////////////////

在 vi 中, 移动光标和编辑是两件事, 正因为区分开来, 所以可以很方便的进行光标定
位和编辑. 因此能更快一点移动光标是很有用的.文中的c-表示ctrl,大小写敏感。光标定位
还需结合搜索。

=== 光标定位 ==


    
    
:k nk:向上移动n 9999kgg可以移到第一行 G移到最后一行

:j nj:向下移动n
    :h nh:向左移动n
    :l nl:向右移动n

    w
:光标以单词向前移动 nw:光标向前移动n个单词光标到单词的第一个字母上
    b
:与w相反
    e:
光标以单词向前移动 ne:光标向前移动n个单词光标到单词的最后一个字母上
    ge:
e相反

$:移动光标到行尾 n$:移动到第n行的行尾
    0
Num):移动光标到行首
    ^:
移动光标到行首第一个非空字符上去

f:移动光标到当前行的字符a上,nf移动光标到当前行的第na字符上
    F:
相反

%:移动到与制匹配的括号上去(),{}[]<>等。

nG:移动到第n行上 G:到最后一行

CTRLG得到当前光标在文件中的位置

向前翻页:CTRL+F
向下移动半屏:CTRLG

向后翻页:CTRL+B

到文件开头 gg

到文件结尾 shift+g

 


    h或^h         向左移一个字符
    j或^j或^n     向下移一行
    k或^p         向上移一行
    l或空格         向右移一个字符
    w             移到下一个字的开头
    W             移到下一个字的开头,忽略标点符号。默认的情况下W认为字符串时已空格分开的。
                    cp /mnt/marvell/main.sh /stv/ 
                    所以上面一行在W的选择下只有三个字符串,即 1 cp 2 /mnt/marvell/main.sh  3 /stv/ 
                    这与w时不一样的。
    e             移到下一个字的结尾
    E             移到下一个字的结尾,忽略标点符号
    b             移到前一个字的开头
    B             移到前一个字的开头,忽略标点符号同W
    |             移到当前行的第一列
    0             移到当前行的第一列字符处,会忽略行前的空白。
    n|             移到当前行的第n列
    ^             移到当前行的第一个非空字符
    $             移到当前行的最后一个字符
    return或+     移到下一行的第一个字符
    -             移到前一行的第一个非空字符
    L             移到屏幕的最后一行

    M             移到屏幕的中间一行

    H             移到屏幕的第一行
    
    G             移到文件的最后一行

    nG             移到文件的第n行



    (             移到句子的开头

    )             移到句子的结尾

    {             移到段落的开头 //我用的时候发现{只是移动到前一个空行 }移动到后一个空行首

    }             移到下一个段落的开头

      /**vim 第一列插入{来定义一个段落 */

    [[             回到段落的开头处

    ]]             向前移到下一个段落的开头处
    
    m(a-z)         用一个字母来标记当前位置,如用mz表示标记z

    '(a-z)         将光标移动到指定的标记,如用'z表示移动到z
  
    ''          此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查(此处时两个单引号不是双引号)
                找到某个单词后, 再输入此命令则回到上次停留的位置.

    '.          此命令相当好使, 它移动光标到上一次的修改行.

    `.          此命令相当强大, 它移动光标到上一次的修改点.

    %            从大括号的开始移动到大括号的结束位置
    
    :            后边加行号就是跳到这一行
    
    <C-O>       光标返回到以前的位置。相当于光标移动的“撤销”

    <C-I>       光标返回到后来的位置。相当于光标移动的“恢复”
    
=== 屏幕定位 ==
    c-e         将屏幕上滚一行
    c-y         将屏幕下滚一行

    c-u         将屏幕上滚半页
    c-d         将屏幕下滚半页

    c-b         将屏幕上滚一页
    c-f         将屏幕下滚一页

    z-return     将当前行置为屏幕的顶行
    nz-return     将当前行下的第n行置为屏幕的顶行

    z.             将当前行置为屏幕的中央
    nz.         将当前行上的第n行置为屏幕的中央
    z-             将当前行置为屏幕的底行
    nz-         将当前行上的第n行置为屏幕的底行


//////////////////////////////////插入快捷键//////////////////////////////////////////

i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行

/////////////////////////////存盘/////////////////////////////

:q! :不存盘退出
:e! :
放弃修改文件内容,重新载入该文件编辑
:wq
:存盘退出

dw:删除一个单词,需将光标移到单词的第一个字母上,按dw,如果光标在单词任意位置,用daw
dnw:
删除n个单词
dne:
也可,只是删除到单词尾
dnl:
向右删除n个字母
dnh:
向左删除n个字母
dnj:
向下删除n
dnk:
向上删除n
d$
:删除当前光标到改行的行尾的字母
dd
:删除一行
cnw[word]:
nword改变为word
cc:
改变整行
C$:
改变到行尾

J: 删除换行符,将光标移到改行,按shift+j删除行尾的换行符,下一行接上来了.
u:
撤销前一次的操作
shif+u(U):
撤销对该行的所有操作。

:set showmode :设置显示工作模式

o:在当前行的下面另起一行
O
shift+o):在当前行的上面另起一行

nknj:光标向上或向下移n行,n为数字
an!
ESC】:在行后面加n个感叹号(!)
nx:
执行nx(删除)操作

ZZ:保存当前文档并退出VIM

:help :查看帮助文档,在这之中,按CTRL+]进入超连接,按CTRLO返回。
:help subject :
看某一主题的帮助,ZZ退出帮助

:set number / set nonumber :显示/不显示行号
:set ruler /set noruler:
显示/不显示标尺

/pattern 正方向搜索一个字符模式
?pattern
反方向搜索一个字符模式
然后按n 继续向下找

把光标放到某个单词上面,然后按×号键,表示查找这个单词
查找整个单词:/\

:set hlsearch 高亮显示查找到的单词
:set nohlsearch
关闭改功能

m[a-z]:在文中做标记,标记号可为a-z26个字母,用`a可以移动到标记a

r:替换当前字符
nr
字符:替换当前n个字符

查找替换:
way1:
/
word :查找某个word
cw
newword:替换为新word
n:
继续查找
.:
执行替换

way2:
:s/string1/string2/g:
在一行中将string1替换为string2,g表示执行c表示需要确认
:num1,num2 s/string1/string2/g:
在行num1num2中间将string1替换为string2
:1,$ s/string1/string2/g:
在全文中将string1替换为string2

v:进入visual模式
ESC】退出
V:shift+v
进入行的visual模式
CTRL+V:
进如块操作模式用oO改变选择的边的大小。

粘贴:p,这是粘贴用xd删除的文本
复制:
ynw
:复制n个单词
yy
:复制一行
ynl:
复制n个字符
y$:
复制当前光标至行尾处
nyy:
拷贝n
完了用p粘贴

:split:分割一个窗口
:split file.c
:为另一个文件file.c分隔窗口
:nsplit file.c:
为另一个文件file.c分隔窗口,并指定其行数
CTRL
W在窗口中切换
:close
:关闭当前窗口

在所有行插入相同的内容如include<,操作方法如下:
将光标移到开始插入的位置,按CTRL+V进入VISUAL模式,选择好模块后
Ishift+i),后插入要插入的文本,按[ESC]完成。

:read file.c 将文件file.c的内容插入到当前光标所在的下面
:0read file.c
将文件file.c的内容插入到当前文件的开始处(0行)
:nread file.c
将文件file.c的内容插入到当前文件的第n行后面
:read !cmd :
将外部命令cmd的输出插如到当前光标所在的下面

:n1,n2 write temp.c 将本文件中的n1,n2行写入temp.c这个文件中去

CTRLL刷新屏幕
shift + <
左移一行
shift + >
右移一行

u: undo
CTRL+R: re-do
J:
合并一行
CTRL+p
自动完成功能
CTRL+g
查看当前文件全路径

 

windows 下设置gVim字体和大小:

会不会别的什么设置文件把 guifont 又改回来了,尝试把 set guifont=Consolas:h11 放到 _vimrc 的最后

0 0
原创粉丝点击