VIM編輯器用法及練習

VIM編輯器用法及練習

什么是vim?

  • vim是從vi發展出來的一個文本編輯器。代碼補全、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用,和Emacs并列成為類Unix系統用戶最喜歡的文本編輯器。

  • Vim的第一個版本由布萊姆·米勒在1991年發布。最初的簡稱是Vi IMitation,隨著功能的不斷增加,正式名稱改成了Vi IMproved?,F在是在開放源代碼方式下發行的自由軟件。

vim的使用

vim的基本模式:

            編輯模式,命令模式
            輸入模式
            末行模式:
                內置的命令行接口;

使用vim打開文件:

        # vim [options] [file ..]
            +#:打開文件后,直接讓光標處于第#行的行首;
            +/PATTERN:打開文件后,直接讓光標處于第一個被PATTERN匹配到的行的行首;

模式轉換:

        編輯模式:默認模式
            編輯模式 --> 輸入模式:
                i:insert, 在光標所在處輸入;
                a: append,在光標在處后方輸入;
                o:在光標所在處的下方打開一個新行;
                I:在光標所在行的行首輸入;
                A:在光標所在行的行尾輸入;
                O:在光標所在處的上方打開一個新行;

            輸入模式 --> 編輯模式
                ESC

            編輯模式 --> 末行模式
                :

            末行模式 --> 編輯模式
                ESC

關閉文件:

        ZZ:保存并退出;

        :q  退出
        :q!  強制退出,不保存此前的編輯操作
        :wq  保存并退出;
            :w, :q
        :x  保存并退出;
        :w /PATH/TO/SOMEFILE

光標跳轉:光標跳轉:

        字符間跳轉
            h:左
            j:下
            k:上
            l:右

            #COMMAND:跳轉由#指定的個數的字符;

        單詞間跳轉
            w:下一個單詞的詞首;
            e:當前或后一個單詞的詞尾;
            b:當前或前一個單詞的詞首;

            #COMMAND:跳轉由#指定的個數的單詞;

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

        行間跳轉
            #G:跳轉至由#指定的行;
            1G, gg:第一行;
            G:最后一行;

        句間跳轉:
            )
            (

        段間跳轉
            }
            {

翻屏:

        Ctrl+f:向文件尾翻一屏
        Ctrl+b:向文件首部翻一屏
        Ctrl+d:向文件尾部翻半屏
        Ctrl+u:向文件首部翻半屏
        Enter:按行向后翻

vim的編輯命令:

        字符編輯:
            x:刪除光標所在處的字符;
            #x:刪除光標所在處起始的#個字符;

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

        替換命令(replace):
            r:替換光標所在處的字符;
                rCHAR

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

                dw:
                de:
                db:
                    #COMMAND:

                dd:刪除光標所在處的行;
                    #dd:刪除光標所處的行起始的共#行;

        粘貼命令(p, put, paste):
            p:緩沖區中的內容如果為整行,則粘貼在當前光標所在行的下方;否則,則粘貼至當前光標所在處的后方;
            P:緩沖區中的內容如果為整行,則粘貼在當前光標所在行的上方;否則,則粘貼至當前光標所在處的前方;

        復制命令(yank, y):
            y:復制,工作行為相似于d命令;
                y$
                y^
                y0

                ye
                yw
                yb
                    #COMMAND

                yy:復制一整行
                    #yy:復制#行

        改變命令(change, c):
            編輯模式 --> 輸入模式,實現刪除操作;
                c$
                c^
                c0

                cb
                ce
                cw
                    #COMMAND

                cc:刪除光標所在的行,并轉換為輸出模式;
                    #cc:

        其它編輯操作:

            可視化模式:
                v:按字符選定;
                V:按行選定;

                結合編輯命令使用:d, c, y

            撤銷(undo)操作:
                u:撤銷此前的操作;
                    #u:撤銷此前的#個操作;

            撤銷此前的撤銷:
                Ctrl+r

            重復執行前一個編輯操作:
                .
        vim自帶的練習教程:vimtutor

vim末行模式:

  • 內建的命令行接口;

(1) 地址定界

        :start_pos[,end_pos]
            #:特定的第#行,例如5即第5行;
            .:當前行;
            $:最后一行;
            #,#:指定行范圍,左側為起始行,右側為結束行;
            #,+#:指定行范圍,左側為超始行絕對編號,右側為相對左側行號的偏移量;例如:3,+7
                .,$-1
                1,$
            %:全文 
            /pattern/:從光標所在處起始向文件尾部第一次被模式所匹配到的行;
                /first/,$
            /pat1/,/pat2/:從光標所在處起始,第一次由pat1匹配到的行開始,至第一次由pat2匹配到的行結束之間的所有行;

(2) 查找

        /PATTERN:從當前光標所在處向文件尾部查找能夠被當前模式匹配到的所有字符串;
        ?PATTERN:從當前光標所在處向文件首部查找能夠被當前模式匹配到的所有字符串;
            n:下一個,與命令方向相同;
            N:上一個,與命令方向相反;

(3) 查找并替換

        s:末行模式的命令;使用格式:
            s/要查找的內容/替換為的內容/修飾符
                要查找的內容:可使用正則表達式;
                替換為的內容:不能使用下則表達式,但可以引用;
                    如果“要查找的內容”部分在模式中使用分組符號:在“替換為的內容”中使用后向引用;
                    直接引用查找模式匹配到的全部文本,要使用&符號;
                修飾符:
                    i:忽略大小寫;
                    g:全局替換,意味著一行中如果匹配到多次,則均替換;

            可把分隔符替換為其它非常用字符:
                s@@@
                s###

vim的多文件功能:

    多文件:
        vim FILE1 FILE2 ...

            在文件間切換:
                :next  下一個
                :prev  上一個
                :first   第一個 
                :last   最后一個 

            退出所有文件:
                :wqall 保存所有文件并退出;
                :wall
                :qall

多窗口:

        -o:水平分割窗口
        -O:垂直分割窗口

        在窗口間切換:Ctrl+w, ARROW

        注意:單個文件也可以分割為多個窗口進行查看:
            Ctrl+w, s:水平分割窗口
            Ctrl+w, v:垂直分割窗口

定制vim的工作特性:

    注意:在末行模式下的設定,僅對當前vim進程有效;
    永久有效:
        全局:/etc/vimrc
        用戶個人:~/.vimrc

    1、行號
        顯示:set number, 簡寫為set nu
        取消顯示:set nomber, set nonu
    2、括號匹配高亮
        匹配:set showmatch, set sm
        取消:set nosm
    3、自動縮進
        啟用:set ai
        禁用:set noai
    4、高亮搜索
        啟用:set  hlsearch
        禁用:set nohlsearch
    5、語法高亮
        啟用:syntax on
        禁用:syntax off 
    6、忽略字符大小寫
        啟用:set ic
        禁用:set noic

1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;

  • ~]# cp /etc/rc.d/rc.sysinit /tmp

  • ~]# vim /tmp/rc.sysinit

  • : %@^[[:space:]]+@#@

2、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中的行首的空白字符;

  • ~]# cp /boot/grub/grub.conf /tmp

  • ~]# vim /tmp/grub.conf

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

3、刪除/tmp/rc.sysinit文件中的以#開頭,且后面跟了至少一個空白字符的行行的#和空白字符

  • ~]# vim /tmp/rc.sysinit

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

4、為/tmp/grub.conf文件中前三行的行首加#號;

  • ~]# vim /tmp/grub.conf

  • : 1,3 s/^/#&

5、將/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改為1

  • ~]# vim /etc/yum.repos.d/CentOS-Media.repo

  • : %s@(enabled\|gpgcheck)=0@\1=1@g

6、每4小時執行一次對/etc目錄的備份,備份至/backup目錄中,保存的目錄名為形如etc-201504020202

  • ~]# mkdir /backup

  • ~]# crontab -e

  • ~]# chmod +x /var/spool/cron/root

  • 0 */4 * * * cp -rf /etc /backup/etc-date +%Y%m%d%H%M

7、每周2,4,6備份/var/log/messages文件至/backup/messages_logs/目錄中,保存的文件名形如messages-20150402

  • ~]# mkdir /backup/messages_logs

  • ~]# crontab -e

  • ~]# chmod +x /var/spool/cron/root

  • ~]# 0 0 * * 2,4,6 cp /var/log/messages /backup/messages_logs/messages-'date+%Y%m%d'

8、每天每兩小時取當前系統/proc/meminfo文件中的所有以S開頭的信息至/stats/memory.txt文件中

  • ~]# mkdir /stats

  • ~]# * */2 * * * grep "^S" /proc/meminfo > /stats/memory.txt

9、工作日的工作時間內,每兩小時執行一次echo "howdy"

  • 0 8-17/2 * * 1-5 echo "howdy"


腳本編程練習

10、創建目錄/tmp/testdir-當前日期時間;

#!/bin/bash
mkdir /tmp/testdir-`date +%Y%m%d%H%M` && echo "The dir is made"

11在此目錄創建100個空文件:file1-file100

#!/bin/bash
declare -i i=1
for i in {1..100}; do
touch /tmp/testdir-201610281434/file$i
done
echo "Touch 100 files"

12顯示/etc/passwd文件中位于第偶數行的用戶的用戶名;

#/bin/bash
sed -n 'n;p' /etc/passwd | cut -d":" -f1

13、創建10用戶user10-user19;密碼同用戶名;

#!/bin/bash
#V0.0.1
#useradd
for i in {10..19}; do   
useradd user$i && echo "user$i" | passwd --stdin user$i &> /dev/null
done

14、在/tmp/創建10個空文件file10-file19;

#!/bin/bash

#v0.0.1

#touch files



for i in {10..19};do

    touch /tmp/file$i &>/dev/null

done

15、把file10的屬主和屬組改為user10,依次類推。

#!/bin/bash
#v0.0.1
#chown files owner
for i in {10..19};do    
chown user$i:user$i /tmp/file$i &>/dev/null
done

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

(0)
shiyekunshiyekun
上一篇 2016-10-30
下一篇 2016-10-30

相關推薦

  • 磁盤管理(二)Raid與LVM邏輯卷

    概述:本章主要講解raid和邏輯卷 什么是RAID RAID:Redundant Arrays of Inexpensive(Independent) Disks 1988年由加利福尼亞大學伯克利分校( University ofCalifornia-Berkeley) “ A Case for RedundantArrays of Inexpensive …

    Linux干貨 2016-09-05
  • LAMP系列之(php-fpm模式)分布三臺機器部署

    LAMP系列之(php-fpm模式)分布三臺機器部署 現在我們需要做一個實驗,就是把apache , php-fpm , mariadb ,分別安裝在3臺機器上,協同工作具體如下: 192.168.42.150 apache 192.168.42.151 php-fpm 192.168.42.152 mariadb 關閉防火墻 關閉selinux 分別給這3…

    Linux干貨 2017-06-03
  • 查找幫助功能、Linux文件系統目錄標準LHS介紹

    查找幫助 命令自帶   COMMAND –help                      COMMAND -h 使用手冊 man COMMAND…

    Linux干貨 2016-10-30
  • LAMP基于rsyslog+loganalyzer實現日志集中管理及分析

    前言 作為一名運維工程師,查看分析系統日志是每天必做的功課,但每次查看日志都得一臺服務器一臺服務器的看,幾臺服務器還可以這么對付,但如果管理成百上千臺線上服務器,這種方法就捉襟見肘了。于是我們就需要用到日志服務器了,但是如何能讓它更直觀的顯示呢?loganalyzer是一個不錯的選擇,本文將講解如何使用rsyslog+loganalyze實現日志統一管理及分…

    Linux干貨 2015-04-27
  • 從Linux小白到大牛——與狼共舞的日子3

    馬哥教育網絡班21期+第3周課程練習 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who root :0   2016-07-23 08:55 (:0) wangsining pts…

    Linux干貨 2016-07-26
  • 文本處理工具-習題

    1 、找出ifconfig 命令結果中本機的所有IPv4地址 [root@centos7 ~]# ifconfig |head -2 |tail-1 |cut -dn -f2 |cut -d" " -f2 2 、查出分區空間使用率的最大百分比值 [root@centos7 ~]# df |cut -c44-46 |sort -n|tail…

    Linux干貨 2016-08-15
欧美性久久久久