oeasy教您玩轉vim - 73 - # 映射map

 

映射map

回憶上次縮寫的細節

  • 這次瞭解到了:abbrivate縮寫
  • 可以定義縮寫

    • :ab o1z oeasy
    • 這裏面還可以包括方向鍵、回車鍵之類的東西
  • 可以定義到指定的模式

    • iab
    • cab
  • 查看縮寫

    • :ab - 所有的
    • :ab o1z - o1z
  • 自動補全

    • ctrlp
    • ctrln
  • 這些縮寫都可以保存在視圖裏

    • 保存的選項在viewoption
  • 可以保存的除了 縮寫abbreviate 還有個 映射map
  • 映射map 什麼意思呢?🤔

關於映射

  • 映射就是map
  • 比如按下什麼什麼就相當於按下什麼什麼之類的
  • 系統裏面有

圖片描述

  • 比如mac系統中修飾鍵設置的第一條
  • 把 CapsLock 映射到 Esc
  • 這樣大寫鎖定就失效了
  • 但是小拇指左移一下就可以按下Esc
  • 超級方便
  • 再也不用 ctrl+c 了
  • 做實驗的時候也好使
  • 只要是按下CapsLock
  • 就相當於按下Esc
  • 這就是 映射map

建立映射 - mapping

  • 快速進入命令模式

    • :map ; :
    • ; 映射成 :
    • 這樣我們就可以不用摁下shift
    • 直接通過小拇指就可以進入命令模式了
    • 還是很方便的

圖片描述

map 映射

  • 我們可以使用
  • :map Y y$定一個映射

    • map是命令的名字
    • Y 是被映射的鍵
    • y$ 是映射到的鍵
  • 從此按下Y,就相當於y$
  • 我們來試一下

    • 在行的中間位置,按下Y
    • :reg 觀察默認寄存器
  • 現在複製的是從光標到結尾
  • 我想要的是一整行,怎麼辦呢?

重新映射

  • :map! Y 0y$定一個映射

    • map是命令的名字
    • Y 是被映射的鍵
    • 0y$ 是映射到的鍵
  • 可是我現在命令模式下只要Y就自動變成0y$
  • 但是其實我們主要需要映射正常模式下的;
  • 能否強調這一個點呢?

不同模式

  • 不同模式有不同的映射map命令

    • :map 所有模式
    • :vmap 可視化模式 visual
    • :nmap 正常模式 normal
    • :omap operartor-pending 被定義的鍵可以作爲一個motion來使用
    • :map! 插入和命令行模式
    • :imap 插入模式 insert
    • :cmap 命令行模式 command
  • 這樣我們可以知道
  • :nmap ; :

    • 在正常模式下把;換成:
    • 這樣也就快速進入了命令模式
  • 不過這樣在normal模式下;就不好用了
  • ;在normal模式下做什麼用的呢?

原始定義

  • :h ;

圖片描述

  • 原來是重複行內查找的
  • 直接這樣的話,原來的功能就不能用了
  • 我想要取消映射map
  • 應該怎麼辦呢?
  • 我想先看看都有哪些映射

查看所有映射map

圖片描述

  • 我們可以找到這個map映射關係
  • 然後想要取消映射
  • 去哪裏找呢?
  • 解鈴換需繫鈴人

取消映射map

圖片描述

  • 就和:ab:una一樣
  • :map也有自己的:unmap

    • :unmap ;
  • 這樣就恢復了原來的行內替換
  • ;:的映射消失了

圖片描述

我們再試試Y

  • 定義Y並驗證

    • :nmap Y y$
    • :reg "
  • 重新定義Y

    • :nmap Y 0y$
    • :reg "

圖片描述

觀察映射

  • :map可以觀察所有已經存在的映射

圖片描述

  • 第一列是模式
  • 第二列是映射觸發鍵
  • 第三列是映射對應處理方式
  • 如果我們想查看插入模式下;對應什麼操作

    • :imap ;
    • :nmap Y
  • Q進入Ex命令模式

圖片描述

映射爲空

  • 還記得我們取消方向鍵的操作嗎?

    • :map <LEFT> <nop>
    • :map <UP> <nop>
    • :map <RIGHT> <nop>
    • :map <DOWN> <nop>
  • <nop>就是什麼都不做

    • 對應No Operation Performed
    • 這原來是一條彙編指令,指令着讓cpu空輪一個週期
  • 但是我們現在想想

    • 我們爲什麼要禁掉方向鍵?
    • 是爲了讓手放在覈心區不動
    • 但是這指的是Normal模式
  • 如果是命令模式,我們怎麼辦?
  • 我們需要方向鍵控制光標左右運動
  • 也需要shift或ctrl配合方向鍵控制光標快速移動
  • 也就是說Normal模式方向鍵不做任何事,Command模式下還可以用
  • 所以

    • :nmap <LEFT> <nop>
    • :nmap <UP> <nop>
    • :nmap <RIGHT> <nop>
    • :nmap <DOWN> <nop>
  • 但是如果我們這樣的話
  • 縮寫sysout是否就不能順利完成了呢?

驗證

:map <left> <nop>
:set nopaste
:ab sysout System.out.println("");<left><left><left>
  • 然後在插入模式下輸入sysout空格
  • 還是可以自動變成複雜的格式的System.out.println("");

奇怪的腦洞

  • 如果我
:map j k
:map k j
  • 會發生什麼?

圖片描述

  • 那麼這個東西如何處理呢?

取消重複映射

:noremap j k
:noremap k j
  • 這樣就把j、k真的對調了

圖片描述

 

取消重複縮寫

  • 試了一下
  • 並沒有發現重複縮寫的可能性
  • 不過ab的替換結果可能會觸發map
:set nopaste
:ab @a ad
:imap ad adder
  • 然後在插入模式下@a
  • 通過ad就變成了adder
  • 所以有的時候ab也需要noreab

圖片描述

歧義

  • 我們定義了兩個映射

    • :map aa oeasy
    • :map aaa o2z
  • 這個時候我們輸入aa會如何?
  • 試一下
  • 輸入aa之後他會等待
  • 如果下一個是Space或者CR

    • 那麼對應oeasy
  • 如果下一個是a

    • 那麼對應o2z
  • 這種map映射和縮寫abbreviate很像啊
  • 縮寫就很像是插入模式下的一種特殊的映射
  • 不過兩者還是有不同的
  • 兩者有什麼不同呢?

比較映射和縮寫

  • 不同點

    • 側重模式不同

      • 縮寫abbreviate側重於輸入(對應插入和命令行模式)
      • 映射map可以存在於更多模式
    • 觸發條件不同

      • 縮寫在插入模式下按回車或者空格或tab就可以觸發
      • 映射要自己定義對應的按鍵
    • 效果不同

      • 縮寫就是把縮寫形式補全成完整形式,原縮寫形式消失
      • 映射可以做更多的操作,比如複製粘貼之類的編輯操作
  • 相同點

    • 首先他們都是爲了快速輸入和操作而存在的
    • 他們都可以取消重複

      • noremap
      • noreabbrev

總結

  • 這次瞭解到了:map映射
  • 可以定義映射

    • :map ; :
  • 查詢映射

    • :map
    • :map ;
  • 還可以取消映射

    • :unmap
  • 可以映射到指定的模式

    • :map 所有模式
    • :vmap 可視化模式 visual
    • :nmap 正常模式 normal
    • :omap operartor-pending 被定義的鍵可以作爲一個motion來使用
    • :map! 插入和命令行模式
    • :imap 插入模式 insert
    • :cmap 命令行模式 command
  • 可以映射到什麼也不做

    • :nmap h <nop>
  • 還可以避免再次映射

    • :noreabbrev o1z oeasy
  • 最後我們比較了縮寫和映射的異同

    • 縮寫映射 都是可以:mkview保存的
    • 也可以寫到~/.vimrc作爲基礎映射
    • 還可以寫到具體的 filetype 中做一些專門的操作
  • 但是其實101鍵盤上面很多功能鍵

    • f1-f12
    • 我們還沒有用上
  • 可以給他們映射上麼?🤔
  • 下次再說!

[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (overmind1980/oeasyvim)
[藍橋實驗樓 邀請碼FJWYIMGB] (oeasy 教您零基礎玩轉編輯神器 Vim_Linux 藍橋雲課)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章