# 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_cmd_table.png

# 光标到底是在当前字符的前面还是后面呢?

背景: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 全局替换oldnew/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快捷键补充(编辑模式)

  1. dw 删除一个单词(配合b:将光标置于所在单词的首部)
  2. yw 复制一个单词(配合p:粘贴)

vim快捷键补充(插入与编辑模式通用)

  1. \rr 运行程序
  2. \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

# 目录切换

  • 浏览上一级目录 -
  • entero打开光标目录

# 窗口操作

  • :Vex水平开一个新窗口,命令全称为:Vexplore
  • :Sex垂直切分一个新窗口出来,命令全称为:Sexplore
  • ctrl+w+w切换到下一个窗口
  • ctrl+w+hjkl切换到上下左右的某一个窗口
  • v水平开一个新窗口,默认打开.vimfile文件

# 文件、文件夹操作

  • mf标记文件或文件夹、mF取消标记
  • mb标记书签、mB取消标记书签
  • mu清空所有标记
  • %当前目录下创建一个新文件
  • d当前目录下创建新目录
  • D删除当前光标下的文件或目录

# 复制文件或移动文件

  1. mt标记target目录
  2. mf标记文件或文件夹
  3. mcmm复制或移动文件

# 文件格式

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格式读取。命令后面追加文件则是打开指定文件。

# 文件编码格式

  1. 使用:set fileencoding查看当前文件的编码格式
  2. :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查看所有的配置项

修改于: 8/11/2022, 3:17:56 PM