操作符和动作

  • Vim两个基本概念:操作符operator和动作motionoperator看作动词,motion看做名词。
  • 操作符是用于对文本内容进行操作的命令,比如修改c、删除d、y复制到寄存器、~交换大小写、g~反转大小写、>增加(右)缩进、<减小(左)缩进、=自动缩进、zf定义折叠、gu转为小写、gU转为大写等。
    # 查看操作符
    :h operator
    
  • 动作是指移动光标的命令等。比如h、j、k、l、/、w、b、e、^、0、$、%、s等。用来限定范围
    动作 = 移动光标的命令
    或
    动作 = [数字] + 移动光标的命令
    # 数字表示移动次数,默认为1
    
    # 查看motion帮助文档
    :h motion.txt
    :h motion
    
  • operatormotion结合实现Vim操作的语法如下
    [数字] + 操作符 + [数字] + 动作
    # 第1个数字表示执行(操作符 + [数字] + 动作)的次数,默认为1;第2个数字表示执行动作的次数,默认为1
    # 比如2d2w表示执行2次d2w,d2w表示删除2个词(包括词后面的空格)
    

    此时,operator表示要执行的操作(比如删除d,修改c,复制y等),motion表示该operator能操作的范围(比如2w表示能对2个单词执行该操作)。简而言之,操作符用来告诉Vim我要做什么操作,动作用来告诉Vim我要操作的具体范围(对哪部分文本进行操作)。

  • 为单位的操作的语法
    [数字] + 操作符 + [数字] + 操作符
    # 前后两个操作符一样。
    # 第一个数字表示执行"操作符 + 数字 + 操作符"的次数,默认为1。
    # 第二个数字为从当前行开始,向下操作的行数(包括当前行),默认为1
    

    行操作时,用数字来控制该操作符能操作的范围。
    y2y复制2行,d3d删除3行,2c3c删除6行并进入插入模式(等价于c6c),>5>右缩进5行等。

    使用行操作有时候可以在不使用行可视行模式的情况下,对多行进行批量操作。

  • 总结操作符和动作语法公式

    动词 + 名词

    动词用来表示具体执行什么操作(比如删除,修改,复制等),名词用来限制该动词操作的范围。

    # operator为动词,motion为名词
    公式一: [数字] + operator + [数字] + motion
    公式二: [数字] + operator + [数字] + operator
    
  • 操作符(operator)结合文本对象(text-object)公式
    # operator为动词,text-object为名词
    [数字] + operator + [数字] + text-object
    

    核心:只要掌握了operator、motion和text-objects,就可以使用不同的operator和不同的motion或text-object进行组合使用,从而实现无尽的操作。

buffers和windows以及tabs

A buffer is the in-memory text of a file.
A window is a viewport on a buffer.
A tab page is a collection of windows.

buffers
  • buffer(缓冲区):即为内存中的一块空间,用vim打开一个文件时,该文件的数据就与一个buffer绑定,用户在buffer中编辑文本。
  • 命令模式下,查看当前缓冲区具体有哪些文件
    :buffers
    :ls
    :files
    
  • 不同buffer之前切换
    :bnext                        # 切换到下一个buffer
    :bprevious                    # 切换到上一个buffer
    :buffer + n                   # n是buffer编号
    :buffer + 文件名               # 切换到指定文件名的buffer
    :bdelete + 文件名/buffer编号      # 删除
    
    ctrl-^        # 跳到先前编辑过的buffer
    
  • 退出buffer/关闭vim
    :xall     # 保存并退出所有的buffer
    :wall     # 保存所有buffer
    :wqall    # 保存所有buffer并退出
    :qall     # 关闭所有buffer,但是不报存变更
    
windows
  • window(窗口):一个窗口是在buffer上面的一个视口,一个buffer可以对应多个窗口。查看文档:h window
  • 命令模式下划分窗口
    :sp           # 水平分割
    :vs           # 垂直分割
    :new          # 创建新文件并打开
    

更多窗口内容请参考下文中多窗口编辑.

tabs
  • tabs(选项卡):是窗口的集合,可将多个窗口收集(放在)一个tab中,从而在不同的tab中实现不同的窗口布局。在Vim中,打开tab不表示打开了一个文件;同样关闭tab也不代表关闭一个文件。文件的数据依然存储在内存的buffers中。
  • 命令模式下窗口命令
    :tabs         # 查看tab数
    :tabnew       # 新建tab
    :tabclose     # 关闭当前tab
    :tabnext      # 切换至下一个tab
    :tabprevious  # 切换至上一个tab
    :tablast      # 切换到最后一个tab
    :tabfirst     # 切换到第一个tab
    
  • 普通模式下窗口命令
    gt        # 切换到下一个tab
    gT        # 切换到上一个tab
    n + gt    # 切换到编号n的窗口
    
  • 终端命令行启动时创建多个窗口选项-p
  • tab的优点:将不同的窗口放到不同tab中,可以在不同的tab里面使用不同的窗口布局。比如第一个tab包含2个垂直窗口,第2个tab中为水平或垂直混合窗口布局。

模式切换技巧

Esc      # 其他模式切换到普通模式
Ctrl+[ # 其他模式切换到普通模式
gi      # 从其他模式快速跳转到最后一次编辑的地方并进入插入模式
  • 插入模式下jk映射为esc,按下jk会从插入模式退回普通模式
# 在配置文件vimrc文件里面添加
inoremap jk <esc>

打开文件光标快速跳转到上一次编辑的位置:打开文件,之后按下gi

VIM(Neovim)基本概念与高效使用方法相关推荐

  1. Paillier半同态加密:原理、高效实现方法和应用

    简介: <数据安全法>已于9月1日起正式实施,两个月后<个人信息保护法>也将开始施行,意味着数据安全和隐私保护方面的监管将会在年内陆续到位.在合规收紧大背景下,"数据 ...

  2. 基于qtc++设计文本编辑器的代码_文本编辑器Vim/Neovim被曝任意代码执行漏洞,Notepad:兄弟等你好久了...

    犹记前些日子,微软的记事本文本编辑器爆出了本地代码执行漏洞. Google Project Zero研究员Tavis Ormandy宣布在微软的记事本文本编辑器中发现代码执行漏洞. 可以看见,他在no ...

  3. 用vim写php,Vim/Neovim中配置PHP的代码调试

    使用了一段时间的Neovim(Vim的一个变种)之后,发现再也离不开了,目前已经把Neovim作为主力开发工具了.刚也把PHP的调试功能给配置上了,这里记录一下在Neovim中配置PHP调试的整个过程 ...

  4. Paillier 半同态加密:原理、高效实现方法和应用

    一 简介 1 背景 <数据安全法>已于9月1日起正式实施,两个月后<个人信息保护法>也将开始施行,意味着数据安全和隐私保护方面的监管将会在年内陆续到位. 在合规收紧大背景下,& ...

  5. 干货!基于非递减分位数网络的值分布强化学习及其高效探索方法

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 尽管值分布强化学习在过去几年中得到了广泛的研究,但仍然存在两方面未能解决问题:一是如何保证估计出来的分位数函数的有效性,二是如何有效地利 ...

  6. 文本编辑器Vim/Neovim被曝任意代码执行漏洞,Notepad:兄弟等你好久了

    犹记前些日子,微软的记事本文本编辑器爆出了本地代码执行漏洞. Google Project Zero研究员Tavis Ormandy宣布在微软的记事本文本编辑器中发现代码执行漏洞. 可以看见,他在no ...

  7. 如何阅读英文文献,有哪些高效的方法或者辅助工具?

    [每日一问]如何阅读英文文献,有哪些高效的方法或者辅助工具? Datawhale优秀回答者:追风者 方法 先是通读文献综述(理解专业术语和基本概念),起初时应以泛读为主:再研读自己研究领域的经典论文5 ...

  8. 小样本学习——概念、原理与方法简介(Few-shot learning)

    Few-shot learning (FSL) 在机器学习领域具有重大意义和挑战性,是否拥有从少量样本中学习和概括的能力,是将人工智能和人类智能进行区分的明显分界点,因为人类可以仅通过一个或几个示例就 ...

  9. 【编译原理】期末 龙书概念梳理+做题方法(混子保过指南+学霸提分秘籍)

    编译原理期末总结 龙书概念梳理+做题方法 目录 编译原理期末总结 龙书概念梳理+做题方法 编译概述 1 编译过程 2 编译&解释 3 GCC的处理过程 词法分析 1 词法分析的任务 2 词法分 ...

最新文章

  1. 关于谷歌地图坐标与百度地图坐标的事
  2. apache kafka系列之server.properties配置文件参数说明
  3. 《货币战争》的一点感想
  4. html表格编辑器退出编辑状态,易优后台编辑器取消html标签(比如表格属性等)过滤解决方法...
  5. 清华大数据,365天我们持续在发声——数据院四周年系列报道之传播篇
  6. 经典网页设计:25个优秀的个人网站设计欣赏
  7. 传奇私服架设微端搭建教程
  8. 【火星传媒深度】Coinbase:加密世界的“谷歌”
  9. 基于FPGA的SPI-Flash控制器的Verilog设计和验证
  10. 爬虫三:用xpath爬取链家网二手房信息
  11. 未来计算机畅想英语作文,畅想未来的生活life in the future
  12. Powerdesigner将数据表的Name变中文,字段全部变大写
  13. 外媒眼中的乔布斯:他就是苹果
  14. echarts折线图曲线,每个值上面添加小圆点或者小圆圈
  15. 公司来了个新测试开发,一副毛头小子的样儿,哪想到......
  16. ios tableView那些事 (九) tableview的删除
  17. 揭露强奸犯的黑客被判有罪?审视CFAA计算机欺诈法
  18. 分布式系统原理介绍_分布式系统的全面介绍
  19. 结构体运算符与取余_c语言取余(c语言去整和取余)
  20. Java计算机毕业设计电影票网上订票系统源码+系统+数据库+lw文档

热门文章

  1. CListCtrl使用详解
  2. 使用zed相机录制视频
  3. zabbix-监控网卡流量
  4. 国内外php商城系统 开源、php商城比较
  5. Gith黑窗口如何进入更深一级的文件夹
  6. ”==”和和equals方法究竟有什么区别?
  7. IDEA导入lib包及IDEA+Sikuli实例
  8. 一建部署LAMP脚本
  9. 微信跨平台方案Donut快速上手
  10. NAL Unit解析