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.pswp.cn/news/532611.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532611.shtml
英文地址,請注明出處:http://en.pswp.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語…