Vim学习笔记

第好几次尝试冲Vim这个陡峭的学习曲线

Posted by tianchen on January 1, 2020

Vim 学习笔记

看到妃神的操作效率之后有了干vim的信心…(然而妃神用的是emacs)

B4 2019-12

  • 移动光标指令
    • 0(^) / $ 跳到行首/末
    • dd 删除行
    • dw 删除word
    • 下一个词 w 上一个词b
    • /word_to_search: search ffoward
      • 然后再按n 表示下一个
        • ?word_to_search: search_backward
    • L(大写)屏幕的底行 M中间 H顶端
      • G 文尾 gg 文章开始 ngg到第N行
    • 向下翻页 ctrl+f 半页crtl+d
      • 向上 ctrl+b crtl+u
    • 批量缩进
      • 先用v进行块选中,再用shift+> 进行缩进调整
  • 正常是i是在当前光标插入,I在行的前面插入,A在行的最后面插入,o是在下一行开头插入
  • 查找匹配的括号: 光标放在括号上面,按“%”
  • 替换指令(类似rename)
    • s/AAA/BBB 第一个
    • %s/old/new/g(c) 直接替换全局(带c会询问)(注意前面那个%必须要加)
  • yy复制一行,P粘贴(不需要进入输入模式,进入输入模式之后CRTL+SHIFT+V粘贴)
    • 按下V,然后上下箭头可以选中一定范围,然后y表示复制这一段,p表示粘贴
    • d表示剪切
  • u撤销,U撤销撤销
  • 在插入模式中,其实CTRL+N是自动补全
  • CTRL+O 跳转到上次修改

2019-12-8

  • %在括号之间跳跃
  • 多行注释 (比较复杂)
    • 首先CTRL+V进入可视模式(Visual Mode)
    • 然后在行首往下移动,选中所有
    • SHIFT+I进行输入,输入一个值
    • 按ESC之后会发现所有行的开始都加上了那个值
  • 部分替换
    • 先用CTRL+V的Visual模式选中一个部分
    • ”:”进入命令行并且s/AAA/BBB

2019-12-11

  • 检查自己的vim有没有安装clipboard vim --version | grep clipboard如果前面是个”-“那么就没有
    • 安装一下(用apt-get就好) vim-gtk, vim-gnome, vim-scripts
  • 与系统剪贴板沟通的默认方式是"+y
  • 自己映射快捷键,在vimrc中
    • 注意其中"是注释
  • inormap <C-j> <Esc>o

2019-12-24

  • 删除一个字母dw
  • 删除到行尾 d$
  • 删除到开头 d0

2019-12-25

  • 最近发现vim关闭很慢,搜索了一些内容之后没解决问题
  • 今天逐渐发现并不是关闭慢,而是保存慢(这个现象只在eva10上出现就很奇妙)
  • 今天禁用了Synaptics插件之后好像暂时解决了这个问题,具体情况未知

2019-12-27

  • 在Vim中打开其他文件 :e $FILENAME
  • 在EVA10上使用System Clipboard出现了问题,暂时通过修改vimrc之后解决了,具体原因暂时还是未知,后续有时间看一下
    • 现在有的时候貌似还是会出现剪贴板对不上的问题,可以通过:register查看一下自己想要的东西在哪个剪贴板,然后"0p的形式

2019-12-31

  • 研究了很久Vim的CLipboard的问题
  • 发现了首先远程服务器和系统剪贴板之间有问题,需要X11 Forwarding,而我们的服务器好像不大有
  • 另外直接粘贴好像也有一些问题(WSL和Win之间可能还有Gap)
    • 目前通过Tmux可以解决

2020-01-02

  • 孙博提到了,在远程服务器多文件之间用Vim复制内容可以直接用同一个vim打开多个文件,然后直接用内部Buffer
    • 但是和本机之间还是没有找到好的办法
  • :vs [file] 垂直分屏 / :sv [file]水平
  • CTRL+W&V也可做到垂直分屏
  • 分屏之后用CTRL+W&HJKL来移动
  • ```:e`` 是关闭当前文件并且编辑新的文件
  • :Vex垂直打开一个文件夹浏览

2020-01-08

  • 无意发现了~可以让当前字母大写

2020-03-09

  • 多行注释是CTRL V然后I然后输入然后Esc
  • 取消多行注释是CTRL V然后选中要删除的,然后d

2020-09-03

  • 发掘了nerdtree插件的使用姿势
    • 目前在cfg中配置的shortcut是nt,输入nt可以在左边直接打开tree目录
    • 对于这个key-map的几种方式目前还没有搞清楚…
  • 当光标在nerdtree中的时候
    • 回车可直接打开文件,并且光标跳转到文件中 - 等效于使用o
    • I可以直接split窗口并且打开文件, S则是Vsplit(横着两个)
    • 如果不想让光标跳转到文件中(比如需要打开多个文件),可以在O/I/S前面加上g
    • 使用r去刷新文件目录
  • NerdTree使用攻略

2020-09-11

  • c是替换指令
    • cw - 替换一个单词(从光标开始处往后,遇到空格,-等之类的表示分割的就会停下)
    • ci) - 替换()内部的内容
    • caw) - 删除整个()
  • e 表示jump到单词的末尾

2020-09-14

  • 回退过头之后用CTRL+R回复,注意不要保存了

2020-09-25

  • 输入括号之后让光标在中间 imap ()<Left>
  • 在一个单词上面加上括号 bcw()<Esc>p

  • also, check for error about git diff no new line at end of file
  • Shift+T 开启新tab(在我的vimrc中这样设置了)
    • gt进入下一个tab

2020-10-08

  • 向后删除到某个字符dt$CHAR
  • 从光标之前的$CHAR删除到$CHAR

2020-01-13

  • 强制保存修改readonly的文件 :w !sudo tee %
    • 可以在vimrc中写一个替换 cmap w!! w !sudo tee > /dev/null %

2020-10-18

  • vim粘贴时候每行缩进,通过在vim框子:set nosmartindent | :set noautoindent
    • 然后粘贴的时候可能就只有一点minor的格式问题
  • 但是每次都这样好像有点麻烦,所以可以利用vim中的paste模式,在vimrc中添加set pastetoggle=<F12>
  • 这样就可以通过F12进入paste模式,粘贴就正常了,再用F12就退出

2020-11-22

  • 今天突然发现vim搜索高亮所有结果应该是set hls,写在vimrc的前面貌似没用(不知道是哪里冲突了)
      • 实际上是这一行disable了search过程当中的高亮
    • 放到最后之后正常了,甚至之前的向后搜索n缓慢也解决了。迷惑
  • Vim中的默认 <Leader>指的是“\”按键

  • Vundle中添加了新的插件 - NerdComment - 优化的comment插件
    • Plugin 'scrooloose/nerdcommenter'
    • 配置 - let g:NERDSpaceDelims=1,在注释的时候自动添加空格
    • 使用方法
      • cc - 添加注释
      • cu - 取消注释
      • c - 自动判断是加还是去注释
      • cA - 在行尾添加注释
      • cs - 块注释

2020-11-28

  • 采用vimdiff命令来合并内容
  • vimdiff v1.py v2.py

2020-12-3

2020-12-20

  • 发现win下的文件用vim打开每行最后会有一个^M,貌似是对换行符解析的问题

2021-3-20

concerninig tab & spaces for python

  • space不会自己显示,通过在vimrc中添加内容来明确指示哪里是Tab set list; set listchars=tab:>-
  • 由于我们之前在vim设置中设置了自动将键盘输入的tab换成4个spaces:
set tabstop=4       " 一个tab显示出多少个字符的长度,默认8
set softtabstop=4   “ insert mode按一下tab时候缩小的长度
set shiftwidth=4	” 每一级别缩进的长度
set expandtab		“ 设置的时候用空格来等效缩进(star)
  • 但是由于网上clone下来的代码可能使用的是tab,我们可以输入:retab来重新批量替

2023-06-01 Relearn Vim

vim入门指南

  • 在normal mode中直接ZZ退出with saving,ZQ force quit
  • 删除至行末 D
  • zt & zb 将当前行置为顶/底
  • a进入insert mode会在当前单词的第一个字母之后
  • w/e 在单词之间移动,是头还是尾
    • dw直接删除到了下个单词开头,但是de删除到这个单词结尾(保留了之间的空格)
  • 3dd 删除三行
  • di( 删除括号内部的,da{包括括号
  • U undo all
  • 命令 :earlier 10m,回到10min之前的状态
  • % 在括号之间跳转
  • :! 后面添加linux command

Tutorials