[TOC]
VIM操作笔记
更多vim配置还可以见:D:\Github\GitBook\gitbook\Linux\bashrc.md
配置文件还可能是/etc/vim/vimrc 修改完后不需要使用source生效,直接生效,猜测可能是使用vim命令打开文件的时候生效。
配置文件:.vimrc ps://blog.csdn.net/qq_41113081/article/details/1001
vim打开文件出现中文乱码
方案一:
# 命令行模式(非常重要太常用了)
:e ++enc=cp936
方案二:
vim ~/.vimrc添加
set enc=utf8一般来说就够了(只针对vim乱码的情况,操作系统乱码另说)成功过
如果还不行,可以再添加
set fencs=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1 未验证成功过
还不行就把第一行的utf8换成gbk,第二行的gbk挪到最前。 成功过
vim打开文件,中文乱码。而用cat命令,能正确显示中文。 问题所在:vim终端编码方式 解决方案:打开~/.vimr或者/etc/vimrc配置文件 在后面加上: fileencodings=utf-8,gb2312,gbk,gb18030 set termencoding=gbk //关键,设置为utf-8是乱码的 set encoding=prc set fileencoding=utf-8
0、以游戏的方式学习
游戏叫VIM Adventures[https://vim-adventures.com/]
官方教程:使用命令vimtutor
https://mp.weixin.qq.com/s/SeeJ3N9zGwrjQKTKM6ze7w
1、tab键
vim默认是8个字符宽度 ,vim ~/.vimrc一下, 然后添加:
set ts=4
set noexpandtab
设置为4个空格的方法: 把上述的noexpandtab改为expandtab
2、grep查找
3、vim中查找
:/查找内容 使用n查找下一个 使用shift+n查找上一个
4、linux shell中"2>&1"含义
5、VI
当遇到没有安装VIM软件的时候,只有VI,操作起来就会有点困难。没有方向键和退格键。
x 删除键
Delete 删除键
hjkl 方向键
i 插入
:wq 退出保存
每次使用的时候需要Esc
6、进阶
shift+v 按行选择内容 ctrl+v 按列选择内容 w 跳到下一个单词头部 b e u 返回上次修改
显示行号:输入:set nu 隐藏行号:输入:set nonu
6-1、多行注释
- 先ctrl+v选择需要注释的行
- shift+i
- 输入注释符号//
- 连续按两次esc
6-2、vim中的高亮全部同样单词的方法
可能默认不是高亮,需要设置,set hlsearch 或者 set hls 一般来说,关闭在第二个单词加上no即可 如:set nohlsearch
用vim时,想高亮显示一个单词并查找的方发。将光标移动到所找单词. 1: shift + "*" 向下查找并高亮显示 2: shift + "#" 向上查找并高亮显示 3: "g" + "d" 高亮显示光标所属单词。"n" 查找。 取消高亮:输入:noh gd命令: Goto local Declaration 语法高亮:syntax on
set cul e ++enc=cp936
6-3、设置高亮行和列有两种方式进行设置
set cursorcolumn
set cursorline
or
set cuc
set cul
ctrl+z ctrl+y shift+enter组合在编辑文字中是否换行
7、Vim光标定位
https://www.cnblogs.com/dytl/p/3830838.html
*定位到指定行n: 输入"nG". 或输入"ngg". 或输入":n" 这里,n就是指定的行的行号.注意,有时候G=gg.
*跳到屏幕顶部: 输入“H”. 这里,停在第一个非空字符上。加一个数字N,是指距窗口顶部的行数(如'NH'正数第N行)
*跳到屏幕底部: 输入“L”. 这里,停在第一个非空字符上。加一个数字,是指距窗口底部的行数(如'NL'倒数第N行)
*跳到屏幕中间: 输入“M”. 这里,停在第一个非空字符上。
*跳到文件首: 输入"gg".
*跳到文件尾: 输入“G”.
*光标移至句尾: 输入")".
*光标移至句首: 输入"(".
*光标移至段落开头: 输入"}".
*光标移至段落结尾: 输入"{".
*跳到行末尾: 输入“$”.
*跳到行首: 输入“^”. 或输入“0”. 这里输入'^'是移动到首的第一个非空白字符。
*向后跳到整文件最近距离的单词末尾: 输入“e”.
*向前跳到整文件最近距离的单词首部: 输入“b”.
*跳到整文件下个单词首部: 输入“w”.
**行内移动 以下均可可以加上数字N前缀表示移动N次(如'3fc'表示执行'fc'3次。)
*移动到光标右面第一个字符c的后面: 输入"fc".
*移动到光标右面第一个字符c的前面: 输入"tc".
*移动到光标左面第一个字符c的前面: 输入"Fc".
*移动到光标左面第一个字符c的后面: 输入"Tc".
*重复前一次输入的f, t, F, T命令: 输入";". 例如刚才是'fc',输入';'相当于还是'fc'。
会反方向重复前一次输入的f, t, F, T命令: 输入",". 例如刚才是'fc',输入','相当'Fc'。 *
*在较长行内的移动: 这里做一个小小的约定:较长的一行如果占据了屏幕的多行,那么这一行我们把它叫“长行”,屏幕上的一行叫做“屏幕行”。所以对于一个'长行'需要有多个'屏幕行'来显示。 在“长行”中移动到下一个“屏幕行”: 输入"gj".
*在“长行”中移动到上一个“屏幕行”: 输入"gk".
*在"长行"中移动到当前"屏幕行"首: 输入"g^".
在"长行"中移动到当前"屏幕行"尾: 输入"g$". 这里,如果一行超过了屏幕宽度,会显示在屏幕的多行,显示的虽然是多行,但是实际上还是一行,在输入上下移动的时候虽然是进入了上一行或者下一行,但是往往会呈现出在屏幕中一下跳过n行的样子。g$, g^, gj , gk 在行超过长度时好用。 j,k下上移动的是文本中的一行,当文本一行的长度超过屏幕的一行的时候,j,k移动的时候在屏幕上可能是移动多行。这时候可以用gj,gk来移动屏幕的一行而不是文本的一行。 同理g^和g$是屏幕的行首行尾,而不是文本的行首行尾。 *
*按百分比来跳转,跳转到文件50%处: 输入"50%". 这里利用%实现按百分比来跳转,如果想跳到75%处,输入“75%”。
**翻页 可以跟数字前缀N表示执行的倍数,翻页可以用[PageUP]/[PageDown].
*向下翻页: 输入“[Ctrl]f”.
*向上翻页: 输入“[Ctrl]b”.
*向下翻半页: 输入“[Ctrl]d”.
向上翻半页: 输入“[Ctrl]u”. *
**相对于光标的翻页 效果是行向相应的方向滚动了,光标仍然在原来的行,好像是将这个文本拖动了一样.
*光标所在行移动窗口的顶端: 输入"zt".
*光标所在行移动窗口的中间: 输入"zz".
*光标所在行移动窗口的底端: 输入"zb".
*将第n行滚至屏幕顶部: 输入“nzt”。
*将第n行滚至屏幕底部: 输入“nzb”。
将第n行滚至屏幕中部: 输入“nzz”。 *
*设置书签: 输入“ma”. 这样,会在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。只能记录当前文件里的书签,退出vim后再次进入将不会保留这些书签, 书签只是当前文件中的一个位置,但是我实践一下发现,设置完了书签之后,保存文件,这样也把书签保存了。
*到书签a处: 输入"`a". 注意,这个不是单引号,它一般位于大部分键盘的 1 的左边。
*到书签a所在的行: 输入"'a". 这里用的是单引号,将跳到书签所在的行。
*到上次编辑文件的地方:
输入".".
这个命令很有用,而且你不用自己去标记它,注意这里输入的是反引号
,精确到点。
*到上次编辑文件所在行: 输入“'.” 注意这里是精确到行,输入的是引号‘。
*回到最后一次插入状态返回的位置:
输入"'^".
或输入"^".
这里'.精确到行,
.精确到点(行+列)。
*查看当前所有书签的列表: 输入":marks".
*搜索相关: 搜索一个字符串: 输入“/string”。 这里"string"就是将要被搜索的字符串,会自动跳到光标后面第一个"string"处。
*在上次搜索的基础上向前搜索: 输入“N”。
*在上次搜索的基础上向后搜索: 输入“n”.
*逆向搜索一个字符串: 输入“?string”。 这里"string"就是将要被搜索的字符串,会自动跳到光标前面第一个"string"处。之后使用的“:n”和“:N”命令方向也会相反了。
*列出查找的历史记录: 输入"q/". 或输入"q?". 这会在vim窗口最下面打开一个新的窗口,列出你的查找历史记录可以选择。
向下完全匹配当前光标下单词: 输入“”。 之后也可以按'n'继续向下查找。
*向上完全匹配当前光标下单词: 输入“#”。 之后也可以按'N'继续向上查找。
向下匹配包含当前光标单词的字符串: 输入“g”。
向上匹配包含当前光标单词的字符串: 输入“g#”。 *
*跳到匹配的另一半括号: 输入“%”。 这样可以查找配对的括号,即: )、]、}。
*打开当前光标单词下的文件: 输入“gf”。 这里,假设当前的光标在相应的文件名上面,例如“main.c”等等。
*切换到上次打开文件: 输入“[Ctrl]^”。 这里,例如我们输入了gf进入某个文件,可以输入[Ctrl]^来回到刚才的文件,这个命令只能在当前和上一个文件之间切换,不能后退多步。
*后退到某个曾经浏览过的位置: 输入"[Ctrl]o". 流行的文本编辑器通常都有前进和后退的功能,可以在文件中曾经浏览过的位置之间来回移动。在vim中多次输入"[Ctrl]o"可以执行后退。
*前进到某个曾经浏览过的位置: 输入"[Ctrl]i". 或输入"[Tab]". 这样,如果执行过后退,在vim中多次输入"[Ctrl]o"可以执行前进。
8、Vim中如何全选并复制?
(区分大小写!!!) 全部删除:按esc键后,先按gg(到达顶部),然后dG 全部复制:按esc键后,先按gg,然后ggyG 全选高亮显示:按esc键后,先按gg,然后ggvG或者ggVG
单行复制:按esc键后, 然后yy 单行删除:按esc键后, 然后dd 粘贴:按esc键后, 然后p
vim只能粘贴50行的问题: 在当前用户主目录()编辑/.vimrc(如果不存在,新建这个文件),添加一行
:set viminfo='1000,<500
至于为什么要输入输入’1000,这个其实不重要,最主要的是输入<500,它是设置寄存器保存的行数的。即最大值为 500
9、批量注释
1,在命令行模式下,将光标固定在第一列,按Ctrl+V快捷键进入VB可视化模式: 上下移动光标,选择你想要注释的行: 选择好之后,按大写的I键进入insert模式,输入注释符“#”: 最后按ESC键(两次),选择的多行已经注释掉啦
取消多行注释时同样重复Step1-Step2,但此时光标选中注释符,并选好行数之后。只需按d键(小写),注释就被删除啦
10、如何取消vim粘贴时自动注释功能
vim在粘贴内容的时候,如果遇到以#开始的注释行,会自动将后续的所有行进行注释。也许这个功能在某些情况下是很有用的,但很多时候是不需要的,需要取消这个默认的功能。
取消这个功能也很简单,只需要在根目录下编辑.vimrc文件(如果没有,就创建该文件),在其中添加下面的内容:
set paste 保存即可。
11、vim中关于不可见字符tab/空格的设置
参考:https://www.cnblogs.com/Alfred-HOO/articles/15621909.html TAB键显示为^I,而行尾则标识为$。
:set list //显示不可见字符
:set nolist //隐藏不可见字符
:set list! //切换显示或隐藏不可见字符
12、autoindent和smartindent的区别
set autoindent 自动缩进,即为新行自动添加与当前行同等的缩进。 set smartindent 基于autoindent的一些改进
set autoindent 使 Vim 在创建新行的时候使用与上一行同样的缩进 set smartindent 创建新行时使用智能缩进,主要用于 C 语言一类的程序。通常,打开 smartindent 时也应该打开 autoindent
13、Vim复制粘帖格式错乱问题
参考:http://t.zoukankan.com/Dev0ps-p-9813621.html
方法一: :set noai nosi 取消了自动缩进和智能缩进,这样粘贴就不会错行了。但在有的vim中不行,还是排版错乱。
方法二:(推荐) :set paste 进入paste模式以后,可以在插入模式下粘贴内容,不会有任何变形