Vim进阶2 map映射

Vim进阶2 map映射

简介

map是一个 vim 中的一些列映射命令,将常用的很长的命令映射到一个新的功能键上。map是Vim强大的一个重要原因,可以自定义各种快捷键,用起来自然得心应手。

map系列命令格式

格式

以 map 命令为例,它的命令格式是这样的:

:map {lhs} {rhs}

其含义是,在 :map 作用的模式中把键系列 {lhs} 映射为 {rhs}{rhs} 可进行映射扫描,也就是可递归映射。

举例

 :map td :tabnew .<cr>

含义:在其作用模式(普通、可视、操作符)下,输入 td 等价于输入 :tabnew . <cr>。而普通模式下输入:tabnew . <cr> 就是打开当前目录。

而如果再映射一次

:map ts td

就是指在其作用模式下输入 ts 等价于 td,也就是打开当前目录。不过如果没有特殊需要,一般不建议递归映射。

映射命令

不同模式下的映射命令

使用下表中不同形式的map命令,可以针对特定的模式设置键盘映射,实际上,不同的 map 命令前缀是可以相互组合的,

  • nore 表示非递归。 递归的映射。其实很好理解,也就是如果键a被映射成了b,c又被映射成了a,如果映射是递归的,那么c就被映射成了b,这个会在后面再介绍。

  • n 表示在普通模式下生效

  • v 表示在可视模式下生效

  • i 表示在插入模式下生效

  • c 表示在命令行模式下生效

常见的映射命令的有效模式如下:

Command 命令Normal 常规模式Visual 可视化模式Operator Pending 运算符模式Insert Only 插入模式Command Line 命令行模式
:mapyyy
:nmapy
:vmapy
:omapy
:map!yy
:imapy
:cmapy

noremap

看它的名字其实也很好理解它的含义:no re map,即不要 重新 映射,就是说不要进行递归映射。

具体来说,:noremap:map命令相对,作用模式和命令格式都相同,只不过不允许再对 {rhs} 进行映射扫描,也就是 {lhs} 定义后的映射就是 {rhs} 的键序列,不会再对 {rhs} 键序列重新解释扫描。它一般用于重定义一个命令,当然如果 :map 不需要递归映射的话,建议使用 :noremap

比如:

:noremap ts td

它的意思是在其作用模式下,输入 ts 就是输入td,但是和 :map 不同的是,此时 td 再不会做进一步扫描解释。虽然之前已经定义了 td,但是不会对 td 再做扫描。

取消映射

unmap

:unmap 是对应取消 :map 绑定的 {lhs},作用模式相同,命令格式 :unmap {lhs}

例如:

:unmap td

就是取消在其作用模式中 td 的绑定,比如之前 td 被绑定为 :tabnew .<cr>,此时此绑定消失。

注意 unmap 必须要有一个参数,即被取消的 {lhs} ,否则会报错。

mapclear

:mapclear 是对应取消所有 :map 绑定的,慎用!

常用map映射参考

下面介绍几个笔者在用的 vim 映射,大家如果觉得好用的话可以加到自己的 vimrc 里面。主要还是鼓励大家在自己的日常使用中根据自己输入的痛点,灵活地设计自己的map,毕竟做不同的工作,写不同的语言,输入的痛点都是不同的,这也正是 Vim 灵活好玩的地方之一。

推荐的原则是:将自己最常用的键设置在自己最容易按到的地方

1. 禁用方向键

为了强迫帮助新手尽快适应 hjkl 来移动光标,而非用方向键,我们可以将方向键禁用掉,包括常规模式和插入模式,这也是 MIT 建议的 vimrc 中的设置 (该链接会直接下载MIT的vimrc)。

" 常规模式禁用方向键
nnoremap <Left>  :echoe "Use h"<CR>
nnoremap <Right> :echoe "Use l"<CR>
nnoremap <Up>    :echoe "Use k"<CR>
nnoremap <Down>  :echoe "Use j"<CR>" 插入模式禁用方向键
inoremap <Left>  <ESC>:echoe "Use h"<CR>
inoremap <Right> <ESC>:echoe "Use l"<CR>
inoremap <Up>    <ESC>:echoe "Use k"<CR>
inoremap <Down>  <ESC>:echoe "Use j"<CR>

2. 缩进

我们在 VS Code 等编辑器中都是 TabShift+Tab 来进行缩进和反缩进,在 Vim 中,缩进和反缩进稍显复杂,我们可以用下面的映射来使得它和我们在其他编辑器中一样。

" 常规模式
nmap <tab> V>
nmap <s-tab> V<" 可视模式
vmap <tab> >gv
vmap <s-tab> <gv

3. 移动窗口

在 Vim 分屏中,我们使用 spvsp 来同时打开多个窗口,并通过 Ctrl+w+hjkl 来在各个窗口之间进行切换,但这也很麻烦,笔者实在是没想通加那个 w 干嘛,换掉!

map <C-h> <C-w>h
map <C-j> <C-w>j
map <C-k> <C-w>k
map <C-l> <C-w>l

4. 移动到行首行位

在 Vim 常规模式下,移动到行首行位分别是 0^$,但是笔者也感觉直接格键巨难按,刚好 HL 在平时不怎么用到,还是处在键盘的黄金位置,所以可以用来替换:

noremap H ^
noremap L $

5. 功能按键

在键盘的黄金区域,Vim 留给我们可以自己设置的键位并不多,但是功能键( F2 等)还是有很多可以用的,要注意的是,功能键离我们的手也很远,所以最好不要设置一些频繁用到的操作,而是应该让 “键如其名”,设置一些 “功能键” 在功能键上。比如开关行数显示,有时很有用,但是有时又看着很烦或者在复制文本时很碍事,以此为例,我们将开关行数设置在 F2 上:

nnoremap <F2> :set nu! nu?<CR>

其他的功能键大家可以结合自己日常输入中常用的功能来进行设置。推荐在功能键设置一些 set 的功能命令。可参考 vimrc配置文件。

笔者在这里抛砖引玉,就介绍怎么多,其他的高效映射,大家自己在日常工作中再去探索吧。

Ref:

http://www.pythonclub.org/linux/vim/map

https://www.jianshu.com/p/8ae25a680ed7

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

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

相关文章

CTFHUB 《基础认证》:burp使用,basic请求了解

题目简介&#xff1a;在HTTP中&#xff0c;基本认证&#xff08;英语&#xff1a;Basic access authentication&#xff09;是允许http用户代理&#xff08;如&#xff1a;网页浏览器&#xff09;在请求时&#xff0c;提供 用户名 和 密码 的一种方式。详情请查看 https://zh.w…

信息量、熵、交叉熵、KL散度、JS散度杂谈及代码实现

信息量、熵、交叉熵、KL散度、JS散度杂谈及代码实现 信息量 任何事件都会承载着一定的信息量&#xff0c;包括已经发生的事件和未发生的事件&#xff0c;只是它们承载的信息量会有所不同。如昨天下雨这个已知事件&#xff0c;因为已经发生&#xff0c;既定事实&#xff0c;那…

CTFHUB《Web-信息泄露-备份文件下载》网站源码,

1.网站源码 三种方法&#xff1a; 方法一&#xff1a;dirsearch扫描git泄露 有文件下载 拿到flag 方法二&#xff1a;御剑&#xff08;超时10s&#xff09; 御剑其实也可以扫出来&#xff0c;但是一般我们扫域名超时时间都是三秒&#xff0c;本环境中需要超时10秒才能得到…

Linux下C/C++程序编译链接加载过程中的常见问题及解决方法

Linux下C/C程序编译链接加载过程中的常见问题及解决方法 1 头文件包含的问题 报错信息 该错误通常发生在编译时&#xff0c;常见报错信息如下&#xff1a; run.cpp:2:10: fatal error: dlpack/dlpack.h: No such file or directory#include <dlpack/dlpack.h>^~~~~~~…

DVWA Command Injection 练习总结

low: 首先查看源码没有对字符进行任何过滤 target参数为将要ping的ip地址&#xff0c;比如在输入框输入127.0.0.1后&#xff0c;对于windows系统&#xff0c;会发出ping 127.0.0.1操作。 这里可以引入命令行的几种操作方式&#xff1a; A && B&#xff1a; 先执行A…

在vimrc中设置record

在vimrc中设置record Vim的record功能在大量重复操作的场景下非常实用&#xff0c;但是&#xff0c;一般我们都要每次进入Vim时重新录制record。而对于一些非常常用的record&#xff0c;我们想让它永久地保持&#xff0c;我们知道这种需求需要借助Vim的配置文件vimrc。但是具体…

DVWA sql注入 WP

sql注入基本思路&#xff1a; 1.源码 2.判断数字型和字符型 3.猜测字段数 4.查询数据库中的字段 5.查询表中的字段 6.查询user表中的字段 7.拿字段中数据 low: 1.源码&#xff1a; <?phpif( isset( $_REQUEST[ Submit ] ) ) {// Get input$id $_REQUEST[ id ];// Check…

cmake find_package路径详解

cmake find_package路径详解 转自&#xff1a;https://zhuanlan.zhihu.com/p/50829542 经常在Linux下面写C程序&#xff0c;尤其是需要集成各种第三方库的工程&#xff0c;肯定对find_package指令不陌生。 这是条很强大的指令。可以直接帮我们解决整个工程的依赖问题&#x…

DVWA File Inclusion——Writeup

文件包含&#xff1a; 即File Inclusion&#xff0c;意思是文件包含&#xff08;漏洞&#xff09;&#xff0c;是指当服务器开启allow_url_include选项时&#xff0c;就可以通过php的某些特性函数&#xff08;include()&#xff0c;require()和include_once()&#xff0c;requi…

PyTorch JIT与TorchScript

PyTorch JIT与TorchScript 转自&#xff1a;https://zhuanlan.zhihu.com/p/370455320 如果搜索 PyTorch JIT&#xff0c;找到的将会是「TorchScript」的文档&#xff0c;那么什么是 JIT 呢&#xff1f;JIT 和 TorchScript 又有什么联系&#xff1f; 文章只会关注概念的部分&a…

DVWA Cross Site Request Forgery (CSRF) -------WP

CSRF: 介绍 CSRF跨站点请求伪造(Cross—Site Request Forgery)&#xff0c;跟XSS攻击一样&#xff0c;存在巨大的危害性&#xff0c;你可以这样来理解&#xff1a; 攻击者盗用了你的身份&#xff0c;以你的名义发送恶意请求&#xff0c;对服务器来说这个请求是完全合法的&…

PyTorch C++ API libtorch 简介

PyTorch C API libtorch 简介 翻译自 PyTorch 官方文档&#xff1a;https://pytorch.org/cppdocs/index.html#acknowledgements 整体划分 根据 PyTorch 官方文档 的介绍&#xff0c;PyTorch的C API可以粗略分为以下五个部分&#xff1a; ATen&#xff1a;基础的张量和数学计…

DVWA upload

LOW medium high impossible

安装 PyTorch C++ API libtorch 及一个最小例子

安装 PyTorch C API libtorch 及一个最小例子 翻译自&#xff1a;https://pytorch.org/cppdocs/installing.html 我们提供依赖 PyTorch 所需的所有头文件、库和 CMake 配置文件的二进制分发版。我们将此发行版称为 LibTorch&#xff0c;您可以在我们的网站上下载包含最新 Lib…

ImageNet 1K 类别名与索引的对应关系

ImageNet 1K 类别名与索引的对应关系 转自&#xff1a;http://befree2008.github.io/2018/10/05/20181005_ImageNet1000%E5%88%86%E7%B1%BB%E5%90%8D%E7%A7%B0%E5%92%8C%E7%BC%96%E5%8F%B7/ ImageNet 2012 1000个类名称和编号。ILSVRC2012_img_train.tar 这个文件解压出来都是…

sqlilab--writeup (5~6) 布尔盲注

1.# 和 – &#xff08;有个空格&#xff09;表示注释&#xff0c;可以使它们后面的语句不被执行。在url中&#xff0c;如果是get请求**(记住是get请求&#xff0c;也就是我们在浏览器中输入的url)** &#xff0c;解释执行的时候&#xff0c;url中#号是用来指导浏览器动作的&am…

PyTorch导出JIT模型并用C++ API libtorch调用

PyTorch导出JIT模型并用C API libtorch调用 本文将介绍如何将一个 PyTorch 模型导出为 JIT 模型并用 PyTorch 的 CAPI libtorch运行这个模型。 Step1&#xff1a;导出模型 首先我们进行第一步&#xff0c;用 Python API 来导出模型&#xff0c;由于本文的重点是在后面的部署…

sqli-lab--writeup(7~10)文件输出,时间布尔盲注

前置知识点&#xff1a; 1、outfile是将检索到的数据&#xff0c;保存到服务器的文件内&#xff1a; 格式&#xff1a;select * into outfile “文件地址” 示例&#xff1a; mysql> select * into outfile ‘f:/mysql/test/one’ from teacher_class; 2、文件是自动创建…

树莓派4B (aarch64) 安装PyTorch 1.8 的可行方案

树莓派4B (aarch64) 安装PyTorch 1.8 的可行方案 最终可行方案 试了一堆方案&#xff08;源码编译、Fast.ai的安装文件等&#xff09;之后&#xff0c;终于找到一个可行的方案。是在 PyTorch 官方讨论社区的一个帖子中找到的&#xff0c;在回复中一个大佬给出了自己在2021年1…

sqli-lab———writeup(11~17)

less11 用户名提交单引号显示sql语法错误&#xff0c;故存在sql注入 根据单引号报错&#xff0c;在用户名和密码任意行输入 万能密码&#xff1a;‘ or 11# 输入后username语句为&#xff1a;SELECT username, password FROM users WHERE username or 11; 双引号 password语…