映射map
回憶上次縮寫的細節
- 上次瞭解到了
: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
- 我們還沒有用上
- 可以給他們映射上麼?🤔
功能鍵映射
-
第一個f1是有映射的
- 如果在終端模式下運行就會到幫助文件
- 如果在圖形化的終端模式下運行就會到terminal的幫助
-
f2我們可以映射麼?
:map <F2> gg=G
- 注意這個時候map空格之後
- 可以直接按下f2
- 就直接輸入<F2>
- 很好使!
-
但是我們應該再限制一下,映射只會出現在Normal模式
:nmap <F2> gg=G
- 我們再試一個
快速插入日期
-
我們需要在文章最後寫一個日期時間
:map <F2> oDate: <ESC>:read !date<CR>
-
o的意思是換行插入
- 插入的內容就是
Date:
- 插入的內容就是
- esc退回到正常模式
-
:
進入命令模式- 執行
:read !date
- 把外部命令
date
的結果read到buffer上 - 然後<CR>是回車Carriage
- 退回到正常模式
- 整個操作完成
- 執行
- 真的能用!!!
- 這樣就可以快速插入落款日期了
- 還可以進行一些修改
-
:map <F2> oDate: <ESC>:read !date<CR>kJ
k
向上一行J
把當前行和下一行鏈接
-
如果要求在文本最後插入的話
:map <F2> GoDate: <ESC>:read !date<CR>
-
其實我們常用的就是程序的編譯運行之類的
- 這個映射能幹麼?
運行python程序
- 這次我們用<F5>來幹這個事情
-
我們先在命令行裏面走一遍
:!python3 %
- 其中%是當前文件名
- 相當於
:!python3 oeasy.py
:h c_%
-
把他轉化爲映射
:map <F5> :!python3 %
-
先保存
:map <F5> :w<CR>:!python3 %<CR>
- 以後就可以一鍵運行python程序了
編譯並運行java程序
-
仿照上次
:map <F5> :w<CR>:!javac %<CR>
- 這樣是可以完成編譯的
- 然而運行的時候我需要
:!java oeasy
- 這就得去掉後綴
:!java %:t:r
-
最終的映射語句是
:map <F5> :w<CR>:!javac %<CR>!java %:t:r<CR>
- 保存、編譯、運行一氣呵成
- 不過python、java、html都映射到了F5
- 能否根據文件類型進行區分呢?
文件類型映射
- 觀察文件類型檢測
:filetype
- 具體的文件應該放在哪兒呢?
具體操作
-
在
~/.vim/ftplugin/
下面放入文件類型的配置文件~/.vim/ftplugin/java.vim
對應java文件~/.vim/ftplugin/python.vim
對應python文件
- 現在我們就分別對於java和python文件定義了F5這個操作
- 其實網頁編輯也很常見
- 如何在網頁中一鍵預覽?
一鍵預覽火狐
-
本終端開火狐
firefox
!firefox
-
首先在終端上可以另開一個火狐進程
-
xfce4-terminal -e 'firefox'
- 我們的終端是xfce的
- 如果是gnome的話也類似
- 這可以在終端中新開一個終端
- 新終端中運行火狐
-
xfce4-terminal -e 'firefox oeasy.html'
- 讓火狐瀏覽你的網頁
-
-
把這套放到vim裏面跑一下
:!xfce4-terminal -e 'firefox %'
- 成功在vim裏跑了起來
-
然後就是映射map
:map <F5> :!xfce4-terminal -e 'firefox %'
- 可以的!
- 然後把這句話寫到
html
的ftplugin
中
總結
-
這次我們定義了一系列的功能鍵
- 讓他們可以起到作用
- 比如保存、編譯、運行一鍵完成
- 但是不同的文件類型應該有不同的處理方式
- 我們用
filetype
的機制解決了這個問題
-
這些映射就像縮寫和摺疊一樣
- 可以
:mkview
保存着
- 可以
-
除了功能鍵之外
- 組合鍵能映射麼?
- 比如ctrl+s之類的?🤔
- 下次再說!
[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (overmind1980/oeasyvim)
[藍橋實驗樓 邀請碼FJWYIMGB] (oeasy 教您零基礎玩轉編輯神器 Vim_Linux 藍橋雲課)