文档章节

超轻量级纯文本界面 REPL 类语言 IDE

FreeBlues
 FreeBlues
发布于 2015/08/29 00:57
字数 1639
阅读 347
收藏 5

超轻量级纯文本界面 REPL 类语言 IDE

目录

介绍

这是基于 Vim + Tmux 快速定制的一个针对 REPL 类编程语言的超轻量级开发环境, 不需要任何 GUI, 运行于纯粹的文本界面, 所以响应速度很快, 而且对于系统的要求很低, 在一些内存有限的旧电脑上也可以流畅地运行.

原本的目标是搭建一个可以流畅运行于 Raspberry Pi 2 的超轻量级 Common Lisp 调试开发环境, 用户可以通过 SSH 登录到树莓派上进行不受限制的开发, 最大限度地利用树莓派的硬件计算能力, 而不需要启动任何类型的 视窗.

后来发现本集成环境可以支持任何一种拥有 REPL 机制的编程语言, 如 Clojure, Racket, Schema 以及 Lua 等多种语言.

环境需求: 需要安装好 vimtmux.

技能要求: 需要使用者熟悉基本的 vi 操作, 熟悉一般的 tmux 操作.

本项目git.oschina.net仓库

特性

优点:

  • 方便
  • 超轻量级
  • 高度可定制
  • 响应速度最快
  • 使用超级流畅
  • 支持结对编程
  • 运行资源需求最少
  • 可运行于内存有限的旧电脑
  • 全平台支持:Linux|Win32|OSX
  • 支持任意拥有命令行 REPL 机制的语言
  • 支持快捷键从代码编辑区发送代码到REPL区进行调试

缺点:

  • Emacs 下的 Slime 相比快捷键支持的调试命令比较少

实现原理

利用了 tmux 可以在在不同窗口|面板间传输|接收数据的能力

安装插件

需要为 vim 按顺序依次安装如下插件:

必需安装:

pathogen rainbow-parentheses vim-slime

可选安装:

vim-clojure-static

安装 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-parenthesesvim-slime :

进入 ~/.vim/bundle/ 目录, 克隆 rainbow-parenthesesvim-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   

接下来要对上述插件进行配置, 下面会详细介绍如何配置.

配置方法

需要分别对 vimtmux 进行配置, 主要是修改位于 ~/ 目录下的 .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 表示 tmuxh 号会话, 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 % 新建面板跟当前面板上下分布(垂直分布)

其他信息

本项目参考了如下文档:

© 著作权归作者所有

FreeBlues
粉丝 99
博文 280
码字总数 493678
作品 0
其它
程序员
私信 提问
加载中

评论(2)

FreeBlues
FreeBlues 博主

引用来自“满前野意无人识几点碧桃春自开”的评论

Conmon lisp...
理论上所有具备命令行 REPL 界面的语言都支持, 实际验证过 Lua 和 Clojure
想法验证:超轻量级全功能纯文本界面 REPL 类语言 IDE: Vim+Tmux+Slimv

想法验证:超轻量级全功能纯文本界面 REPL 类语言 IDE: Vim+Tmux+Slimv 前言 之前写过一篇文章超轻量级纯文本界面 REPL 类语言 IDE, 介绍了在纯粹文本界面下如何用 搭建一个超轻量级的 类语言...

FreeBlues
2015/08/31
384
0
Vim 下使用 Slimv(类似Slime) 轻松调试 Common Lisp

Vim 下使用 Slimv(类似Slime) 轻松调试 Common Lisp 目录 - 前情回顾- 安装slimv- 数据配置- 默认快捷键- 实战演练 前情回顾 在上一篇文章想法验证:超轻量级全功能纯文本界面 REPL 类语言 ID...

FreeBlues
2015/09/01
513
0
Java9新特性之HTTP2和REPL

对Java 9的炒作将不再局限于模块化(modularity),Java 9正在搜罗大量额外的功能模块,这些功能模块正作为Java增强提案(JEP)提交,并在OpenJDK (Java SE的参考实现项目)中实现。 在这篇文...

rickiyeat
2017/09/23
0
0
Java 9 新功能之 HTTP2 和 REPL

对Java 9的炒作将不再局限于模块化(modularity),Java 9正在搜罗大量额外的功能模块,这些功能模块正作为Java增强提案(JEP)提交,并在OpenJDK (Java SE的参考实现项目)中实现。 在这篇文...

oschina
2015/08/08
9.2K
23
纯文本界面下 vim 菜单设置方法

纯文本界面下 vim 菜单设置方法 简介 想了解下 vim 在纯文本的控制台下是否有类似 ncurses 提供的菜单功能, 结果一查才发现, 有是有, 不过用起来比较不顺手. 设置 具体设置方法如下: 打开 文...

FreeBlues
2015/08/30
95
0

没有更多内容

加载失败,请刷新页面

加载更多

高速PCB设计软件allegro中与网络有关的约束规则设置

在allegro pcb的设计过程中,设计约束规则包括时序规则、间距规则、信号完整性规则以及物理规则等,本期主要详细讲解与物理、间距与电气约束中的线宽、线间距物理规则的设置。 一、线宽设置 ...

demyar
7分钟前
1
0
Linux 启动停止SpringBoot jar 程序部署Shell 脚本

#!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=algorithm.jar #使用说明,用来提示输入参数 usage() { echo "Usage: sh 执行脚本.sh [start|stop|restart|status]...

草庐过客
9分钟前
2
0
mysql-connector-java驱动升级到8.0后数据库保存时间出现时差

1.问题:在一个新项目中用到了新版的mysql jdbc 驱动后,发现保存到数据库的时间出现了时差 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId>......

ValSong
11分钟前
2
0
好程序员大数据教程Scala系列之隐式转换和隐式参数

5.1. 概念 隐式转换和隐式参数是Scala中两个非常强大的功能,利用隐式转换和隐式参数,你可以提供优雅的类库,对类库的使用者隐匿掉那些枯燥乏味的细节。 5.2. 作用 隐式的对类的方法进行增强...

好程序员官网
15分钟前
1
0
多线程必备

初次接触线程,可能有很多初学者搞不明白,始终云里雾里,那么本篇文章直接带大家介绍多线程必须知道的几个点 接下来没有多余,直接上干货 1. 进程和线程的区别是什么? 进程是执行着的应用程序,...

理性思考
18分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部