vim編輯器基本應用

vi:Visual  Tnterface文本編輯器

vim:vi Improved vi的加強版

文本編輯種類:

  行編輯器:sed

  全屏編輯器:nano,vi,vim

其他編輯器::

  gedit:一個簡單的圖形編輯器

  gvim:一個vim編輯器的圖形版本

vim使用格式

+# :打開文件后,直接讓光標處于第#行的行首

+/pattern:打開文件后,直接讓光標處于第一個被模式匹配到的行的行首

+ file:打開文件,光標在最后一行

-b file:二進制方式打開文件

-d file1 file2…:比較多個文件

-m file :只讀打開文件

如果該文件存在,文件被打開并顯示內容

如果該文件不存在,編輯完后第一次保時創建它

vim的三種主要模式

命令模式:默認進入文件就處于此模式==>移動光標,剪切/粘貼文本

插入(編輯)模式:修改文本

擴展命令模式:保存,退出  ==>我習慣叫末行模式

ESC鍵:退出當前模式

ECS鍵ESC鍵:總是返回到命令模式


模式轉換


命令模式(默認模式)—>插入模式

i:inset,在光標所在處輸入

blob.png

I:在光標所在行的行首輸入

blob.png

a:append,在光標所在處的后面輸入

blob.png

A:在光標所在行的行尾輸入

blob.png

o:在當前光標所在行的下方打開一個新行

blob.png

O:在當前光標所在行的上方打開一個新行

blob.png

插入模式–>命令模式

  Esc鍵

命令模式—>擴展命令模式

  :

擴展命令模式—>命令模式

  Esc鍵

鎖定和解鎖:

ctrl+s鎖定   ctrl+q解鎖

關閉文件:

在命令模式下

ZQ:不保存退出

ZZ:保存并退出

在擴展命令模式下

:q退出

:wq保存退出

:q!強制退出不保存

:x保存退出

:w /path/to/somefile :保存至新文件(類似另存為)

命令模式光標跳轉

字符跳轉:

h:左  l:右   j:下  k:上

#command(hjkl):跳轉#個字符

單詞跳轉:

w:下一個單詞的詞首

e:當前或下一個單詞的詞尾

b:當前或前一個單詞的詞首

#command(web):跳轉#個單詞

當前頁跳轉:

H:頁首    M:頁中間   L:頁尾

行首行尾跳轉:

^:跳轉至行首的第一個非空白字符

$:跳轉至行尾

0:跳轉至絕對行首

行間跳轉:

#G:跳轉至#行

G:跳轉最后一行

1G或者gg:跳轉至第一行

句間跳轉:

(:上一句

):上一句

段落間跳轉:

{  :上一段

}  :下一段

命令模式翻屏操作

ctrl+f :向文件尾部翻一屏

ctrl+b :向文件首部翻一屏

ctrl+d :向文件尾部翻半屏

ctrl+u :向文件首部翻半屏

命令模式操作

字符編輯

x :刪除光標處的字符

#x:刪除光標處起始的#個字符

xp:交換光標所在處的字符及其后面字符的位置

~ :轉換大小寫

替換命令

r:替換光標所在處的字符

R:切換成REPLACE模式

刪除命令:

d:刪除命令可結合光標跳轉字符,實現范圍刪除

d$:刪除到行尾

d^:刪除到非空行首

d0:刪除到行首

dw:刪除光標所在處到下一個單詞的詞首的內容

de:刪除光標到當前或下一個單詞的詞尾的內容

db:刪除光標到當前或前一個單詞的詞首的內容

#command:刪除#個單詞

dd:刪除整行

#dd:刪除#行

D:刪除光標所在處到行尾的字符,留空行,等同于d$

blob.png

執行了一些命令,結果如下

  1. 執行了d$,刪除了光標到行尾的字符(此處光標在行首)

  2. 執行了d^,刪除了光標到行首的字符(非空白)(我在行首加了空白字符)

  3. 執行了d0,刪了了光標到行首的字符(包含空白字符)

  4. 執行了dw,刪除了光標所在處到下一個單詞的詞首的內容

  5. 執行了de,刪除光標到當前或下一個單詞的詞尾的內容

  6. 執行了db,刪除光標到當前或前一個單詞的詞首的內容

  7. 執行了dd,刪了整行

  8. 又執行了2dd,刪除了兩行

  9. 執行了D,刪除光標所在處到行尾的字符

blob.png

這截圖和上面的說明看的我自己都蒙了,


復制命令(y,yank):

y: 復制,和d命令用法類似

y$: 復制光標所在處到行尾

y^:復制光標所在處到非空行首

y0:復制光標所在到行首

yw:復制光標所在處到下一個單詞的詞首的內容

ye:復制光標到當前或下一個單詞的詞尾的內容

yb:復制光標到當前或前一個單詞的詞首的內容

#command:復制#個單詞

yy復制整行

#yy:復制#行

Y:復制整行

粘貼命令(p,paste):

p:緩沖區存的如果為整行,則粘貼當前光標所在行的下方,

   否則,則粘貼至當前光標所在處的后方

P:緩沖區存的如果為整行,則粘貼當前光標所在行的上方,

   否則,則粘貼至當前光標所在處的前方

整行

blob.png

非整行

blob.png


改變命令(c,change)

命令模式—>插入模式,顯示刪除操作

c:刪除命令??山Y合光標跳轉字符,實現范圍刪除

c$:刪除光標所在處到行尾的字符

c^:刪除光標所在處到非空行首的字符

c0: 刪除光標所在處到絕對行首的字符

cw:刪除光標所在處到下一個單詞的詞首的內容

ce:刪除光標到當前或下一個單詞的詞尾的內容

cb :刪除光標到當前或前一個單詞的詞首的內容

#command(dw,de,db)     3dw:向后刪了三個單詞

c:刪除當前光標到行尾,并切換成插入模式

#c c  3cc:刪除光標所在處的行起始的3行,然后

以上是刪除光標所在處的一些行或字符,然后轉換為插入模式

c,d,y的一些可以通用的命令

blob.png

命令模式下還有些特殊用法:

100iwang[esc]粘貼“wang”100次
blob.png

<start position> <command> <end position>

command:

 y復制,d刪除,gU變大寫,gu變小寫

例如我使用了0gU$命令,從行首到行尾都變成大寫字母

blob.png

這里我使用了.gu$, .表示當前位置,到行尾變成那個小寫字母

blob.png

擴展模式:地址定界

和sed的地址定界差不多

#:特定的第#行,例如5即第五行

.  :表示當前行

#,#  指定行范圍。左起始行,右結束行

#,+#:指定行范圍,左側為起始行的絕對編號,右側問哦相對左側行號的偏移量

例如:3,+7  為第三行開始,后面的7行,包含第三行

. +6:當前行,到后面的6行,共計7行

.,$-1:當前行到倒數第二行

1,.,$:全文

%:全文

/pattern/:第一次被模式所匹配到的行=======>從光標所在處起始

/first/,$:從光標所在處起始向文件尾部第一次被模式所匹配的行到最后一行

/pattern1/,/pattern/:從光標所在處起始向文件尾部,第一個被pattern1匹配的行到第一個被pattern2所匹配的行結束之前的所有行

使用方式:后跟一個編輯命令

d,y,c

w  /path/to/somefile:將范圍內的文本保存至指定的文,y件中

r  /path/form.somefile :將指定的文件中的文本讀取并插入指定位置

擴展模式:查找

/pattern:從當前光標所在處向文件尾部查找能夠被當前模式匹配到的使用字符串,

?pattern:從當前光標所在處向文件首部查找能夠被當前模式匹配到的使用字符串,

n;下一個。與命令方向相同

N:  上一個,與命令方向相反

擴展模式:查找并替換

s:末行模式的命令;使用格式

s/要查找的內容/替換為的內容/修飾符

要查找的內容:可用正則表達式;

替換為的內容:不能使用正則表達式,但可以引用

如果要“查找的內容”部分在模式中使用了分組符號:

在“替換為的內容”中使用 后向引用;    \1,\2,

也可以使用“&”引用前面查找時查找到的整個內容

直接引用查找模式  匹配到的全部文本

修飾符:

i:忽略大小寫

g:全局替換,意味著一行中如果匹配到多次,則均替換,默認替換匹配到的行的第一個出現的

gc:全局替換,每次替換前詢問

可把分隔符替換為非常用字符

s@@@@  ,s###

命令模式:撤銷更改

u撤銷最近的更改

#u撤銷之前的#次修改

U撤銷光標落在這行后所有此行的更改

ctrl+r恢復此前的撤銷操作==>感覺撤銷的錯了,取消撤銷的動作

點號. :重復執行前一個編輯操作

#.:重復前一個操作#次

vim的寄存器

有26個命名寄存器和1個無名寄存器,長存放不同的剪貼板內容,可以不同會話鍵共享

用a,b,c…..z表示,用“表示寄存器,放在數字和命令之間

例如:3”tyy表示復制3行到t寄存器中

      “tp表示將t寄存器內容粘貼

復制第四行到a寄存器,然后將a寄存器內容到粘貼至光標所在行的下一行

blob.png

未指定,將使用無名寄存器

有10個數字寄存器,用數字0-9表示,0存放最近復制的內容,1存放最近刪除內容。

當新的文本變更和刪除時,1轉存到2,2轉存到3,以此類推,數字寄存器不能再

不同會話間共享

編輯二進制文件

以二進制方式打開文件

vim -b binaryfile

blob.png

擴展命令模式下,利用xxd命令轉換為可讀的十六進制

:%!xxd

blob.png

擴展命令模式下,利用xxd命令轉換回二進制

:%!xxd  -r

blob.png

可視化模式

允許選擇的文本塊

v:字符

blob.png

V:行

blob.png

ctrl+v 塊

blob.png

可視化鍵用于移動的鍵

方向鍵,w,),}

突出顯示的文字可以被刪除,復制,變更,過濾,搜索 / 替換等

執行刪除命令

blob.pngblob.png

vim多文件模式

vim file1  file2 ….

next:下一個

prev:前一個

first:第一個

last:最后一個

wall:保存所有

qall:退出所有

wqall:保存退出所有

多窗口顯示

多文件切割

vim -o file file2  水平切割

vim -O file file2 垂直切割

blob.png

單文件窗口切割;

ctrl+w,s:水平分隔

ctrl+w,v:垂直分隔

ctrl+w,q:取消相鄰窗口

ctrl+w,o取消全部窗口

:wqall全部保存退出

blob.png

vim的工作特性

配置文件:永久有效

    全局:/etc/vimrc

    個人:~/.vimrc

如下配置顯示行號和自動縮進

blob.png

blob.png

擴展模式:對當前進程有效

  1. 行號 

    顯示: set number 簡寫為set nu

    取消顯示:set nonumber  簡寫 set nonu

2.括號成對匹配

   匹配:set shuowmatch  簡寫set  sm

   取消: 簡寫set nosm

3.自動縮進

   啟用:set  ai 

   禁用:set  noai

4.高度搜索

   啟用:set  hlsearch

   禁用:set  nohlsearch

5.語法高亮

   啟用:syntax  on

   禁用:syntax  off

6.忽略字符的大小寫

   啟用:set ic

   不忽略:set noic

7.文件格式

   啟用:filefoemat=unix  ==>linux

   不忽略:fileformat=dos==>windows

8.設置文本寬度

   :set textwidth=65(vim only)

   :set wrapmargin=15

練習:

? 1 、復制/etc/profile 至/tmp/ 目錄,用查找替換命令刪除

/tmp/profile 文件中的行首的空白字符

指令:

擴展命令模式下

:%s@^[[:space:]]\+@@

blob.png

blob.png

blob.png

? 2 、復制/etc/rc.d/init.d/functions 文件至/tmp 目錄,用查

找替換命令為/tmp/functions 的每行開頭為空白字符的行的

行首添加一個#號

指令:

擴展命令模式下

:%s@^[[:space:]]\+@#@

blob.png

blob.png

3 、如何設置tab 縮進為4 個字符?

指令:

vim .vimrc 然后設置tabstop=4,這個是針對當前用戶
要設置全局要在/etc/vimrc

blob.png

blob.pngblob.png

4 、復制/etc/rc.d/init.d/functions 文件至/tmp 目錄;替換

/tmp/functions 文件中的/etc/sysconfig/init 為/var/log; ;

在擴展命令模式下:

:%s@/etc/sysconfig/init@/var/log@

blob.png

blob.png

blob.png

5、刪除/tmp/functions 文件中所有以# 開頭,且# 后面至少

有一個空白字符的行的行首的# 號;

在擴展命令模式下

%s@^#\([[:space:]]\+\)@\1@

blob.png

blob.png

 

原創文章,作者:qiuwei,如若轉載,請注明出處:http://www.www58058.com/32418

(0)
qiuweiqiuwei
上一篇 2016-08-11 09:38
下一篇 2016-08-11 09:38

相關推薦

  • 淺談DNS基本原理以及實現方法(二)

             DNS作為互聯網服務的一個基礎型服務,了解和掌握DNS服務的原理和配置將是每一個運維人員必備的技能,這就如同闖蕩江湖的俠客不但要有的招式,還要懂的運用這些招式的心法一樣,接下來我將從DNS的正反向解析、主從同步、子域授權以及Bind view這四個方面來揭開它神…

    Linux干貨 2015-12-19
  • N28-第四周:正則表達式練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。
    2、編輯/etc/group文件,添加組hadoop。
    3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號;其家目錄為/home/hadoop。
    4、復制/etc/skel目錄為/home/hadoop,要求修改hadoop目錄的屬組和其它用戶沒有任何訪問權限。
    5、修改/home/hadoop目錄及其內部所有文件的屬主為hadoop,屬組為hadoop。
    6、顯示/proc/meminfo文件中以大寫或小寫S開頭的行;用兩種方式;
    7、顯示/etc/passwd文件中其默認shell為非/sbin/nologin的用戶;
    8、顯示/etc/passwd文件中其默認shell為/bin/bash的用戶;
    9、找出/etc/passwd文件中的一位數或兩位數;
    10、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;
    11、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;
    12、打出netstat -tan命令執行結果中以‘LISTEN’,后或跟空白字符結尾的行;
    13、添加用戶bash, testbash, basher, nologin (此一個用戶的shell為/sbin/nologin),而后找出當前系統上其用戶名和默認shell相同的用戶的信息;

    2017-12-24
  • Linux基礎知識(四)

    本文主要講述:Linux上用戶和組的基本管理,具體包括一下內容 1、復制/etc/skel目錄到/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 2、編輯/etc/group文件,添加組hadoop。 3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id…

    Linux干貨 2016-10-16
  • Linux任務計劃,周期性任務執行詳解

    Linux任務計劃,周期性任務執行 概述 本章將為大家介紹一些任務計劃和周期性任務計劃執行相關內容任務計劃的分類主要有由兩種    未來的某時間點執行一次某任務:at,batch    周期性運行某任務:crontab具體分為三個方面來說明:    1、at計劃任務    2、c…

    Linux干貨 2016-09-27
  • CentOS系統啟動流程——深入了解linux

    CentOS系統啟動流程 ·Linux系統的組成部分:內核+根文件系統      內核:進程管理、內存管理、網絡協議棧、文件系統、驅動程序、安全功能              IPC:Inter Pr…

    Linux干貨 2016-09-11
  • keepalived的初級使用

        1、雙主模型的ipvs高可用   一、雙主模型的ipvs高可用     1)網絡結構圖       2)、ipvs的類型是dr模型,調度算法是rr       RS1和RS2都是centos6.8 對RS1和RS2的配置:…

    Linux干貨 2017-05-15
欧美性久久久久