[ The Missing Semester of Your CS Education ] 學習筆記 Vim篇

“Writing English words and writing code are very different activities. When programming, you spend more time switching files, reading, navigating, and editing code compared to writing a long stream.”
—— < The Missing Semester of Your CS Education >

Vim 是一個模態編輯器(modal editor),它的設計哲學是:編輯操作應當通過鍵盤組合完成,而非依賴鼠標或菜單。

“Vim avoids the use of the mouse, because it’s too slow; Vim even avoids using the arrow keys because it requires too much movement.”
—— < The Missing Semester of Your CS Education >

Vim認為使用鼠標浪費時間,會降低效率,因為手從鼠標移動到鍵盤需要一定時間,對程序員來說反復來回的切換是很annoying的。因此,所有的vim功能都可以通過鍵盤操作,或許一開始你并不習慣,但等你使用久了,便能發現它得到程序員青睞的原因!

課程相關視頻與講義:Editors (Vim)

核心特性

  • 普通模式:用于導航和操作文本(默認模式)
  • 插入模式:像常規編輯器一樣輸入文本(按 i 進入)
  • 可視模式:選擇文本塊(按 v 進入)
  • 命令行模式:執行保存/退出等命令(按 : 進入)

基礎操作

使用 Vim 時會經常使用<ESC>鍵,而它不在主鍵盤區,顯然不那么方便,于是很多程序員考慮將 Caps Lock 重新映射到 Escape或使用簡單的鍵序列創建替代映射!

模式切換

操作功能
vim進入vim編輯器
vim 文件名打開特定文件(不存在時會新建)
i(insert)進入插入模式
Esc返回普通模式
:進入命令行模式

光標移動

操作功能
h j k l左/下/上/右移動
0移動到行首
$移動到行尾
^移動到行首非空字符
G移動到文件底部
gg移動到文件頂部
H移動到窗口頂部
L移動到窗口底部
Ctrl+u上翻半頁
Ctrl+d下翻半頁
Ctrl+b上翻整頁
Ctrl+f下翻整頁

編輯功能

文本操作

操作功能
o下方新建行并插入
O上方新建行并插入
u撤銷
Ctrl+r重做
x刪除字符
dw刪除單詞
dd刪除整行
cc刪除并進入插入模式

復制粘貼

操作功能
y (yank)復制
yy復制當前行
yw復制單詞
p(paste)粘貼

可視化模式

操作功能說明
v字符可視化按字符選擇
V行可視化按行選擇
Ctrl+v塊可視化矩形選擇

高級功能

搜索與替換

操作功能
f+字符向前查找字符
F+字符向后查找字符
~大小寫轉換

批量操作

數字+指令可以進行批量化操作

 4j #向下移動4行 3ee #選擇3個單詞 7dw #刪除7個單詞

文件操作

保存與退出

操作功能
:w(write)保存文件
:q(quit)退出
:qa(all)退出所有窗口
:wq保存并退出

實戰演示

學習了上面那么多的指令不妨自己創建一個python文件,結合之前學習的shell命令,在實踐中感受Vim的魅力吧!

import sys #導入sys來接受shell中的參數def fizz_buzz(limit):for i in range(1, limit + 1):if i % 3 != 0 and i % 5 != 0:print(i)elif i % 3 == 0 and i % 5 != 0:print('fizz')elif i % 5 == 0 and i % 3 != 0:print('buzz')else:print('fizzbuzz')def main():fizz_buzz(int(sys.argv[1]))if __name__=='__main__':main()
$ python3 fizzbuzz.py 30
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
fizzbuzz
16
17
fizz
19
buzz
fizz
22
23
fizz
buzz
26
fizz
28
29
fizzbuzz

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

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

相關文章

Linux 系統中定時執行指定命令 crontab 定時任務配置

crontab 定時任務配置是 Linux/Unix 系統中用于自動、周期性執行指定命令或腳本的工具&#xff0c;相當于系統的 “定時鬧鐘”。它可以讓系統在預設的時間&#xff08;如每天凌晨、每周一、每月 1 號等&#xff09;自動完成重復性工作&#xff0c;無需人工干預。自動化運維定期…

[ Leetcode ]---快樂數

題目鏈接 Leetcode快樂數 題目描述 如下圖&#xff1a; 題目解析&#xff1a; 1.雙指針法 算法核心思路 判斷快樂數的關鍵挑戰是如何檢測是否進入無限循環。這里使用了快慢指針法&#xff08;Floyd 循環檢測算法&#xff09;&#xff0c;這是一種高效檢測循環的技巧&#…

智慧社區構建——2

1.實現Token校驗## Token校驗URLjson GET /checkToken 參數json HttpServletRequest request 返回json {"msg": "操作成功","code": 200,"status": "ok" }{"msg": "操作成功","code": 200,&q…

K-Means聚類:當數據沒有標簽時,如何讓計算機自動“物以類聚”?

K-Means聚類&#xff1a;當數據沒有標簽時&#xff0c;如何讓計算機自動“物以類聚”&#xff1f;&#x1f44b; 大家好&#xff0c;我是小瑞瑞&#xff01;歡迎回到我的專欄&#xff01; 在我們之前的旅程中&#xff0c;解決的問題大多都有一個明確的“目標”&#xff0c;比如…

萬事皆可用 GeeLark AI

在今年4月&#xff0c;GeeLark AI 全面接入 DeepSeek AI 大模型&#xff0c;你可以在獨立窗口中便捷地使用 GeeLark AI。除了幫助你編寫文案等基礎內容&#xff0c;在使用 GeeLark 過程中&#xff0c;如果遇到問題&#xff0c;也可以通過詢問 GeeLark AI&#xff0c;及時獲取幫…

3D 高保真處理:聲網讓游戲聲音隨角色動作變化

傳統游戲的聲音體驗像老式收音機&#xff0c;不管聲源位置、距離和障礙物&#xff0c;僅靠左右聲道機械調音量&#xff0c;毫無方向感和空間感&#xff0c;如同蒙眼聽聲辨位。射擊游戲中敵人從左邊來&#xff0c;耳機卻兩邊同響且音量相近&#xff0c;讓人暈頭轉向&#xff1b;…

Nestjs框架: 請求生命周期與應用生命周期

概述 在 NestJS 框架中&#xff0c;中間件&#xff08;Middleware&#xff09;、管道&#xff08;Pipes&#xff09;、過濾器&#xff08;Filters&#xff09;、攔截器&#xff08;Interceptors&#xff09; 均屬于請求處理流程的核心組件&#xff0c;它們共同構成了 NestJS 的…

Nastool+cpolar:群暉NAS用戶的全場景影音自由方案

文章目錄前言1. 本地搭建Nastool2. nastool基礎設置3. 群暉NAS安裝內網穿透工具4. 配置公網地址小結5. 配置固定公網地址**第二版&#xff1a;技術整合與效率提升導向****第二版&#xff1a;技術整合與效率提升導向****第二版&#xff1a;技術整合與效率提升導向**Nastool與cpo…

從零開始:Kaggle 競賽實戰入門指南

一、Kaggle社區概述 Kaggle 是全球最大的數據科學和機器學習社區&#xff0c;由Anthony Goldbloom于2010年創立&#xff0c;2017年被Google收購。平臺專注于數據科學競賽、開源數據集共享、協作編程以及技能學習&#xff0c;吸引了從初學者到專業數據科學家的廣泛用戶群體。 …

sqli-labs:Less-16關卡詳細解析

1. 思路&#x1f680; 本關的SQL語句為&#xff1a; $uname".$uname."; $passwd".$passwd."; $sql"SELECT username, password FROM users WHERE username($uname) and password($passwd) LIMIT 0,1";注入類型&#xff1a;字符串型&#xff08;…

Lipschitz連續函數

Lipschitz function 一、說明 在數學分析中&#xff0c;Lipschitz連續性以德國 數學家 魯道夫利普希茨 (Rudolf Lipschitz)的名字命名&#xff0c;是函數一致連續性的強形式。直觀地說&#xff0c;Lipschitz連續函數的變化速度有限&#xff1a;存在一個實數&#xff0c;使得對于…

Dynamics 365 business central 與Shopify集成

Dynamics 365 Business Central&#xff08;簡稱 D365 BC&#xff09; 與 Shopify 的集成&#xff0c;能幫助企業實現前端電商平臺&#xff08;Shopify&#xff09;與后端 ERP 系統&#xff08;Business Central&#xff09;之間的無縫數據同步&#xff0c;是一種典型的 ERP 與…

TCP RTO 與丟包檢測

TCP RTO 是它 40 多年前唯一丟包檢測策略&#xff0c;也是當前最后的丟包檢測兜底策略&#xff0c;它幾乎從沒變過。 有個咨詢挺有趣&#xff0c;以其案例為背景寫篇隨筆。大致意思是&#xff0c;嫌 TCP RTO 太大&#xff0c;游戲場景丟包卡頓怎么辦&#xff1f;我提供了幾行代…

安裝php和配置環境變量

為了簡單方便&#xff0c;先下載vscode然后下載對應的php安裝包&#xff0c;然后配置環境變量&#xff0c;然后點擊運行即可下載對應版本的php&#xff0c;這個版本湊合用然后下載完之后解壓配置環境變量搜索環境變量將路徑添加到環境變量中然后打開vscode添加變量具體看實際路…

Rabbit MQ的消息模式-Java原生代碼

一.簡單模式1.1.核心邏輯生產者 → 隊列 → 單個消費者&#xff08;1:1 直連&#xff09;&#xff0c;消息被消費后自動從隊列刪除。1.2.關鍵特性無交換器&#xff08;其實使用的是默認交換機不是顯示指定&#xff09;&#xff0c;直接指定隊列 消息默認自動確認&#xff08;au…

【lucene】使用docvalues的案例

下面給出一段 可直接跑通 的 Lucene 8.5.0 示例代碼&#xff0c;演示如何1. 建索引時為兩個字段啟用 DocValues&#xff08;一個 NumericDocValues&#xff0c;一個 SortedDocValues&#xff09;&#xff1b; 2. 用 IndexSearcher 按 DocValues 排序&#xff1b; 3. 用 Facet…

IntelliJ IDEA 配置 Maven 阿里云鏡像加速源全流程

1. 為什么要加國內鏡像源&#xff1f;國內網絡訪問 Maven 中央倉庫經常超時、依賴下載極慢或失敗。配置阿里云等國內鏡像后&#xff0c;Java 項目依賴下載飛快&#xff0c;極大提升開發效率&#xff0c;是中國開發者必做優化&#xff01;2. 添加阿里云鏡像源的步驟&#xff08;…

【worklist】worklist的hl7、dicom是什么關系

HL7和DICOM在Worklist系統中是互補的關系&#xff0c;它們各自承擔不同的角色&#xff0c;但協同工作以實現完整的醫療信息系統集成。HL7與DICOM Worklist的關系1. 功能分工DICOM Worklist (Modality Worklist - MWL)主要用于影像設備獲取患者和檢查信息基于DICOM協議&#xff…

位運算-面試題01.01.判定字符是否唯一-力扣(LeetCode)

一、題目解析1、s[i]僅包含小寫字母2、字符串的長度為[0&#xff0c;100]二、算法原理解法1&#xff1a;哈希表用哈希表記錄s[i]的字符&#xff0c;如果有重復的&#xff0c;則返回false優化1&#xff1a;由于s[i]中只有小寫字母&#xff0c;所以可以創建一個int hash[26]的數組…

wsl /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28‘ not found

遇到的問題并沒有解決&#xff0c;這個 glibc-2.28 應該是安裝好了 Ubuntu18 問題描述&#xff1a;Ubuntu18 WSL 無法啟動 VS Code &#xff0c;因為node版本問題 rootUbuntu18:~# code . /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28 not found (required by /root…