行號 設置vim_在VSCode里面配置Vim正確姿勢(細節解析)

一、導論

對于不用vim的人來說,vim簡直是個噩夢,復雜的指令、丑陋的界面、令人頭痛的配置文件,任何一項都足以勸退一大波人,但是對于已經習慣了使用vim的人來說,vim簡直就是馬良神筆,似乎vim除了生孩子什么都可以做。

雖然從定義來說,vim只是編輯器并非編譯器,但是它強大的擴展性給它帶來了無限的可能,豐富的插件和獨特的配置語法讓它在許多程序員心中有了一席之地。

但是眾所周知一般都是在Linux工作的人才有可能使用vim,換到Windows下使用vim就需要下載其他軟件來間接的使用vim,比如WSL或者Git Bash、VSCode。然而接下來我就來介紹如何在VSCode下安裝和配置VIM

二、VSCode安裝vim插件

在vscode的擴展商店中搜索vim,安裝第一個插件,這個插件可以完成大部分原生vim的操作。

4ae739d709ada6ea3c3d8185a35a2f9a.png

三、配置vim

安裝完成以后我們需要配置vim,原生的vim有一部分操作十分的不友好,我們常常需要改鍵配置合適自己的vim。我們通常在setting.json中配置vscode,如果不知道如何打開setting.json可以點開文件->首選項->設置->文本編輯器,向下拉找到“在setting.json中編輯”。

如下圖所示

fd293784279e63c3bb90eecfcaa11e99.png

配置語法

接下來來討論一下如何編寫配置,與原始vim不同的是,在原生vim中的配置語法是獨屬于vim的,但是在vscode中使用的是json格式,json格式是一種輕便易讀的格式,如果不了解的同學可以提前學習一下。

如果是第一次配置setting.json的同學,里面應該是沒有多少內容,最多幾行簡單配置。在最后一句配置語句后面打上一個逗號,然后開始新起一行準備寫vim配置文件,如下所示。

{//默認狀態下setting.json文件內容 Begin"editor.fontSize": 20,"C_Cpp.updateChannel": "Insiders","files.autoGuessEncoding": true,"[c]": {"editor.defaultFormatter": "ms-vscode.cpptools"},//默認狀態下setting.json文件內容 End//關于vim的配置文件"vim.commandLineModeKeyBindingsNonRecursive": [],"vim.insertModeKeyBindings": [],"vim.normalModeKeyBindingsNonRecursive": []
}
  1. vim.commandLineModeKeyBindingsNonRecursive指的是命令行模式非遞歸鍵位綁定,在原生vim中等同于norecmap。
  2. vim.insertModeKeyBindings指的是插入模式下鍵位綁定,在原生vim里面指的是imap。
  3. vim.normalModeKeyBindingsNonRecursive指的是普通模式下非遞歸鍵位綁定,在原生vim中是noremap。

插入模式下鍵位修改

我這里把esc鍵映射為jj,意思是在插入模式下,按下兩次j會回到正常模式、按下大寫s可以保存當前文件、按下大寫q可以關閉當前文件。這vim的配置文件中,可以兼容原生vim指令和vscode命令,"workbench.action.files.save" 屬于vscode命令,":q!" 屬于原生vim命令。如果想修改其他鍵位可以根據下面的語法規則進行修改測試。

以下內容只是作為示例,不推薦大家使用大寫s和q作為保存和退出,因為在編寫程序的時候,我們可能就需要到大寫s和q,我建議是先退出到普通模式再保存退出

"vim.insertModeKeyBindings": [{"before": ["j", "j"],"after": ["<Esc>"]},{"before": ["S"],"commands": ["workbench.action.files.save"]},{"before": ["Q"],"commands": [":q!"],}],

正常模式下鍵位修改

這里我通過按下leader鍵+s 可以保存當前文件、按下leader+q關閉文件、按下leader+sq 保存并退出文件。在下面我會提到leader鍵的設置。

 "vim.normalModeKeyBindingsNonRecursive": [{"before": ["<leader>", "s"],"commands":[":w!"]},{"before": ["<leader>", "q"],"commands":[":q!"]},  {"before": ["<leader>", "sq"],"commands":[":wq!"]}],

leader鍵位設置和取消vim鍵位映射

leader在vim中的意思是“前綴”的意思,和tmux中的Ctrl+b是一個意思,可以通過自定義leader鍵,來構建自己需要的組合快捷鍵。

在這里我把leader鍵位映射為空格鍵<space>。

在vscode里面使用vim有時候vscode原生鍵位比vim原生鍵位要舒服一些,我們可以取消到vim里面的鍵位映射來使用vscode的鍵位。

比如下面我取消掉了Ctrl+a,Ctrl+f,Ctrl+n在vim中的鍵位映射,這樣子在寫代碼的時候,我按下Ctrl+a,Ctrl+f,Ctrl+n就可以使用vscode中的全選,查找和新建。

 "vim.leader": "<space>","vim.handleKeys": {"<C-a>": false,"<C-f>": false,"<C-n>": false
}

我在vim中設置了相對行號,這樣子在進行跳轉的時候就可以精確定位行數而且不需要數行號,比如我當前在16行,我想跳到“//關于vim的配置文件”這一句,我只需要在普通模式下按下6h,就會自動跳到16-6行。

設置方法:

 "editor.lineNumbers":"relative"

有意思的是,如果在vscode中我們找不到對應的設置語句,可以先指定一個鍵位,在映射到對應的vim命令,然后執行這個命令,比如我在設置相對行號的時候找不到對應的vscode命令,我就可以這樣子做:

 "before": ["<leader>", "<leader>"],"commands":[":set relativenumber"]//vim下相對行號設置命令

這樣子在使用完這個命令以后就可以刪掉這句配置語句同時保留這個設置。

如下圖

d8d20b76ef84debe6f6a742a31c965ad.png

結束語

我們沒必要糾結那個編輯器厲害或者有沒有用,不同的人適合不同的編輯器,我們可以不喜歡,但是應該尊重別人的想法。在瀏覽大量代碼的時候,使用鼠標無疑更舒服,但是在編寫程序的時候vim可以來帶更高效的操作。

希望這篇文章能夠給需要的同學帶來幫助。

感謝觀看。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371854.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371854.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371854.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Spring 3 MVC處理表單驗證

本文是有關Spring 3的系列文章的一部分。該系列的早期文章是使用Spring 3 MVC的Hello World和使用Spring 3 MVC的 Handling Forms 。 現在讓我們更深入地研究Spring。 在本文中&#xff0c;我們將學習驗證從表單中獲取的數據。 讓我們更仔細地看一下驗證任務。 場景1 &#xf…

當事人角色 變更映射策略引起的問題

IBeamMDAA V2版本中&#xff0c;由于變更了 當事人角色 的繼承機制&#xff0c;在添加 當事人角色時&#xff0c;為了 構建 當事人-當事人角色之間的關系&#xff0c;代碼如下&#xff1a;//if (party.PartyRoles ! null && !party.PartyRoles.Contains(sysUser))//{//…

vs xxxxx nuget配置無效

重啟vs轉載于:https://www.cnblogs.com/zinan/p/7080668.html

巡回沙龍_美浮特全國巡回沙龍第一期結束撒花!

科技美膚&#xff0c;無齡煥變。美浮特2019全國美膚巡回沙龍第一期活動圓滿結束&#xff01;優秀的小伙伴&#xff0c;雅致的茶歇環境&#xff0c;精美的甜點小食&#xff0c;理論與體驗并行的膚感測試課堂……不知道是哪一個環節給大家留下了深刻的印象呢&#xff1f;首先讓我…

Spring與網關的集成

這是有關Spring Integration系列的第二篇文章。 本文以我們介紹Spring Integration的第一篇文章為基礎。 上下文設置 在第一篇文章中&#xff0c;我們創建了一個簡單的Java應用程序&#xff0c;其中 通過頻道發送了一條消息&#xff0c; 它被服務&#xff08;即POJO&#xf…

UIAutomation識別UI元素

MS UI Automation&#xff08;Microsoft User Interface Automation&#xff1a;UIA&#xff09;是隨.net framework3.0一起發布的&#xff0c;雖然在如今這個幾乎每天都有各種新名詞、新技術出來的所謂的21世紀&#xff0c;它顯得已經有些過時了。前些日子&#xff0c;正好一個…

【C++第一個Demo】---控制臺RPG游戲3【登陸菜單樹】

【登陸系統--樹結構】 1 首先我這里設計&#xff0c;由一個基類MainMenu構建樹結構&#xff0c;并實現控制臺上菜單之間的切換和返回操作 1 #ifndef _UI_BASE_H_2 #define _UI_BASE_H_3 4 #include <string>5 #include <vector>6 #include"..//Marco.h"7…

不存在_施文忠 | ”存在“與“不存在”——巴蜀文明概論

海德格爾有句名言&#xff1a;“存在者存在&#xff0c;不存在者不存在&#xff01;”四川&#xff0c;一個偉大的存在&#xff0c;偏偏存在于四川的口頭禪卻是“不存在”。在不存在中追求存在&#xff0c;在存在中擺脫存在。六月白鹿鎮&#xff0c;書院學習了《李白與海德格爾…

Spring和JSF集成:異常處理

大多數JSF開發人員都會熟悉“發生錯誤”頁面&#xff0c;當在他們的代碼某處引發意外異常時&#xff0c;該頁面就會顯示。 該頁面在開發時確實很有用&#xff0c;但對于生產應用程序通常不是您想要的。 通常&#xff0c;在用庫存JSF替換此頁面時&#xff0c;您有兩種選擇。 您可…

Altium 原理圖出現元件“Extra Pin…in Normal of part ”警告的解決方法

轉載于&#xff1a; http://blog.csdn.net/idoming/article/details/45575627 使用Altium Designer的時候編譯完后&#xff0c;只關注過錯誤沒有關注過警告&#xff0c;現在認真排查一下有哪些警告。 正在進行的項目原理圖編譯完成后提示標題中的警告信息。經過在網上搜索&…

XidianOJ 1087 浪漫的V8

題目描述 V8為了討女朋友開心&#xff0c;給lx承包大活后面那個水塘。為了籌集資金&#xff0c;V8偷偷地溜進了一座古墓&#xff0c;發現在他面前有金光閃閃的若干小箱子&#xff0c;里面全都是金粉&#xff0c;作為橫行于各種#&#xffe5;&場所的V8來說&#xff0c;辨別不…

curl php 模擬來源_php 使用curl模擬ip和來源進行訪問的實現方法

對于限制了ip和來源的網站&#xff0c;使用正常的訪問方式是無法訪問的。本文將介紹一種方法&#xff0c;使用php的curl類實現模擬ip和來源&#xff0c;訪問那些限制了ip和來源的網站。1.設置頁面限制ip和來源訪問server.php$client_ip getip();$referer getreferer();$allow…

堆棧C語言實現

堆棧的抽象數據類型描述&#xff1a; 類型名稱&#xff1a; 堆棧&#xff08;Stack&#xff09;。數據對象集&#xff1a; 一個有 0 個或多個元素的又窮表。操作集&#xff1a; 長度為 max_size 的堆棧 S ∈ Stack&#xff0c; 堆棧元素 item ∈ ElementType。stack creatc_sta…

woocommerce 分類到菜單_Woocommerce商店顯示分類

我是wordpress的新手, 所以如果我輸入的語言錯誤, 請仍然為我提供幫助。我想使用woocommerce顯示具有可變產品的商店, 我希望商店鏈接登錄頁面顯示具有該類別特征圖像的商店類別。我當前的商店頁面顯示所有產品, 并分頁到其他產品頁面, 我找不到所有產品的模板。當我進入wp-adm…

JBoss BRMS 5.3 –添加了業務活動監視(BAM)報告

自從JBoss BRMS 5.3產品發布以來&#xff0c;添加了jBPM 5 BPM組件的最常見問題之一是業務活動監視&#xff08;BAM&#xff09;和報告功能。 本文將引導您完成添加過程&#xff0c;但是請注意&#xff0c;在撰寫本文時&#xff0c;這不是產品的受支持功能。 在JBoss BRMS 5.3上…

Zookeeper開源客戶端框架Curator簡介

Curator是Netflix開源的一套ZooKeeper客戶端框架. Netflix在使用ZooKeeper的過程中發現ZooKeeper自帶的客戶端太底層, 應用方在使用的時候需要自己處理很多事情, 于是在它的基礎上包裝了一下, 提供了一套更好用的客戶端框架. Netflix在用ZooKeeper的過程中遇到的問題, 我們也遇…

【樹形DP】 HDU 2196 Computer

題意&#xff1a;求節點間的最大距離 先DFS一次 記錄下 每一節點的子樹下的最大距離&#xff08;DP[ u ] [ 0 ]&#xff09;和第二大距離&#xff08;DP[ u ] [ 1 ]&#xff09; 用DP[ v ] [ 2 ] 表示由v的父節點來的最大距離 再取DP[ u ] [ 0 ] 與 DP[ u ][ 2 ] 的最值 #inclu…

適當的Java堆大小的5個技巧

確定生產系統合適的Java堆大小不是一件容易的事。 在我的Java EE企業經驗中&#xff0c;我發現由于Java堆容量和調整不足而導致的多個性能問題。 本文將為您提供5個技巧&#xff0c;這些技巧可以幫助您確定當前或新生產環境的最佳Java堆大小。 這些技巧中的一些對于預防和解決j…

pythondocumentation是什么_怎樣閱讀Python官方文檔

如何閱讀官方Python文檔的初學者,因為他們沒有相關的經驗,學習語言通常是費時且勞動密集型和效果不是很好。下面簡要介紹如何閱讀官方文件。一旦你學會快速查詢官方文件,學習效率會提高很多文檔門戶。如何閱讀API文檔中內容標準庫,如何快速找到你想要的。第一種方法是先查找索引…

數據庫過大無法導入

導SQL數據庫結構數據時&#xff0c;如果數據是批量插入的話會報錯&#xff1a;2006 - MySQL server has gone away。 解決辦法&#xff1a;找到你的mysql目錄下的my.ini配置文件&#xff0c;加入以下代碼 max_allowed_packet500M wait_timeout288000 interactive_timeout 2880…