简单的写了一个文本编辑器,功能很简单,但足以把文件IO相关的操作熟悉了,可能功能或者分配的大小还不够完善。请参考参考:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <fcntl.h>
int count ;
char ch = 0;
char file_name[20]={0};
char buffer[1024*1024]={0};
//退出文本编辑器
int exit_editor()
{
    printf("exit editor!\n");
    memset(buffer, 0,1024*1024);
    system("cls");
    return -1 ;
}
//文本编辑模式
int text_editor_mode()
{
    int flag ;
    char input_ch = 0 ;
    flag = 0 ;
    count = 0 ;
    system("cls");
    //进入编辑文本模式
    printf("\a");
    //清空数组
    while(1)
    {
       input_ch = getch();
       //ESC按键
       if(input_ch == 0x1B)
       {
           printf("exit editor\n");
           system("cls");
           flag = 1 ;
           return flag ;
       }
       //ENTER按键---->实现文本编辑器换行
       if(input_ch == 0x0d)
       {
           putchar('\n');
       }
       //输入的内容不是ESC按键的情况下就将文本信息保存到数组里去
       if(input_ch != 0x1B)
       {
           buffer[count] = input_ch ;
           putchar(input_ch);
           count++;
       }
    }
}

//文本保存模式
int save_text_mode()
{
    int flag ;
    flag = 0 ;
    system("cls");
    printf("plase input file name\n");
    scanf("%s",file_name);
    int openfd = open(file_name,O_CREAT | O_TRUNC | O_RDWR);
    if(-1 == openfd){
       printf("open file fair!\n");
       memset(buffer, 0,1024*1024);
       memset(file_name,0,20);
       return -1 ;
     }
     write(openfd,buffer,count);
     printf("save file success\n");
     memset(buffer, 0,1024*1024);
     memset(file_name,0,20);
     close(openfd);
     printf("file save success!file_name:%s\n",file_name);
     system("cls");
     flag = 1 ;
     return flag ;
}

//读取一个文件的信息
int read_file()
{
    char *file = NULL;
    char *file_buffer = NULL ;
    system("cls");
    int fle_flag = 0 ;
    int count_fd ;
    file = malloc(20);
    file_buffer = malloc(1024);
    printf("please input file name!\n");
    scanf("%s",file);
    system("cls");
    printf("please input file size!\n");
    scanf("%d",&count_fd);
    int fd = open(file,O_RDONLY);
    if(-1 == fd)
        fprintf(stderr,"open file error");
    system("cls");
    int i ;
    read(fd,file_buffer,count_fd);
    for(i = 0 ; i < count_fd ; i++)
    {
        printf("%c",file_buffer[i]);
    }
    while(1)
    {
        char rch = getch();
        if(rch == 0x1B){
           system("cls");
           break ;
        }
    }
    free(file);
    free(file_buffer);
    close(fd);
    fle_flag = 1 ;
    return fle_flag ;
}
int main(void)
{
    int file_fd = -1;
    int ret = 0;
    int exit_ret = 0;
    int save_ret = 0;
    int read_ret = 0 ;
    //重新开始
    Rep:
    printf("Welcome to yyx develop VIM-EDITUO\n");
    printf("please input i to editor ,r to read ,  w to save , q to quit\n");
    while(1)
    {
        ch = getch();
        switch(ch)
        {
           case 'w':  save_ret = save_text_mode(); break ;
           case 'i':  ret = text_editor_mode();    break ;
           case 'q':  exit_ret = exit_editor();    break ;
           case 'r':  read_ret = read_file();      break ;
        }
        if(ret == 1 || save_ret == 1 || read_ret == 1)
            goto Rep ;
        if(exit_ret == -1)
            break ;
    }
    return 0 ;
}

实现一个最简单的VIM文本编辑器(可能有bug,随便写了一个)的更多相关文章

  1. 第十八章 vi/vim文本编辑器介绍

    一.vi/vim文本编辑器介绍 1.含义: vi就是一个文本编辑器 2.为什么学习: 系统配置 编写脚本 vim就是vi的升级版 高级版 [root@jindada ~]# [root@jindada ...

  2. Vim 文本编辑器的基本使用

    Vim文本编辑器是Linux/Unix系统下最常用的工具之一,通过该工具可以很方便的建立.修改.编辑文档或者程序文件,其作用类似与windows系统下的记事本或者notepad++,因此熟练掌握该工具 ...

  3. Linux命令行下的vim文本编辑器

    Linux命令行下的vim文本编辑器 下面这个网站的地址讲解的非成分清楚!!!! http://blog.csdn.net/niushuai666/article/details/7275406 学习 ...

  4. Vim文本编辑器详细用法

    1 Vi.Vim文本编辑器 1.Vi.Vim Vi是Visual interface的简称. Vim是Vi的增强版,即Vi Improved.在后面的实例中将介绍Vim的使用. 为什么学vi? 1)所 ...

  5. Linux系统 vi/vim文本编辑器

    Linux系统 vi/vim文本编辑器 (一)Vim/Vi简介 (二)Vim/Vi工作模式 (三)Vim/Vi基本使用 (四)Vim/Vi应用技巧 (一)Vim/Vi简介 Vim/Vi是一个功能强大的 ...

  6. 11 vim文本编辑器

    和sed相比,sed为字处理器(行编辑器),将文本逐行放入到模式空间(也就是内存)中进行处理,并显示在屏幕上.而vim.vi以及nano都是全屏文本编辑器,而vim则是vi的加强版本,相对于vi,vi ...

  7. linux100day(day3)--常用文本处理命令和vim文本编辑器

    今天,来介绍几个常用文本处理命令和vim文本编辑器 day3--常用文本处理命令和vim文本编辑器 col,用于过滤控制字符,-b过滤掉所有控制字符,这个命令并不常用,但可以使用man 命令名| co ...

  8. linux/linux学习笔记-vim文本编辑器(mooc)

    vim文本编辑器 vim与vi的区别:( vim=vi +IMproved) VIM是一个Unix以及类unix文本编辑器 特点:功能强大,高度可定制 vim编辑器的三种模式:一般模式.编辑模式和命令 ...

  9. Linux学习笔记(九)Vim文本编辑器的使用

    Vim文本编辑器的使用 Vim的工作模式 1.命令模式 2.输入模式 3.编辑模式 进入Vim 1.使用Vim打开文件 2.直接进入指定位置 Vim基本命令 1.插入命令 2.光标移动命令 3.使用V ...

随机推荐

  1. 贼有意思[最长上升公共子序列](SAC大佬测试题)

    题目描述Awson 最近越来越蠢了,一天就只知道 zyys.他定义了一个 zyys 数列:这个数列满足:1.是另外两个数列 A,B 的公共子序列;2.数列单调递增.现在他有一个问题,我们假设知道两个长 ...

  2. c语言3种链接属性: 外部(external), 内部(internal),无设置(none)

    c语言中,多个文件组合的时候,有可能标示名相同,那么这个时候编译器如何判别的呢?    c语言中有3种链接属性: 外部(external), 内部(internal),无设置(none)    外部( ...

  3. 如何在 vmware esxi 中开放 VNC功能及端口实现远程管理 完整篇

    VMWare esxi中开放 VNC功能及端口实现远程管理 完整篇 在多个论坛上看了相关文章,总的写得不完整.现将各方资源整编写完整版.详文如下! (图片来自51CTO) 步骤1. 修改ESXi主机的 ...

  4. webpack 前后端分离开发接口调试解决方案,proxyTable解决方案

    如果你有单独的后端开发服务器 API,并且希望在同域名下发送 API 请求 ,那么代理某些 URL 会很有用. dev-server 使用了非常强大的 http-proxy-middleware 包. ...

  5. Linux——makefile编写

    以前对makefile的编写,限于刚开始接触,我都比较局限一些死板的格式,有时候就会显得有些繁琐.在进一步了解一些系统编译和链接的知识后,对makefile编写流程有了一些新的认识,所以来此梳理梳理, ...

  6. 如何去掉修改Joomla、joomlart及其模版版权、标志、图标的方法

    Joomla是遵循GNU通用公共授权(GPL)的自由软件,我们虽然不推荐将Joomla的所有版权删除,但有些必要的信息还是需要修改的,下面以JoomlArt.com 的JA_teline_iii_v2 ...

  7. MongoDB Java

    MongoDB Java 环境配置 在Java程序中如果要使用MongoDB,你需要确保已经安装了Java环境及MongoDB JDBC 驱动. 你可以参考本站的Java教程来安装Java程序.现在让 ...

  8. Python 字符串字典内置函数&方法

    Python字典包含了以下内置函数: 序号 函数及描述 1 cmp(dict1, dict2)比较两个字典元素. 2 len(dict)计算字典元素个数,即键的总数. 3 str(dict)输出字典可 ...

  9. 安卓onTextChanged参数解释及实现EditText字数监听 Editable使用

    原作者部分修改部分 补充部分 补充部分2 补充部分3 补充部分4 Editable 尊重原作者:此篇文章是借鉴原作者地址 的博文 并进行修改和增加补充说明,我只是补充和修改: 我感觉这篇文章经过我的补 ...

  10. OpenCV+VS2013 属性表配置

    简介 计算机视觉任务越来越多的依赖著名的开源计算机视觉库OpenCV.OpenCV 2.0 包含了一系列精心设计数据结构和经过优化的视觉算法,大家可以短时间内开发一个不错的视觉应用.OpenCV支持多 ...