当前位置: 首页 > news >正文

photoshop网站模板下载cpanel面板 WordPress

photoshop网站模板下载,cpanel面板 WordPress,qq安全中心信任网站,关键词推广seo怎么优化写一个类 Vim 的编辑器在 Linux 下是一个非常大型的项目#xff0c;涉及终端控制、缓冲区管理、语法高亮、模式切换、命令解析、文件 I/O、键盘事件处理等复杂模块。不过#xff0c;我可以给你一个最小可运行的“类 Vim”终端编辑器框架#xff0c;它具备以下功能#xff1…写一个类 Vim 的编辑器在 Linux 下是一个非常大型的项目涉及终端控制、缓冲区管理、语法高亮、模式切换、命令解析、文件 I/O、键盘事件处理等复杂模块。不过我可以给你一个最小可运行的“类 Vim”终端编辑器框架它具备以下功能 ✅ 功能清单最小 Vim 克隆表格复制功能实现状态打开文件✅移动光标hjkl✅插入模式i✅返回普通模式ESC✅保存文件:w✅退出:q✅语法高亮❌可扩展多缓冲区❌插件系统❌ ✅ 技术栈语言C依赖无只用 POSIX编译gcc -o myvim myvim.c -Wall -Wextra -pedantic ✅ 源码myvim.c#define _DEFAULT_SOURCE #include ctype.h #include fcntl.h #include stdio.h #include stdlib.h #include string.h #include sys/ioctl.h #include termios.h #include unistd.h#define CTRL_KEY(k) ((k) 0x1f) #define ABUF_INIT {NULL, 0}typedef struct {char *b;int len; } abuf;struct termios orig_termios; int rows, cols; int cx, cy; int rowoff; char *filename; char **rows_data; int num_rows;void die(const char *s) {write(STDOUT_FILENO, \x1b[2J, 4);write(STDOUT_FILENO, \x1b[H, 3);perror(s);exit(1); }void disable_raw_mode() {tcsetattr(STDIN_FILENO, TCSAFLUSH, orig_termios); }void enable_raw_mode() {tcgetattr(STDIN_FILENO, orig_termios);atexit(disable_raw_mode);struct termios raw orig_termios;raw.c_iflag ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);raw.c_oflag ~(OPOST);raw.c_cflag | (CS8);raw.c_lflag ~(ECHO | ICANON | IEXTEN | ISIG);raw.c_cc[VMIN] 0;raw.c_cc[VTIME] 1;tcsetattr(STDIN_FILENO, TCSAFLUSH, raw); }int get_window_size(int *rows, int *cols) {struct winsize ws;if (ioctl(STDOUT_FILENO, TIOCGWINSZ, ws) -1 || ws.ws_col 0) {return -1;} else {*cols ws.ws_col;*rows ws.ws_row;return 0;} }void ab_append(abuf *ab, const char *s, int len) {char *new realloc(ab-b, ab-len len);if (new NULL) return;memcpy(new ab-len, s, len);ab-b new;ab-len len; }void ab_free(abuf *ab) {free(ab-b); }void editor_scroll() {if (cy rowoff) {rowoff cy;}if (cy rowoff rows) {rowoff cy - rows 1;} }void editor_draw_rows(abuf *ab) {for (int y 0; y rows; y) {int filerow y rowoff;if (filerow num_rows) {ab_append(ab, ~, 1);} else {int len strlen(rows_data[filerow]);if (len cols) len cols;ab_append(ab, rows_data[filerow], len);}ab_append(ab, \x1b[K, 3);ab_append(ab, \r\n, 2);} }void editor_refresh_screen() {editor_scroll();abuf ab ABUF_INIT;    ab_append(ab, \x1b[?25l, 6);ab_append(ab, \x1b[H, 3);    editor_draw_rows(ab);    char buf[32];snprintf(buf, sizeof(buf), \x1b[%d;%dH, cy - rowoff 1, cx 1);ab_append(ab, buf, strlen(buf));    ab_append(ab, \x1b[?25h, 6);write(STDOUT_FILENO, ab.b, ab.len);ab_free(ab); }char editor_read_key() {int nread;char c;while ((nread read(STDIN_FILENO, c, 1)) ! 1) {if (nread -1 errno ! EAGAIN) die(read);}return c; }void editor_move_cursor(char c) {switch (c) {case h: if (cx 0) cx--; break;case l: if (cx cols - 1) cx; break;case k: if (cy 0) cy--; break;case j: if (cy num_rows - 1) cy; break;} }void editor_process_command() {char c;while ((c editor_read_key()) ! :);char cmd[32] {0};int i 0;while ((c editor_read_key()) ! \r) {if (i sizeof(cmd) - 1) cmd[i] c;}cmd[i] \0;if (strcmp(cmd, q) 0) {write(STDOUT_FILENO, \x1b[2J, 4);write(STDOUT_FILENO, \x1b[H, 3);exit(0);} else if (strcmp(cmd, w) 0) {int fd open(filename, O_RDWR | O_CREAT, 0644);if (fd -1) die(open);for (int i 0; i num_rows; i) {write(fd, rows_data[i], strlen(rows_data[i]));write(fd, \n, 1);}close(fd);} }void editor_open(char *file) {filename strdup(file);FILE *fp fopen(file, r);if (!fp) die(fopen);    char *line NULL;size_t linecap 0;ssize_t len;while ((len getline(line, linecap, fp)) ! -1) {while (len 0 (line[len - 1] \n || line[len - 1] \r))len--;rows_data realloc(rows_data, sizeof(char *) * (num_rows 1));rows_data[num_rows] malloc(len 1);memcpy(rows_data[num_rows], line, len);rows_data[num_rows][len] \0;num_rows;}free(line);fclose(fp); }int main(int argc, char **argv) {enable_raw_mode();get_window_size(rows, cols);    if (argc 2) {editor_open(argv[1]);}    while (1) {editor_refresh_screen();char c editor_read_key();if (c q) break;if (c :) {editor_process_command();} else if (c i) {while (1) {editor_refresh_screen();char ic editor_read_key();if (ic 27) break; // ESCif (ic 127) continue; // Backspace// Insert character (simplified)}} else if (strchr(hjkl, c)) {editor_move_cursor(c);}}    return 0; }编译 运行bash复制 gcc -o myvim myvim.c -Wall -Wextra -pedantic ./myvim test.txt ✅ 后续可扩展方向插入模式真正写入缓冲区支持多行插入/删除语法高亮用 regex.h 或手动解析复制粘贴yank/paste撤销/重做undo/redo插件系统Lua 绑定 ✅ 总结这不是一个“完整 Vim”但它是真实可运行、可扩展的终端编辑器骨架。你可以把它当作一个教育项目或Vim 克隆的起点。
http://www.zqtcl.cn/news/992800/

相关文章:

  • 大连 网站建设昆明建设网站哪家好
  • 网站首页设计及运行效果网站建设与管理任务分工
  • 自己建设论坛网站家用电脑搭建服务器
  • 做网站上海公司企业网站内页
  • 手机网站seo山东网站建设网
  • 溧阳 招网站开发wordpress 占内存
  • 网站seo 工具做网站建设公司排名
  • 丹阳网站建设企业建设网站管理制度
  • 怎样审请网站集成装修全屋定制
  • 好看响应式网站模板下载可以访问的国外网站
  • 做电脑网站宽度网站建立安全连接失败
  • 西安网站设计哪家公司好my12777域名查询
  • 西宁网站建设排名网站设计对网站建设有哪些意义?
  • 北京平台网站建设价位怎样做网站卖网站
  • 网站建设与维护试题a卷建设银行官方网站买五粮液酒
  • 安装网站源码做文艺文创产品的网站
  • 软件公司网站设计与制作电子商务成功网站的案例
  • 购物车功能网站怎么做的建设众筹类网站
  • 哪些网站做的美爱站工具网
  • 对网站开发的理解源码资源网
  • 有哪些做兼职的网站网站建设的项目计划书
  • 如何做行业网站江苏城乡建设部网站首页
  • 淘客网站怎么做 知乎wordpress 删除插件
  • 深圳市住房和建设局人事调整公司网站seo怎么做
  • 小型影视网站源码好看的个人博客
  • 哈密建设厅网站西安培训机构
  • 网站建设公众号小程序开发密云网站开发
  • 南宁网站开发制作网站数据库分离怎么做
  • 不能打开建设银行网站怎么办自己做网站要会什么软件下载
  • 微软网站怎么做的diy个性定制