实现一个最简单的VIM文本编辑器(可能有bug,随便写了一个)
简单的写了一个文本编辑器,功能很简单,但足以把文件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,随便写了一个)的更多相关文章
- 第十八章 vi/vim文本编辑器介绍
一.vi/vim文本编辑器介绍 1.含义: vi就是一个文本编辑器 2.为什么学习: 系统配置 编写脚本 vim就是vi的升级版 高级版 [root@jindada ~]# [root@jindada ...
- Vim 文本编辑器的基本使用
Vim文本编辑器是Linux/Unix系统下最常用的工具之一,通过该工具可以很方便的建立.修改.编辑文档或者程序文件,其作用类似与windows系统下的记事本或者notepad++,因此熟练掌握该工具 ...
- Linux命令行下的vim文本编辑器
Linux命令行下的vim文本编辑器 下面这个网站的地址讲解的非成分清楚!!!! http://blog.csdn.net/niushuai666/article/details/7275406 学习 ...
- Vim文本编辑器详细用法
1 Vi.Vim文本编辑器 1.Vi.Vim Vi是Visual interface的简称. Vim是Vi的增强版,即Vi Improved.在后面的实例中将介绍Vim的使用. 为什么学vi? 1)所 ...
- Linux系统 vi/vim文本编辑器
Linux系统 vi/vim文本编辑器 (一)Vim/Vi简介 (二)Vim/Vi工作模式 (三)Vim/Vi基本使用 (四)Vim/Vi应用技巧 (一)Vim/Vi简介 Vim/Vi是一个功能强大的 ...
- 11 vim文本编辑器
和sed相比,sed为字处理器(行编辑器),将文本逐行放入到模式空间(也就是内存)中进行处理,并显示在屏幕上.而vim.vi以及nano都是全屏文本编辑器,而vim则是vi的加强版本,相对于vi,vi ...
- linux100day(day3)--常用文本处理命令和vim文本编辑器
今天,来介绍几个常用文本处理命令和vim文本编辑器 day3--常用文本处理命令和vim文本编辑器 col,用于过滤控制字符,-b过滤掉所有控制字符,这个命令并不常用,但可以使用man 命令名| co ...
- linux/linux学习笔记-vim文本编辑器(mooc)
vim文本编辑器 vim与vi的区别:( vim=vi +IMproved) VIM是一个Unix以及类unix文本编辑器 特点:功能强大,高度可定制 vim编辑器的三种模式:一般模式.编辑模式和命令 ...
- Linux学习笔记(九)Vim文本编辑器的使用
Vim文本编辑器的使用 Vim的工作模式 1.命令模式 2.输入模式 3.编辑模式 进入Vim 1.使用Vim打开文件 2.直接进入指定位置 Vim基本命令 1.插入命令 2.光标移动命令 3.使用V ...
随机推荐
- [HEOI2015]兔子与樱花
Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接 ...
- 51nod 1376 最长递增子序列的数量(线段树)
51nod 1376 最长递增子序列的数量 数组A包含N个整数(可能包含相同的值).设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递 ...
- hdu 5463(水水)
Sample Input 2 3 2 33 3 33 2 33 10 5 467 6 378 7 309 8 499 5 320 3 480 2 444 8 391 5 333 100 499 S ...
- 【SDOI2009】学校食堂
Description 小F的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用 ...
- 百度移动深度学习 Mobile-deep-learning(MDL)
Free and open source mobile deep learning framework, deploying by Baidu. This research aims at simpl ...
- CNN中的经典结构之AlexNet
AlexNet的基本结构 Alexnet是由5个卷积层和三个全连接层组成,一共8个权重层(池化层不是权重层因为其没有参数),其中ReLU激活函数作用在每个卷积层和全连接层上,在第一个卷积层和第二个卷积 ...
- 如何成为快手尬舞王?HUAWEI HiAI了解一下!
左手!右手!抱一抱!扭一扭! 快手短视频,红遍东西南北中, 给大家的生活增添了不少乐趣. 有了人体姿态识别的魔法表情, 不会跳舞的也都可以跟着跳一跳. 从村口朴实的阿姨,到写字楼里端庄的白领, 在人体 ...
- java中的构造,封装
今天给大家讲一下面向对象中的构造,封装: 构造:构造方法有以下几个特点:1.方法名和类名一致.2.无返回类型.接下来的几种构造样式,直接上代码吧: //这是一个宠物类 有一个属性:名字(name) p ...
- 基于无域故障转移群集 配置高可用SQLServer 2016数据库
基于上次的文章搭建的环境,可以在这里:http://www.cnblogs.com/DragonStart/p/8275182.html看到上次的文章. 演示环境 1. 配置一览 Key Value ...
- Python中的赋值(复制)、浅拷贝、深拷贝之间的区别
1.赋值: 只是复制了新对象的引用,不会开辟新的内存空间. 2.浅拷贝: 创建新对象,其内容是原对象的引用. 浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数. 如: ...