🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**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 ```