基本操作#
命令行模式#
:q
退出(關閉窗口):w
保存(寫):wq
保存然後退出:e {文件名}
打開要編輯的文件:ls
顯示打開的緩存:help {標題}
打開幫助文檔:help :w
打開:w
命令的幫助文檔:help w
打開w
移動的幫助文檔
移動 - 大多數情況在正常模式#
- 基本移動:
hjkl
(左,下,上,右) - 詞:
w
(下一個詞),b
(詞初),e
(詞尾) - 行:
0
(行初),^
(第一個非空格字符),$
(行尾) - 屏幕:
H
(屏幕首行),M
(屏幕中間),L
(屏幕底部) - 翻頁:
Ctrl-u
(上翻),Ctrl-d
(下翻) - 文件:
gg
(文件頭),G
(文件尾) - 行數:
:{行數}<CR>
或者{行數}G
({行數} 為行數) - 雜項:
%
(找到配對,比如括號或者 /* */ 之類的註釋對) - 查找:
f{字符}
,t{字符}
,F{字符}
,T{字符}
- 查找 / 到向前 / 向後在本行的 {字符}
,
/;
用於導航匹配
- 搜索:
/{正則表達式}
,n
/N
用於導航匹配
選擇 - 可視化模式#
- 可視化:
v
- 可視化行:
V
- 可視化塊:
Ctrl+v
編輯#
i
進入插入模式- 但是對於操縱 / 編輯文本,不單想用退格鍵完成
O
/o
在之上 / 之下插入行d{移動命令}
刪除 {移動命令}- 例如,
dw
刪除詞,d$
刪除到行尾,d0
刪除到行頭。
- 例如,
c{移動命令}
改變 {移動命令}- 例如,
cw
改變詞 - 比如
d{移動命令}
再i
- 例如,
x
刪除字符(等同於dl
)s
替換字符(等同於xi
)- 可視化模式 + 操作
- 選中文字,
d
刪除或者c
改變
- 選中文字,
u
撤銷,<C-r>
重做y
複製 / “yank” (其他一些命令比如d
也會複製)p
粘貼- 更多值得學習的:比如
~
改變字符的大小寫
計數#
3w
向前移動三個詞5j
向下移動 5 行7dw
刪除 7 個詞
修飾語#
你可以用修飾語改變 “名詞” 的意義。修飾語有 i
,表示 “內部” 或者 “在內 “,和 a
,表示” 周圍 “。
ci(
改變當前括號內的內容ci[
改變當前方括號內的內容da'
刪除一個單引號字符串,包括周圍的單引號
演示#
# fizzbuzz.py
import sys
def fizz_buzz(limit):
for i in range(1,limit+1):
if i % 3 == 0:
print('fizz', end="")
if i % 5 == 0:
print('buzz', end="")
if i % 3 and i % 5:
print(i)
else:
print()
def main():
fizz_buzz(int(sys.argv[1]))
if __name__ == '__main__':
main()
.
重複上一次修改sys.argv[1]
傳入的第一個參數
自定義 Vim#
- missing-semester
- Anish
- Jon (uses neovim)
- Jose
vim ~/.vimrc
vim /etc/vim/vimrc # debian
擴展 Vim#
常用推薦插件:
- ctrlp.vim: 模糊文件查找
- ack.vim: 代碼搜索
- nerdtree: 文件瀏覽器
- vim-easymotion: 魔術操作
講師們的開源配置文件:
其他程序的 Vim 模式#
Shell#
Bash set -o vi
Zsh bindkey -v
Fish fish_vi_key_bindings
通用 export EDITOR=vim
Readline#
vim ~/.inputrc
vim /etc/inputrc # debian
set editing-mode vi # 開啟vi編輯模式,python REPL 支持Vim快捷鍵
Vim 進階#
搜索和替換#
:s
(替換)命令(文檔)。
%s/foo/bar/g
- 在整個文件中將 foo 全局替換成 bar
%s/\[.*\](\(.*\))/\1/g
- 將有命名的 Markdown 鏈接替換成簡單 URLs
多窗口#
- 用
:sp
/:vsp
來分割窗口 - 同一個緩存可以在多個窗口中顯示。
宏#
q{字符}
來開始在寄存器{字符}
中錄製宏q
停止錄製@{字符}
重放宏- 宏的執行遇錯誤會停止
{計數}@{字符}
執行一個宏 {計數} 次- 宏可以遞歸
- 首先用
q{字符}q
清除宏 - 錄製該宏,用
@{字符}
來遞歸調用該宏 (在錄製完成之前不會有任何操作)
- 首先用
- 例子:將 xml 轉成 json (file)
- 一個有 “name” / “email” 鍵對象的數組
- 用一個 Python 程序?
- 用 sed / 正則表達式
g/people/d
%s/<person>/{/g
%s/<name>\(.*\)<\/name>/"name": "\1",/g
- …
- Vim 命令 / 宏
Gdd
,ggdd
刪除第一行和最後一行- 格式化最後一個元素的宏 (寄存器
e
)- 跳轉到有
<name>
的行 qe^r"f>s": "<ESC>f<C"<ESC>q
- 跳轉到有
- 格式化一個的宏
- 跳轉到有
<person>
的行 qpS{<ESC>j@eA,<ESC>j@ejS},<ESC>q
- 跳轉到有
- 格式化一個標籤然後轉到另外一個的宏
- 跳轉到有
<person>
的行 qq@pjq
- 跳轉到有
- 執行宏到文件尾
999@q
- 手動移除最後的
,
然後加上[
和]
分隔符
擴展資料#
vimtutor
是一個 Vim 安裝時自帶的教程- Vim Adventures 是一個學習使用 Vim 的遊戲
- Vim Tips Wiki
- Vim Advent Calendar 有很多 Vim 小技巧
- Vim Golf 是用 Vim 的用戶界面作為程序語言的 code golf
- Vi/Vim Stack Exchange
- Vim Screencasts
- Practical Vim(書籍)
課後練習#
- 完成
vimtutor
。備註:它在一個 80x24(80 列,24 行) 终端窗口看起來效果最好。 - 下載我們提供的 vimrc,然後把它保存到
~/.vimrc
。 通讀這個註釋詳細的文件 (用 Vim!), 然後觀察 Vim 在這個新的設置下看起來和使用起來有哪些細微的區別。 - 安裝和配置一個插件: ctrlp.vim.
- 用
mkdir -p ~/.vim/pack/vendor/start
創建插件文件夾 - 下載這個插件:
cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim
# 下載後需在 vimrc 中添加如下配置 set runtimepath^=~/.vim/pack/vendor/start/ctrlp.vim
3. 閱讀這個插件的 [文檔](https://github.com/ctrlpvim/ctrlp.vim/blob/master/readme.md)。嘗試用 CtrlP 來在一個工程文件夾裡定位一個文件,打開 Vim, 然後用 Vim 命令控制行開始 `:CtrlP`. 4. 自定義 CtrlP:添加 [configuration](https://github.com/ctrlpvim/ctrlp.vim/blob/master/readme.md#basic-options) 到你的 `~/.vimrc` 來用按 Ctrl-P 打開 CtrlP
- 用
- 練習使用 Vim, 在你自己的機器上重做 演示。
- 下個月用 Vim 完成_所有的_文件編輯。每當不夠高效的時候,或者你感覺 “一定有一個更好的方式” 時, 嘗試求助搜索引擎,很有可能有一個更好的方式。如果你遇到難題,可以來我們的答疑時間或者給我們發郵件。
- 在其他工具中設置 Vim 快捷鍵 (見上面的操作指南)。
- 進一步自定義你的
~/.vimrc
和安裝更多插件。
使用vim-plug
安裝插件:- 安裝 vim-plug
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
- 修改~/.vimrc
call plug#begin() Plug 'preservim/NERDTree' #需要安裝的插件 NERDTree Plug 'wikitopian/hardmode' #安裝 hardmode ..... # 更多插件 call plug#end()
- 在 vim 命令行中執行
:PlugInstall
- (高階)用 Vim 宏將 XML 轉換到 JSON (例子文件)。嘗試著先完全自己做,但是在你卡住的時候可以查看上面宏 章節。