超輕量級純文字介面 REPL 類語言 IDE
超輕量級純文字介面 REPL 類語言 IDE
目錄
- 介紹
- 特性
- 實現原理
- 安裝外掛
- 配置方法
- 使用說明
- 其他資訊
介紹
這是基於 Vim + Tmux
快速定製的一個針對 REPL
類程式語言的超輕量級開發環境, 不需要任何 GUI
, 執行於純粹的文字介面, 所以響應速度很快, 而且對於系統的要求很低, 在一些記憶體有限的舊電腦上也可以流暢地執行.
原本的目標是搭建一個可以流暢執行於 Raspberry Pi 2
的超輕量級 Common Lisp
除錯開發環境, 使用者可以通過 SSH
登入到樹莓派上進行不受限制的開發, 最大限度地利用樹莓派的硬體計算能力, 而不需要啟動任何型別的 視窗
.
後來發現本整合環境可以支援任何一種擁有 REPL
機制的程式語言, 如 Clojure
, Racket
, Schema
以及 Lua
等多種語言.
環境需求: 需要安裝好 vim
和 tmux
.
技能要求: 需要使用者熟悉基本的 vi
操作, 熟悉一般的 tmux
操作.
特性
優點:
- 方便
- 超輕量級
- 高度可定製
- 響應速度最快
- 使用超級流暢
- 支援結對程式設計
- 執行資源需求最少
- 可執行於記憶體有限的舊電腦
- 全平臺支援:Linux|Win32|OSX
- 支援任意擁有命令列 REPL 機制的語言
- 支援快捷鍵從程式碼編輯區傳送程式碼到REPL區進行除錯
缺點:
- 跟
Emacs
下的Slime
相比快捷鍵支援的除錯命令比較少
實現原理
利用了 tmux
可以在在不同視窗|皮膚間傳輸|接收資料的能力
安裝外掛
需要為 vim
按順序依次安裝如下外掛:
必需安裝:
pathogen
rainbow-parentheses
vim-slime
可選安裝:
安裝 pathogen
:
首先為 vim
安裝 pathogen
外掛, 有了它可以超級簡單地安裝設定其他外掛.
分別建立 ~/.vim/bundle, ~/.vim/autoload 目錄
cd ~/.vim
mkdir bundle
mkdir autoload
把 pathogen.vim 檔案下載到 autoload 目錄下
cd ~/.vim/autoload
wget https://tpo.pe/pathogen.vim
安裝 rainbow-parentheses
和 vim-slime
:
進入 ~/.vim/bundle/
目錄, 克隆 rainbow-parentheses
和 vim-slime
即可, 剩餘的 pathogen
會自動為你安裝:
cd ~/.vim/bundle/
git clone https://github.com/kien/rainbow_parentheses.vim
git clone https://github.com/jpalardy/vim-slime
安裝 vim-clojure-static
跟上面的步驟一樣:
cd ~/.vim/bundle/
git clone https://github.com/guns/vim-clojure-static
接下來要對上述外掛進行配置, 下面會詳細介紹如何配置.
配置方法
需要分別對 vim
和 tmux
進行配置, 主要是修改位於 ~/
目錄下的 .vimrc
和 .tmux.conf
這兩個檔案.
下面是配置好的檔案, 把你原來的這兩個檔案做一個備份, 然後把這兩個檔案直接克隆到你的 ~/
目錄下.
.vimrc
execute pathogen#infect()
syntax on
syntax enable
set number
set autoindent
filetype plugin indent on
“ vim-slime options
“ Clojure options.
let g:slime_target = "tmux"
let g:slime_paste_file = "$HOME/.slime_paste"
“ rainbow_parentheses options
autocmd Syntax clojure RainbowParenthesesLoadRound
autocmd BufEnter *.clj RainbowParenthesesToggle
autocmd BufLeave *.clj RainbowParenthesesToggle
let g:rbpt_colorpairs = [
\ ['magenta', 'purple1'],
\ ['cyan', 'magenta1'],
\ ['green', 'slateblue1'],
\ ['yellow', 'cyan1'],
\ ['red', 'springgreen1'],
\ ['magenta', 'green1'],
\ ['cyan', 'greenyellow'],
\ ['green', 'yellow1'],
\ ['yellow', 'orange1'],
\ ]
let g:rbpt_max =9
“ vim-clojure-static options
let g:clojure_syntax_keywords = {
\ 'clojureMacro': ["defproject", "defcustom"],
\ 'clojureFunc': ["string/join", "string/replace"]
\ }
.tmux.conf
# ##############################################################
# Global settings.
#
# Switch the prefix to Ctrl-a since Ctrl-b interferes with Vim.
# set -g prefix C-a
# unbind C-b
# Change the default input delay in order to improve Vim
# performance.
set -sg escape-time 1
# Number windows and panes starting at 1 so that we can jump to
# them easier.
# 設定 tmux 視窗序號從 1 開始, 設定 tmux 皮膚序號從 1 開始
set -g base-index 1
set -g pane-base-index 1
# vi mode.
set -g mode-keys vi
set -g status-keys vi
# 256-color mode.
set -g default-terminal "screen-256color"
# ##############################################################
# Key bindings.
#
# Reload .tmux.conf with "r".
# 修改 tmux 配置後載入新配置檔案的快捷鍵為: Ctrl-b r
bind r source-file ~/.tmux.conf \; display "Reloaded!"
# Split windows with a more visual set of characters.
bind | split-window -h
bind - split-window -v
# Select panes with vi-style movement commands.
# 使用 h j k l 選擇皮膚, 也可以用上下左右箭頭來選擇
# 具體快捷鍵為: Ctrl-b h -> 左邊皮膚
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Resize panes with vi-style movement commands.
# 調整皮膚大小
# 具體快捷鍵為:
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
使用說明
程式設計例項:
假設我們準備試驗 Common Lisp
開發環境, 具體的實現是 CLISP
.
- 啟動
tmux
, 在當前視窗建立兩個皮膚(pane
), 快捷鍵為:C-b c
, 也就是:Ctrl-b c
; - 在 1 號皮膚裡用
vi
編輯一個名為test.lisp
的檔案; - 在 2 號皮膚內啟動一個
REPL
, 例如:clisp
.
補充: C-b q
可以檢視當前視窗所有皮膚的編號
現在就可以進行 Common Lisp
程式碼除錯了, 游標放在程式碼編輯區(切換皮膚的快捷鍵為 C-b o
), 輸入一段程式碼,如下:
(+ 123 245)
游標保持在括號內, 進入 vi
命令模式, 輸入快捷鍵 C-c C-c
, 首次執行此命令, 會要求設定目標, 提示輸入內容如下:
tmux socket name: default `回車`
tmux target pane: `:2.2`
:2
表示 2 號視窗, .2
表示2號視窗的第2個皮膚
這樣就會把表示式 (+ 123 245)
傳送到 2 號皮膚的 REPL
, 馬上就會被求值
預設的快捷鍵繫結:
C-c C-c 把編輯區游標所在處的程式碼段落髮送到 REPL 區
C-c v 重新設定傳送目標, 需要按照提示輸入:
提示資訊如下:
tmux socket name: default 回車
tmux target pane: :2.2
":" 單獨輸入一個冒號表示當前視窗,當前皮膚, 這是合理的預設值;
":i" 冒號跟一個數字 i 表示第 i 個視窗, 當前皮膚;
":i.j" 冒號 數字i 小數點 數字 j 表示第 i 個視窗,第 j 個皮膚;
"h:i.j" 如果前面再加一個 h, h 表示tmux
的h
號會話,h
可能是會話名,也可能是數字, 後面的含義不變.
一些有用的快捷鍵
vim
的快捷鍵(命令狀態下輸入):
C-f 和 C-b
向後或向前翻頁
C-p 和 C-n
vi
自帶的簡單自動補全
tmux
的快捷鍵:
C-b r
修改 .tmux.conf
檔案後快速載入
C-b 數字
跳轉到數字對應視窗
C-b 空格鍵
調整視窗的皮膚佈局
C-b |
或 C-b "
新建皮膚跟當前皮膚左右分佈(水平分佈)
C-b -
或 C-b %
新建皮膚跟當前皮膚上下分佈(垂直分佈)
其他資訊
本專案參考瞭如下文件:
相關文章
- 想法驗證:超輕量級全功能純文字介面 REPL 類語言 IDE: Vim+Tmux+SlimvIDEUX
- 輕量級標記語言
- 輕量級超級 css 工具CSS
- 輕量級多級選單控制框架程式(C語言)框架C語言
- 超輕量級PHP框架BroPHPPHP框架
- ThinkGo:一個輕量級的 Go 語言 MVC 框架GoMVC框架
- easyhttp——輕量級、語義化、 對 IDE 友好的 HTTP 客戶端HTTPIDE客戶端
- zinc:替代elasticsearch的輕量級Go語言搜尋引擎ElasticsearchGo
- Go 語言編寫輕量級網路庫,GrapeNetGo
- looter——超輕量級爬蟲框架爬蟲框架
- 超輕量級反爬蟲方案爬蟲
- wangEditor——輕量級web富文字框Web
- JetBrains總算推出了輕量級IDE: FleetAIIDE
- [譯]HAL-超文字應用語言
- PhalApi(π框架) - PHP輕量級開源介面框架API框架PHP
- 使用純資源DLL檔案實現多語言選單、介面文字、Tooltips等 (轉)
- 知物由學 | 更適合文字分類的輕量級預訓練模型文字分類模型
- 如果程式語言是超級英雄……
- 基於Mono和VSCode打造輕量級跨平臺IDEMonoVSCodeIDE
- 超輕量級MP4封裝方法介紹封裝
- 可識別影象中100種人類語言文字的純Javascript OCR庫包:Tesseract.jsJavaScriptJS
- 可識別影像中100種人類語言文字的純Javascript OCR庫包:Tesseract.jsJavaScriptJS
- 輕量級超級簡單的element的layout柵格化佈局
- Rust為何無法成為超級語言?Rust
- DevOps專題|Lua引擎打造超輕量級客戶端dev客戶端
- 使用 React + Koa 打造一個輕量級的部落格系統,呼叫語雀API介面實現ReactAPI
- 輕量級UI元件 MagicUI元件
- 輕量級IOC框架:Ninject框架
- 痞子衡嵌入式:讓你從此高效寫作的輕量級標記語言(Markdown)
- Python自然語言處理 6 學習分類文字Python自然語言處理
- 有道自然語言翻譯和文字識別OCR(圖片文字識別)介面呼叫
- 輕量級web富文字框——wangEditor使用手冊(1)——基本應用Web
- 輕量級富文字編輯器wangEditor原始碼結構介紹原始碼
- 易語言陣列和超級列表框demo陣列
- 輕量富文字非同步繪製框架非同步框架
- 國產系統級程式語言與編譯器,輕鬆與 C 語言進行互動編譯
- Java語言——類Java
- Flutter路由輕量級框架FRouterFlutter路由框架