- 什么是 vim?
- 输入模式(Insert mode)
- 底线命令模式
- 切换到命令模式(Command mode)
- 保存并退出
- 退出
- 删除光标所在行
- 撤销(类似与Ctrl +Z)
- 多次撤销
- 重做(类似与Ctrl +Y)
- 全选
- 全选并删除
- 选中文字
- 复制选中部分内容
- 复制一行
- 查找
- 设置 vim 可配色
- vim练习游戏
- 系统剪贴板
- 从系统剪贴板粘贴到vim
- vim复制到系统剪贴板
- 设置vim默认使用系统剪贴板
- 官方帮助文档
- 安装中文帮助文档
- macOS安装支持Python 3的Vim
- 光标定位技巧
- 键表
- 删除单词
- 删除""或()中的所有文字
- 删除""或()中的所有文字并进入插件模式
- 改变光标所在位置的单词
- 显示隐藏行号(简写)
- 改变 vim插入模式光标为一条|
- tab页面切换
- vim中打开一个终端
- vim 编辑远程文件
- tab键占4个空格
- 拆分窗口
- 设置背景透明
- vim文件跳转
- f重复搜索
- 自动保存文件
- vim 退格键(backspace)不能用
- ``
- vim切换文件
- vi阅读gbk文档
- y复制的文本,粘贴到命令之中的?
- 禁止vim生成临时文件,vim 禁止生成swap文件
- 参考文档
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
按i键进入insert模式,这里就可以用方向键移动光标到要修改文字的地方了。掌握这个就可以做简单的修改了。
底线命令模式: 切换到底线命令模式,以在最底一行输入命令。 带:
开头的都是在这个模式下执行的。
按ESC键,下面的命令中不带:
开头的都在这个模式下运行的。
:wq
:q
dd
u
例如需要退回到2次修改以前2u
,以此类推 。 3u
、4u
、5u
对应上面的撤销,如果撤销多了,后悔了就操作这个哈。 :red
或者:redo
或者快捷键 Ctrl
+ R
Mac下是 ⌃
+ R
ggvG
注意:后面的G是大写的。 选择后也可以使用方向键选择范围。←
↑
→
↓
解析: gg:是让光标移到首行,在vim才有效,vi中无效 v : 是进入Visual(可视)模式 G :光标移到最后一行
全选并删除- 全选
ggvG
- 删除选中部分
d
选中 v
+ 方向键选中←
↑
→
↓
- 选中
v
+ 方向键选中←
↑
→
↓
- 复制
y
- 粘贴 光标后
p
光标前粘贴P
复制一行,我们只要把光标移动到想复制的那一行,按yy ,就是两次y键,就复制了这一行。 粘贴,把光标移动到你想粘贴的那一行,按p键即可。
查找在normal
模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。
Vim查找支持正则表达式,例如/vim$匹配行尾的"vim"。 需要查找特殊字符需要转义,例如/vim$匹配"vim$"。
注意查找回车应当用\n,而替换为回车应当用\r(相当于)。
设置 vim 可配色终端输入vim .vimrc,设置内容如下,
syntax on
set number
set ruler
vim练习游戏
具说把这个游戏打通关了,就能成为vim高手了。 https://github.com/jmoon018/PacVim
Mac OS X下安装
brew install pacvim
其他系统安装参考上面地址。 玩法: 启动游戏 安装成功后,可执行以下命令来启动游戏:
$ pacvim [LEVEL_NUMER] [MODE]
其中: LEVEL_NUMER:表示关卡号 MODE:表示难度,n - 正式模式,h - 困难模式 例如,我们要玩第 5 关,正式模式的游戏,我们可以这样启动游戏:
$ pacvim 5 n
而如果我们仅仅想从头开始玩游戏,则只需这样:
$ pacvim
系统剪贴板
Vim支持系统剪贴板,需要打开clipboard功能。使用下面的命令,检查当前版本的Vim,是否支持clipboard。
vim --version | grep "clipboard"
+clipboard +jumplist +popupwin +user_commands
+ex_extra -mouse_jsbterm -sun_workshop -xterm_clipboard
-clipboard
代表不支持+clipboard
代表支持。 如果不支持的话,需要安装gvim或者在编译的时候开启系统剪贴板选项。
"*p
"+p
Shift+Insert
:put + - Ex
command puts contents of system clipboard on a new line+ -
From insert mode (or commandline mode)"+p
比Ctrl-v
命令更好,它可以更快更可靠地处理大块文本的粘贴,也能够避免粘贴大量文本时,发生每行行首的自动缩进累积,因为Ctrl-v是通过系统缓存的stream处理,一行一行地处理粘贴的文本。
"*y
"+y
"+2yy
– 复制两行{Visual}"+y
- copy the selected text into the system clipboard"+y{motion}
- copy the text specified by{motion}
into the system clipboard:[range]yank +
- copy the text specified by[range]
into the system clipboard
确定vim
支持+clipboard
后,如果想y/p
直接和系统剪贴板打通,可以在~/.vimrc
中加上以下配置):
set clipboard^=unnamed,unnamedplus
其中unnamed代表*
寄存器,unnamedplus代表+
寄存器。在mac系统中,两者都一样;一般在linux系统中+
和*
是不同的,+
对应ctrl + c
,ctrl + v
的桌面系统剪贴板,*对应x桌面系统的剪贴板(用鼠标选择复制,用鼠标中键粘贴)。
中文文档下载: http://vimcdoc.sourceforge.net/
https://github.com/yianwillis/vimcdoc
安装中文帮助文档Vim 8+ 自带软件包支持
$ mkdir -p ~/.vim/pack/foo/start
$ cd ~/.vim/pack/foo/start
$ git clone git://github.com/yianwillis/vimcdoc.git
重启 Vim。macOS实测,重启后,不需要任何配置:help
就是中文的了。
其中 foo 可以是任何你自选的名字。
当然,如果不想用 git,也可用解压下载的 tar.gz 包到 ~/.vim/pack/foo/start。git 方式的好处可以随时进行更新。
macOS安装支持Python 3的VimmacOS预安装的vim不支持Python 3,因为一些插件安装的时候是需要Python3支持的。所以要自己安装一个vim。
brew install vim
执行结果如下:
$ brew install vim
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/vim-8.2.2100.big_sur.bottle.tar.gz
Already downloaded: /Users/itkey/Library/Caches/Homebrew/downloads/54045ea9c6108c5555cbc882c6b79a1f86299772fa5698555a7d7a406e0290c4--vim-8.2.2100.big_sur.bottle.tar.gz
==> Pouring vim-8.2.2100.big_sur.bottle.tar.gz
🍺 /usr/local/Cellar/vim/8.2.2100: 1,960 files, 33.5MB
~ [04:11:21]
所以是安装到 /usr/local/Cellar/vim/8.2.2100
目录。 安装完成后发现,终端中执行vim还是预安装的版本的。如何才能使用我们刚才的版本的呢? 编辑~/.zshrc
增加以下:
# VIM
export VIM_HOME=/usr/local/Cellar/vim/8.2.2100/
export PATH=$PATH:$VIM_HOME/bin
# VIM End
执行 source ~/.zshrc
使环境变量立马生效。
- 单步精准光标定位
h
j
k
l
- 多步光标定位
数字
+h
j
k
l
比如:3j 向下 3行 - 单词定位
w
W
e
E
b
B
- 翻页
PgUp
PgDn
Ctrl - b
Ctrl -f
- 行跳转:精准跳转到指定行
数字
+G
;相对跳转,如,向上 10行10
+k
- 滚屏 : 半屏
Ctrl - u
Ctrl-d
,单行:Ctrl - e
Ctrl -y
- 移动光标:屏幕中间
zz
屏幕顶部zt
屏幕底部zb
- 百分比跳转:
数字 %
如跳转到文档的 50%,则 输入 50%
-
小键盘 0 到 9
Shift+键
Control+键
Alt+键
或 meta+键
同
Escape 键
光标上移键
插入空格
插入
Tab
等于
-
dw,这是在此之前我用的对做的也几乎是唯一掌握的一个操作技巧。从光标当前的位置开始删除,直到删到单词最后。
-
daw,算是1的属性扩充版,这个命令可以直接删除光标所在的一个单词。为了方便记忆,可以记忆为deletea word缩写。
-
bdw,这也是一个复合命令。B可以让光标回退到单词开头的位置,而dw则是第1个描述过的命令。
-
另外再有就是删除一个字符,操作为x。
di"
di(
同理可以换成别的符号
在开发java时经常能用到,比如修改字符串的值。 String str =“I can make it”; 光标移动到""内部任意字符。按di"就可以删除双引号中文字了
按da"就连同是""一起删除
删除""或()中的所有文字并进入插件模式di"
di(
同理可以换成别的符号 然后在按i 这样略显麻烦,可以这样 ci"
ci(
ciw
显示隐藏行号(简写)
显示 :set nu 隐藏 :set nonu
改变 vim插入模式光标为一条|普通的编辑器中光标一般都是一条 闪动的竖线,比较好区分光标的位置,在vim中的光标默认是在字符上的一条粗线,有点不好区分光标位置。
.vimrc中添加如下代码
let &t_SI.="\e[5 q" "SI = INSERT mode
let &t_SR.="\e[4 q" "SR = REPLACE mode
let &t_EI.="\e[1 q" "EI = NORMAL mode (ELSE)
tab页面切换
:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab :tabc
关闭当前的tab :tabo
关闭所有其他的tab :tabs
查看所有打开的tab :tabp
前一个 :tabn
后一个 标准模式下: gt
, gT
可以直接在tab之间切换。 更多可以查看帮助 :help table , help -p
:vert term
vim 编辑远程文件
格式如下:
$ vim scp://myuser@remote-server.com//tmp/message.txt
简写实例
vim scp://@v/~/Hello.java
其中v 是我在~/.ssh/config
中配置的主机名
filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab
一般设置set tabstop=4就可以了,但是我遇到过还需要设置set shiftwidth=4才行。
拆分窗口垂直拆分:vsp
水平拆分:sp
hi Normal ctermfg=252 ctermbg=none
实现的,但是这条语句依赖于你的终端透明,它需要你的终端可以设置透明背景,我这里是ubuntu系统自带的终端
vim文件跳转在 Vim 普通模式下可以用 gf
命令跳转到当前光标下文件名对应的文件
Ctrl - ^ 返回
f重复搜索重复的命令f是;(分号); ,(逗号)搜索的方向。
自动保存文件虽然:help ‘autosave’(在todo.txt中)指的是对这样的选项可以做什么的描述,但没有内建选项。
实现此目的的一种可能方式是使用CursorHold自动命令事件。当用户没有按下密钥’updatetime’毫秒时触发此事件。
autocmd CursorHold * update
:update命令只在缓冲区被修改时才会保存。如果您还希望在插入模式处于活动状态时发生这种情况,则可以将CursorHoldI添加到事件列表中。
autocmd CursorHold,CursorHoldI * update
另一种替代方法是’autowrite’选项,这将节省在缓冲执行外部命令或切换到不同的缓冲液(用于运行:make之前保存有用)之前。
源于:https://vi.stackovernet.xyz/cn/q/25
vim 退格键(backspace)不能用两个步骤:
1.去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限 set nocompatible
2.backspace有几种工作方式,默认是vi兼容的。对新手来说很不习惯。对老vi 不那么熟悉的人也都挺困扰的。可以用 set backspace=indent,eol,start 来解决。 indent: 如果用了:set indent,:set ai 等自动缩进,想用退格键将字段缩进的删掉,必须设置这个选项。否则不响应。 eol:如果插入模式下在行开头,想通过退格键合并两行,需要设置eol。 start:要想删除此次插入前的输入,需设置这个。
源于:https://blog.csdn.net/z714303584/article/details/60771054
告诉vim使用该键序列时不显示任何消息
1.文件间切换 Ctrl+6—下一个文件 :bn—下一个文件 :bp—上一个文件 对于用(v)split在多个窗格中打开的文件,这种方法只会在当前窗格中切换不同的文件。 https://www.huaweicloud.com/articles/bd579b5a7d2ba36f011eb9c421274f2a.html
vi阅读gbk文档set fileencodings=utf-8,gbk
或
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
Vim在打开文件时会根据fileencodings选项来识别文件编码,fileencodings可以同时设置多个编码,Vim会根据设置的顺序来猜测所打开文件的编码。
y复制的文本,粘贴到命令之中的?0
引用寄存器,0是复制到的寄存器
set nobackup "表示不需要备份文件
set noswapfile "表示不创建临时交换文件
set nowritebackup "表示编辑的时候不需要备份文件
set noundofile "表示不创建撤销文件
参考文档
《Linux vi/vim》 https://www.runoob.com/linux/linux-vim.html 《Vim 撤销 回退 操作》https://www.jianshu.com/p/6f337037d8fd 《vim全选,全部复制,全部删除》https://www.cnblogs.com/webStyle/p/4354464.html 《一款游戏让你成为 Vim 高手!》https://blog.csdn.net/wei_7396/article/details/107607543 《一文搞懂vim复制粘贴》https://www.cnblogs.com/huahuayu/p/12235242.html 《【Vim】使用map自定义快捷键》https://blog.csdn.net/JasonDing1354/article/details/45372007
《VIM单词删除技巧》https://blog.csdn.net/grey_csdn/article/details/72355735 《Vim 如何修改 insert 和 nomal 光标样式》 https://blog.csdn.net/mkosto/article/details/100700454 《vim切换tab标签快捷键》https://blog.csdn.net/ghostyusheng/article/details/77893780 《Vim文件间跳转-Vim入门教程(49)》https://vimjc.com/vim-goto-file.html
https://www.codenong.com/133626/ 《VIM 编码格式 显示乱码》https://blog.csdn.net/sin_geek/article/details/93750363