【Linux 操作系統】vim編輯器配置及常用命令

      網友投稿 996 2025-04-04

      最近工作不安分, 沒有了剛入行時候的銳氣, 不知道什么時候開始懈怠起來, 周末在電腦旁邊看新聞, 搞笑圖片, 追美劇, 一坐就是一天, 很是空虛. 我需要擺脫這種狀態, 正好想學習一下安卓底層, Android碼農, C/C++功底差了點, Android內核源碼看得也很吃力, 索性就報了個嵌入式班, 周末班, 還好我在北京, 找個家培訓機構開始學習嵌入式開發.

      C語言功底太差了, 跟著班從最基礎的開始學習吧, Linux C 開發, 使用vim編輯器進行開發, 必須把vim編輯器用熟練, 在這篇博客里面總結下vim;

      一. vim的配置文件

      快捷鍵優點 :

      F5 自動編譯C/C++文件

      F8 自動調試C/C++文件

      F2 清除空行

      F3 列出當前文件目錄

      Ctrl + P 自動補全

      Ctrl + A 全選復制

      編輯特點 :

      自動生成C/C++ Java sh文件頭

      括號 單雙引號自動補全

      剛開始使用vim的時候, 覺得很難用, 每次使用大括號, if語句等都要縮進, 并且沒有行號, 編譯或者運行出錯以后不好查找錯誤, 這些都是可以在配置文件里面進行設定的;

      vim配置文件可以存放在兩個位置 :① etc/vimrc ?② root/.vimrc

      第二個存放位置就是用戶目錄( ~/ )下的隱藏文件, 注意文件名前面有一個 . 符號.

      1. 基本配置

      set nu " 顯示行號

      set guifont=Courier_New:h10:cANSI " 設置字體

      set syntax=on" 語法高亮

      autocmd InsertLeave * se nocul " 用淺色高亮當前行

      autocmd InsertEnter * se cul " 用淺色高亮當前行

      set showcmd " 輸入的命令顯示出來,看的清楚些

      set background=dark " 背景使用黑色

      set nocompatible " 去掉討厭的有關vi一致性模式,避免以前版本的一些bug和局限

      2. 代碼折疊配置

      set foldcolumn=0

      set foldmethod=indent

      set foldlevel=3

      set foldenable ? ? ? ? ? ? ?" 開始折疊

      3. 縮進設置

      set autoindent ?" 自動縮進

      set cindent ?" 自動縮進

      set tabstop=4 ?" Tab鍵的寬度

      set softtabstop=4 ?" 統一縮進為4

      set shiftwidth=4 ?" 統一縮進為4

      set noexpandtab ?" 不要用空格代替制表符

      set smarttab ?" 在行和段開始處使用制表符

      4. 防止亂碼設置

      set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936

      set termencoding=utf-8

      set encoding=utf-8

      set fileencodings=ucs-bom,utf-8,cp936

      set fileencoding=utf-8

      5. 文件自動讀寫

      set autoread " 設置當文件被改動時自動載入

      set autowrite "自動保存

      6. C/C++ Java sh文件自動插入文件頭

      autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"

      ""定義函數SetTitle,自動插入文件頭

      func SetTitle()

      "如果文件類型為.sh文件

      if &filetype == 'sh'

      call setline(1,"\#########################################################################")

      call append(line("."), "\# File Name: ".expand("%"))

      call append(line(".")+1, "\# Author: ma6174")

      call append(line(".")+2, "\# mail: ma6174@163.com")

      call append(line(".")+3, "\# Created Time: ".strftime("%c"))

      call append(line(".")+4, "\#########################################################################")

      call append(line(".")+5, "\#!/bin/bash")

      call append(line(".")+6, "")

      else

      call setline(1, "/*************************************************************************")

      call append(line("."), " > File Name: ".expand("%"))

      call append(line(".")+1, " > Author: ma6174")

      call append(line(".")+2, " > Mail: ma6174@163.com ")

      call append(line(".")+3, " > Created Time: ".strftime("%c"))

      call append(line(".")+4, " ************************************************************************/")

      call append(line(".")+5, "")

      endif

      if &filetype == 'cpp'

      call append(line(".")+6, "#include")

      call append(line(".")+7, "using namespace std;")

      call append(line(".")+8, "")

      endif

      if &filetype == 'c'

      call append(line(".")+6, "#include")

      call append(line(".")+7, "")

      endif

      "新建文件后,自動定位到文件末尾

      autocmd BufNewFile * normal G

      endfunc

      7. 添加一些鍵盤命令

      在下面 map + 快捷鍵 + 命令 ?可以將快捷鍵與對應的命令聯系起來, 按下快捷鍵就相當于執行這些命令.

      nmap w :w!

      nmap f :find

      (1) 映射全選+復制

      Ctrl + A 鍵 相當于全選復制

      " 映射全選+復制 ctrl+a

      map ggVGY

      map! ggVGY

      map gg=G

      (2) 選中狀態下復制

      按Ctrl + C 鍵復制

      " 選中狀態下 Ctrl+c 復制

      vmap "+y

      (3) 去掉空行

      按F12 去掉空行

      "去空行

      nnoremap :g/^\s*$/d

      (4) 比較文件

      Ctrl + F12 文件比較

      "比較文件

      nnoremap :vert diffsplit

      (5) 新建標簽

      M + F2 新建一個標簽

      "新建標簽

      map :tabnew

      (6) 列出目錄文件

      F3 鍵 將當前目錄文件列出

      "列出當前目錄文件

      map :tabnew .

      (7) 打開樹狀文件目錄

      Ctrl + F3 打開文件目錄

      "打開樹狀文件目錄

      map \be

      (8) 編譯C/C++文件

      按 F5 自動編譯C/C++文件

      "C,C++ 按F5編譯運行

      map :call CompileRunGcc()

      func! CompileRunGcc()

      exec "w"

      if &filetype == 'c'

      exec "!g++ % -o %<"

      exec "! ./%<"

      elseif &filetype == 'cpp'

      exec "!g++ % -o %<"

      exec "! ./%<"

      elseif &filetype == 'java'

      exec "!javac %"

      exec "!java %<"

      elseif &filetype == 'sh'

      :!./%

      endif

      endfunc

      (9) 調試C/C++文件

      按F8調試C/C++文件

      "C,C++的調試

      map :call Rungdb()

      func! Rungdb()

      exec "w"

      exec "!g++ % -g -o %<"

      exec "!gdb ./%<"

      endfunc

      8. 自動補各種括號引號

      "自動補全

      :inoremap ( ()i

      :inoremap ) =ClosePair(')')

      :inoremap { {}O

      :inoremap } =ClosePair('}')

      :inoremap [ []i

      :inoremap ] =ClosePair(']')

      :inoremap " ""i

      :inoremap ' ''i

      function! ClosePair(char)

      if getline('.')[col('.') - 1] == a:char

      return "\"

      else

      return a:char

      endif

      endfunction

      filetype plugin indent on

      "打開文件類型檢測, 加了這句才可以用智能補全

      set completeopt=longest,menu

      9. 配置文件示例

      """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      " 顯示相關

      """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      "set shortmess=atI " 啟動的時候不顯示那個援助烏干達兒童的提示

      "winpos 5 5 " 設定窗口位置

      "set lines=40 columns=155 " 設定窗口大小

      "set nu " 顯示行號

      set go= " 不要圖形按鈕

      "color asmanian2 " 設置背景主題

      set guifont=Courier_New:h10:cANSI " 設置字體

      syntax on " 語法高亮

      autocmd InsertLeave * se nocul " 用淺色高亮當前行

      autocmd InsertEnter * se cul " 用淺色高亮當前行

      "set ruler " 顯示標尺

      set showcmd " 輸入的命令顯示出來,看的清楚些

      "set cmdheight=1 " 命令行(在狀態行下)的高度,設置為1

      "set whichwrap+=<,>,h,l " 允許backspace和光標鍵跨越行邊界(不建議)

      "set scrolloff=3 " 光標移動到buffer的頂部和底部時保持3行距離

      set novisualbell " 不要閃爍(不明白)

      set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")} "狀態行顯示的內容

      set laststatus=1 " 啟動顯示狀態行(1),總是顯示狀態行(2)

      set foldenable " 允許折疊

      set foldmethod=manual " 手動折疊

      "set background=dark "背景使用黑色

      set nocompatible "去掉討厭的有關vi一致性模式,避免以前版本的一些bug和局限

      " 顯示中文幫助

      if version >= 603

      set helplang=cn

      set encoding=utf-8

      endif

      " 設置配色方案

      "colorscheme murphy

      "字體

      "if (has("gui_running"))

      " set guifont=Bitstream\ Vera\ Sans\ Mono\ 10

      "endif

      set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936

      set termencoding=utf-8

      set encoding=utf-8

      set fileencodings=ucs-bom,utf-8,cp936

      set fileencoding=utf-8

      """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      """""新文件標題""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      "新建.c,.h,.sh,.java文件,自動插入文件頭

      autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"

      ""定義函數SetTitle,自動插入文件頭

      func SetTitle()

      "如果文件類型為.sh文件

      if &filetype == 'sh'

      call setline(1,"\#########################################################################")

      call append(line("."), "\# File Name: ".expand("%"))

      call append(line(".")+1, "\# Author: ma6174")

      call append(line(".")+2, "\# mail: ma6174@163.com")

      call append(line(".")+3, "\# Created Time: ".strftime("%c"))

      call append(line(".")+4, "\#########################################################################")

      call append(line(".")+5, "\#!/bin/bash")

      call append(line(".")+6, "")

      else

      call setline(1, "/*************************************************************************")

      call append(line("."), " > File Name: ".expand("%"))

      call append(line(".")+1, " > Author: ma6174")

      call append(line(".")+2, " > Mail: ma6174@163.com ")

      call append(line(".")+3, " > Created Time: ".strftime("%c"))

      call append(line(".")+4, " ************************************************************************/")

      call append(line(".")+5, "")

      endif

      if &filetype == 'cpp'

      call append(line(".")+6, "#include")

      call append(line(".")+7, "using namespace std;")

      call append(line(".")+8, "")

      endif

      if &filetype == 'c'

      call append(line(".")+6, "#include")

      call append(line(".")+7, "")

      endif

      "新建文件后,自動定位到文件末尾

      autocmd BufNewFile * normal G

      endfunc

      """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      "鍵盤命令

      """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      nmap w :w!

      nmap f :find

      " 映射全選+復制 ctrl+a

      map ggVGY

      map! ggVGY

      map gg=G

      " 選中狀態下 Ctrl+c 復制

      vmap "+y

      "去空行

      nnoremap :g/^\s*$/d

      "比較文件

      nnoremap :vert diffsplit

      "新建標簽

      map :tabnew

      "列出當前目錄文件

      map :tabnew .

      "打開樹狀文件目錄

      map \be

      "C,C++ 按F5編譯運行

      map :call CompileRunGcc()

      func! CompileRunGcc()

      exec "w"

      if &filetype == 'c'

      exec "!g++ % -o %<"

      exec "! ./%<"

      elseif &filetype == 'cpp'

      exec "!g++ % -o %<"

      exec "! ./%<"

      elseif &filetype == 'java'

      exec "!javac %"

      exec "!java %<"

      elseif &filetype == 'sh'

      :!./%

      endif

      endfunc

      "C,C++的調試

      map :call Rungdb()

      func! Rungdb()

      exec "w"

      exec "!g++ % -g -o %<"

      exec "!gdb ./%<"

      endfunc

      """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      ""實用設置

      """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      " 設置當文件被改動時自動載入

      set autoread

      " quickfix模式

      autocmd FileType c,cpp map :w:make

      "代碼補全

      set completeopt=preview,menu

      "允許插件

      filetype plugin on

      "共享剪貼板

      set clipboard+=unnamed

      "從不備份

      set nobackup

      "make 運行

      :set makeprg=g++\ -Wall\ \ %

      "自動保存

      set autowrite

      set ruler " 打開狀態欄標尺

      set cursorline " 突出顯示當前行

      set magic " 設置魔術

      set guioptions-=T " 隱藏工具欄

      set guioptions-=m " 隱藏菜單欄

      "set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\

      " 設置在狀態行顯示的信息

      set foldcolumn=0

      set foldmethod=indent

      set foldlevel=3

      set foldenable " 開始折疊

      " 不要使用vi的鍵盤模式,而是vim自己的

      set nocompatible

      " 語法高亮

      set syntax=on

      " 去掉輸入錯誤的提示聲音

      set noeb

      " 在處理未保存或只讀文件的時候,彈出確認

      set confirm

      " 自動縮進

      set autoindent

      set cindent

      " Tab鍵的寬度

      set tabstop=4

      " 統一縮進為4

      set softtabstop=4

      set shiftwidth=4

      " 不要用空格代替制表符

      set noexpandtab

      " 在行和段開始處使用制表符

      set smarttab

      " 顯示行號

      set number

      " 歷史記錄數

      set history=1000

      "禁止生成臨時文件

      set nobackup

      set noswapfile

      "搜索忽略大小寫

      set ignorecase

      "搜索逐字符高亮

      set hlsearch

      set incsearch

      "行內替換

      set gdefault

      "編碼設置

      set enc=utf-8

      set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936

      "語言設置

      set langmenu=zh_CN.UTF-8

      set helplang=cn

      " 我的狀態行顯示的內容(包括文件類型和解碼)

      "set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}

      "set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]

      " 總是顯示狀態行

      set laststatus=2

      " 命令行(在狀態行下)的高度,默認為1,這里是2

      set cmdheight=2

      " 偵測文件類型

      filetype on

      " 載入文件類型插件

      filetype plugin on

      " 為特定文件類型載入相關縮進文件

      filetype indent on

      " 保存全局變量

      set viminfo+=!

      【Linux 操作系統】vim編輯器配置及常用命令

      " 帶有如下符號的單詞不要被換行分割

      set iskeyword+=_,$,@,%,#,-

      " 字符間插入的像素行數目

      set linespace=0

      " 增強模式中的命令行自動完成操作

      set wildmenu

      " 使回格鍵(backspace)正常處理indent, eol, start等

      set backspace=2

      " 允許backspace和光標鍵跨越行邊界

      set whichwrap+=<,>,h,l

      " 可以在buffer的任何地方使用鼠標(類似office中在工作區雙擊鼠標定位)

      set mouse=a

      set selection=exclusive

      set selectmode=mouse,key

      " 通過使用: commands命令,告訴我們文件的哪一行被改變過

      set report=0

      " 在被分割的窗口間顯示空白,便于閱讀

      set fillchars=vert:\ ,stl:\ ,stlnc:\

      " 高亮顯示匹配的括號

      set showmatch

      " 匹配括號高亮的時間(單位是十分之一秒)

      set matchtime=1

      " 光標移動到buffer的頂部和底部時保持3行距離

      set scrolloff=3

      " 為C程序提供自動縮進

      set smartindent

      " 高亮顯示普通txt文件(需要txt.vim腳本)

      au BufRead,BufNewFile * setfiletype txt

      "自動補全

      :inoremap ( ()i

      :inoremap ) =ClosePair(')')

      :inoremap { {}O

      :inoremap } =ClosePair('}')

      :inoremap [ []i

      :inoremap ] =ClosePair(']')

      :inoremap " ""i

      :inoremap ' ''i

      function! ClosePair(char)

      if getline('.')[col('.') - 1] == a:char

      return "\"

      else

      return a:char

      endif

      endfunction

      filetype plugin indent on

      "打開文件類型檢測, 加了這句才可以用智能補全

      set completeopt=longest,menu

      """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      " CTags的設定

      """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      let Tlist_Sort_Type = "name" " 按照名稱排序

      let Tlist_Use_Right_Window = 1 " 在右側顯示窗口

      let Tlist_Compart_Format = 1 " 壓縮方式

      let Tlist_Exist_OnlyWindow = 1 " 如果只有一個buffer,kill窗口也kill掉buffer

      let Tlist_File_Fold_Auto_Close = 0 " 不要關閉其他文件的tags

      let Tlist_Enable_Fold_Column = 0 " 不要顯示折疊樹

      autocmd FileType java set tags+=D:\tools\java\tags

      "autocmd FileType h,cpp,cc,c set tags+=D:\tools\cpp\tags

      "let Tlist_Show_One_File=1 "不同時顯示多個文件的tag,只顯示當前文件的

      "設置tags

      set tags=tags

      "set autochdir

      """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      "其他東東

      """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

      "默認打開Taglist

      let Tlist_Auto_Open=1

      """"""""""""""""""""""""""""""

      " Tag list (ctags)

      """"""""""""""""""""""""""""""""

      let Tlist_Ctags_Cmd = '/usr/bin/ctags'

      let Tlist_Show_One_File = 1 "不同時顯示多個文件的tag,只顯示當前文件的

      let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一個窗口,則退出vim

      let Tlist_Use_Right_Window = 1 "在右側窗口中顯示taglist窗口

      " minibufexpl插件的一般設置

      let g:miniBufExplMapWindowNavVim = 1

      let g:miniBufExplMapWindowNavArrows = 1

      let g:miniBufExplMapCTabSwitchBufs = 1

      let g:miniBufExplModSelTarget = 1

      二. VIM 編輯器命令

      打開文件命令 :

      vim diff a.c b.c 命令打開兩個文件 并比較兩個文件

      vim -p a.c b.c 打開多個文件, 并且以多標簽形式打開

      1. 模式之間的轉換

      命令狀態 : vim 文件名 進入vim編輯器就是一般模式, 在這個模式下可以做移動光標,翻頁等操作

      命令行狀態 : 在一般模式下按下冒號, 進入命令行模式, 命令行模式的命令都是按下 冒號 再輸入命令的

      編輯狀態 : 在這個模式下可以輸入文本;

      命令狀態 -> 插入狀態 : i o a

      插入狀態 -> 命令狀態 : esc

      命令狀態 -> 命令行狀態 : 冒號

      命令行狀態 -> 命令狀態 : 回車

      2. 命令模式常用命令

      (1) 進入插入模式命令

      i 在光標所在的字符前輸入

      a 在光標所在的字符后輸入

      o 在光標所在的下一行輸入

      (2) 光標移動命令

      0 光標移動到第一行

      $ 光標移動到最后一行

      PageUp 向上翻滾一頁

      PageDoen向下翻滾一頁

      G 移動到文檔結尾

      gg 移動到文檔開始

      (3) 刪除命令

      D 刪除光標到改行最后的文字

      dd 刪除一行

      dG 刪除光標到文檔最后的文字

      dgg 刪除光標到文檔開始的文字

      (4) 取代與還原

      R 進入取代模式, 知道esc為止

      S 取代整行內容

      u 取消操作(undo)

      (5)復制粘貼命令

      yy 復制光標所在的整行

      n+yy 復制光標所在以及下面的n行

      y0 復制到行首

      yG 復制到行尾

      p 粘貼到光標后面

      P 粘貼到光標之前

      注意點 :

      "." 命令是重復任何命令;

      刪除, 替換的內容都會被放到緩沖區中

      3. 命令行模式下的命令

      (1) 搜索命令

      / 按下該鍵, 輸入要找的字符, 按Enter鍵開始尋找

      n 繼續正方向尋找

      N 繼續反方向尋找

      * 尋找光標所在處的word(完全符合的)

      (2) 打開多文檔方法

      vim file1 file2打開多個文檔

      :n 編輯下一個文件

      :N 編輯上一個文件

      :e file 在VIM編輯器中在打開其它的文件, tab鍵可以補全文件名

      C++ Linux

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel輸入長數字的方法
      下一篇:excel表格中怎么添加線邊框(excel怎么給表格加邊框線)
      相關文章
      亚洲伊人久久大香线蕉| 亚洲人成电影在线播放| 亚洲精品无码av人在线观看| 亚洲第一街区偷拍街拍| 亚洲狠狠成人综合网| 亚洲人成高清在线播放| 91精品国产亚洲爽啪在线影院 | 中文亚洲成a人片在线观看| 婷婷综合缴情亚洲狠狠尤物| 国产亚洲欧美在线观看| 丰满亚洲大尺度无码无码专线| 亚洲精品V天堂中文字幕| 亚洲另类无码专区首页| 亚洲精品又粗又大又爽A片| 亚洲AV男人的天堂在线观看| 亚洲午夜成人精品无码色欲| 亚洲欧美成人av在线观看| 亚洲高清乱码午夜电影网| 蜜芽亚洲av无码一区二区三区| 蜜芽亚洲av无码一区二区三区| 偷自拍亚洲视频在线观看99| 亚洲人成网站观看在线播放| 久久亚洲欧洲国产综合| 亚洲αv在线精品糸列| 亚洲一区二区成人| 亚洲性一级理论片在线观看| 亚洲jizzjizz在线播放久| 亚洲国产精品无码久久九九大片| 亚洲aⅴ无码专区在线观看春色 | 亚洲AV人无码综合在线观看 | 亚洲AV无码一区二区三区牲色| 亚洲AV无码专区国产乱码不卡| 亚洲?V乱码久久精品蜜桃 | 亚洲精品免费在线观看| 亚洲一区影音先锋色资源| 亚洲福利视频一区| 中文字幕亚洲精品资源网| 亚洲熟妇无码爱v在线观看| 亚洲一级毛片在线播放| 亚洲国产综合精品中文第一| 国产亚洲精品bv在线观看|