vim学习笔记

124 篇文章 9 订阅
104 篇文章 33 订阅


# 前言 vim不难,只是使用习惯跟我们日常鼠标键盘操作差异大。掌握下面使用方法,日常运维基本就够用啦。

什么是 vim?

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。

连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
在这里插入图片描述

输入模式(Insert mode)

按i键进入insert模式,这里就可以用方向键移动光标到要修改文字的地方了。掌握这个就可以做简单的修改了。

底线命令模式

: 切换到底线命令模式,以在最底一行输入命令。
:开头的都是在这个模式下执行的。

切换到命令模式(Command mode)

按ESC键,下面的命令中不带:开头的都在这个模式下运行的。

保存并退出

:wq

退出

:q

删除光标所在行

dd

撤销(类似与Ctrl +Z)

u

多次撤销

例如需要退回到2次修改以前2u,以此类推 。
3u4u5u

重做(类似与Ctrl +Y)

对应上面的撤销,如果撤销多了,后悔了就操作这个哈。
: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或者在编译的时候开启系统剪贴板选项。

从系统剪贴板粘贴到vim

  • "*p
  • "+p
  • Shift+Insert
  • :put + - Ex command puts contents of system clipboard on a new line
  • <C-r>+ - From insert mode (or commandline mode)
    "+pCtrl-v 命令更好,它可以更快更可靠地处理大块文本的粘贴,也能够避免粘贴大量文本时,发生每行行首的自动缩进累积,因为Ctrl-v是通过系统缓存的stream处理,一行一行地处理粘贴的文本。

vim复制到系统剪贴板

  • "*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默认使用系统剪贴板

确定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的Vim

macOS预安装的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%

键表

<k0> - <k9> 小键盘 0 到 9
<S-...> Shift+键
<C-...> Control+键
<M-...> Alt+键meta+键
<A-...><M-...>
<Esc> Escape 键
<Up> 光标上移键
<Space> 插入空格
<Tab> 插入Tab
<CR> 等于<Enter>

删除单词

  1. dw,这是在此之前我用的对做的也几乎是唯一掌握的一个操作技巧。从光标当前的位置开始删除,直到删到单词最后。

  2. daw,算是1的属性扩充版,这个命令可以直接删除光标所在的一个单词。为了方便记忆,可以记忆为deletea word缩写。

  3. bdw,这也是一个复合命令。B可以让光标回退到单词开头的位置,而dw则是第1个描述过的命令。

  4. 另外再有就是删除一个字符,操作为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

vim中打开一个终端

:vert term

vim 编辑远程文件

格式如下:

$ vim scp://myuser@remote-server.com//tmp/message.txt

简写实例

vim scp://@v/~/Hello.java

其中v 是我在~/.ssh/config中配置的主机名

tab键占4个空格

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

<silent>

<silent> 告诉vim使用该键序列时不显示任何消息

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复制的文本,粘贴到命令之中的?

<c-r>0

<c-r>引用寄存器,0是复制到的寄存器

禁止vim生成临时文件,vim 禁止生成swap文件

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

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值