jed是一个基于Slang库的轻量级文本编辑器,专门为程序员设计。它提供了语法高亮、多窗口编辑、宏录制、自动缩进等功能,支持多种编程语言。jed的界面类似于Emacs,但比Emacs更轻量,是Linux系统中一个优秀的程序员编辑器选择。
jed [选项] [文件...]
| 选项 | 说明 |
|---|---|
| -2 | 分屏模式(两个窗口) |
| -batch | 批处理模式,不进入交互界面 |
| -f 命令 | 启动时执行指定的jed命令 |
| -g 行号 | 启动后跳转到指定行号 |
| -i 文件 | 使用指定的初始化文件 |
| -n | 不读取jed.rc配置文件 |
| -s 字符串 | 搜索指定的字符串 |
| -l 文件 | 加载指定的Slang文件 |
| -help | 显示帮助信息 |
| -version | 显示版本信息 |
| 命令 | 说明 | 快捷键 |
|---|---|---|
| 移动光标 | 上下左右移动 | 方向键 / Ctrl+F, Ctrl+B, Ctrl+N, Ctrl+P |
| 删除字符 | 删除光标处的字符 | Delete / Ctrl+D |
| 删除单词 | 删除光标后的单词 | Esc+D |
| 删除行 | 删除当前行 | Ctrl+K |
| 保存文件 | 保存当前文件 | Ctrl+X Ctrl+S |
| 退出 | 退出jed编辑器 | Ctrl+X Ctrl+C |
| 撤销 | 撤销上一次操作 | Ctrl+X U |
| 搜索 | 向前搜索 | Ctrl+S |
| 反向搜索 | 向后搜索 | Ctrl+R |
| 替换 | 搜索并替换 | Esc+% |
| 分屏 | 水平分屏 | Esc+2 |
| 切换窗口 | 在分屏窗口间切换 | Ctrl+X O |
在大多数Linux发行版中,jed可以通过包管理器安装:
# Ubuntu/Debian
sudo apt-get install jed
# CentOS/RHEL
sudo yum install jed
# Fedora
sudo dnf install jed
# Arch Linux
sudo pacman -S jed
# 验证安装
jed -version
使用jed编辑文本文件:
# 启动jed编辑器
jed
# 编辑指定文件
jed document.txt
# 启动后跳转到第10行
jed -g 10 script.py
使用分屏模式同时编辑多个文件:
# 启动分屏模式
jed -2
# 分屏编辑两个文件
jed -2 file1.txt file2.txt
# 在jed中分屏(启动后操作)
# Esc+2 - 水平分屏
# Ctrl+X O - 切换窗口
# Ctrl+X 0 - 关闭当前窗口
使用批处理模式执行编辑操作:
# 在批处理模式下执行搜索替换
jed -batch -f "replace_string('old','new')" -f "save_exit()" file.txt
# 执行多个命令
jed -batch -f "goto_line(10)" -f "insert('Hello World')" -f "save_exit()" document.txt
# 搜索字符串并保存
jed -batch -s "TODO" -f "save_exit()" code.py
使用jed编辑不同编程语言文件:
# 编辑Python文件(自动语法高亮)
jed script.py
# 编辑C/C++文件
jed program.c
# 编辑HTML文件
jed webpage.html
# 编辑Shell脚本
jed install.sh
使用自定义配置文件:
# 使用自定义初始化文件
jed -i ~/.jedrc
# 不读取默认配置
jed -n
# 创建基本的jed配置文件
cat > ~/.jedrc << 'EOF'
() = evalfile("colors");
colors("Linux"); # 设置颜色方案
set_tab_width(4); # 设置制表符宽度
set_hscroll(80); # 设置水平滚动边界
unset_mode("WordWrap"); # 禁用自动换行
EOF
使用搜索功能快速导航:
# 启动时搜索字符串
jed -s "function" program.js
# 在编辑器中搜索(交互式)
# Ctrl+S - 向前搜索
# Ctrl+R - 向后搜索
# Esc+% - 搜索替换
# 跳转到指定行
jed -g 25 source.c
使用jed进行程序开发:
#!/bin/bash
# 使用jed进行代码开发
code_development() {
local project_dir=$1
echo "使用jed进行代码开发: $project_dir"
# 查找主要的源代码文件
find "$project_dir" -name "*.py" -o -name "*.c" -o -name "*.java" -o -name "*.js" | head -5 | while read file; do
echo "编辑文件: $file"
# 在实际使用中,可以在这里启动jed编辑文件
# jed "$file"
done
echo "开发环境准备完成"
}
# 创建示例项目结构
mkdir -p myproject/{src,include,doc}
cat > myproject/src/main.py << 'EOF'
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def main():
"""主函数"""
print("Hello, World!")
# TODO: 添加更多功能
if __name__ == "__main__":
main()
EOF
# 使用jed编辑项目文件
# jed myproject/src/main.py
使用jed编辑系统配置文件:
#!/bin/bash
# 安全编辑配置文件
edit_config_safely() {
local config_file=$1
local backup_file="${config_file}.backup.$(date +%Y%m%d_%H%M%S)"
echo "安全编辑配置文件: $config_file"
# 创建备份
if [ -f "$config_file" ]; then
cp "$config_file" "$backup_file"
echo "创建备份: $backup_file"
fi
# 使用jed编辑(需要sudo权限)
echo "使用jed编辑配置文件..."
# sudo jed "$config_file"
# 检查更改
if [ -f "$backup_file" ] && [ -f "$config_file" ]; then
if diff "$backup_file" "$config_file" > /dev/null; then
echo "配置文件未更改"
rm "$backup_file"
else
echo "配置文件已更新"
echo "更改摘要:"
diff -u "$backup_file" "$config_file" | head -10
fi
fi
}
# 示例:编辑SSH配置
# edit_config_safely "/etc/ssh/sshd_config"
使用jed的批处理模式进行自动化文本处理:
#!/bin/bash
# 批量搜索替换
batch_search_replace() {
local search_pattern=$1
local replace_pattern=$2
local file_pattern=${3:-"*.txt"}
echo "批量搜索替换: '$search_pattern' -> '$replace_pattern'"
find . -name "$file_pattern" -type f | while read file; do
echo "处理文件: $file"
# 使用jed批处理模式进行替换
jed -batch -f "replace_string('$search_pattern','$replace_pattern')" -f "save_exit()" "$file"
# 检查是否实际进行了替换
if grep -q "$replace_pattern" "$file"; then
echo " ✓ 替换完成"
fi
done
}
# 批量添加文件头
add_file_headers() {
local header_text=$1
local file_pattern=${2:-"*.py"}
echo "批量添加文件头"
find . -name "$file_pattern" -type f | while read file; do
echo "处理文件: $file"
# 创建临时文件
temp_file=$(mktemp)
# 添加文件头
echo "$header_text" > "$temp_file"
cat "$file" >> "$temp_file"
# 替换原文件
mv "$temp_file" "$file"
echo " ✓ 文件头添加完成"
done
}
# 使用示例
# batch_search_replace "old_version" "new_version" "*.py"
# add_file_headers "# -*- coding: utf-8 -*-" "*.py"
配置jed支持自定义语法高亮:
# 创建自定义语法高亮配置
cat >> ~/.jedrc << 'EOF'
# 自定义语法高亮
if (Buffer_Type == "c") {
set_syntax_flags(0);
define_syntax("string", "#...\"", "\"", "string");
define_syntax("keyword", "#if,#else,#endif,#define,#include", "", "keyword");
}
if (Buffer_Type == "python") {
set_syntax_flags(0);
define_syntax("string", "\"\"\"", "\"\"\"", "string");
define_syntax("keyword", "def,class,if,else,elif,for,while", "", "keyword");
define_syntax("comment", "#", "\n", "comment");
}
EOF
使用jed的宏功能自动化重复任务:
# 在jed中录制宏:
# F11 - 开始录制宏
# 执行一系列操作
# F12 - 停止录制宏
# 保存宏到文件
cat > format_macro.jed << 'EOF'
# 格式化代码的宏
insert_string(" "); # 插入4个空格缩进
bol(); # 移动到行首
EOF
# 加载和执行宏
jed -batch -l format_macro.jed -f "execute_macro()" file.py
将jed集成到其他开发工具中:
#!/bin/bash
# 作为git的默认编辑器
export GIT_EDITOR=jed
# 作为默认系统编辑器
export EDITOR=jed
export VISUAL=jed
# 在脚本中调用jed进行编辑
edit_file() {
local file=$1
local temp_file=$(mktemp)
# 复制原内容到临时文件
cp "$file" "$temp_file"
# 使用jed编辑
jed "$temp_file"
# 检查是否保存了更改
if ! diff "$file" "$temp_file" > /dev/null; then
mv "$temp_file" "$file"
echo "文件已更新"
else
rm "$temp_file"
echo "未作更改"
fi
}
jed的主要配置文件:
# 系统全局配置
/etc/jed.conf
# 用户个人配置
~/.jedrc
# 颜色方案配置
/usr/share/jed/lib/colors.sl
# 语法高亮配置
/usr/share/jed/lib/syntax.sl
# ~/.jedrc 示例配置
() = evalfile("colors");
colors("Linux"); # 使用Linux颜色方案
# 基本设置
set_tab_width(4); # 制表符宽度
set_hscroll(80); # 水平滚动边界
unset_mode("WordWrap"); # 禁用自动换行
set_abbrev_mode(1); # 启用缩写模式
# 编程语言特定设置
if (Buffer_Type == "python") {
set_buffer_mode("Python");
set_tab_width(4);
}
if (Buffer_Type == "c" || Buffer_Type == "cpp") {
set_buffer_mode("C");
set_tab_width(2);
}
# 键绑定自定义
setkey("bol", "^A"); # Ctrl+A 移动到行首
setkey("eol", "^E"); # Ctrl+E 移动到行尾
# 自动保存设置
autosave_on_exit(1); # 退出时自动保存
autosave_time(300); # 每300秒自动保存
检查终端设置和jed配置:
# 检查TERM环境变量
echo $TERM
# 设置正确的终端类型
export TERM=xterm-256color
# 在jed中检查键绑定
# 按Ctrl+H K,然后按要检查的键
# 重置键绑定到默认
# 删除或重命名 ~/.jedrc 文件
启用和配置语法高亮:
# 在 ~/.jedrc 中启用颜色支持
() = evalfile("colors");
colors("Linux");
# 启用语法高亮
set_syntax_flags(1);
# 检查文件类型检测
# 在jed中: Ctrl+X I 显示缓冲区信息
# 手动设置文件类型
# 在jed中: Esc+X set_buffer_mode("python")
调试批处理模式问题:
# 检查命令语法
jed -batch -f "goto_line(10)" -f "save_exit()" file.txt
# 使用正确的函数名
# 常用函数: insert, delete, replace_string, save_exit, quit
# 调试模式
jed -batch -f "message('Starting')" -f "goto_line(5)" -f "message('Done')" file.txt
# 查看可用函数
# 在交互模式中: Esc+X apropos
| 命令 | 说明 | 区别 |
|---|---|---|
| vim | Vi改进版编辑器 | 模式化编辑,学习曲线较陡 |
| emacs | GNU Emacs编辑器 | 功能更强大,但更重 |
| nano | 简单易用的编辑器 | 更适合初学者 |
| ed | 行编辑器 | 基本的行编辑功能 |
| sed | 流编辑器 | 非交互式文本处理 |
| joe | Joe's Own Editor | 另一个轻量级程序员编辑器 |
jed是一个功能强大但相对轻量级的程序员编辑器,特别适合在终端环境中进行代码开发。建议: