快!用Vim

news2024/12/28 8:21:38

文章目录

  • 简介
  • 基操
    • 移动
    • 删改查
    • 搜索替换
    • 多文件操作
    • text object
    • 赋值粘贴
    • macro
    • 补全
    • 配色
  • 自定义配置
    • 映射
  • 插件
    • 常用插件
    • go
    • python
    • 浏览
    • 补全
    • 格式化
    • git
  • Tmux
  • neovim

简介

  • 在 Linux 平台使用 Vim 编辑器,成为NB Vimer
  • 安装 vim 就不介绍了

基操

  • 三种模式
    • insert
      a:  append
      i:	insert 光标处
      o:	open a line below
      A:	append after line
      I:	insert before line
      O:  append a line above
      
    • normal(default) / command
      # : 都是命令
      :w	#save
      :q	#quit
      :set nu	#line number
      :vs	#vertical split
      :sp	#split
      :% s/java/python #replace 'java' with 'python'
      u	#撤回上一步操作
      # command 不单独算作一种模式,因为他只能在 normal 或者 visual 模式的基础上执行,insert 模式下只能通过映射执行 command
      
    • visual
      v:	visual 选择字母
      V:	选中整行
      Ctrl+v:	块状选择
      
  • 出错了
    • 输入时,某个单词输错怎么办?
      1
    • 相关快捷键
      ctrl+h	#删除字母
      ctrl+w	#删除单词
      ctrl+u	#删除当前行
      # 在terminal也可用
      
  • insert -> normal
    • ESC
    • ctrl+c
    • ctrl+[
    • 可以配置自己喜欢的键位
  • 回到上一次编辑的位置
    • 准确来说是上一次退出 insert 模式的位置:gi,继续编辑

移动

  • 均是在 normal 模式下
  • 快速移动
    • 上下左右
      2
    • w/W 移动到下一个 word 开头,e/E 移动到下一个 word 结尾,b/B 回到上一个 word 开头
      • 小写表示以非空白符分割的单词,比如这句 java __! python go,还会移动到!
      • 大写表示以空白符分割的单词,只会移动到 j _ p g 前;不必纠结,能动就行
    • 0 行首,$行尾
    • gg文首,G文尾
  • 行间搜索移动
    • normal 模式下,f{char} 搜索并移动到 char 的位置,默认搜索光标往后的; ,前一个,;后一个
    • F{char} 往前搜,,后一个,;前一个
  • 页面移动
    • ctrl+f 向下翻页,ctrl+u 向上翻页
    • zz 把当前行滚动到屏幕(terminal)中间
    • H/M/L 光标移动到屏幕 开头/中间/结尾
  • 命令很多,不需要刻意记忆,经常使用即可!
    • 可以看到很多命令都是在 normal 模式下,大部分情况也都是在浏览,而非编辑

删改查

  • 都是在 normal 模式下
  • 删除
    • dw 删除单词(非空白符分割),diw 删除单词,保留空格
    • x 删除字符,可配合v 模式使用
    • dd 删除整行,ndd 删除 n 行
    • dt{char} 删除,直到 char 字符处(不包括char)
  • 修改
    • r 替换,例如:ra 将光标处字符替换成 a;R 打开替换模式
    • s 删除光标处字符并进入插入模式;S 删除整行并进入 insert 模式
    • cw 删除单词并进入 insert 模式
  • 查找
    /{string} 搜索字符串 string,n 搜下一处,N搜上一处
    * 当前单词的下一个匹配,#当前单词的上一个匹配

搜索替换

  • 命令模式下
  • 格式::[range]s/{pattern}/{string}[flags],range 表示替换范围,:10,20表示10-20行,%表示全部文本
  • 例如::20,23 s/python//n ,会显示匹配到多少行
    1
  • 使用正则::25,27 s/\<abc\>//n 完全匹配
    2
  • flag 还有cg模式,表示询问和全局替换;flag 可以不写
    3

多文件操作

  • 几个概念
    • buffer:缓冲区
    • window:窗口,一个缓冲区可以存在于多个小窗口,大窗口(整个屏幕)可以打开不同的缓冲区
    • tab:标签页,分类文件
  • Buffer
    • 打开一个文件,其实就创建了一个缓冲区;使用 :e xxx.txt 就打开并进入另一个缓冲区;使用 :ls 查看
      2
    • 跳转::b 1 跳转到第一个缓冲区;:blast 跳转到最后一个缓冲区;类似的还有 :bpre :bnext :bfirst
    • 窗口和缓冲区
      3
    • buffer 可以和文件等价
  • Window
    • 分割方法前面说过,:vs:sp;还可以用 ctrl+w+v ctrl+w+s
    • 窗口间切换
      1
    • 一个缓冲区可以存在于多个小窗口;但操作时都是同步的
      2
    • 注:一个缓冲区只能有一个文件,如果使用 :vs xxx.txt 切开窗口打开其他文件,也会同时增加一个 buffer,只不过此时一个窗口包含了多个buffer
    • 窗口编排;好像没作用?
      3
  • Tag
    • 相当于分类标签,将不同类的文件(buffer)聚在一起,在各自标签里可打开不同buffer(文件)切多个窗口;不常用
      3
    • 使用 :tabnew hello.py 可以在新的标签打开文件
    • 常用命令
      1
      2

text object

  • 和主流编程语言的面向对象类似,vim 将文本视作对象,自然也就有操作对象的方法
  • 比如一个单词,一个句子,一段话都是对象,可以使用方法快速修改删除
  • 命令格式:[number]+<command>+模式+[text object]
    • command 包括:d(delete)/c(change)/y(yank)/v(visual)
    • text object 包括:w(word)/s(sentence)/p(paragraph)
  • 常用命令
    • viw 选中当前单词,不包括空格;vw会选中当前单词到下一个字符分割起始位置(一般不用)
      1
    • 操作成对括号/引号中的内容;比如 vi" 快速选中当前位置双引号中的内容,ci" 快速删除双引号中的内容并进入 insert 模式
      2

赋值粘贴

  • normal 模式
    1
  • insert 模式,一般使用 ctrl+v
    2
  • 删掉的东西放在寄存器
    3
  • :reg a查看 a 寄存器保存的内容,"a p粘贴 a 中保存的内容
    4
  • :set clipboard=unnamed 可以直接复制粘贴系统剪贴板

macro

  • 什么是宏
    1
  • 如何录制并回放
    2
  • 需求:给每行文本加上双引号
    • qa 使用 a 寄存器录制
    • I 加双引号,A 加双引号
    • q 退出录制
    • 到下一行,VG全选
    • :normal @a 在选中行回放
  • 上面在命令行模式下执行了 normal 模式的命令,我们完全可以使用这种方式完成需求
    • VG
    • :normal I" 给所选行开头加双引号
    • : ctrl+p 回到上一个命令
    • 改为 A" 给末尾加上双引号

补全

  • ctrl+n 根据文件中已存在的单词补全;如果有多个匹配项会提示,ctrl+p 选择下一个
    1
    2
  • ctrl+x+f 列出路径下的文件(夹)
    3

配色

  • 现在的编辑器都支持更换主题,Vim 也不落后
    1
  • 举例
    2
  • 可以自己下载配色并使用,有教程
    3
    4

自定义配置

  • 什么是 Vim 配置
    1
  • 编辑文件 ~/.vimrc,可以在编辑时就让这个文件生效::source ~/.vimrc
    set nu 
    syntax on 	# 语法高亮
    colorscheme freya 	# 主题
    set hlsearch 	# 高亮搜索
    set foldmethod=indent 	# 方法折叠
    set pastetoggle=<F2> 	# F2进入剪贴板粘贴模式,默认是autoindent
    inoremap jj <Esc>`^	# 映射,后面会讲;使用 jj 代替 Esc
    noremap <C-h> <C-w>h	# 分屏的光标移动
    noremap <C-l> <C-w>l
    noremap <C-j> <C-w>j
    noremap <C-k> <C-w>k
    
  • 效果
    2

映射

  • 映射非常强大且复杂,掌握一些常见用法即可
  • 基本映射
    1
  • 模式映射;例如在insert模式下使用normal的命令::imap <c-d> <Esc>ddi ctrl+d 删除一行(回到normal再回来)
    2
  • 注:要注意递归映射映射冲突
    3
  • 非递归映射:no recursion map
    4
  • 总而言之,只能用 nnoremap/vnoremap/inoremap

插件

  • 什么是插件
    1
  • 安装 vim-plug 插件管理器
    2
  • 参考官方给的 Usage,只保留这两行
    3
  • 第一个插件
    • vim-startify,开屏工具
    • 修改配置文件并生效::source ~/.vimrc,安装::PlugInstall
      4
    • 就是把需要安装的插件加入插件列表即可,非常简单
    • 直接通过 vim 命令就可以看到效果
      5
  • 如何寻找需要的插件?常用的三种方式,推荐第二种;一般先有需求,再找插件
    6

常用插件

  • 美化插件
    • 良好的布局和配色让我们身心愉悦
    • 上面安装的 vim-startify 美化了启动界面
    • vim-airline,美化状态栏
      1
      2
    • indentline 代码缩进线
      3
    • hybrid 主题配色;~/.vimrc 添加 colorscheme hybrid
      4
  • 文件目录插件
    • nerdtree 目录树
    • vim 然后 :NERDTree,就可以看到目录
      5
    • 每次敲命令太麻烦,加一些配置,就可以用 ctrl+t 打开目录,并显示隐藏文件
      6
    • ,+n 从打开文件中返回目录树,ctrl+w+p 再返回文件
    • 可以添加配置 autocmd VimEnter * NERDTree 让我们打开文件时就出现目录树
    • 如何通过搜索快速找到文件?安装 ctrlp
    • 配置:let g:ctrlp_map = '<c-p>' 使用 ctrl+p 开始搜索,打开文件后使用 ctrl+f 定位到目录树
      7
  • 跳转插件
    • 在文件内快速跳转到某一处,可以使用移动命令,或者 / 搜索
    • 这里使用插件:easymotion,添加配置:nmap ss <Plug>(easymotion-s2)
    • 直接输入 ss 即可开始搜索,高亮出匹配的位置
  • 成对编辑插件
    • normal 模式下修改成对的内容,比如双引号
    • vim-surround
    • ys iw " 给选中单词加双引号(you add a surrounding),其实是使用了 visual 模式
    • cs " ' 替换为单引号
    • ds " 删除双引号
  • 模糊搜索插件
    • 在项目中搜索一些文本,这里使用 fzf
    • 我们要安装 fzf 和 fzf.vim
    • 使用:vim:Ag [pattern] 模糊搜索字符串,使用::Files [path] 模糊搜索目录(相当于前面的 ctrl+p)
  • 搜索替换插件
    • far
    • 使用:替换后会有预览,确认无误后 Fardo
      :Far foo bar **/*.py
      :Fardo
      

go

  • 写 go 代码的插件 vim-go
  • 使用教程
    • 重构
    • 自动导入
    • 自动格式化
    • 跳转
    • 代码补全

python

  • jedi-vim 或者 python-mode
  • python-mode 支持的一些配置;ctrl+] 跳转到定义处
    1
  • 用起来,才能遇到问题,才能熟练

浏览

  • 代码大纲插件,tagbar,还需要安装依赖 Universal Ctags
  • 使用 :TagbarToggle 召唤出右侧大纲
    1
  • 高亮单词插件 lfv89
  • k 高亮所在单词,K 取消高亮

补全

  • 前面介绍了不同编程语言的插件,提供了补全功能
  • 这里介绍一个通用的代码补全插件,deoplete,再配合对应语言的扩展即可
  • 例如要补全 python 代码,还需安装
    pip3 install --user jedi --upgrade
    # Vim-Plug
    NeoBundle 'deoplete-plugins/deoplete-jedi'
    # or
    Plug 'deoplete-plugins/deoplete-jedi'
    
  • 还有一个比较火的补全插件,coc

格式化

  • 通用代码格式化插件 neoformat
  • 例如 pip 安装 autopep8 格式化 python 代码,打开文件使用 :Neoformat
    let g:neoformat_python_autopep8 = {
                \ 'exe': 'autopep8',
                \ 'args': ['-s 4', '-E'],
                \ 'replace': 1, " replace the file, instead of updating buffer (default: 0)
                \ 'stdin': 1, " send data to stdin of formatter (default: 0)
                \ 'env': ["DEBUG=1"], " prepend environment variables to formatter command
                \ 'valid_exit_codes': [0, 23],
                \ 'no_append': 1,
                \ }
    
    let g:neoformat_enabled_python = ['autopep8']
    
  • 通用静态检查插件 ale
  • 如果想检查 python,还需要安装 pylint;但是 pylint 的检查很严格,可以修改配置忽略一些错误
  • 代码注释插件:vim-commentary,使用 gc 即可注释或取消注释

git

  • 在 vim 中使用 git 的插件:fugitive
  • 使用也很简单,:Gblame:Gdiff:Gcommit
  • 另一个插件:gitgutter,可以标记出修改、新增等
  • 第三个插件:gv.vim,使用::GV 就可以看到提交信息
    1
  • 到此,介绍了很多插件,也还有很多好用的插件没提到,但是这个东西不在于多而在于满足自己的需求,经常使用达到熟练,提高效率才是目的

Tmux

  • 分屏,托管进程;可以让我们在一个窗口操作多个进程
  • 使用手册
    1
  • 也可以将 vim 嵌入到开发工具中,比如 pycharm,vscode等
    2

neovim

  • 原始的 vim 代码老旧,不支持异步等
  • 所以有了搞了 Neovim,官网,可以尝试使用
  • 还有一些大佬写好的 Vim 配置
    • SpaceVim
    • vim-config
  • 抛砖引玉,有好的建议或者配置可以评论分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP-C3入门6. 使用UART串口

ESP-C3入门6. 使用UART串口一、简介二、UART使用的一般步骤三、使用的API1. uart_config_t结构体和设置参数函数uart_param_config()2. 专用函数设置参数3. 设置通信管脚uart_set_pin()4. 安装驱动程序uart_driver_install()5. 运行UART通信 uart_write_bytes()和uart_read_byt…

Spring Batch 批处理-执行上下文

引言 接着上篇&#xff1a;Spring Batch 批处理-作业监听器&#xff0c;了解作业监听器后&#xff0c;本篇就来了解一下Spring Batch执行上下文&#xff0c;来看看Spring Batch 如何在作业与步骤间进行数据共享。 作业与步骤上下文 语文中有个词叫上下文&#xff0c;比如&am…

设置mysql远程链接

一、 进入mysql数据库 mysql -uroot –p密码 二、 创建用户进行远程链接 Mysql>grant all privileges on *.* to duan%identified by 111111 with grant option; ‘duan’:用户名 ‘%’&#xff1a;表示所有主机都可以登录&#xff0c;如果‘ip’表示该主机可…

[GXYCTF2019]luck_guy1题解

无论风暴把我带到什么样的岸边&#xff0c;我都将以主人的身份上岸。 ——贺拉斯 目录 1.查壳 2.静态分析 分析信息 猜测 3.wp 1.查壳 x86-64 拖入64位IDA 2.静态分析 找到main函数&#xff0c;按下F5反编译 int __cdecl main(int argc, const char **argv, const cha…

Python Windows Apache部署Django项目运行环境

目录 一、安装Apache服务器 1、在官网http://httpd.apache.org/download.cgi或网上搜索下载zip压缩包 2、Apache相关配置 3、创建Apache服务器 解决报错AH00369: Failed to open the Windows service manager, perhaps you forgot to log in as Adminstrator? 4、启动ap…

【每周Java技术】2023.01.26 周四 到 01.29 周日

文章目录一、01.26 周四 大年初五1.1&#xff09;Python的一道算法题目1.1.1) 题目1.1.2) 解答1.1.3) 知识点一、01.26 周四 大年初五 1.1&#xff09;Python的一道算法题目 1.1.1) 题目 2437. 有效时间的数目 给你一个长度为 5 的字符串 time &#xff0c;表示一个电子时钟…

产线工控设备安全经验分享

工控设备安全现状 工业控制系统是支撑国民经济的重要设施&#xff0c;是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域&#xff0c;支撑起国计民生的关键基础设施。 随着传统的工业转型&#xff0c;数字化、网络化和智能化的工…

机器学习算法竞赛实战--3,数据探索

数据挖掘是竞赛的核心模块之一&#xff0c;贯彻竞赛始终也是很多竞赛胜利的关键那么数据探索又是什么呢&#xff1f;可以解决哪些问题&#xff1f;首先应该明确3点&#xff0c;即如何确保自己准备好竞赛使用的算法模型如何为数据集选择最合适的算法如何定义可用于算法模型的特征…

安装DevStack稳定版本zed

STEP1: 创建stack用户(一定要&#xff01;) sudo useradd -s /bin/bash -d /opt/stack -m stack sudo chmod x /opt/stack echo "stack ALL(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack sudo -u stack -i //用stack用户登陆 STEP2: git clone devsta…

SAP中物料价格改变导致的库存价值变动业务分析

基于审计的需求要看看物料在标准成本价格变更前后的库存成本变化情况。找了下资料&#xff0c;需要用到 CKMPCSEARCH这个事务&#xff0c;相当于是一个用于价格修改凭证查询的事务。但试了一下在本公司的系统中并没有从搜索到其菜单位置。 尝试直接输入Tcode后&#xff0c;是可…

CSRF 伪造跨域请求

文章目录一、什么是伪造跨域请求二、攻击方式三、防御措施1、检查Referer字段2、添加校验token一、什么是伪造跨域请求 伪造跨域请求&#xff08;英语&#xff1a;Cross-site request forgery&#xff09;&#xff0c;通常缩写为 CSRF&#xff0c; 是一种挟制用户在当前已登录…

IntelliJ IDEA 2021.2(Community Edition)安装阿里编码规约插件,亲测有效

1.背景阿里巴巴java开发手册不断完善并出了很多版本到目前2023年1月截止&#xff0c;已经出了黄山版&#xff0c;在文章最后有参考资料可根据需要下载&#xff1b;随着企业对项目质量的要求&#xff0c;对开发代码也有了更高的要求和规范&#xff0c;借助阿里巴巴编码规约插件&…

redis geo 没有迁移手工插入数据

1、docker ps |grep redis2、docker exec -it qinghai-sc-xining-redis-single/eadd4cc4eefe bin\sh --进入redis容器[rootlocalhost ~]# [rootlocalhost ~]# [rootlocalhost ~]# [rootlocalhost ~]# docker ps|grep rediseadd4cc4eefe redis "docker-entrypoint.s…"…

python 气体扩散,在 Python中用数值模拟研究气体扩散

在 Python 中&#xff0c;可以使用数值模拟来研究气体扩散。 模拟气体扩散需要解决两个问题&#xff1a;流体动力学方程&#xff08;如 Navier-Stokes 方程&#xff09;和扩散方程。 文章目录Python 代码模拟气体扩散计算并显示气体浓度的均值和标准差研究气体扩展的高级方法Py…

Word控件Spire.Doc 【Table】教程(7): 如何在C#中用表格替换word文档中的文本

Spire.Doc for .NET 是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

【金三银四系列】之Java基础面试(2023版)

Java基础面试题 一: Java基础 1: 简单说说Java中对象如何拷贝? 一、浅拷贝clone&#xff08;&#xff09;如果对象中的所有数据域都是数值或者基本类型&#xff0c;使用clone&#xff08;&#xff09;即可满足需求&#xff0c;如&#xff1a;Person p new Person();Person…

30天自制操作系统(Mac版)读书笔记(day9)

day7和day8都是鼠标和32位的操作&#xff0c;看起来都是理论&#xff0c;先略过。 检测内存块数量 使用中断去检测内存&#xff0c;把这个当成一个函数调用吧。这里面di寄存器给的地址就是结果存在的内存位置。 ComputeMemory:mov ebx, 0mov di, MemChkBuf .loop:mov e…

linux安装vnc服务

1、 如操作系统是最小化安装&#xff0c;那么需要安装GNOME桌面&#xff0c;安装参考&#xff1a;https://blog.csdn.net/carefree2005/article/details/119417234 2、 安装vnc-server yum -y install tigervnc-server3、 复制配置文件模板&#xff0c;将无关的内容清除 cat…

图灵 | 计算机器与智能

【“计算机器与智能”选自《Mind》&#xff0c;no.2236&#xff08;1950.10&#xff09;&#xff0c;P433-460。牛津大学出版社允许重印。刘西瑞、王汉琦 翻译】1. 模仿游戏我建议来考虑这个问题 &#xff1a;“机器能够思维吗&#xff1f;” 这可以从定义 “机 器” 和 “思维…

Docker数据目录迁移

背景在CentOS中安装了Docker&#xff0c;默认Docker Root目录是/var/lib/docker。但是该目录磁盘空间很有限&#xff0c;后期很容易导致系统盘满了&#xff0c;所以考虑迁移到更大磁盘目录下&#xff0c;比如下面的/fsc目录下。解决在Docker官方文档https://docs.docker.com/co…