Login

Navigation

This articles is published 1264 days ago and last updated 627 days ago, some information may be out of date.

Linux 的命令基本用法 - vim 編輯器

Vimlogo.png

前言:

nano是簡單好用的文件編輯器,但熟練vim後會讓你在編輯處理上更得心應手。

大部份內容取自鳥哥的vim 程式編輯器教學


vim編輯器三種模式:

centos7_vi-mode.gif

如圖示(來自鳥哥) ESC 是退回到一般模式編輯模式命令模式切換都要經一般模式才可以。


一般模式 (Normal mode)
  • 按鍵說明
移動游標的方法

2020-06-23_112920.png

h 或 向左方向鍵(←)游標向左移動一個字元
j 或 向下方向鍵(↓)游標向下移動一個字元
k 或 向上方向鍵(↑)游標向上移動一個字元
l 或 向右方向鍵(→)游標向右移動一個字元
如向下移動 20 列,可以使用 "20j" 或 "20↓" 的組合按鍵即可!

2020-06-23_150634.png

Ctrl + f螢幕『向下』移動一頁,相當於 [Page Down]按鍵
Ctrl + b螢幕『向上』移動一頁,相當於 [Page Up] 按鍵
0 或功能鍵Home這是數字『 0 』:移動到這一行的最前面字元處
$ 或功能鍵End移動到這一行的最後面字元處
gg移動到這個檔案的第一行,相當於 1G 啊!
G移動到這個檔案的最後一行
n+Entern 為數字。游標向下移動 n 行
搜尋和取代
/word向游標之下尋找一個名稱為 word 的字串。
使用 /word 配合 n(向下搜尋下一個) 及 N (向前搜尋上一個),可以讓你重複的找到一些你搜尋的關鍵字!
:1,20s/word1/word2/g在第 1 與 20 列之間尋找 word1 這個字串,並將該字串取代為 word2
:1,$s/word1/word2/g從第一列到最後一列尋找 word1 字串,並將該字串取代為 word2
:1,$s/word1/word2/gc同上,但在取代前顯示確認 (confirm) 是否需要取代!
:10,22s/^/#/g起始行號(10),結束行號(22)s/^/註釋符/g 插入註釋。
刪除無內容的空白行列
一般模式 (normal mode)註解
:g/^$/d刪除空白行。
:g/^\s*$/d刪除空白行和只有空格[Space]沒有內容的空白行。
刪除、複製與貼上
x,Xx 為向後刪除一個字元 (相當於 [del] 按鍵),X 為向前刪除一個字元(相當於 [Backspace]鍵)
dd刪除游標所在的那一整行
nddn 為數字。刪除游標所在的向下 n 列,例如 20dd 則是刪除 20 行
yy複製游標所在的那一行
nyyn 為數字。複製游標所在的向下 n 列,例如 20yy 則是複製 20 行
p,Pp 為將已複製的資料在游標下一列貼上,P 則為貼在游標上一行
u復原前一個動作
Ctrl+r重做上一個動作
.是小數點!意思是重複前一個動作的意思

返回

編輯模式 (insert mode)
左下角處會出現INSERTREPLACE的字眼
i,I進入插入模式(Insert mode): i 為『從目前游標所在處插入』, I 為『在目前所在行的第一個非空白字元處開始插入』。
a,A進入插入模式(Insert mode): a 為『從目前游標所在的下一個字元處開始插入』, A 為『從游標所在行的最後一個字元處開始插入』
o,O進入插入模式(Insert mode): 這是英文字母 o 的大小寫。o 為『在目前游標所在的下一行處插入新的一行』; O 為在目前游標所在處的上一行插入新的一行
r,R進入取代模式(Replace mode): r 只會取代游標所在的那一個字元一次;R會一直取代游標所在的文字,直到按下 ESC 為止;
Esc退出編輯模式(回到一般模式)

返回

命令模式 (command-line mode)
:w將編輯的資料寫入硬碟檔案中
:q離開 vi
:wq儲存後離開,若為 :wq! 則為強制儲存後離開
:set nu顯示行號,設定之後,會在每一列的字首顯示該列的行號
:set nonu與 set nu 相反,為取消行號!
:! command暫時離開 vim 執行 command 的顯示結果!

返回

額外: 配合bash的工作管理
bash的工作管理可以在Terminal中自由切換到不同工作任務。
如: 在vim使用中暫時退到背景(background)中執行,待複製好資料後,再執行vim的工作為前景(foreground),貼上剛才複製的內容。

常見的工作管理使用的符號與組合按鍵如下:

組合按鍵作用
command &直接將 command 丟到背景中執行
[ctrl] + z將目前執行的工作丟到背景中暫停
jobs -l列出目前的工作資訊
fg %n將第 n 個在背景當中的工作移到前景來操作
bg %n將第 n 個在背景當中的工作變成執行中

返回


額外 - The Ultimate vimrc 美化vim

vim更賞心悅目!
git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_awesome_vimrc.sh

2021-07-08_091111.png

來自大佬: amix / vimrc


Vim 的另一選擇 Neovim

Neovim 是一個旨在積極重構 Vim 的項目,以便:
簡化維護並鼓勵貢獻
在多個開發人員之間拆分工作
在不修改核心的情況下啟用高級用戶界面
最大化可擴展性
有關詳細信息,請參閱介紹 wiki 頁面和路線圖。

neovim

安裝 Neovim

sudo apt install neovim -y

安裝外掛管理器 vim-plug
vim-plug

sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
       https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

Neovim 的組態檔案目錄

mkdir -p .config/nvim

Neovim 的組態檔案

vi .config/nvim/init.vim

Neovim 的組態檔案內容

call plug#begin()
" below are some vim plugin for demonstration purpose
Plug 'joshdick/onedark.vim'
Plug 'iCyMind/NeoSolarized'
Plug 'tpope/vim-commentary'
Plug 'octol/vim-cpp-enhanced-highlight'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
call plug#end()

也可以新增更多個性化設定

" => Colors and Fonts
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Enable syntax highlighting
syntax enable

" Set colorscheme
set background=dark
colorscheme desert

" Set utf8 as standard encoding and en_US as the standard language
set encoding=utf8

" Use Unix as the standard file type
set ffs=unix,dos,mac

" Enable status bar color
set t_Co=256

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Vim Airline themes
let g:airline_theme='luna'
let g:airline_powerline_fonts=1
let g:airline#extensions#tabline#enabled=1

" Vim Cpp Highlight
let g:cpp_class_scope_highlight=1
let g:cpp_member_variable_highlight=1
let g:cpp_experimental_simple_template_highlight=1
let g:cpp_concepts_highlight=1

重新打開 Neovim,然後執行

:PlugInstall

所有要安裝的外掛都會被安裝到目錄


一鍵安裝 Neovm 及 插件

這是安裝 Neovim 和 Vim-Plug 插件管理器的 Bash Script.

安裝一些流行的 Neovim 插件 (可根據自己喜好刪減):
vim-plugin

#!/bin/bash

# Program:
#       Automatically install Neovim and vim-plug (basic).
# Author:
#       King Tam (https://kingtam.win)
# History:
#       Mar/22/2023     First release

# Define the required packages
packages=(curl git neovim)

# Define the package managers and their update commands
declare -A package_managers=(
    [apt-get]="sudo apt-get"
    [dnf]="sudo dnf"
    [pacman]="sudo pacman -S"
)

# Detect the package manager and install the packages
for package_manager in "${!package_managers[@]}"
do
    if command -v "$package_manager" &> /dev/null
    then
        ${package_managers[$package_manager]}
        sudo "$package_manager" install -y "${packages[@]}"
        break
    fi
done

# Check if the operating system is CentOS
if [ "$(awk -F= '/^ID=/{print $2}' /etc/os-release)" == "\"centos\"" ]; then
# Install Neovim and Python3-Neovim using YUM
    echo "Detected CentOS Linux. Installing Neovim..."
    sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
    sudo yum update -y
    sudo yum install -y neovim python3-neovim
fi

# Install Vim-Plug plugin manager
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

# Create Neovim configuration file and add plugins
mkdir -p ~/.config/nvim

if [ ! -f ~/.config/nvim/init.vim ]; then
    touch ~/.config/nvim/init.vim
fi

cat <<EOT >> ~/.config/nvim/init.vim
call plug#begin('~/.local/share/nvim/plugged')

" Add plugins here
Plug 'scrooloose/nerdtree'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'joshdick/onedark.vim'
Plug 'tpope/vim-commentary'
Plug 'octol/vim-cpp-enhanced-highlight'
call plug#end()
EOT

# Install plugins using Vim-Plug
nvim +PlugInstall +qall

在這個Script中:

  1. 使用 apt-get 包管理器安裝 Neovim。 然後我們安裝 Vim-Plug,這是 Vim 和 Neovim 的流行插件管理器。
  2. 創建一個 Neovim 配置文件 (~/.config/nvim/init.vim) 並向其中添加一些流行的插件。

    在這個例子中,我們添加了 NERDTree 文件瀏覽器、Airline 主題 和 Airline 狀態欄插件等等。
  3. 使用 nvim 命令通過 Vim-Plug 安裝插件。

    +PlugInstall 參數告訴 Neovim 安裝配置文件中定義的插件,+qall 參數告訴 Neovim 安裝完成後退出。

手動或者一鍵執行Neovim.sh腳本

  • 將腳本的內容保存在文件中,例如 neovim.sh。
  • 使用 chmod +x neovim.sh 使腳本可執行。
  • 以 root 身份或使用 sudo 運行腳本:sudo ./neovim.sh。

此外,我們可以在終端中使用單個命令行。 (需要Root或者sudo權限)

curl -O https://kingtam.win/usr/uploads/script/neovim.sh && chmod +x neovim.sh && ./neovim.sh

此命令將從 URL地址下載腳本,使其可執行,然後運行它。 如果任何命令失敗,則不會執行後續命令。

參考資料:

Vim Cheat Sheet

鳥哥私房菜 - 檔案管理與 vim 初探

junegunn / vim-plug

我的Vim配置