本人的vim配置在最下面

文章只记录了比较常用的命令 会不定时根据需求更新

功能

  1. 命令行模式下的文本编辑器

  2. 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能

  3. 使用方式:vi filename或者vim filename

    • 如果已有该文件,则打开它
    • 如果没有该文件,则打开一个新的文件,并命名位filename

模式

  1. 一般命令模式

​ 默认模式。命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删

除文本等

  1. 编辑模式

    在一般命令模式下按i,会进入编辑模式

ㅤㅤ按下ESC会退出编辑模式,返回到一般命令模式

  1. 命令行模式

ㅤㅤ在一般命令模式里按下: / ?三个字母中的任意一个,会进入命令行模式

ㅤㅤ命令行在最下面。可以查找、替换、保存、退出、配置编辑器等

操作

一般命令模式

i I gI a A o O

i进入编辑模式 下方会有insert标识

快捷键 作用 快捷键 作用
i 在光标前插入 I 在当前行第一个非空字符前插入
a 在光标后插入 A 在当前行最后插入
o 在下面新建一行插入 O 在上面新建一行插入
gI 在当前行第一列插入

另外num i word ESC会将word输出num次 做分界线的时候可以用30i*ESC就会打印30个*

ESC

从编辑模式进入一般命令模式

h或左箭头键

光标向左移动一个字符

j或下箭头键

光标向下移动一个字符

k或上箭头键

光标向上移动一个字符

l或右箭头键:

光标向右移动一个字符

num+空格

num表示数字,按下数字后再按空格,光标会往右移动这一行的num个字符

0或[Home]

光标移动到本行开头

$或[End]

光标移动到本行末尾

G

光标移动到最后一行

numG

num为数字,光标移动到第num行

gg

光标移动到第一行,相当于1G
删除组合键:gg + d + numG删除1~numgg + d + G删除所有

num+Enter

num为数字,光标向下移动num

n

重复前一个查找操作

N

反向重复前一个查找操作 本来向上找这样向下找

v

选中文本,按两下ESC取消选中状态

d

删除选中的文本 其实是剪贴

dd

删除当前行 其实是剪贴

y

复制选中的文本

yy

复制当前行

p

将复制的数据在光标处粘贴

  • 如果是删除(剪贴)或者复制的一行则会在下一行粘贴
  • 粘贴的一段会在光标的下一个位置

u 撤销

撤销

Ctrl + r 取消撤销

取消撤销

> + >

将选中的文本整体向右缩进一次

< + <

将选中的文本整体向左缩进一次

=

将选中的代码格式化 可以在粘贴过来的代码直接格式化gg=G

命令行模式

:num

num为数字,光标移动到第num行

/word

向光标之下寻找第一个值为word的字符串

?word

向光标之上寻找第一个值为word的字符串

:noh

关闭查找关键词高亮

:n1,n2s/word1/word2/g

n1n2为数字,在n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2

:1,$s/word1/word2/g

将全文的word1替换为word2

:1, $s/word1/word2/gc:

将全文的word1替换为word2,且在替换前要求用户确认

:w

保存

:w!

强制保存

:q

退出

:q!

强制退出

:wq

保存并退出

:set paste

设置成粘贴模式,取消代码自动缩进

:set nopaste

取消粘贴模式,开启代码自动缩进

:set nu

显示行号

:set nonu

隐藏行号

:r filename

在当前位置插入另一个文件的内容。

:num+r filename

在第num行插入另一个文件的内容。直接输入数字后跟一个r即可

:r !date

在光标处插入当前日期与时间。

:r !command

将其它shell命令的输出插入当前文档。

异常处理

Ctrl + q

当vim卡死时,可以取消当前正在执行的命令

删文件

  1. 每次用vim编辑文件时,会自动创建一个.filename.swp的临时文件

  2. 如果打开某个文件时,该文件的swp文件已存在,则会报错。此时解决办法有两种:

    • 找到正在打开该文件的程序,并退出
    • 直接删除掉该swp文件即可

vim配置

修改.vimrc文件 根目录

1
vim .vimrc

使用 :set paste,然后按i进入插入模式
然后 shift + insert 粘贴进去就行了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
" An example for a vimrc file.
"
" To use it, copy it to
" for Unix and OS/2: ~/.vimrc
" for Amiga: s:.vimrc
" for MS-DOS and Win32: $VIM\_vimrc
" for OpenVMS: sys$login:.vimrc

" When started as "evim", evim.vim will already have done these settings.
if v:progname =~? "evim"
finish
endif

" Use Vim settings, rather then Vi settings (much better!).
" This must be first, because it changes other options as a side effect.
set nocompatible

" allow backspacing over everything in insert mode
set backspace=indent,eol,start

if has("vms")
set nobackup " do not keep a backup file, use versions instead
else
set backup " keep a backup file
endif
set history=50 " keep 50 lines of command line history
set ruler " show the cursor position all the time
set showcmd " display incomplete commands
set incsearch " do incremental searching
"==========================================================================
"My Setting-sunshanlu
"==========================================================================
vmap <leader>y :w! /tmp/vitmp<CR>
nmap <leader>p :r! cat /tmp/vitmp<CR>

"语法高亮
syntax enable
syntax on
"显示行号
set nu

"修改默认注释颜色
"hi Comment ctermfg=DarkCyan
"允许退格键删除
"set backspace=2
"启用鼠标
set mouse=a
set selection=exclusive
set selectmode=mouse,key
"按C语言格式缩进
set cindent
set autoindent
set smartindent
set shiftwidth=4

" 允许在有未保存的修改时切换缓冲区
"set hidden

" 设置无备份文件
set writebackup
set nobackup

"显示括号匹配
set showmatch
"括号匹配显示时间为1(单位是十分之一秒)
set matchtime=5
"显示当前的行号列号:
set ruler
"在状态栏显示正在输入的命令
set showcmd

set foldmethod=syntax
"默认情况下不折叠
set foldlevel=100
" 开启状态栏信息
set laststatus=2
" 命令行的高度,默认为1,这里设为2
set cmdheight=2


" 显示Tab符,使用一高亮竖线代替
set list
"set listchars=tab:\|\ ,
set listchars=tab:>-,trail:-


"侦测文件类型
filetype on
"载入文件类型插件
filetype plugin on
"为特定文件类型载入相关缩进文件
filetype indent on
" 启用自动补全
filetype plugin indent on


"设置编码自动识别, 中文引号显示
filetype on "打开文件类型检测
"set fileencodings=euc-cn,ucs-bom,utf-8,cp936,gb2312,gb18030,gbk,big5,euc-jp,euc-kr,latin1
set fileencodings=utf-8,gb2312,gbk,gb18030
"这个用能很给劲,不管encoding是什么编码,都能将文本显示汉字
"set termencoding=gb2312
set termencoding=utf-8
"新建文件使用的编码
set fileencoding=utf-8
"set fileencoding=gb2312
"用于显示的编码,仅仅是显示
set encoding=utf-8
"set encoding=utf-8
"set encoding=euc-cn
"set encoding=gbk
"set encoding=gb2312
"set ambiwidth=double
set fileformat=unix


"设置高亮搜索
set hlsearch
"在搜索时,输入的词句的逐字符高亮
set incsearch

" 着色模式
set t_Co=256
"colorscheme wombat256mod
"colorscheme gardener
"colorscheme elflord
colorscheme desert
"colorscheme evening
"colorscheme darkblue
"colorscheme torte
"colorscheme default

" 字体 && 字号
set guifont=Monaco:h10
"set guifont=Consolas:h10

" :LoadTemplate 根据文件后缀自动加载模板
"let g:template_path='/home/ruchee/.vim/template/'

" :AuthorInfoDetect 自动添加作者、时间等信息,本质是NERD_commenter && authorinfo的结合
""let g:vimrc_author='sunshanlu'
""let g:vimrc_email='sunshanlu@baidu.com'
""let g:vimrc_homepage='http://www.sunshanlu.com'
"
"
" Ctrl + E 一步加载语法模板和作者、时间信息
""map <c-e> <ESC>:AuthorInfoDetect<CR><ESC>Gi
""imap <c-e> <ESC>:AuthorInfoDetect<CR><ESC>Gi
""vmap <c-e> <ESC>:AuthorInfoDetect<CR><ESC>Gi



" ======= 引号 && 括号自动匹配 ======= "
"
":inoremap ( ()<ESC>i

":inoremap ) <c-r>=ClosePair(')')<CR>
"
":inoremap { {}<ESC>i
"
":inoremap } <c-r>=ClosePair('}')<CR>
"
":inoremap [ []<ESC>i
"
":inoremap ] <c-r>=ClosePair(']')<CR>
"
":inoremap < <><ESC>i
"
":inoremap > <c-r>=ClosePair('>')<CR>
"
"":inoremap " ""<ESC>i
"
":inoremap ' ''<ESC>i
"
":inoremap ` ``<ESC>i
"
":inoremap * **<ESC>i

" 每行超过80个的字符用下划线标示
""au BufRead,BufNewFile *.s,*.asm,*.h,*.c,*.cpp,*.java,*.cs,*.lisp,*.el,*.erl,*.tex,*.sh,*.lua,*.pl,*.php,*.tpl,*.py,*.rb,*.erb,*.vim,*.js,*.jade,*.coffee,*.css,*.xml,*.html,*.shtml,*.xhtml Underlined /.\%81v/
"
"
" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries
" let &guioptions = substitute(&guioptions, "t", "", "g")

" Don't use Ex mode, use Q for formatting
map Q gq

" This is an alternative that also works in block mode, but the deleted
" text is lost and it only works for putting the current register.
"vnoremap p "_dp

" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has("gui_running")
syntax on
set hlsearch
endif

" Only do this part when compiled with support for autocommands.
if has("autocmd")

" Enable file type detection.
" Use the default filetype settings, so that mail gets 'tw' set to 72,
" 'cindent' is on in C files, etc.
" Also load indent files, to automatically do language-dependent indenting.
filetype plugin indent on

" Put these in an autocmd group, so that we can delete them easily.
augroup vimrcEx
au!

" For all text files set 'textwidth' to 80 characters.
autocmd FileType text setlocal textwidth=80

" When editing a file, always jump to the last known cursor position.
" Don't do it when the position is invalid or when inside an event handler
" (happens when dropping a file on gvim).
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif

augroup END

else

set autoindent " always set autoindenting on

endif " has("autocmd")

" 增加鼠标行高亮
set cursorline
hi CursorLine cterm=NONE ctermbg=darkred ctermfg=white

" 设置tab是四个空格
set ts=4
set expandtab

" 主要给Tlist使用
let Tlist_Exit_OnlyWindow = 1
let Tlist_Auto_Open = 1