# vim入门
# vim tutor 最好的vim入门教程
此为官方入门教程。 首先使用命令建立副本(在windows上),副本会建立在当前文件目录中,使用vim打开,参照教程进行练习即可。
# vimtutor可能会有乱码的情况,可以使用notepad++转为utf-8
vim -u NONE -c 'e $VIMRUNTIME/tutor/tutor.zh.euc' -c 'w! vimtutor_copy' -c 'q';ls -l
以下大多数使用技巧都是在官方教程中学习的。
# vim 非官方教程
# 速查vim命令

# 光标到底是在当前字符的前面还是后面呢?
背景:vim的普通模式下,光标在字符上,但平时在非vim的大多数时候都是文本编辑模式(相当于插入模式),容易导致在使用vim普通模式的混乱。
# 快速编辑文档或代码需要掌握的技巧
# 退出vim
ZZ
# 插入
a
i
A:在本行的末尾变成插入模式
o:在下方插入一个空行
O:在上方插入一个空行
# 移动
w:光标向右移动到下一个word的开头
e:同上,向右移动到下一个word的结尾
e:从当前光标位置移动到单词末尾
$:光标移动到行末
0:光标移动到行首
gg:跳转到文件第一行
G:跳转到文件最后一行
line num+G:跳转到line num行号的行
ctrl+o:回退到之前的位置
ctrl+i:跳转到新的位置
# 查找
/
?
%:查找当前光标所在字符的配对的括号(所有类型括号)
# 删除(被删除的内容都会保存到vim的寄存器中,可以使用p来粘贴)
删除功能基本都是使用d加位置操作组合共同完成,理解其机制即可
x删除光标下的单个字符dd删除当前行dw删除光标后的一个单词d$删除光标至行末的内容dgg删除光标到末尾的所有内容
# 撤销
u 撤销最后一次执行的命令
U 撤销对整行的修改
ctrl+r redo
# 复制粘贴
p 粘贴
y 复制
yw 用y作为操作符使用,复制一个单词
如何粘贴和复制到vim之外的地方 (opens new window)
0-9为数字寄存器,用来保存最近操作的内容,0保存最近一次操作的内容。a-zA-Z为用户寄存器,vim不会主动读写它们。"为未命名寄存器,也是默认寄存器。+为系统剪贴板寄存器。
❤️ 进入到可视模式v后再输入以下命令
"+yw "+yy 将内容(当前单词或当前行)复制到系统剪贴板
"+p 将系统剪贴板内容粘贴到当前位置后
"nyw "np 复制当前内容到n号剪贴板;粘贴n号剪贴板的内容到当前位置后
# 💀出现无法复制的问题
查看是否支持该命令:vim --version|grep clipboard
出现-clipboard表示不支持
需要先安装xorg,接着在configure时添加–with-features=huge参数
或者重新安装vim
# 替换
r 将光标移动到想要替换的字符上,使用r+character替换当前光标的字符
:%s/old/new/g 全局替换old为new,/g代表global全局替换(否则替换当前行)
:#,#s/old/new/g #号处输入行号,#,#代表从xxx行到xxx行,闭区间替换。(没加/g时只替换每一个匹配行的第一个匹配项)
:#,#s/old/new/gc 与上一个命令不同的是多一个c,代表确认confirm,会针对每一个匹配项进行确认交互操作
# 变更类(直接进入insert模式)
cw c代表change,表示直接进入insert模式,更改光标向前的一个单词,并直接进入insert模式
c$ 同上
# 信息
ctrl+g 显示当前编辑文件的行位置和文件状态
# 命令行模式
使用:进入命令行模式,光标会移动置最下方
# 保存
w filename 将文件保存至filename中,可以是新的文件,相当于复制一个新的文件
# vim命令行模式常用的设置
:set number 设置行号
:set ic 设置查找忽略大小写(ignore case),回退设置:set noic
如果仅在一次查找中使用忽略大小写可以:\c:/ignore\c
:set hlsearch :set hls 设置高亮
# vim执行外部命令
:! 输入后加上需要执行的外部shell命令,便可以回车执行。
# 读取外部文件到本文中
:r filename 读取filename文件到光标处
# 读取外部命令输出到本文中
:r !dir
:r !ls
# 编辑指定文件
:e c:\windows\system32\drivers\etc\hosts
# 插入模式
# 插入模式下的快捷键
- 自动补全:ctrl + n
- \p< 插入一个include,并把光标置于<>中间
- \im 插入主函数
- \ip 插入printf,并自动添加**\n**,且把光标置于双引号中间
vim快捷键补充(编辑模式)
- dw 删除一个单词(配合b:将光标置于所在单词的首部)
- yw 复制一个单词(配合p:粘贴)
vim快捷键补充(插入与编辑模式通用)
- \rr 运行程序
- \rc 保存并编译程序(会生成二进制文件)
# 可视模式
按v进入或者鼠标选中
# 选择性保存
可视模式下移动光标选择文本后,按:后,执行w filename将选择的内容保存到filename文件中。
# 多窗口模式
# nerdtree插件(文件目录插件)
# netrw(vim自带文件目录)
在windows下使用移动或复制操作,会报错
tried using g:netrw_localcopycmd<cp>; it doesn't work!,仍然没有解决,有方法的同学联系我。
netrw快捷键参考手册 (opens new window)
# 进入netrw
- 使用
:E - 使用
:edit .、可以简写:e .、甚至简写空格:e. - 打开当前文件所在的目录
e %:h ctrl+^回到刚刚编辑的文件或者目录树中(可以来回切换)- 刷新目录列表
ctrl+l
# 目录切换
- 浏览上一级目录
- enter或o打开光标目录
# 窗口操作
:Vex水平开一个新窗口,命令全称为:Vexplore:Sex垂直切分一个新窗口出来,命令全称为:Sexplorectrl+w+w切换到下一个窗口ctrl+w+hjkl切换到上下左右的某一个窗口v水平开一个新窗口,默认打开.vimfile文件
# 文件、文件夹操作
mf标记文件或文件夹、mF取消标记mb标记书签、mB取消标记书签mu清空所有标记%当前目录下创建一个新文件d当前目录下创建新目录D删除当前光标下的文件或目录
# 复制文件或移动文件
mt标记target目录mf标记文件或文件夹mc或mm复制或移动文件
# 文件格式
vim编译器会自动识别不同文件格式,默认会先识别unix然后是dos。 默认你不会在unix上编辑mac文件,因此不会检测mac格式,如果要加入通过
:set fileformats+=mac。
# vim使用的3种格式
- unix
<LF> - dos
<CR><LF> - mac
<CR>
# 查看当前文件格式
使用:set fileformat?获得当前使用的格式,简写:set ff?
# 转换文件格式
用linux打开windows编辑的文本,并且使用unix格式读取,就会看到后缀多了一个
^M,代表<CR>,如果要将文本格式转为unix,则将其用dos格式打开,然后设置文本格式为unix(ff=unix)即可。
- 将文件从dos转换为unix
:set ff=unix - 从unix转为dos
:set ff=dos
# 强制使用某种格式打开
:e ++ff=unix当前被vim打开的文件改用unix格式读取。命令后面追加文件则是打开指定文件。
# 文件编码格式
- 使用
:set fileencoding查看当前文件的编码格式 :set fileencodeing=utf-8设置当前文件编码格式
# Linux和windows上vim的使用
两者的配置文件是有区别的:
linux是
~/.vimrc;windows是~/_vimrc
# 配置vim
windows:
set nobackup
set undodir=~/vimfiles/undodir
set nowrap
set shiftwidth=4
set softtabstop=4
set tabstop=4
set laststatus=2
set expandtab
set backspace=indent,eol,start
set autoindent
colorscheme evening
syn on
filetype on
if has('gui_running')
set guifont=Courier_New:h10
endif
linux:
et nobackup
set undodir=~/.vim/undodir
set nowrap
set shiftwidth=4
set softtabstop=4
set tabstop=4
set laststatus=2
set expandtab
set backspace=indent,eol,start
set autoindent
"colorscheme evening
syn on
filetype on
备选配置、配置释义:
set undodir=~/vimfiles/undodir "or ~/.vim/undodir
set enc=utf-8 "如果设置了source $VIMRUNTIME/vimrc_example.vim,则不用多余设置这个
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
set number "显示行号
" indent 删除自动缩进的值
" eol 删除上一行行末尾的回车,两行合并
" start 除了刚输入的,还删除原来的字符
set backspace=indent,eol,start
set nowrap "不换行
set shiftwidth=4 "默认缩进4个空格
set softtabstop=4 "使用tab时 tab空格数
set tabstop=4 "tab代表4个空格
set laststatus=2 "总是显示状态行
set expandtab "使用空格替换tab
" indent 删除自动缩进的值
" eol 删除上一行行末尾的回车,两行合并
" start 除了刚输入的,还删除原来的字符
set backspace=indent,eol,start
set autoindent " 自动缩进
colorscheme evening "颜色模式
syn on "语法高亮
filetype on "文件类型
"set encoding=gb2312 "编码为utf8
# 别人的vimrc-1
set number "显示行号
set nowrap "不换行
set shiftwidth=4 "默认缩进4个空格
set softtabstop=4 "使用tab时 tab空格数
set tabstop=4 "tab代表4个空格
set laststatus=2 "总是显示状态行
#backspace键
" indent 删除自动缩进的值
" eol 删除上一行行末尾的回车,两行合并
" start 除了刚输入的,还删除原来的字符
set backspace=indent,eol,start
set expandtab "使用空格替换tab
set autoindent " 自动缩进
colorscheme evening "颜色模式
syn on "语法高亮
filetype on "文件类型
set encoding=utf-8 "编码为utf8
# vim设置
大多使用set加具体命令来执行。
set all查看所有设置
:set nu
:set nonu 是否显示行号
:set wrap
:set nowrap 是否换行
:set hlsearch
:set nohlsearch 搜索是否高亮显示
:set autoindent
:set noautoindent 是否自动缩排
:set backup 是否自动备份修改文件,默认为否,如果set bakcup, 修改时会自动生成 filename~ 备份文件。
:set ruler 显示右下角状态栏
:set showmode 显示左下角状态栏,--INSERT--之类
:set 显示与系统默认值不同的值,
:syntax on
:syntax off 程序语法开关
:set bg=dark
:set bg=light 显示颜色色调
# .viminfo和.vimrc
.viminfo
在vim中操作的行为,vim会自动记录下来,保存在 ~/.viminfo 文件中。 这样为了方便下次处理, 如:vim打开文件时,光标会自动在上次离开的位置显示。 原来搜索过的字符串,新打开文件时自动高亮显示。
~/.viminfo 文件是系统自动生成。
.vimrc
vimrc文件是vim的环境设置文件。
整体的vim的设置是在 /etc/vimrc 文件中。
不建议修改/etc/vimrc 文件,每个用户可以在用户根目录中设置vim,新建 ~/.vimrc.
vim的配置选项较多,可以使用
set all查看所有的配置项