vim 使用技巧

vi vim 使用技巧

本文由网络资源收集整理而成。

说明:
以下的例子中 xxx 表示在命令模式下输入 xxx 并回车
以下的例子中 :xxx 表示在扩展模式下输入 xxx 并回车
小括号中的命令表示相关命令.
在编辑模式或可视模式下输入的命令会另外注明.

1. 查找

/xxx(?xxx)       表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示
                   向上查找.其中xxx可以是正规表达式,关于正规式就不多说了.
                   一般来说是区分大小写的, 要想不区分大小写, 那得先输入
                   :set ignorecase
                   查找到以后, 再输入 n 查找下一个匹配处, 输入 N 反方向查找.

*(#)             当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的
                   下(上)一个单词. 同样, 再输入 n 查找下一个匹配处, 输入 N 反方
                   向查找.

g*(g#)           此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而
                   是匹配包含该单词的所有字符串.

gd               本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的非
                   注释段中第一次出现这个单词的地方.

%                本命令查找与光标所在处相匹配的反括号, 包括 () [] {}

f(F)x            本命令表示在光标所在行进行查找, 查找光标右(左)方第一个x字符.
                   找到后:
                   输入 ; 表示继续往下找
                   输入 , 表示反方向查找

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

w(e)             移动光标到下一个单词.
   b                移动光标到上一个单词.

0                移动光标到本行最开头.
   ^                移动光标到本行最开头的字符处.
   $                移动光标到本行结尾处.

H                移动光标到屏幕的首行.
   M                移动光标到屏幕的中间一行.
   L                移动光标到屏幕的尾行.
   gg               移动光标到文档首行.
   G                移动光标到文档尾行.
   c-f              (即 ctrl 键与 f 键一同按下) 本命令即 page down.
   c-b              (即 ctrl 键与 b 键一同按下, 后同) 本命令即 page up.

‘‘               此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查
                   找到某个单词后, 再输入此命令则回到上次停留的位置.

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

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

3. 拷贝, 删除与粘贴
    在 vi 中 y 表示拷贝, d 表示删除, p 表示粘贴. 其中拷贝与删除是与光标移动命令
结合的, 看几个例子就能够明白了.

yw               表示拷贝从当前光标到光标所在单词结尾的内容.
   dw               表示删除从当前光标到光标所在单词结尾的内容.
   y0               表示拷贝从当前光标到光标所在行首的内容.
   d0               表示删除从当前光标到光标所在行首的内容.
   y$               表示拷贝从当前光标到光标所在行尾的内容.
   d$               表示删除从当前光标到光标所在行尾的内容.
   yfa              表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
dfa              表示删除从当前光标到光标后面的第一个a字符之间的内容.

特殊地:
   yy               表示拷贝光标所在行.
   dd               表示删除光标所在行.
   D                表示删除从当前光标到光标所在行尾的内容.

关于拷贝, 删除和粘贴的复杂用法与寄存器有关, 可以自行查询.

4. 数字与命令
    在 vi 中数字与命令结合往往表示重复进行此命令, 若在扩展模式的开头出现则表示行
号定位. 如:

5fx              表示查找光标后第 5 个 x 字符.

5w(e)            移动光标到下五个单词.

5yy              表示拷贝光标以下 5 行.
   5dd              表示删除光标以下 5 行.

y2fa             表示拷贝从当前光标到光标后面的第二个a字符之间的内容.

:12,24y          表示拷贝第12行到第24行之间的内容.
   :12,y            表示拷贝第12行到光标所在行之间的内容.
   :,24y            表示拷贝光标所在行到第24行之间的内容. 删除类似.

5. 快速输入字符
    在 vi 中, 不要求你输入每一个字符, 可以有很多种方法快速输入一些字符.
    使用 linux/unix 的同学一定有一个经验, 在命令行下输入命令时敲入头几个字符再按
TAB 系统就会自动将剩下的字符补齐, 假如有多个匹配则会打印出来. 这就是著名的命令
补齐(其实windows中也有文件名补齐功能). vi 中有许多的字符串补齐命令, 非常方便.

c-p(c-n)         在编辑模式中, 输入几个字符后再输入此命令则 vi 开始向上(下)搜
                   索开头与其匹配的单词并补齐, 不断输入此命令则循环查找. 此命令
                   会在所有在这个 vim 程序中打开的文件中进行匹配.

c-x-l            在编辑模式中, 此命令快速补齐整行内容, 但是仅在本窗口中出现的
                   文档中进行匹配.

c-x-f            在编辑模式中, 这个命令表示补齐文件名. 如输入:
                   /usr/local/tom 后再输入此命令则它会自动匹配出:
                   /usr/local/tomcat/

abbr             即缩写. 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个
                   字符串. 比如编写java文件的常常输入 System.out.println, 这很
                   是麻烦, 所以应该用缩写来减少敲字. 可以这么做:
                   :abbr sprt System.out.println
                   以后在输入sprt后再输入其他非字母符号, 它就会自动扩展为System.
                   out.println

6. 替换
    替换是 vi 的强项, 因为可以用正规表达式来匹配字符串.以下提供几个例子.

:s/aa/bb/g       将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
   :s/\<aa\>/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        将所有不包含字符(空格也不包含)的空行删除.
     :%s/\r//                    去掉^M

7. 多文件编辑
    在一个 vim 程序中打开很多文件进行编辑是挺方便的.

:sp(:vsp) 文件名     vim 将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.
                       从 vim6.0 开始, 文件名可以是一个目录的名称, 这样, vim 会
                       把该目录打开并显示文件列表, 在文件名上按回车则在本窗口打
                       开该文件, 若输入 O 则在新窗口中打开该文件, 输入 ? 可以看
                       到帮助信息.

:e 文件名            vim 将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存.

c-w-w                vim 分割了好几个窗口怎么办? 输入此命令可以将光标循环定位
                       到各个窗口之中.

:ls                  此命令查看本 vim 程序已经打开了多少个文件, 在屏幕的最下方
                       会显示出如下数据:
                     &
nbsp; 1    %a       "usevim.html"          行 162
                       2    #        "xxxxxx.html"          行 0

其中:
                       1                表示打开的文件序号, 这个序号很有用处.
                       %a               表示文件代号, % 表示当前编辑的文件,
                                       # 表示上次编辑的文件
                       "usevim.html"    表示文件名.
                       行 162           表示光标位置.

:b 序号(代号)        此命令将指定序号(代号)的文件在本窗口打开, 其中的序号(代号)
                       就是用 :ls 命令看到的.

:set diff            此命令用于比较两个文件, 可以用
                       :vsp filename
                       命令打开另一个文件, 然后在每个文件窗口中输入此命令,就能看
                       到效果了.

8. 宏替换
    vi 不仅可以用 abbr 来替换文字, 也可以进行命令的宏定义. 有些命令输起来很费劲,
因此我把它们定义到 <F1>-<F12> 上, 这样就很方便了.这些配置可以预先写到 ~/.vimrc
(windows 下为 $VIM/_vimrc) 中, 写进去的时候不用写前面的冒号.

:nmap <F2> :nohls<cr>               取消被搜索字串的高亮
   :nmap <F9> <C-W>w                   命令模式下转移光标到不同窗口
   :imap <F9> <ESC><F9>                输入模式下运行<F9>
   :nmap <F12> :%s= *$==<cr>           删除所有行尾多余的空格.
   :imap <F12> <ESC><F12>              同上

:java 中: (注, 这里为什么说 java 中, 因为以下定义对其他文件格式不起作用, 下文
             会说到如何实现这一点)
   :nmap <F3> :comp javac<CR>:mak -d . %<CR>
        此命令用 javac 编译 java 文件, 它会自动将光标定位到出错点. 不过这需要定
        义一个 javac.vim 文件在 $VIM/compiler 下, 在 javac.vim 里面只有两行字:
           setlocal makeprg=javac
           setlocal errorformat=%A%f:%l:\ %m,%-Z%p^,%-C%.%#

:nmap <F4> :comp ant<CR>:mak<CR>
        此命令用 ant 编译 java 文件, 它会自动将光标定位到出错点. 一般来说, 安装
        vim 后已经有了compiler/ant.vim文件, 因此这个命令可以直接使用. 但是需要
        在当前目录下有 build.xml 文件, 当然还必须安装 ant 才行.

:nmap <F5> :cl<CR>                  此命令用于查看所有的编译错误.
   :imap <F5> <ESC><F5>

:nmap <F6> :cc<CR>                  此命令用于查看当前的编译错误.
   :imap <F6> <ESC><F6>

:nmap <F7> :cn<CR>                  此命令用于跳到下一个出错位置.
   :imap <F7> <ESC><F7>

:nmap <F8> :cp<CR>                  此命令用于跳到上一个出错位置.
   :imap <F8> <ESC><F8>

:nmap <F11> :JavaBrowser<cr>
        此命令用于在窗口左部分割出一个新窗口, 里面的内容是 java 的资源树, 包括
        本文件中出现的类, 类的成员变量及成员方法, 就好像 JCreator 表现的那样.
        在这个窗口中输入 ? 会看到帮助. 嘿嘿, 很好用, 不过需要 ctags 支持.
   :imap <F11> <ESC><F11>

9. TAB
    TAB 就是制表符, 单独拿出来做一节是因为这个东西确实很有用.

<<                   输入此命令则光标所在行向左移动一个 tab.
    >>       &nbsp;           输入此命令则光标所在行向右移动一个 tab.
    5>>                  输入此命令则光标后 5 行向右移动一个 tab.
    :12,24>              此命令将12行到14行的数据都向右移动一个 tab.
    :12,24>>             此命令将12行到14行的数据都向右移动两个 tab.

那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个.
    有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 没关系, vim 能
    帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.

:set shiftwidth=4    设置自动缩进 4 个空格, 当然要设自动缩进先.
    :set sts=4           即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
    :set tabstop=4       实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
    :set expandtab       在输入 tab 后, vim 用恰当的空格来填充这个 tab.

10. autocmd
     这个命令十分的强大, 可以用这个命令实现对不同的文件格式应用不同的配置; 可以
在新建文件时自动添加上版权声明等等. 这些命令一般定义在 ~/.vimrc 这样的配置文件
里面. 由于他很强大, 所以我不能给出很具体的说明, 只能举几个例子, 详细的请看帮助.

:autocmd!                删除所有之前的自动命令.
   autocmd FileType         java   source ~/.vim/files/java.vim
   autocmd FileType         java   source ~/.vim/files/jcommenter.vim
     以上两条命令让我在打开 java 文件时才应用后面提到的两个配置文件.
   autocmd BufNewFile       *.java   0r ~/.vim/files/skeletons/java.skel
     以上这条命令让我在新建 java 文件时自动加入 java.skel 文件的内容.
   autocmd BufNewFile       *.java   normal gnp
     以上这条命令让我在新建 java 文件时自动运行 gnp 命令, 这个命令进行一些特殊化
     处理, 比如将新 java 文件中的 __date__ 替换成今天的日期什么的.

11. 常用脚本
     在 vim.sf.net 你可以发现很多脚本(script), 这些脚本常常有让你意想不到的作用.
我常用的有:

jcommenter.vim         自动加入 javadoc 风格的注释.
     JBrowser.vim           类资源浏览. C, C++ 等可以用 Tlist

还有许多有用的, 比如 checkstyle.vim 可以检验你的编程风格, jad.vim 可以直接
     反编译 .class 文件等等.

12. 常用配置
     在~/.vimrc 配置文件中你常常需要一些个性化配置. 比如上面写的一些宏定义, 一些
autocmd 定义等等. 比如:

set suffixes=.bak,~,.o,.h,.info,.swp,.aux,.bbl,.blg,.dvi,.lof,.log,.lot,.ps,.toc
         这样在vim中打开文件时, 按 tab 键补齐文件名时它会忽略上述文件.

set nu           显示行号
     set ai           设置自动缩进
     map Y y$         让 Y 和 D 一样, 要不然 Y 的本意和 yy 一样.

13. 其他
     还有许多有意思的命令, 记录在这里免得忘记.

.                                                重复上次编辑命令.
     :g/^/exec "s/^/".strpart(line(".")." ", 0, 4)    在行首插入行号
     :runtime! syntax/2html.vim                       转换 txt 成 html, 会按照你的颜色配置来转

删除操作

:%s/r//g 删除DOS方式的回车^M
:%s= *$== 删除行尾空白

:%s/^(.*)n1/1$/ 删除重复行

:%s/^.{-}pdf/new.pdf/ 只是删除第一个pdf

:%s/<!--_.{-}-->// 又是删除多行注释(咦?为什么要说「又」呢?)

:g/s*^$/d 删除所有空行 :这个好用有没有人用过还有其他的方法吗?
:g!/^dd/d 删除不含字符串‘dd‘的行
:v/^dd/d 同上 (译释:v == g!,就是不匹配!)

:g/str1/,/str2/d 删除所有第一个含str1到第一个含str2之间的行

:v/./.,/./-1join 压缩空行
:g/^$/,/./-j 压缩空行

ndw 或 ndW 删除光标处开始及其后的 n-1 个字符。
d0 删至行首。
d$ 删至行尾。
ndd 删除当前行及其后 n-1 行。
x 或 X 删除一个字符。
Ctrl+u 删除输入方式下所输入的文本。
^R 恢复u的操作
J 把下一行合并到当前行尾
V 选择一行
^V 按下^V后即可进行矩形的选择了
aw 选择单词
iw 内部单词(无空格)
as 选择句子
is 选择句子(无空格)
ap 选择段落
ip 选择段落(无空格)
D 删除到行尾
x,y 删除与复制包含高亮区

dl 删除当前字符(与x命令功能相同)
d0 删除到某一行的开始位置
d^ 删除到某一行的第一个字符位置(不包括空格或TAB字符)
dw 删除到某个单词的结尾位置
d3w 删除到第三个单词的结尾位置
db 删除到某个单词的开始位置
dW 删除到某个以空格作为分隔符的单词的结尾位置
dB 删除到某个以空格作为分隔符的单词的开始位置
d7B 删除到前面7个以空格作为分隔符的单词的开始位置
d) 删除到某个语句的结尾位置
d4) 删除到第四个语句的结尾位置
d( 删除到某个语句的开始位置
d) 删除到某个段落的结尾位置
d{ 删除到某个段落的开始位置
d7{ 删除到当前段落起始位置之前的第7个段落位置
dd 删除当前行
d/text 删除从文本中出现“text”中所指定字样的位置,
一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容
dfc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容
dtc 删除当前行直到下一个字符“c”所出现位置之间的内容
D 删除到某一行的结尾
d$ 删除到某一行的结尾
5dd 删除从当前行所开始的5行内容
dL 删除直到屏幕上最后一行的内容
dH 删除直到屏幕上第一行的内容
dG 删除直到工作缓存区结尾的内容
d1G 删除直到工作缓存区开始的内容

linux使用grep或者vim删除空行
grep -v ^$ oldfile > newfile
但是似乎在FreeBSD下面不行,会不会是grep版本的问题?
后来想到了很刁的vim的全局替换,最后成功

vim的命令为:%s/^\n//g
意思是全局替换所有以回车开头的字符,替换为空。

顺便研究了一下
如果有多个连续的空行,想保留一个
vim的命令为:%s/^\n$//g

vi 替换命令与正则表达式

vi的替换命令:

:ranges/pat1/pat2/g

其中

: 这是vi的命令模式。 range 是命令执行范围的指定,可以使用百分号(%)表示所有行,使用点(.)表示当前行,使用美元符号($)表示最后一行。你还可以使用行号,例如10,20表示第10到20行,.,$表示当前行到最后一行,.+2,$-5表示当前行后两行直到全文的倒数第五行,等等。

s 表示其后是一个替换命令,类似Perl的替换函数。pat1 这是要查找并替换的一个正则表达式。

pat2 这是希望把匹配串变成的模式的正则表达式。

g 模式修饰符,表示替换将针对行中每个匹配的串进行重复匹配,不是只匹配行中出现的第一个匹配串。
          i 模式修饰符,表示模式匹配时忽略大小写。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
参考来源:UNIX Shell范例精解(第3版)
正则表达式元字符
^             行首定位符                      /^love/         匹配所有love开头的行
$             行尾定位符                     /love$/           匹配所有以love结尾的行
.               匹配一个字符                /l..e/                 匹配包含一个l,后跟两个字符,跟一个e的行
*              匹配0或者多个前一字符 /*love/         匹配包含0或多个空格后跟love的行
[]             匹配一组字符窗中任一个/[Ll]ove/     匹配包含love或者Love的行
[x-y]        匹配某范围字符中一个    /[A-Z]ove/   匹配后跟ove的一个A到Z之间的字符
[^]           匹配不再指定组内的字符/[^A-Z]/       匹配不再范围A到Z之间的任意字符
\               用于转义字符                    /love\./        匹配包括love,后面跟一个句点符号。

pattern\{n\}      用来匹配前面pattern出现次数。n为次数
pattern\{n,\}m    含义同上,但次数最少为n
pattern\{n,m\}    含义同上,但pattern出现次数在n与m之间

时间: 2024-10-11 12:37:24

vim 使用技巧的相关文章

(转载)两篇很牛的vim使用技巧

读本文之前请注意: 1. 本文的目标是提供一些vim的使用技巧,利用这些技巧可以提高vim的操作效率.部分技巧在vi上也可以使用,但是现在基本上都是用vim了. 2. 本文是整理和总结使用技巧,而非讲解vim入门,因此不会涉及最基本的使用,例如如何上移或下移光标,对此类操作请参阅任何一本vim或者vi教程. 3. 本文阅读对象是了解了vim的基本操作,而希望高效地利用vim进行工作的人.熟练使用vim的人自然不必细读,如果能留下您的宝贵意见,本人将感激不尽. 4. 本文由本人搜集整理,转载请注明

《Vim实用技巧》笔记

Vim实用技巧 Table of Contents 1. Vim决问题的方式 2. 普通模式 3. 插入模式 4. 可视模式 5. 命令行模式 5.1. 操作文本的Ex命令 5.2. range服务说明 5.3. 补全 5.4. 命令行窗口–使用vim的编辑能力编辑Ex命令 5.5. 执行外部命令 6. 管理多个文件 6.1. 缓冲区列表管理 6.2. 参数列表 6.3. 窗口操作 6.4. 标签页操作 7. 打开及保存文件 7.1. 打开文件 7.2. 使用find查找文件 7.3. 使用ne

转载: vim使用技巧

两篇很牛的vim使用技巧   来源: ChinaUnix博客 日期: 2009.07.06 10:18 (共有条评论) 我要评论   读本文之前请注意:1. 本文的目标是提供一些vim的使用技巧,利用这些技巧可以提高vim的操作效率.部分技巧在vi上也可以使用,但是现在基本上都是用vim了.2. 本文是整理和总结使用技巧,而非讲解vim入门,因此不会涉及最基本的使用,例如如何上移或下移光标,对此类操作请参阅任何一本vim或者vi教程.3. 本文阅读对象是了解了vim的基本操作,而希望高效地利用v

Vim实用技巧读书笔记

第一章 首先提出了vim一个理念:如何提高复用--很方便的重复之前做过的操作. 另外,作者将vim的操作分为两个步骤: 一是移动,二是操作. 针对这两个方面,通过命令:":".","."n"."N"."."."u"来达到复用. 修改操作 命令模式的dd等都是修改操作,但是容易被人遗忘的是:从进入插入模式到按回到命令模式为止.这也算是一次修改操作. 组合命令 vim将一些命令组合成一个单独

vim实用技巧1

cw会删除从光标位置到当前词结尾处的文本,并切换到插入模式. dw会删除从光标位置到当前词结尾处的文本,并移动到下一个单词的首字母. 可重复的操作及如何回退 目的                                                        操作                                    重复                 回退 做出一个修改                                    {edit}    

值得一看的书之《VIM实用技巧》

 值得一看的书之<VIM实用技巧> 我在2014年接触的linux,在使用linux vim编辑器过程中,碰到了一些vim编辑器的技巧,感觉好神奇,好强大.linux基础书籍上也有介绍vim,但是不全面,于是在2015年底,决定找一本关于详细介绍Vim的书籍,自己要系统的,完完全全的学习vim.于是便购买了<VIM实用技巧>这本书.自己断断续续的花6个月的时间,终于完完整整的看完了这本书,这本书很适合初学linux者学习,推荐给大家.看完后必受益匪浅. <VIM实用技巧>

vim使用技巧(插入,删除,查找,复制,粘贴,剪切)

原文链接:http://blog.csdn.net/qq_38646470/article/details/79643000 编程人员很喜欢的编辑器:vim 先搞清楚vim的三种模式: 1.命令模式:在Linux终端中输入"vim 文件名"就进入了命令模式,但不能输入文字. 2.编辑模式:在命令模式下按i就会进入编辑模式,此时就可以写入程式,按Esc可回到命令模式. 3.末行模式:在命令模式下按:进入末行模式,左下角会有一个冒号出现,此时可以敲入命令并执行. 下面是三种模式的简单分析图

Vim实用技巧pdf

下载地址:网盘下载 vim是一款功能丰富而强大的文本编辑器,其代码补全.编译及错误跳转等方便编程的功能特别丰富,在程序员中得到非常广泛的使用.vim能够大大提高程序员的工作效率.对于vim高手来说,vim能以与思考同步的速度编辑文本.同时,学习和熟练使用vim又有一定的难度. <vim实用技巧>为那些想要提升自己的程序员编写,阅读本书是熟练地掌握高超的vim技巧的必由之路.全书共21章,包括121个技巧.每一章都是关于某一相关主题的技巧集合.每一个技巧都有针对性地解决一个或一类问题,帮助读者提

7种提高工作效率的Vim操作-Vim使用技巧(6)

Vim一直被认为是一种非常高效的文本编辑器,但是对于普通用户来说,很难在入门的时候就体会到Vim的所谓高效性. 本文介绍7种提高你工作效率和生产力的Vim使用技巧,主要集中在对某个文件范围内的特定目标执行相同的重复性操作.抛砖引玉,作为你体验使用Vim进行高效操作的入门级教程. 1. Vim重复操作命令. 在vim重复操作命令. (英文句点)介绍过,. 命令可以用于重复上次修改.在<Vim实用技巧>一书中花了大量篇幅介绍” . 范式”:一次按键移动,一次按键执行. 假设想在以下的JavaScr