您当前的位置: 首页 >  vim

ITKEY_

暂无认证

  • 0浏览

    0关注

    732博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

vim学习笔记

ITKEY_ 发布时间:2021-01-27 11:03:53 ,浏览量:0

文章目录
  • 什么是 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不难,只是使用习惯跟我们日常鼠标键盘操作差异大。掌握下面使用方法,日常运维基本就够用啦。 什么是 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
  • + - 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%
键表

- 小键盘 0 到 9 Shift+键 Control+键 Alt+键meta+键 Escape 键 光标上移键 插入空格 插入Tab 等于

删除单词
  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

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

引用寄存器,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

关注
打赏
1665243900
查看更多评论
立即登录/注册

微信扫码登录

0.0414s