RHEL7VIM編輯器

来源:http://www.cnblogs.com/sakuraph/archive/2016/08/26/5808912.html
-Advertisement-
Play Games

本文介紹Vim編輯器的使用 vi和vim的區別 它們都是多模式編輯器 不同的是vim是vi的升級版本 它不僅相容vi的所有指令而且還有一些新的特性在裡面 vim的這些優勢主要體現在以下幾個方面 + 多級撤消 在vi里 按u只能撤消上次命令 而在vim里可以無限制的撤消 + 易用性 vi只能運行於un ...


本文介紹Vim編輯器的使用

vi和vim的區別

它們都是多模式編輯器 不同的是vim是vi的升級版本
它不僅相容vi的所有指令而且還有一些新的特性在裡面
vim的這些優勢主要體現在以下幾個方面

  • 多級撤消 在vi里 按u只能撤消上次命令 而在vim里可以無限制的撤消
  • 易用性 vi只能運行於unix中 而vim不僅可以運行於unix windows mac等多操作平臺
  • 語法加亮 vim可以用不同的顏色來加亮你的代碼
  • 可視化操作 vim不僅可以在終端運行 也可以運行於x window mac windows
  • 完全相容vi 某些情況下 你可以把vim當成vi來使用

vim主要模式介紹

確認是否安裝了vim工具

[root@VM_200_13_centos /]# rpm -qf `which vim`
vim-enhanced-7.4.160-1.el7.x86_64

如果沒有安裝使用yum線上安裝即可

[root@VM_200_13_centos /]# yum -y install vim

三種模式

vim編輯器三種模式:命令模式、插入模式、末行模式

三種模式

從上圖可以看出:末行模式切換到插入模式需要先切換到命令模式

按鍵說明

游標移動

按鍵 說明
h或← 游標向左移動一個字元
j或↓ 游標向下移動一個字元
k或↑ 游標向上移動一個字元
l或→ 游標向右移動一個字元
Ctrl+f或PageDown 向下翻一頁
Ctrl+b或PageUp 向上翻一頁
+ 游標移動到非空白字元的下一列
- 游標移動到非空白字元的上一列
n+space 游標移動到本行第n個字元處
0或home 游標所在行行首
$或end 游標所在行行尾
H 移動游標到屏幕第一行行首
M 移動游標到屏幕中央那一行的行首
L 移動游標到屏幕最後一行行首
G 移動游標到當前文件的末尾
n+G 移動游標到這個文件的第n行
gg 移動游標到這個文件的第一列 相當於1+G
:n 移動游標到這到這個文件的第n行 相當於nG
n+Enter 向下移動n行

查找

按鍵 說明
/word 向游標之下尋找一個名稱為word的字元串
?word 想游標之上尋找一個名稱為word的字元串
n 重覆前一個尋找動作
如果執行/vim去向下尋找vim字元串
按n會向下繼續尋找下一個vim字元串
如果執行?vim按n則會向上尋找vim字元串
N 與n相反,進行反向搜索
:n1,n2s/word1/word2/g 在n1與n2行之間尋找word1字元串並替換為word2字元串
:1,$s/word1/word2/gc 從首行到末行尋找word1字元串並替換為word2字元串
並且在取代前提示是否確認替換
:% s/a/b 將每行的第一個a替換為b
:% s/a/b/g 將所有的a替換為b

% 表示所有內容
g 全部
c confirm提示確認

複製粘貼刪除

按鍵 說明
x 向後刪除一個字元
X 向前刪除一個字元
BackSpace 向前刪除一個字元
nx 連續向後刪除n個字元
dd 刪除游標所在行
ndd 刪除包含游標所在行在內的向下n行
d1G 刪除首行到游標所在行的所有數據
dG 刪除游標所在行到最後一行的所有數據
d$ 刪除游標所在行游標位置到該行行尾的所有數據
d0 刪除游標所在行游標位置到該行行首的所有數據
yy 複製游標所在的整行
nyy 複製游標所在的向下n行
y1G 複製首行到游標所在行的所有數據
yG 複製游標所在行到末行的所有數據
y0 複製游標所在位置到游標所在行行首的所有數據
y$ 複製游標所在位置到游標所在行行尾的所有數據
p 將已複製的數據粘貼到游標下一行
P 將已複製的數據粘貼到游標上一行
J 將游標所在行與下一行的數據合併為一行
c 重覆刪除多個數據
u 撤銷
Ctrl+r 反撤銷
. 重覆前一個動作

插入和修改

按鍵 說明
i 從游標所在位置插入
I 從游標所在行第一個非空字元位置插入
a 從游標所在的下一個字元位置插入
A 從游標所在行的最後一個字元處開始插入
o 從游標所在位置向下插入新的一行
O 從游標所在位置向上插入新的一行
r 替換游標所在位置的一個字元
R 替換游標所在位置的所有字元直到按ESC結束
ESC 退出插入模式回到命令模式

末行模式

在命令模式下按:鍵會進入到末行模式

按鍵 說明
:w 保存數據寫入到硬碟
:W 強制寫入數據到只讀文件(需要有對該文件的寫入許可權)
:q 退出vim
:q! 強制退出不保存
:wq 保存後退出
:wq! 強制保存退出
ZZ 如果文件沒有更改則不保存並退出如何有更改則保存退出
:w test.txt 將更改後的數據另存為test.txt文件
:r test.txt 將test.txt這個文件的內容追加到游標所在行之後
:n1,n2 w test.txt 將n1到n2行之間的內容存儲到test.txt文件中
:! command 暫時離開vim到系統文本模式下查看執行command執行的結果
:set nu 顯示行號
:set nonu 撤銷行號

區塊選擇

按鍵 說明
v 將游標經過的地方全部選中
V 將游標經過的行全部選中
Ctrl+v 以長方形的方式選擇數據
y 複製未被選中的地方
d 刪除未被選中的地方
p 將複製的內容粘貼在游標所在位置

vim警告信息

當我們在使用vim進行編輯時,vim會在與被編輯的文件的目錄下再創建一個名為.filename.swp的文件
當你因為某些原因(系統斷線、Ctrl+z等)而沒有保存你正在編輯的文件時,這個swp文件就能發揮救援功能

創建test.txt文件後使用vim編輯再按Ctrl+z模擬非正常保存退出

[root@VM_200_13_centos ~]# touch test.txt 
[root@VM_200_13_centos ~]# vim test.txt 

[7]+  Stopped                 vim test.txt

再次使用vim編輯test.txt文件出現以下信息

E325: ATTENTION
Found a swap file by the name ".test.txt.swp"
          owned by: root   dated: Sat Aug 13 11:42:16 2016
         file name: ~root/test.txt
          modified: no
         user name: root   host name: VM_200_13_centos
        process ID: 20247 (still running)
While opening file "test.txt"
             dated: Sat Aug 13 11:38:53 2016

(1) Another program may be editing the same file.  If this is the case,
    be careful not to end up with two different instances of the same
    file when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r test.txt"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".test.txt.swp"
    to avoid this message.

Swap file ".test.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

上面的信息已經明確的說明瞭原因

  1. 其他人或程式同時在修改這個文件
    由於Linux是多用戶多任務的環境,因此很可能有很多人同時在編輯同一個文件。
    如果在多人共同編輯的情況下,大家同時儲存,這個文件會被修改的面目全非。
    這是出現這個警告的原因之一,解決方案:
  • 找到正在修改這個文件的程式或用戶,請他結束該vim的工作後再進行處理
  • 如果只是查看文件的內容而不進行編輯行為,按O以只讀模式打開
  1. 在上一次的vim編輯時異常中斷
    比如使用SSH遠程連接伺服器使用vim進行編輯時連接斷開這種情況。
    根據不同的情況採用不同的解決方案:
  • 如果之前的vim操作沒有保存,按R進入恢復模式就可以找回之前為存儲的數據
  • 如果確定之前的vim操作是無用的,按D刪除之前swp文件,此時vim會創建新的swp文件

警告信息中的六個按鍵的作用

按鍵 說明
O 以只讀方式打開文件
E 以正常方式編輯文件並且不會載入之前的swp文件中的內容
(謹慎操作:有可能會造成多個使用者互相修改文件的情況)
R 恢復之前未存儲的內容
D 刪除之前的swp文件,此時vim會創建新的swp文件
Q 退出vim
A 跟Q差不多,忽略這次的編輯行為返回到文本界面

多文件編輯

vim可以同時編輯多個文件

[root@VM_200_13_centos ~]# vim anaconda-ks.cfg  test.txt
按鍵 說明
:n 編輯上一個文件
:N 編輯下一個文件
:files 列出本次vim指令打開的所有文件
:files
  1 %a   "anaconda-ks.cfg"              line 1
  2      "test.txt"                     line 0

多視窗功能

vim可以分屏編輯多個文件

按鍵 說明
:sp [文件名] 如果有加文件名則以上下分屏的模式在右邊打開一個新的文件
否則在下麵的視窗打開當前文件
使用vim的-o參數打開多個文件時會上下分屏,使用-O參數會左右分屏
Ctrl+w+j或Ctrl+w+↓ 先按下Ctrl+w,再按下j或↓在上下兩個視窗間進行視窗切換
左右分屏的情況使用 ←→或hl左右切換視窗
Ctrl+w+q 退出關閉游標所在的視窗

補全功能

vim和大部分集成開發環境一樣包含補全功能

按鍵 說明
[ctrl]+x -> [ctrl]+n 通過目前正在編輯的這個“文件的內容文字”作為關鍵字,予以補齊
[ctrl]+x -> [ctrl]+f 以當前目錄內的“文件名”作為關鍵字,予以補齊
[ctrl]+x -> [ctrl]+o 以擴展名作為語法補充,以vim內置的關鍵字,予以補齊

常用指令示意圖

常用指令示意圖

亂碼處理

造成亂碼的原因是文件的源編碼和vim的編碼不一致
比如:在windows中編輯好的漢字文本文檔上傳到Linux打開就亂碼了
解決方案:使用iconv工具解決亂碼
查看是否安裝了iconv,如果沒有安裝使用yum或rpm安裝即可

[root@VM_200_13_centos ~]# rpm -qf `which iconv`
glibc-common-2.17-106.el7_2.4.x86_64

使用iconv命令轉碼
輸入/輸出格式規範:
-f, --from-code=名稱 原始文本編碼
-o, --output=FILE 輸出文件
-l, --list 列舉所有已知的字元集
iconv -f 原本編碼 -t 新編碼 filename [-o newfile]
例:

[root@VM_200_13_centos ~]# iconv -f gb2312 test.txt -o new.txt

附錄

vim小抄

vim小抄

vim鍵盤圖

vim鍵盤


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在用PL/SQL Developer等客戶端工具連接oracle伺服器時出現ORA-12541:TNS:無監聽程式的錯誤,如下圖: 發現原來是oracle的監聽沒有啟動,重啟監聽後就連接成功了,下麵跟大家分享一下如何啟動oracle的監聽。 1.在安裝Oracle伺服器的主機上,打開Net Conf ...
  • wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz sudo tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/ cd /usr/local/tcl8.6.1/unix/ sudo ./con ...
  • ...
  • 目前我知道Solr建索引有2種方法,這裡介紹一下: 第一種就是我們常用的SolrServer.add(Collection<SolrInputDocument>),下麵介紹一個各種SolrServer. * HttpSolrServer,這個是我們最常用的就不說了 * ConcurrentUpdat ...
  • 對於已預備的語句,可以使用位置保持符。以下語句將從tb1表中返回一行: 以下語句將從tb1表中返回第二到第六行: ...
  • 知識點1 ALTER 下列代碼意義:向已存在的表my_foods中新增自動排列的列 作為主鍵 如果不需要作為主鍵,則去掉 PRIMARY KEY 即可! 排序關鍵字: FIRST - --把 列id 安置於所有其他列的前面 LAST -- 把列 id 安置於其他列的後面 SECOND -- 把列 i ...
  • 回到目錄 本文是Redis集群系列的一篇文章,主要介紹使用StackExchange.Redis進行Twemproxy(文中簡稱TW)代理服務的連接過程,事務上,對於TW來說,我們需要理解一下它的物理架構,它類似於Nugix,主要實現的是請求轉發,但它還有一個重要的功能,那就是自動分片,這對於大數據 ...
  • Hive作為大數據環境下的數據倉庫工具,支持基於hadoop以sql的方式執行mapreduce的任務,非常適合對大量的數據進行全量的查詢分析。 本文主要講述下hive載cli中如何導入導出數據: 導入數據 第一種方式,直接從本地文件系統導入數據 我的本機有一個test1.txt文件,這個文件中有三 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...