วิธีการเซตไฮไลต์สี syntax ใน vim

หลายคนรวมทั้งตัวผู้เขียนเอง ใช้ vim ในการแก้ไขไฟล์ต่างๆ ในลีนุกซ์ แล้วก็ใช้ vim ในการพัฒนาหรือเขียนโปรแกรมใช้งานด้วย

คุณสมบัติหนึ่งของ editor ที่ช่วยให้โปรแกรมเมอร์สามารถเขียนโปรแกรมได้ง่ายขึ้น หรือหาจุดผิดพลาดในโปรแกรมได้เร็วมากขึ้น คือมีการไฮไลต์สีของโค้ดโปรแกรมที่เขียน (syntax highlight)

ใน vim ก็มีคุณสมบัตินี้เหมือนกัน เพียงแต่ดีฟอลต์อาจไม่ได้เปิดการใช้งานไว้ ลองมาดูวิธีการเปิดการใช้งานกันครับ

บนลีนุกซ์ตระกูล CentOS หรือ Red Hat หากต้องการให้ vim มีการไฮไลต์สี ต้องติดตั้งแพ็กเกจ vim-enhanced

ตอนติดตั้ง CentOS หากเลือกแบบ Minimal หรือยังไม่ได้ติดตั้งแพ็กเกจนี้ไว้ ต้องใช้คำสั่ง yum install เพื่อติดตั้งแพ็กเกจเพิ่มเติม

[root@cent7 ~]# yum install vim-enhanced

หลังติดตั้งเสร็จ ลองล็อกอินด้วยผู้ใช้ธรรมดา แล้วพิมพ์คำสั่ง vi เปิดไฟล์

ตัวอย่างการใช้ vi เปิดไฟล์ html

[alice@cent7 ~]$ vi index.html

ตัวอย่างหน้าจอ vim ที่ได้
c-vim-01-html-with-color

ที่จริงคำสั่ง vi ที่ผู้ใช้พิมพ์นี้ เป็นการเรียกคำสั่ง vim อีกที โดยการใช้คุณสมบัติ alias ของ shell

ลองใช้คำสั่ง alias ตามด้วยชื่อคำสั่งที่พิมพ์ เพื่อดูคำสั่งที่เรียกใช้จริงๆ

[alice@cent7 ~]$ alias vi
alias vi='vim'

แต่ถ้าลองล็อกอินด้วย root ใช้คำสั่ง vi เปิดไฟล์เดียวกัน กลับไม่มีสี

[root@cent7 ~]# vi index.html

ตัวอย่างหน้าจอ vim ที่ได้
c-vim-02-no-color

เป็นเพราะว่า ดีฟอลต์จากการติดตั้งแพ็กเกจ vim-enhanced ไม่มีการเซต alias vi สำหรับ root ไว้ ดังนั้นจะเป็นการเรียกคำสั่ง vi ตรงๆ ที่ไม่มีคุณสมบัติในการไฮไลต์สี

[root@cent7 ~]# alias vi
-bash: alias: vi: not found

หากไล่ดูปัญหาโดยละเอียด จากการดิดตั้ง vim-enhanced จะมีไฟล์สคริปต์ /etc/profile.d/vim.sh ที่มีการตรวจสอบว่า ถ้าผู้ใช้ที่ล็อกอินมี id ต่ำกว่า 200 จะไม่มีการทำ alias สำหรับคำสั่ง vi

ซึ่ง root มี id เท่ากับ 0

[root@cent7 ~]# cat /etc/profile.d/vim.sh
if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
  [ -x /usr/bin/id ] || return
  ID=`/usr/bin/id -u`
  [ -n "$ID" -a "$ID" -le 200 ] && return
  # for bash and zsh, only if no alias is already set
  alias vi >/dev/null 2>&1 || alias vi=vim
fi

[root@cent7 ~]# id -u
0

ส่วนเหตุผลว่าทำไมถึงเป็นแบบนี้ ลองอ่านลิงก์ Bug 168010 – /etc/profile.d/vim.sh don’t applies to root user

ดังนั้น ถ้าต้องการให้ล็อกอินด้วย root แล้วให้มีการไฮไลต์สีเวลาเรียกใช้ด้วย ก็อาจพิมพ์คำสั่ง vim ตรงๆ หรือเพิ่มการ alias vi ในไฟล์ .bash_profile ซึ่งจะถูกรันทุกครั้งเมื่อมีการล็อกอิน

ตัวอย่างการเพิ่ม alias vi ต่อท้ายในไฟล์ .bash_profile ใน home ของ root

[root@cent7 ~]# pwd
/root

[root@cent7 ~]# vi .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

alias vi='vim'

แล้วลองล็อกอินด้วย root ใหม่อีกครั้ง จะมีการเซต alias ให้

[root@cent7 ~]# alias vi
alias vi='vim'

นอกจาก vim-enhanced จะสามารถไฮไลต์สี ไฟล์โปรแกรมภาษาต่างๆ ได้แล้ว ยังสามารถไฮไลต์สีไฟล์คอนฟิกของเซิร์ฟเวอร์หรือเซอร์วิสต่างๆ เพื่อช่วยให้ผู้ดูแลระบบดูหรือแก้ไขไฟล์คอนฟิกได้ง่ายขึ้นด้วย

ตัวอย่างการใช้ vi เปิดไฟล์คอนฟิก /etc/httpd/conf/httpd.conf ซึ่งเป็นไฟล์คอนฟิกหลังของเว็บเซิร์ฟเวอร์ Apache

[root@cent7 ~]# vi /etc/httpd/conf/httpd.conf

ตัวอย่างหน้าจอ vim ที่ได้
c-vim-03-httpd

สังเกตดูว่าถ้าเราพิมพ์ออปชัน เช่นสะกด Directory ผิดไป จะมีการเปลี่ยนสี

นอกเหนือจากนี้ การติดตั้งแพ็กเกจ vim-enhanced ยังทำให้ vi หรือ vim มีคุณสมบัติอื่นเพิ่มขึ้น ที่น่าใช้และมีประโยขน์อีกมากมาย ไว้จะกล่าวถึงเรื่อยๆ ดังนั้นแนะนำให้ติดตั้งแพ็กเกจนี้ครับ

หมายเหตุ ในลีนุกซ์หรือยูนิกซ์อื่นๆ อาจต้องพิมพ์คำสั่ง :syntax on ใน vim เพิ่มเติม หากไม่ได้เซตไว้ เพื่อเปิดการไฮไลต์สี

ข้อมูลอ้างอิง

 

Leave a Reply

Your email address will not be published.