Racket编程指南——24 命令行工具和你的编辑器选择
24 命令行工具和你的编辑器选择
虽然DrRacket是大多数人用Racket开始的最简单的方法,许多Racket使用者喜欢命令行工具和其它文本编辑器。Racket分配包括几个命令行工具,流行的编辑器包括或支持包以使它们能很好地配合Racket。
24.1 命令行工具 |
24.1.1 同时编译和配置:raco |
24.1.2 交互式求值 |
24.1.3 Shell补全 |
24.2 Emacs |
24.2.1 主要模式 |
24.2.2 小模式 |
24.2.3 Evil模式的专有包 |
24.3 Vim |
24.4 Sublime Text |
24.1 命令行工具
作为其标准发行版的一部分,Racket提供了许多命令行工具,这些工具可以使racket使用者更加愉快。
24.1.1 同时编译和配置:raco
raco(以下简称“Racket command”)程序为了编译Racket程序和维护一个Racket安装提供了一个命令行界面给许多额外的工具。
raco make将Racket源文件编译成字节码。
例如,如果你有一个程序"take-over-world.rkt"并且你想把它编译成字节码,连同其所有的依赖,使其加载速度更快,然后运行
raco make take-over-the-world.rkt
字节码文件在一个"compiled"子文件夹中被写为"take-over-the-world_rkt.zo"“;".zo"是一个字节码文件的文件后缀。
raco setup管理一个Racket安装,包括手动安装包。
例如,如果你创建了自己的名为"take-over"的库集合(collection),并且希望为集合构建所有字节码和文档,则运行
raco setup take-over
raco pkg管理package,它可以通过Racket包管理器被安装。
例如,要查看已安装包的列表,运行:
raco pkg show
安装一个名为<package-name>的新包,运行:
raco pkg install <package-name>
参见(part ("(lib pkg/scribblings/pkg.scrbl)" "top"))以获得关于包管理器的更多细节。
为了获得有关raco的更多细节,见(part ("(lib scribblings/raco/raco.scrbl)" "top"))。
24.1.2 交互式求值
Racket REPL提供了你从现代交互环境中所期望的一切。例如,它提供了一个,enter命令以使REPL在给定模块的上下文中运行,并提供了一个,edit命令来调用你输入的文件上的编辑器(由EDITOR环境变量指定)。,drracket命令可以很容易地使用你最喜欢的编辑器编来编写代码,同时仍有DrRacket可以尝试。
有关详细信息,请参见(part ("(lib xrepl/xrepl.scrbl)" "top"))。
24.1.3 Shell补全
bash和zsh的Shell自动完成功能分别在"share/pkgs/shell-completion/racket-completion.bash"和"share/pkgs/shell-completion/racket-completion.zsh"中提供。
要启用它,只需从.bashrc或.zshrc运行相应的文件。
"shell-completion"集合仅在Racket Full发行版中可用。完成脚本也可在联机。
24.2 Emacs
Emacs一直是一个在Lisp使用者和Scheme使用者中特别受欢迎的,并且也是在Racket使用者中流行的。
24.2.1 主要模式
Racket模式通过语法高亮和DrRacket风格REPL及Emacs缓冲区执行对Emacs支持。
Racket模式可以通过MELPA或安装melpa或手动从GitHub库安装。
Quack是一个为Racket提供更有力的支持的Emacs的scheme模式(scheme-mode)的扩展,包括高亮和Racket特定形式的缩进,以及文档一体化。
Quack是包含在Debian和Ubuntu库里作为emacs-goodies-el包的一部分。一个Gentoo端口也可获取的(在名字app-emacs/quack下)。
Geiser提供了一个编程环境,编辑器和Racket的REPL紧密集成。习惯用Slime或Squeak环境的程序员使用Geiser应该有宾至如归的感觉。Geiser要求GNU Emacs 23.2或更高的版本。
Quack和Geiser可以一起使用,并且相辅相成。更多信息见Geiser手册。
为Geiser提供的Debian和Ubuntu软件包在名称geiser下适可获取的。
Emacs用一个为Scheme的主要模式传递,Scheme模式,而不是与上面的选项一样的特性,合理地编辑Racket代码。然而,这种模式并不能为Racket特定形式提供支持。
没有文件,Racket项目是不完整的。Scribble支持emacs可用Neil Van Dyke的Scribble模式获取。。
此外,当编辑Scribble文件的时候,texinfo模式(包括用GNU Emacs)和纯文本模式工作会非常好。鉴于与Racket相比Scribble语法是如此不同,上边的Racket主要模式不是真正的适合这种任务。
24.2.2 小模式
Paredit是在LISP类似语言中伪结构编辑程序的一个小模式。除了提供高阶S表达式编辑命令外,它可以帮你防止意外的不平衡括号。
对Paredit的Debian和Ubuntu软件包在名字paredit-el下可以获取。
Smartparen对编辑S表达式是一个小模式,保持括号平衡、类似于Paredit等等。
Alex Shinn的scheme-complete提供了智能的、上下文敏感的代码完成。它还用Emacs的eldoc模式集成以在小缓冲区中提供现场文档。
而这种模式是专为R5RS设计,它仍能用于Racket的开发。该工具不知道Racket标准库的大部分,而且在Scheme和Racket有分歧的情况下,现场文档可能有一些出入。
RainbowDelimiters模式颜色括号和其它分隔符根据嵌套深度确定。通过嵌套深度着色使人们一目了然地知道哪些圆括号匹配。
ParenFace让你选择在哪面(字体,颜色,等等)的括号应显示。选择一个交替的面可以使“tone down(按下)”括号。
24.2.3 Evil模式的专有包
on-parens是对smartparens行为用evil模式的通常状态去更好工作的一个包装。
evil-surround提供命令去添加、删除和改变括号和其它分隔符。
evil-textobj-anyblock添加一个文本对象相匹配最接近的任何括号或其它分隔符序对。
24.3 Vim
带Scheme支持的Vim运送的许多分配,它们将更多地用于Racket工作。你可以像Scheme一样用以下方式激活Racket文件的文件类型检查:
if has("autocmd") |
au BufReadPost *.rkt,*.rktl set filetype=scheme |
endif |
或者,你可以使用vim-racket插件来实现自动检测、缩进和专门针对Racket文件的语法高亮显示。使用插件是最简单的方法,但是如果你想把你自己的设置或重写插件设置,添加类似于下面的内容到你的".vimrc"文件:
if has("autocmd") |
au BufReadPost *.rkt,*.rktl set filetype=racket |
au filetype racket set lisp |
au filetype racket set autoindent |
endif |
然而,如果您采取这一路径,你可能需要在安装插件时做更多的工作,因为很多与Lisp相关的插件和vim脚本都不知道Racket。你也可以在一个"scheme.vim"中或在vim文件夹的"ftplugin"子文件夹中的"racket.vim"文件中设置这些条件命令。
vim的大多数安装会自动具有有用的默认启用,但如果你的安装没有,你会希望至少在你的".vimrc"文件里去设置:
" Syntax highlighting |
syntax on |
" These lines make vim load various plugins |
filetype on |
filetype indent on |
filetype plugin on |
" No tabs! |
set expandtab |
缩格
你可以通过在Vim里设置lisp和autoindent(自动缩格)选项启用Racket的缩格。然而,缩格是有限的也不是和你在Emacs中能得到的一样完整。你也可以用Dorai Sitaram的scmindent达到Racket代码的更好缩格。有关如何使用缩格器的说明可在网站上查阅。
如果使用内置的缩格器,可以通过设置如何缩进某些关键字来定制它。上面提到的vim-racket插件为你设置了一些默认关键字。你可以在你的".vimrc"文件里添加你自己的关键字,像这样:
" By default vim will indent arguments after the function name |
" but sometimes you want to only indent by 2 spaces similar to |
" how DrRacket indents define. Set the `lispwords' variable to |
" add function names that should have this type of indenting. |
set lispwords+=public-method,override-method,private-method,syntax-case,syntax-rules |
set lispwords+=..more.. |
突出
用于可视化的彩虹括号(Rainbow Parenthesis})脚本可以用于更可见的括号匹配。在许多平台上,有很多功能都是通过高亮显示来实现的。为你提供了良好的默认高亮显示设置。
结构化的编辑
Slimv插件有一paredit模式,就像Emacs里的paredit工作方式。然而,插件不知道Racket。你可以设置Vim去把Racket作为Scheme文件,也可以修改paredit脚本以加载".rkt"文件。
Scribble
Vim support for writing scribble documents is provided by the scribble.vim plugin. 对书写scribble文件,Vim通过scribble.vim插件被支持。
混杂的
如果你安装了很多Vim插件(不需要特别针对Racket),我们建议使用一个插件,让其它插件更容易加载。Pathogen是一个这样做的插件;使用它,你可以通过在你Vim安装的"bundle"文件夹里提取它们到子目录来安装新插件。
24.4 Sublime Text
Racket package支持语法高亮显示和构建 Sublime Text。
Racket编程指南——24 命令行工具和你的编辑器选择相关推荐
- php 开启命令模式,如何启用PhpStorm中的命令行工具
本篇文章主要给大家介绍如何使用phpstorm中的命令行工具. PhpStorm下载地址: PhpStorm使用命令行工具,我们可以直接从IDE调用命令!在我们使用任何命令行工具之前,我们必须在设置中 ...
- 《现代命令行工具指南》9. 删除文件:让删除文件变得安全可控 - trash-cli
好工具就是生产力,这是专栏<现代命令行工具指南>精讲的第 9 个命令行工具,欢迎品鉴. 把文件删了,突然后悔了,怎么办? 恢复呗! 一般操作系统中都有个回收站,用来临时存放被删除的文件, ...
- 《现代命令行工具指南》10. 管理工具:在隔离环境中安装和运行 Python 命令行工具 - Pipx
好工具就是生产力,这是专栏<现代命令行工具指南>精讲的第 10 个命令行工具,欢迎品鉴. 很多强大的命令行工具都是用 Python 编写的,比如,poetry.trash-cli.bla ...
- 《现代命令行工具指南》11. 帮助手册:只给你最有用的帮助信息 - tldr
好工具就是生产力,这是专栏<现代命令行工具指南>精讲的第 11 个命令行工具,欢迎品鉴. 命令行工具太多了,我们不可能把所有命令的用法都记住,因此帮助手册(man)就成了我们经常查阅的东 ...
- 《现代命令行工具指南》8. 备忘清单:让常用命令能够信手拈来 - navi
好工具就是生产力,这是专栏<现代命令行工具指南>精讲的第 8 个命令行工具,欢迎品鉴. 命令用完就忘怎么办?命令太复杂记不住怎么办? 用备忘录啊,把常用的.复杂的.记不住的命令记下来,以 ...
- 《现代命令行工具指南》15.表情符号:在命令行中查找表情符号 - emoj
好工具就是生产力,这是专栏<现代命令行工具指南>精讲的第 15 个命令行工具,欢迎品鉴. 在互联网世界,emoji 表情符号可谓是随处可见,不管是微信聊天.微博.甚至视频中都经常出现,而 ...
- 《现代命令行工具指南》12. 智能纠错:让随口一骂就能解决问题 - thefuck
好工具就是生产力,这是专栏<现代命令行工具指南>精讲的第 12 个命令行工具,欢迎品鉴. 我们在终端工作时,经常会因为心急手快而敲错命令,也经常因为权限不够而阻断命令的执行,遇到这样的问 ...
- 《现代命令行工具指南》3. 选取字符:让选取字符变得轻而易举 - choose
好工具就是生产力,这是专栏<现代命令行工具指南>精讲的第 3 个命令行工具,欢迎品鉴. 假如有一行文本是: choose sections from each line of files ...
- windows powershell实战指南(第3版)_Windows命令行工具cmder配置(转)
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处 作者:memor链接:https://segmentfault.com/a/1190000011361877 来源:http://s ...
- GitHub日收12000星,微软新命令行工具引爆程序员圈!
作者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 继上次微软开源计算器刷爆GitHub后,今天凌晨在微软Build大会登场的Windows Terminal,如旋风般目前已登顶GitHu ...
最新文章
- 【Smart_Point】unique_ptr中独占指针使用MakeFrame
- ip分片 tcp分段(转)
- 无法实现接口成员,因为它不是公共的——interface
- JAVA多线程和并发基础面试问答(转载)
- leetcode 1631. 最小体力消耗路径(并查集)
- 搜狗输入法Android5.1,ESXI 服务器断电之后一直 LOADING MODULE IPMI_SI_DRV 的解决办法...
- 我的世界怎么设置服务器维护中,我的世界服务器
- Kotlin学习笔记21 协程part1 基本概念
- 技嘉ide模式怎么改,电脑BIOS中怎么设置硬盘为IDE模式
- 微信服务号认证和不认证的区别
- 启动计算机显示屏没反应,电脑开机后显示器无反应怎么办
- Error connecting to node kafka:9092 (id: 1001 rack: null)
- 我设计的五笔日本语输入法和韩语输入法初稿图
- NFT市场如何拆分Opensea?
- 算法竞赛入门【码蹄集进阶塔335题】(MT2001-2025)
- 【整理】EFI/UEFI BIOS 入门 : All For Beginners
- java Excel导出工具类
- Chained Declustering
- Excel 代码编写 统一去掉单元格左上角的三角符号
- 高德、腾讯、百度实时路况切片地址
热门文章
- 【Java基础】ArraylistLinkedList机制,failfastfailsafe
- 计算机复试专业课笔试,关于计算机考研专业课的考试内容
- 省考计算机专业课考什么,计算机考研专业课考什么
- 交换机和集线器的区别
- VBA学习练习-将多个单元格内容合并
- 蒙特卡罗方法C语言求定积分,蒙特卡罗方法计算定积分
- 文献阅读1:Deep Learning for Image Super-resolution: A Survey
- DNS 协议是什么?
- Flutter开发之——Future<dynamic> is not a subtype of type () void
- 阿里云服务器地域的选择