linux之vi,vim命令


vim 是對 vi 的擴展,文中的很多操作是 vi 通用的

vi 是區分大小寫的命令的,也就是說 gG 是不同的命令

在不同模式下,快捷鍵是不一樣的 模式分 一般模式 編輯模式 指令模式

一般模式用於文件內部操作,編輯模式用於輸入編寫等,指令模式用於對文本文件進行操作

常用操作

進入一般模式為開始編輯,或者按 esc 后進入

按鍵 效果
a,i,r,o,A,I,R,O 進入編輯模式
h,backspace 左移動
l,space 右移動
j 下移動
k 上移動
0, 移動到行首
$ 移動到行末,1$表示當前行的行尾,2$表示當前行的下一行的行尾
b 按照單詞向前移動 字首
e 按照單詞向后移動 字尾
w 按照單詞向后移至次一個字首
H 移動到屏幕最上 非空白字
M 移動到屏幕中央 非空白字
L 移動到屏幕最下 非空白字
G 移動到文檔最后一行
gg 移動到文檔第一行
v 進入光標模式,配合移動鍵選中多行
Ctrl+f 向下翻頁
Ctrl+b 向上翻頁
u 撤銷上一次操作
`` 回到上次編輯的位置
dw 刪除這個單詞后面的內容
dd 刪除光標當前行
dG 刪除光標后的全部文字
d$ 刪除本行光標后面的內容
d0 刪除本行光標前面的內容
y 復制當前行,會復制換行符
yy 復制當前行的內容
yyp 復制當前行到下一行,此復制不會放到剪切板中
nyy 復制當前開始的 n 行
p,P,. 粘貼
ddp 當前行和下一行互換位置
J 合並行
Ctrl+r 重復上一次動作
Ctrl+z 暫停並退出
ZZ 保存離開
xp 交換字符后面的交換到前面
~ 更換當前光標位置的大小寫,並光標移動到本行右一個位置,直到無法移動

光標詳細操作

按鍵 效果
Ctrl+e 向下滾動
Ctrl+b 向上翻頁
b 按照單詞向前移動 字首
B 按照單詞向前移動 字首 忽略一些標點符號
e 按照單詞向后移動 字尾
E 按照單詞向后移動 忽略一些標點符號
w 按照單詞向后移至次一個字首
W 按照單詞向后移至次一個字首 忽略一些標點符號
H 移動到屏幕最上 非空白字
M 移動到屏幕中央 非空白字
L 移動到屏幕最下 非空白字
G 移動到文檔最后一行
gg 移動到文檔第一行
( 光標到句尾
) 光標到局首
{ 光標到段落開頭
} 光標到段落結尾
nG 光標下移動到 n 行的首位
n$ 光標移動到 n 行尾部
n+ 光標下移動 n 行
n- 光標上移動 n 行

查找命令

指令 效果
* 向下查找同樣光標的字符
# 向上查找同樣光標的字符
/code 查找 code 一樣的內容,向后
?code 查找 code 一樣的內容,向前
n 查找下一處
N 查找上一處
ma 在光標處做一個名叫 a 的標記 可用 26 個標記 (a~z)
`a 移動到一個標記 a
d`a 刪除當前位置到標記 a 之間的內容
:marks 查看所有標記

指令模式

指令 效果
:q 一般退出
:q! 退出不保存
:wq 保存退出
:w filename 另存為 filename
:jumps 歷史編輯文檔記錄
:set nu 設置行號顯示
:set nonu 取消行號顯示
:set 顯示設置參數
:set autoindent 自動縮排,回車與第一個非空格符對齊
:syntax on/off 根據程序語法高亮顯示
:set highlight 高亮設置查看
:set hlsearch 查找代碼高亮顯示
:nohlsearch 暫時關閉高亮顯示
:set nohlsearch 永久關閉高亮顯示
:set bg=dark 設置暗色調
:set bg=light 設置亮色調

屏幕翻滾

按鍵 效果
Ctrl+f 向文件尾翻一屏幕
Ctrl+b 向文件首翻一屏幕
Ctrl+d 向文件尾翻半屏幕
Ctrl+u 向文件首翻半屏幕

插入命令

按鍵 效果
i 在光標前
I 在當前行首
a 在光標后
A 在當前行尾部
o 在當前行下新開一行
O 在當前行上新開一行
r 替換當前字符
R 替換當前行及后面的字符,直到按 esc 為止
s 從當前行開始,以輸入的文本替代指定數目的字符
S 刪除指定數目的行,並以輸入的文本替代
ncw,nCW 修改指定數目 n 的字符
nCC 修改指定數目 n 的行

刪除命令

按鍵 效果
ndw,nDW 刪除光標開始及其后 n-1 個字符
dw 刪除這個單詞后面的內容
dd 刪除光標當前行
dG 刪除光標后的全部文字
d$ 刪除本行光標后面的內容
d0 刪除本行光標前面的內容
ndd 刪除當前行,以及其后的 n-1 行
x 刪除一個字符,光標后
X 刪除一個字符,光標前
Ctrl+u 刪除輸入模式下的輸入的文本

多窗口模式

指令 效果
:split 創建新窗口
Ctrl+w 切換窗口
Ctrl-w = 所有窗口一樣高
Ctrl-w + 方向鍵 多窗口視圖切換

多文件編輯

指令 效果
:args 列出當前編輯的文件名
:next 打開多文件,使用 n(Next) p(revious)
:file 列出當前打開的所有文件

vim 自定義技巧

復制粘貼取消縮進

:set paste

進入 paste 模式以后,可以在插入模式下粘貼內容,不會有任何變形
這個參數做了這么多事:

textwidth設置為0
wrapmargin設置為0
set noai
set nosi
softtabstop設置為0
revins重置
ruler重置
showmatch重置
formatoptions使用空值

下面的選項值不變,但卻被禁用

lisp
indentexpr
cindent

綁定快捷鍵來激活 / 取消 paste 模式

:set pastetoggle=<F11>

出現粘貼換行符錯位,設置一下 .vimrc

" this can change way of paste words
:set paste
" default tabstop=8
:set tabstop=4
" use keyboard F11 to  change paste mode
:set pastetoggle=<F11>

vim 縮進

Normal Mode 下,命令>>將對當前行增加縮進,而命令<<則將對當前行減少縮進
在命令前使用數字,來指定命令作用的范圍

5<<

在 Insert/Replace Mode 下

  • Ctrl-Shift-t可以增加當前行的縮進
  • Ctrl-Shift-d則可以減少當前行的縮進
  • 使用0-Ctrl-Shift-d命令,將移除所有縮進

需要注意的是,當我們輸入命令中的 “0” 時,Vim 會認為我們要在文本中插入一個 0,並在屏幕上顯示輸入的“0”;然后當我們執行命令 0-Ctrl-Shift-d 時,Vim 就會意識到我們要做的是減少縮進,這時 0 會就會從屏幕上消失

vim tab 縮進

tab 縮進寬度默認為 8 個空格

我們可以使用以下命令,來修改縮進寬度

:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab
  • tabstop: 表示一個 tab 顯示出來是多少個空格的長度默認 8

  • softtabstop: 表示在編輯模式的時候按退格鍵的時候退回縮進的長度當使用 expandtab 時特別有用。

  • shiftwidth: 表示每一級縮進的長度一般設置成跟 softtabstop 一樣。 當設置成 expandtab 時縮進用空格來表示noexpandtab 則是用制表符表示一個縮進

  • expandtab 選項,用來控制是否將 Tab 轉換為空格, 但是這個選項並不會改變已經存在的文本,如果需要應用此設置將所有 Tab 轉換為空格,需要執行

:retab!

vim 自動縮進

  • cindent
:set cindent

vim 可以很好的識別出 C 和 Java 等結構化程序設計語言,並且能用 C 語言的縮進格式來處理程序的縮進結構

  • smartindent
:set smartindent

在這種縮進模式中,每一行都和前一行有相同的縮進量,同時這種縮進形式能正確的識別出花括號,當遇到右花括號(}),則取消縮進形式。此外還增加了識別 C 語言關鍵字的功能。如果一行是以 #開頭的,那么這種格式將會被特殊對待而不采用縮進格式。

  • autoindent
:set autoindent

在這種縮進形式中,新增加的行和前一行使用相同的縮進形式

顯示隱藏符號

  • 默認不顯示 :set nolist
  • 顯示 :set invlist
" normal is :set nolist | show hide is :set invlist
:set nolist

使用 vim 寄存器

使用 vim 寄存器 “+p 粘貼

根本不用考慮是否自動縮進,是否 paste 模式,直接原文傳遞

如果想保存原寄存器中內容而同時增加新的內容,就要在 yy 前增加標簽
標簽以雙引號開始,跟着的是標簽名稱,可以是數字 0-9,也可以是 26 個字母

顯示所有寄存器內容

:reg

注意兩個特殊的寄存器:*+

這兩個寄存器是和系統相通的,前者關聯系統選擇緩沖區,后者關聯系統剪切板
通過它們可以和其他程序進行數據交換

若寄存器列表里無 *+ 寄存器,則可能是由於沒有安裝 vim 的圖形界面所致
sudo apt-get install vim-gnome

設置 vim 永遠顯示行號

修改 vim 的配置文件加入 set nu

vi ~/.vimrc

然后輸入

set nu

當然也可以輸入其他配置類似

set nonu
syntax on

vimrc 常用配置

設置行號 set nu
設置自動縮進 set autoindent
設置tab占n個字符 set tabstop=n
設置以空格代替tab(因為有部分場合不允許使用tab) set expandtab
設置縮進字符數為n set shiftwidth=n
設置自動語法高亮 syntax on

原文鏈接:https://rumenz.com/rumenbiji/linux-vi-vim.html
微信公眾號:入門小站


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM