3.1 Vim(最好用的编辑器)

Vim是最好用的编辑器!!!

Vim是最好用的编辑器!!!

Vim是最好用的编辑器!!!

简介

Vim(Vi[Improved])编辑器是功能强大的跨平台文本文件编辑工具,继承自Unix系统的Vi编辑器,支持Linux/Mac OS X/Windows系统,利用它可以建立、修改文本文件。进入Vim编辑程序,可以在终端输入下面的命令:

$vim [filename]

其中filename是要编辑器的文件的路径名。如果文件不存在,它将为你建立一个新文件。

Vim使用

vim:模式化编辑器

基本模式:编辑模式,命令模式,输入模式,末行模式(内置的命令行模式)
打开文件:
# vim [OPTION]...FILE...
+#:打开文件后,直接让处于第#行的行首
模式转换:
ESC键:
编辑模式-->输入模式:
i: 在光标所在处的前方转换为输入模式
a: 在光标所在的后方转换为输入模式
o: 在光标所在行的下方新建一个空行并转换为输入模式
I: 跳转至行首
A:跳转至行尾
O: 光标所在行的上方新建一个空白行
输入模式-->编辑模式
ESC
编辑模式-->末行模式
:
末行模式-->编辑模式
ESC

关闭文件:

:q:退出
:q! 强制退出,丢弃做出的修改
:wq 保存退出
:x 保存退出
:wq! 强制保存退出
:w :/PATH/TO/SOMEWHERE
ZZ:保存退出

光标移动:

字符间移动:h,j,k,l

h:左
l:右
j:下
k:上
#{h|j|k|l}: 跳#个字符

单词间移动

w: 下一个单词词首
e: 当前单词或下一个单词词尾
b: 当前单词或前一个单词词首
#{w|e|b}:跳#个单词

行内移动

^: 跳转至行首第一个非空白字符
0:跳转至绝对行首
$: 跳转至绝对行尾

行间移动:

#G: 直接跳转至第#行;
G:最后一行
1g,gg:回至第一行
句子间移动:
)
(
段落间移动:
}
{

vim编辑命令

字符编辑:

x: 删除光标所在处的字符
#x:删除光标起始的#字符

替换命令

r:替换光标所在处的字符

删除命令

d:结合光标跳转字符使用,删除跳转范围内的字符
d$:删除光标所在行
d^:删除空格
dw:删除一个字符
de:向后删除一个单词
db:向前删除一个单词
dd: 删除光标所在行
#dd:多行删除

粘贴命令

p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在的后面;
P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在的前面;

复制命令

y:复制,工作行为与d相似
yy:复制行
#yy:复制多行

改变命令

c:修改,工作行为与d相似
编辑模式-->末行模式
cc:删除并输入新内容
#cc:

可视化模式

v:按字符选定
V:按行选定

撤销操作

u(undo):撤销此前的操作
#u:撤销指定撤销次数
撤销此前的撤销:
ctrl+r
重复前一个编辑操作:.

翻屏操作

Ctrl+f: 向文件尾部翻一屏
Ctrl+b: 向文件首部翻一屏
Ctrl+d: 向文件尾部翻半屏
Ctrl+u: 向文件首部翻半屏

vim中的末行模式

地址定界

:start_pos,end_pos
#:具体第#行,例如2表示第2行
#,#:从左侧#表示行起始,到右侧#表示行结尾
#,+#:从左侧#表示的行起始,加上右侧#表示的行数
.:当前行
$:最后一行
%:全文,相当于1,$
/pat1/,/pat2/:
从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
使用方式:
后面跟一个编辑模式
d
y
w /PATH/TO/SOMEWHERE:将范围内的行另存至指定文件中
r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有内容

查找

/PATTERN:从当前光标所在处向文件尾部查找
?PATTERN:从当前光标所在处向文件首部查找
n:与命令同方向
N:与命令反方向

查找并替换

s:在末行模式下完整查找替换操作
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1,\2...等后向引用符号;还可以使用“&”引用前面查找到的整个内容
修饰符:
i:忽略大小写
g:全局替换;默认情况下,每一行只替换第一次出现

练习:

1、复制/etc/grub2.cfg至/tmp/目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符
%s/^[[:space:]]\+//g
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查的替换命令为/tmp/functions的每行开头为空白字符的行行首添加一个#号;
%s/^[[:space:]]/#&/

多文件模式:

vim FILE1 FILE2 FILE3....
:next 下一个
:prev 前一个
:last 最后一个
:first 第一个
:wall 保存退出
:qall 退出所有

多窗口模式

多文件:
vim
-o: 水平分割
-O: 垂直分割
Ctrl+w, Arrow
单文件:
Ctrl+w, s: 水平分割
Ctrl+w, v: 垂直分割

定制vim的工作特性

配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
末行:当前vim进程有效
(1)行号
显示:set number,简写为set nu
取消显示:set nonumber ,简写set nonu
(2)括号匹配
匹配:set showmatch 简写 set sm
取消:set nosm
(3)自动缩进
启用:set ai
禁用:set noai
(4)高亮搜索
启用:set hlsearch
禁用:set nohlsearch
(5)语法高亮
启用:syntax on
禁用:syntax off
(6)忽略字符大小写
启用:set ic
不忽略:set noic

获取帮助:help subject

这里附上我的Vim的配置,没有过多的花哨的功能,简单压倒一切~

autocmd BufNewFile *.sh, exec ":call SetTitle()"
let $author_name = "yjscloud"
let $author_email = "yjscloud@gmail.com"
func SetTitle()
call setline(1,"\#===================================================================")
call append(line("."), "\# File Name : ".expand("%"))
call append(line(".")+1, "\# Author : ".$author_name)
call append(line(".")+2, "\# Email : ".$author_email)
call append(line(".")+3, "\# Created Time : ".strftime("%c"))
call append(line(".")+4, "\# Version : Version: 0.1")
call append(line(".")+5, "\# Description : ")
call append(line(".")+6, "\#===================================================================")
call append(line(".")+7, "\#!/bin/bash")
call append(line(".")+8, "")
endfunc
""""""""""""
"=>全局配置
""""""""""""
set nocompatible
set history=100
filetype on
filetype plugin on
filetype indent on
set autoread
set mouse=a
""""""""""""
"=>字体和颜色
""""""""""""
syntax enable
set cursorline
hi cursorline guibg=#00ff00
hi CursorColumn guibg=#00ff00
""""""""""""""
"=>代码折叠功能
""""""""""""""
set foldenable
set foldmethod=manual
set foldcolumn=0
setlocal foldlevel=3
set foldclose=all
nnoremap <space> @=((foldclosed(line('.')) <0 ) ? 'zc' : 'zo')<CR>
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
set smarttab
set ai
set si
set wrap
set sw=4
""""""""""""""
"=>Vim界面
""""""""""""""
set wildmenu
set ruler
set cmdheight=1
set nu
set lz
set backspace=indent,eol,start
set whichwrap+=<,>,h,l
set magic
set noerrorbells
set novisualbell
set showmatch
set mat=2
set hlsearch
set ignorecase
""""""""""""""
"=>Vim字符
""""""""""""""
set encoding=utf-8
set fileencodings=utf-8
set termencoding=utf-8
""""""""""""""
"=>Vim其他设置
""""""""""""""
set smartindent
set cin
set showmatch
set guioptions-=T
set guioptions-=m
set vb t_vb=
set laststatus=2
set pastetoggle=<F9>
set background=dark
highlight Search ctermbg=black ctermfg=white guifg=white guibg=black