天天看點

Vim學習筆記-基礎篇基本指令vim4種模式插入模式小技巧快速移動增删改查搜尋替換多檔案操作文本對象text object複制粘貼Vim寄存器Vim宏macro批量操作Vim代碼補全更換配色vim配置映射插件腳本vim映射

vim是vi改進版

windows 體驗版 gvim

基本指令

$ vim # normal模式

:q(quit)  # 退出

# 進入編輯insert模式(6種)
i(insert)            # 光标前插入
a(append)            # 光标後插入
o(open a line below) # 行下插入

I insert before line # 行首 
A append after line  # 行尾 
O open a line above  # 行上插入

ESC 回到normal模式
:wq  # 儲存退出write quit      

vim4種模式

1、Normal普通模式(浏覽)

Esc插入模式回到普通模式

普通模式下進行各種指令操作和移動

大部分情況下,使用的是浏覽

2、Insert插入模式(編輯)

a/i/o 光标進入插入模式

A/I/O 行進入插入模式

3、Command指令模式(操作)

Normal模式下:進入指令模式

:q退出 :w儲存

:vs(vertical split)垂直左右分屏 :sp(split) 水準上下分屏

:set nu 設定行号

:% s/java/python/g 全部替換java->python

:syntax on 文法高亮

4、Visual可視模式(選擇)

Nomal模式下進入Visual模式

v選擇字元

V選擇行

ctrl+v塊狀選擇

插入模式小技巧

ctrl + h 删除上一個字元

ctrl + w 删除上一個單詞

ctrl + u 删除目前行

終端:

ctrl + a 移動到行首

ctrl + e 移動到行尾

切換到Normal模式:

Esc、ctrl + c、 ctrl + [

gi 回到剛才插入位置并進入插入狀态

快速移動

Normal模式下

1、字元移動

h左 j下 k上 l右

^
     k
< h     l >
     j
     v      

2、單詞移動

w/W 移動到下一個word/WORD開頭

e/E 下一個word/WORD尾

b/B 回到上一個word/WORD開頭,backword

word 非空白符分割的單詞

WORD 以空白符分割的單詞

3、行間搜尋移動

f{char} 移動到char字元上

t{char} 移動到char前一個字元上 until

第一次沒搜到,可以繼續搜該行

分号; 下一個

逗号, 上一個

F反向搜尋

4、水準移動

0 移動到行首第一個字元

^ 移動到第一個非空白字元

$ 移動到行尾

g_ 移動到行尾非空白字元

5、垂直移動

括号() 句子間移動

檢視幫助 :help (

{} 段落之間移動

6、螢幕移動

H head 螢幕開頭

M middle 中間

L lower 結尾

zz 把螢幕置為中間,目前行放中間

7、頁面移動

gg 檔案開頭

G 檔案結尾

ctrl + o 快速傳回

ctrl + u upword 上翻半頁

ctrl + f forword 下翻半頁

增删改查

1、增加

Normal模式 a/i/o A/I/O

2、删除

Normal模式

x 删除一個字元

4x 删除4個字元

d(delete)

daw 删除單詞和周圍空格(delete around word)

diw 删除單詞(dw)

dd 删除行

dt{char} 删除直到

d$ 删除到結尾

d0 删除到開頭

2dd 删除兩行

u undo 撤銷操作

ctrl + r 恢複撤銷

3、修改

r replace 替換一個字元

eg: 光标下g ra g->a

c change

cw 删除單詞進入插入模式 change word

ct{char} 删除到字元,進入插入模式

s substitute 删除并進入插入模式 eg: 4s 删除4個字元進入插入模式

R 不斷替換多個字元

S 删除整行進行插入

C 删除整行進行插入

4、查詢

/ 前向搜尋

? 反向搜尋

n/N 下一個或者上一個

*/# 目前單詞的前向和後向比對

搜尋結果高亮 :set hls (high light search)

:set incsearch

搜尋替換

substitute 支援正則

:[range] s[ubstitute]/{pattern}/{string}/flags      

range 範圍

eg:

10,20 表示10-20行

% 表示全部

pattern 替換模式

string 替換後文本

flags 替換标志位

g global 全局替換

c confirm 确認

n number 查詢比對次數而不替換

:% s/self/this/g  # 替換 self->this
:1,6 s/self//n    # 查詢  計算有1-6行有多少個self
:% s/\<name\>/Name/g # 精确比對單詞      

多檔案操作

Buffer 打開一個檔案的緩沖區

Window 可視化分割區域

Tab 組織視窗為一個工作區

1、Buffer

:ls 列舉緩沖區

:b n 跳轉到第n個緩沖區

:bpre :bnext :bfirst :blast

:b buffer_name tab補全

:e filename 打開檔案

2、Window

一個緩沖區可以分割為多個視窗

每個視窗也可打開不同緩沖區

視窗可以無限分割

(1)視窗分割

+ s 水準分割

+ v 垂直分割

:sp [filename] 水準分割(打開檔案)

:vs [filename] 垂直分割(打開檔案)

(2)視窗切換

+ w 循環切換

+ h 切換到左邊

+ j 切換到下邊

+ k 切換到上邊

+ l 切換到右邊

(3)視窗移動

+ H 移動到左邊

+ J 移動到下邊

+ K 移動到上邊

+ L 移動到右邊

(4)重排視窗

:h window-size

+ = 所有視窗等寬等高

+ _ 最大化活動視窗高度

+ | 最大化活動視窗寬度

n + + _ 把活動視窗的高度設為n 行

n + + | 把活動視窗的寬度設為n 行

3、Tab标簽頁

一系列視窗的容器:h tabpage

:tabnew {filename} 新标簽中打開

:tabe[dit] {filename} 新标簽中打開

+ T 目前視窗移動到一個新标簽頁

:tabc[lose] 關閉目前标簽頁及其中的所有視窗

:tabo[nly] 隻保留目前标簽頁,關閉其他标簽頁

:tabn[ext] {N} {N}gt 切換到編号N 的标簽頁

:tabn[ext] gt 切換到下一個标簽頁

:tabp[revious] gT 切換到上一個标簽頁

插件:ctrlp nerdtree

文本對象text object

指令格式:

[number]<command>[text object]      

number 次數

command 指令 d(delete), c(change), y(yank), v(visual)

text object 文本對象 w(單詞word), s(句子sentence),p(段落paragraph)

iw 插入單詞

viw 選擇模式插入單詞

vaw around word 選中目前單詞和單詞之後的空格

vis/vas/vip/vap

vi(/)//{/}/"/"/’/’

va(/)//{/}/"/"/’/’

ciw 删除單詞并插入

ci{ 删除{内容

插件 vim-go

複制粘貼

Normal模式:

y(yank) p (put)

dd 删除一行 p粘貼

Visual模式:選中之後 p粘貼

文本對象:yiw 複制一個單詞 yy複制一行

vimrc

:set autoindent 設定自動縮進

粘貼代碼格式錯亂解決:

:set paste 設定

:set nopaste 取消

Insert模式

ctrl + v/ command + v

Vim寄存器

無名寄存器

dw->p 剪切粘貼單詞

x->p 剪切粘貼字元

指定寄存器 ”{register}

"ayiw 複制單詞到寄存器a中
    "bdd 删除目前行到寄存器b中
    :reg a  檢視a寄存器内容
    "ap 粘貼寄存器a中的内容
    ""無名寄存器,預設模式
    "0 寄存器0 
    寄存器a-z
    "+系統剪切闆
    "% 目前檔案名
    :echo has("clipboard") 1則支援
    :set clipboard=unname 直接使用系統剪切闆
    ".上一次插入的文本
    ctrl + r +      

:e! 重新加載不儲存目前檔案

Vim宏macro批量操作

錄制操作,回放操作

q錄制 q結束

q{register} 儲存到寄存器

@{register} 回放操作

v 模式下選擇

:normal @a 回放宏操作

每行前後加"

V 全選行 G 全選文本

:normal I" A"

Vim代碼補全

普通關鍵字

目前緩沖區關鍵字

包含檔案名關鍵字

标簽檔案關鍵字

字段查找

整行補全

檔案名補全

全能Omni補全

常用:

補全單詞

補全代碼,需開啟檔案類型檢查,安裝插件

syntax on

:set nu

:set indent

:r! echo % 檔案名

:r! echo %:p 檔案路徑

更換配色

:colorscheme 顯示目前主題配色 預設default

:colorscheme 顯示所有配色

:colorscheme 配色名 修改配色

$ vim duck.go duck.py -O  # 兩個視窗打開      

持久化配置 vim ~/.vimrc

配色方案 hybrid Monokai

下載下傳配色方案拷貝到檔案夾 mkdir ~/.vim/colors

vim插件:

https://github.com/flazz/vim-colorschemes

vim配置

持久化配置

Linux/Unix vim ~/.vimrc

windows vim $MYVIMRC 環境變量

常用設定

:set nu # 設定行号

colorscheme hybrid # 設定主題

vim映射 noremap w :w 儲存檔案

自定義vimscript函數 和插件配置

" 常用設定,這是注釋
" 設定行号
set number

" 設定主題
colorscheme hybrid

" 按F2進入粘貼模式
set pasttoggle=<F2>

" 高亮搜尋
set hlsearch

" 設定折疊方式
set foldmethod=indent

" 一些友善的映射
let mapleader=','
let g:mapleader=','

" 使用 jj 進入 normal 模式 `^上一次插入點
inoremap jj <Esc>`^

" 使用 leader+w 直接儲存
inoremap <leader>w <Esc>:w<cr>
noremap <leader>W :w<cr>

" 切換 buffer
nnoremap <silent> [b :bprevious<CR>
nnoremap <silent> [n :bnext<CR>

" 切換視窗
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l

" sudo to write
cnoremap W!! w !sudo tee % >/dev/null


" json格式化
com! FormatJSON %!python3 -m json.tool
      

映射

設定leader

let mapleader = “,”

重新開機vim或source生效

:source ~/.vimrc

插件腳本

腳本語言 vimscrip

檢視配置選項

:h option-list

自定義函數

func SetTitle()
    if &filetype == 'python'
        call setline(1, "\#!/usr/bin/env python")
        call setline(2, "\# -*- coding:utf-8 -*-")
        normal G
        normal o
        normal o
        call setline(5, "if __name__ == '__main__':")
        call setline(6, "    pass")
endfunc      

github: vim-go-tutoria

開源檔案:dotfiles

vim映射

:map - x # 将-映射為x

:map viw 空格映射為選中整個單詞

:map dd 可以使用ctrl+d執行dd操作

:unmap - 删除映射

模式

nmap normal

vmap visual

imap insert

v 選中 U/u 轉大小寫

:imap ddi # insert模式下删除一行

nnoremap n no re map normal模式下,非遞歸映射(任何時候都應該使用)

《笨辦法學vimscript》

vim8 Neovim