首页 文章 精选 留言 我的

精选列表

搜索[子系统命令],共10024篇文章
优秀的个人博客,低调大师

【鸿蒙】分布式通信子系统--让华为手机发现Hi3861开发板

目录: 工具 步骤 运行结果 工具: 1. 华为手机,需要有多设备协同功能。在设置->更多连接->多设备协同,查看是否有多设备协同功能,此功能使用的就是coap协议。 2. Hi3861开发板 步骤: 1. 修改源码,发布一个Serivce 2. 启动Hi3861开发板,并连接WIFI,对Hi3861设备接收广播和响应广播处添加日志,使用串口工具查看日志。 3. 使用路由器上进行抓包。udp,端口是5684 4. 将多设备协同开关打开。在打开开关的瞬间,可以看到Hi3861开发板接收到了多条广播请求,同时对多条广播进行响应 运行结果: 可以看到Hi3861开发板对华为手机发现设备时发出的广播进行响应,但手机上并没有展示出Hi3861设备信息,可能是还需要一些其他信息,或者传递的信息手机并不支持,具体原因不详,不清楚手机端对Hi3861发送的响应报文是如何处理的,但Hi3861通过HarmonyOS系统能力,已经能成功与手机进行交互了。下一步就是通过解决如何在手机上展示并通过HarmonyOS系统能力进行通信,如获取设备温度。 下面一张截图中手机的IP是192.168.1.216,Hi3861开发板的IP是192.168.1.232,可以看到开发板对手机广播的成功响应。 [18:56:32.719]收←◆ready to OS start sdk ver:Hi3861V100R001C00SPC025 2020-09-03 18:10:00 formatting spiffs... [18:56:33.040]收←◆FileSystem mount ok. wifi init success! GetService name:GetService name: get feature name. GetService name: get feature name. [Register Test][TaskID:954112][Step:0][Reg S:example, F:example] Time: 330! GetService name: GetService name: GetService name:[Boot Test][TaskID:0xe8c44][Step:1][Reg Finish S:example]Time: 340! GetService name:Register Test,Oninit1Register Test,Oninit [DISCOVERY] InitLocalDeviceInfo ok [DISCOVERY] Init socket success. [DISCOVERY] liteos_m init wifi event. [DISCOVERY]CoapInitWifiEvent() [DISCOVERY]CreateMsgQue() [DISCOVERY]OnWifiConnectionChanged bind.() [DISCOVERY]RegisterWifiEvent() [DISCOVERY]RegisterWifiEvent success. [DISCOVERY]create message queue task. [DISCOVERY]create message queue success. [DISCOVERY] init cop listen thread. [DISCOVERY] CreateCoapListenThread [DISCOVERY] CreateCoapListenThread2 [DISCOVERY]CoapWriteMsgQueue(). [DISCOVERY] InitService ok [DISCOVERY] PublishCallback publishId=1, result=0 demo service publish success.1get feature name.GetService name:[DISCOVERY]ReadMsgQue(). [DISCOVERY]CoapHandleWifiEvent(). [DISCOVERY] WifiEventTrigger 1. [DISCOVERY] WifiEventTrigger[DISCOVERY] CoapReadHandle() [DISCOVERY] CoapReadHandle coin select begin [DISCOVERY] CoapReadHandle, select GetCommonDeviceInfo is success. [DISCOVERY] CoapGetIp(). [DISCOVERY] WifiEventTrigger . [DISCOVERY] WifiEventTrigger ret is 0. [DISCOVERY] WifiEventTrigger BusManager(). [TRANS] OpenTcpServer inet_pton fail, rc=0:(null) [TRANS] InitListenFd OpenTcpServer fail [AUTH] StartBus StartListener fail [DISCOVERY] WifiEventTrigger StartBusManager(1) fail [DISCOVERY]ReadMsgQue(). 00 00:00:00 0 68 D 0/HIVIEW: hilog init success. 00 00:00:00 0 68 D 0/HIVIEW: log limit init success. 00 00:00:00 0 68 I 1/SAMGR: Bootstrap core services(count:3). 00 00:00:00 0 68 I 1/SAMGR: Init service:0x4c4c14 TaskPool:0xfa9a4 00 00:00:00 0 68 I 1/SAMGR: Init service:0x4c4c38 TaskPool:0xfb014 00 00:00:00 0 68 I 1/SAMGR: Init service:0x4c6d88 TaskPool:0xfb1d4 00 00:00:00 0 100 I 1/SAMGR: Init service 0x4c4c38 <time: 0ms> success! 00 00:00:00 0 0 I 1/SAMGR: Init service 0x4c4c14 <time: 0ms> success! 00 00:00:00 0 200 D 0/HIVIEW: hiview init success. 00 00:00:00 0 200 I 1/SAMGR: Init service 0x4c6d88 <time: 0ms> success! 00 00:00:00 0 200 I 1/SAMGR: Initialized all core system services! 00 00:00:00 0 0 I 1/SAMGR: Bootstrap system and application services(count:1). 00 00:00:00 0 0 I 1/SAMGR: Init service:0x4c4cf0 TaskPool:0xeba70 00 00:00:00 0 68 I 1/SAMGR: Init service 0x4c4cf0 <time: 80ms> success! 00 00:00:00 0 68 I 1/SAMGR: Initialized all system and application services! 00 00:00:00 0 0 I 1/SAMGR: Bootstrap dynamic registered services(count:0). [18:56:53.855]发→◇AT+STARTSTA □ [18:56:53.860]收←◆AT+STARTSTAbusy! busy! busy! OK [18:57:03.997]发→◇AT+CONN=,86:73:03:de:fc:14,3,"12345678" □ [18:57:04.002]收←◆AT+CONN=,86:73:03:de:fc:14,3,"12345678"busy! busy! busy! busy! OK [18:57:04.780]收←◆+NOTICE:SCANFINISH [18:57:05.265]收←◆+NOTICE:CONNECTED [DISCOVERY]CoapConnectionChangedHandler(). [DISCOVERY]CoapWriteMsgQueue(). [DISCOVERY]CoapHandleWifiEvent(). [DISCOVERY] WifiEventTrigger 1. [DISCOVERY] WifiEventTrigger GetCommonDeviceInfo is success. [DISCOVERY] CoapGetIp(). [18:57:20.196]发→◇AT+DHCP=wlan0,1 □ [18:57:20.200]收←◆AT+DHCP=wlan0,1busy! busy! OK [18:57:21.210]收←◆[DISCOVERY] WifiEventTrigger 192.168.43.112. [DISCOVERY] WifiEventTrigger ret is 0. [DISCOVERY] WifiEventTrigger BusManager(). [TRANS] OpenTcpServer inet_pton rc=1 [TRANS] OpenTcpServer fd=1 [TRANS] WaitProcess begin [TRANS] StartListener ok [TRANS] OpenTcpServer inet_pton rc=1 [TRANS] OpenTcpServer fd=2 [TRANS] StartSelectLoop create trans_session_task [TRANS] SelectSessionLoop begin [AUTH] StartBus ok [DISCOVERY] WifiEventTrigger CoapRegisterDeviceInfo(). [DISCOVERY]ReadMsgQue(). [18:57:36.642]收←◆[DISCOVERY] HandleReadEvent() [DISCOVERY] COAP_SoftBusDecode() [DISCOVERY] PostServiceDiscover() [DISCOVERY] GetServiceDiscoverInfo() [DISCOVERY] GetServiceDiscoverInfo() [DISCOVERY] ParseServiceDiscover() {"deviceId":"{\"UDID\":\"EB1204FC4F250C892EBD67E46D0CEA03FFC16347541C95954434F22494231CCE\"}","devicename":"nova 5 Pro","type":14,"hicomversion":"2.1.0.0","mode":1,"deviceHash":"2850086000394994110","serviceData":"","wlanIp":"192.168.43.241","capabilityBit[DISCOVERY] ParseServiceDiscover(coap://192.168.43.241/device_discover) [DISCOVERY]CoapResponseService(). [DISCOVERY]PrepareServiceDiscover(). [DISCOVERY]init data(). {"deviceId":"{\"UDID\":\"BE753141CDEC87CE61D564BFD84C908E966011DEB00BF46690FC97B133AA795B\"}","devicename":"DEV_L0","type":241,"hicomversion":"","mode":0,"deviceHash":"4174638","serviceData":"port:56968,,","wlanIp":"192.168.43.112","capabilityBitmap":[64]}[DISCOVERY]CoapSendRequest(). [DISCOVERY]CoapSendRequest remote ip:192.168.43.241. CoapSocketSend:3,294 send result:294\[DISCOVERY]send success. [DISCOVERY] CoapReadHandle, select [DISCOVERY] HandleReadEvent() [DISCOVERY] COAP_SoftBusDecode() [DISCOVERY] PostServiceDiscover() [DISCOVERY] GetServiceDiscoverInfo() [DISCOVERY] GetServiceDiscoverInfo() [DISCOVERY] ParseServiceDiscover() {"deviceId":"{\"UDID\":\"EB1204FC4F250C892EBD67E46D0CEA03FFC16347541C95954434F22494231CCE\"}","devicename":"nova 5 Pro","type":14,"hicomversion":"2.1.0.0","mode":1,"deviceHash":"2850086000394994110","serviceData":"","wlanIp":"192.168.43.241","capabilityBit [DISCOVERY] ParseServiceDiscover(coap://192.168.43.241/device_discover) [DISCOVERY]CoapResponseService(). [DISCOVERY]PrepareServiceDiscover(). [DISCOVERY]init data(). {"deviceId":"{\"UDID\":\"BE753141CDEC87CE61D564BFD84C908E966011DEB00BF46690FC97B133AA795B\"}","devicename":"DEV_L0","type":241,"hicomversion":"","mode":0,"deviceHash":"4174638","serviceData":"port:56968,,","wlanIp":"192.168.43.112","capabilityBitmap":[64]}[DISCOVERY]CoapSendRequest(). [DISCOVERY]CoapSendRequest remote ip:192.168.43.241. CoapSocketSend:4,294 send result:294\[DISCOVERY]send success. [DISCOVERY] CoapReadHandle, select 作者:mb5f8960971f61a 想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com

优秀的个人博客,低调大师

kafka部署及命令

下载地址: Zookeeper: http://mirror.bit.edu.cn/apache/zookeeper/current/ Scala: http://www.scala-lang.org/download/2.11.8.html Kafka: http://kafka.apache.org/downloads 一.Zookeeper部署 1.下载解压zookeeper-3.4.6.tar.gz [root@hadoop001 software]# tar -xvf zookeeper-3.4.6.tar.gz [root@hadoop001 software]# mv zookeeper-3.4.6 zookeeper [root@hadoop001 software]# [root@hadoop001 software]# chown -R root:root zookeeper 2.修改配置 [root@hadoop001 software]# cd zookeeper/conf [root@hadoop001 conf]# ll total 12 -rw-rw-r--. 1 root root 535 Feb 20 2014 configuration.xsl -rw-rw-r--. 1 root root 2161 Feb 20 2014 log4j.properties -rw-rw-r--. 1 root root 922 Feb 20 2014 zoo_sample.cfg [root@hadoop001 conf]# cp zoo_sample.cfg zoo.cfg [root@hadoop001 conf]# vi zoo.cfg # The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/opt/software/zookeeper/data # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 server.1=hadoop001:2888:3888 server.2=hadoop002:2888:3888 server.3=hadoop003:2888:3888 ~ "zoo.cfg" 36L, 1028C written [root@hadoop001 conf]# cd ../ [root@hadoop001 zookeeper]# mkdir data [root@hadoop001 zookeeper]# touch data/myid [root@hadoop001 zookeeper]# echo 1 > data/myid [root@hadoop001 zookeeper]# 3.hadoop002/003,也修改配置,就如下不同 [root@hadoop001 software]# scp -r zookeeper 192.168.137.141:/opt/software/ [root@hadoop001 software]# scp -r zookeeper 192.168.137.142:/opt/software/ [root@hadoop002 zookeeper]# echo 2 > data/myid [root@hadoop003 zookeeper]# echo 3 > data/myid ###切记不可echo 3>data/myid,将>前后空格保留,否则无法将 3 写入myid文件 4.启动Zookeeper集群 [root@hadoop001 bin]# ./zkServer.sh start [root@hadoop002 bin]# ./zkServer.sh start [root@hadoop003 bin]# ./zkServer.sh start 5.查看Zookeeper状态 [root@hadoop001 bin]# ./zkServer.sh status JMX enabled by default Using config: /opt/software/zookeeper/bin/../conf/zoo.cfg Mode: follower [root@hadoop002 bin]# ./zkServer.sh status JMX enabled by default Using config: /opt/software/zookeeper/bin/../conf/zoo.cfg Mode: leader [root@hadoop002 bin]# [root@hadoop003 bin]# ./zkServer.sh status JMX enabled by default Using config: /opt/software/zookeeper/bin/../conf/zoo.cfg Mode: follower [root@hadoop003 bin]# 6.进入客户端 [root@hadoop001 bin]# ./zkCli.sh [zk: localhost:2181(CONNECTED) 0] ls / [zookeeper, yarn-leader-election, hadoop-ha, rmstore] [zk: localhost:2181(CONNECTED) 1] [zk: localhost:2181(CONNECTED) 1] help ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port [zk: localhost:2181(CONNECTED) 2] 二.Kafka部署 1.解压并配置Scala [root@hadoop001 software]# tar -xzvf scala-2.11.8.tgz [root@hadoop001 software]# chown -R root:root scala-2.11.8 [root@hadoop001 software]# ln -s scala-2.11.8 scala #环境变量 [root@hadoop001 software]# vi /etc/profile export SCALA_HOME=/opt/software/scala export PATH=$SCALA_HOME/bin:$PATH [root@hadoop001 software]# source /etc/profile [root@hadoop001 software]# scala Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45). Type in expressions for evaluation. Or try :help. 2.下载基于Scala 2.11的kafka版本为0.10.0.1 [root@hadoop001 software]# tar -xzvf kafka_2.11-0.10.0.1.tgz [root@hadoop001 software]# ln -s kafka_2.11-0.10.0.1 kafka [root@hadoop001 software]# 3.创建logs目录和修改server.properties [root@hadoop001 software]# cd kafka [root@hadoop001 kafka]# mkdir logs [root@hadoop001 kafka]# cd config/ [root@hadoop001 config]# vi server.properties broker.id=1 port=9092 host.name=192.168.137.141 log.dirs=/opt/software/kafka/logs zookeeper.connect=192.168.137.141:2181,192.168.137.142:2181,192.168.137.143:2181/kafka 4.环境变量 [root@hadoop001 config]# vi /etc/profile export KAFKA_HOME=/opt/software/kafka export PATH=$KAFKA_HOME/bin:$PATH [root@hadoop001 config]# source /etc/profile 5.另外两台机器如上操作 6.启动/停止 [root@sht-sgmhadoopdn-01 kafka]# nohup kafka-server-start.sh config/server.properties & [root@sht-sgmhadoopdn-02 kafka]# nohup kafka-server-start.sh config/server.properties & [root@sht-sgmhadoopdn-03 kafka]# nohup kafka-server-start.sh config/server.properties & ###停止 bin/kafka-server-stop.sh --------------------------------------------------------------------------------------------------------------------------------------------- 7.模拟实验1 创建test topic bin/kafka-topics.sh --create \ --zookeeper 192.168.137.141:2181,192.168.137.142:2181,192.168.137.143:2181/kafka \ --replication-factor 3 --partitions 3 --topic test 在一个终端,启动Producer,并向我们上面创建的名称为my-replicated-topic5的Topic中生产消息,执行如下脚本: bin/kafka-console-producer.sh \ --broker-list 192.168.137.141:9092,192.168.137.142:9092,192.168.137.143:9092 --topic test 在另一个终端,启动Consumer,并订阅我们上面创建的名称为my-replicated-topic5的Topic中生产的消息,执行如下脚本: bin/kafka-console-consumer.sh \ --zookeeper 192.168.137.141:2181,192.168.137.142:2181,192.168.137.143:2181/kafka \ --from-beginning --topic test 可以在Producer终端上输入字符串消息行,就可以在Consumer终端上看到消费者消费的消息内容。 ------------------------------

优秀的个人博客,低调大师

Linux命令之curl

获取http请求头信息,-I 只打印response header, -i 打印response header和body curl -I "http://www.jouypub.com" curl -i "http://www.jouypub.com" 使用代理 curl -x 1.193.162.91:8000 http://www.jouypub.com curl -x 1.193.162.91:8000 --connect-timeout 3 --max-time 10 http://www.jouypub.com 上传文件curl -F "filename=@/home/test/file.tar.gz" http://localhost/action.php -F参数,curl就会以 multipart/form-data 的方式发送POST请求。-F参数以name=value的方式来指定参数内容,如果值是一个文件,则需要以name=@file的方式来指定。 选项 -d 以post方式请求 -H 请求时添加header,冒号前后不能有空格 curl -H "name=abc" http://www.jouypub.com -o 结果输出到指定文件 curl -o /dev/null http://www.jouypub.com -m/--max-time 指定最大允许时间,单位秒 curl -m 20 http://www.jouypub.com --connect-timeout 连接超时,单位秒 curl --connect-timeout 5 http://www.jouypub.com

优秀的个人博客,低调大师

code push 相关命令

code-push login 登陆 code-push logout 注销 code-push access-key ls 列出登陆的token code-push access-key rm <accessKye> 删除某个 access-key 输入code-push app add <appName>即可完成注册。 code-push app add 在账号里面添加一个新的app code-push app remove 或者 rm 在账号里移除一个app code-push app rename 重命名一个存在app code-push app list 或则 ls 列出账号下面的所有app code-push app transfer 把app的所有权转移到另外一个账号 code-push deployment -k ls <appName>获取 部署秘钥 code-push deployment ls ckhsAndroid -k code-push release-react <appName> <platform> -t 版本 -d 环境 --des 描述 -m true (强制更新) code-push release-react MyApp-iOS ios --t 1.0.0 --dev false --d Production --des "1.优化操作流程" --m true 其中参数--t为二进制(.ipa与apk)安装包的的版本;--dev为是否启用开发者模式(默认为false);--d是要发布更新的环境分Production与Staging(默认为Staging);--des为更新说明;--m 是强制更新。 关于code-push release-react更多可选的参数,可以在终端输入code-push release-react进行查看。 script脚本 "codepush-ios": "code-push release-react ckhsIOS ios -m true", "codepush-android": "code-push release-react ckhsAndroid android -m true", "codepush-product-ios":"code-push release-react ckhsIOS ios --d Production --m true", "codepush-product-android":"code-push release-react ckhsAndroid android --d Production -m true", 更新规则 1> CodePush部署版本 > App版本 更新可用,但当前版本比运行版本高。不作更新 2> CodePush部署版本 < App版本 不执行更新处理 3> CodePush部署版本 == App版本 自动下载更新,并根据加载策略加载最新bundle 回滚 当部署的版本不同时,不能跨版本回滚。 例如:CodePush历史版本中为2.10.1,此时发布2.10.2版本。当从2.10.2发起回滚操作回到2.10.1时,是不可行的。 问题探讨: 用户安装版本为1.0.1 迭代更新上传 版本 1.1.0 上传到应用市场新的包 针对1.0.1做更新,1.1.0 运行版本大于发布的热更新版本 不做更新,1.0.1的用户可进行更新。 问题来了:当版本迭代到1.2.0时 每次迭代都要针对1.0.1 的用户,1.1.0的用户?如果发了n多个版本都要针对安装不同的用户版本去发布更新内容吗? 测试下之后:

优秀的个人博客,低调大师

linux目录操作命令

目录的创建 比如我要在根目录下创建lives/human/man/programmer/目录,怎么创建? 阶梯式创建目录 ---mkdir 首先创建lives,其次创建human,进而创建man,然后创建programmer: [root@localhost /]# mkdir /lives [root@localhost /]# mkdir /lives/human [root@localhost /]# mkdir /lives/human/man [root@localhost /]# mkdir /lives/human/man/programmer 是不是有些繁琐?是!但是,这样创建目录,可以控制每一层目录的创建符合你的预期,错了,立马可以纠正。 跳跃式创建目录 ---mkdir -p 比如你想在/lives/human/下创建woman/consumer目录,问题是此时并没有woman目录,只有在woman的基础上才能创建onsumer, 如果强制创建,你将会看到: [root@localhost /]# mkdir /lives/human/woman/consumer mkdir: 无法创建目录"/lives/human/woman/consumer": 没有那个文件或目录 那么如何解决级联创建目录? [root@localhost /]# mkdir -p /lives/human/woman/consumer 此时的目录结构如下: [root@localhost /]# tree lives/ lives/ └── human ├── man │ ├── programmer │ └── scientist └── woman └── consumer 目录的切换 切换到父目录 切换到上一次目录 切换到当前用户主文件夹 切换到父目录:cd .. [root@localhost programmer]# pwd /lives/human/man/programmer [root@localhost programmer]# cd .. [root@localhost man]# pwd /lives/human/man 切换到上一次目录:cd - [root@localhost man]# pwd /lives/human/man [root@localhost man]# cd - /lives/human/man/programmer [root@localhost programmer]# 切换到当前用户主文件夹: cd ~或者 cd [root@localhost programmer]# pwd /lives/human/man/programmer [root@localhost programmer]# cd [root@localhost ~]# pwd /root 目录的删除 基本删除:删除的目录为空,被删除的目录下不能有目录或者文件 [root@localhost human]# pwd /lives/human [root@localhost human]# rmdir man rmdir: 删除 "man" 失败: 目录非空 [root@localhost man]# pwd /lives/human/man [root@localhost man]# rmdir scientist/ [root@localhost man]# ls -l 总用量 4 drwxr-xr-x. 2 root root 4096 5月 10 20:04 programmer 级联删除:无论目录是否为空,一概删除 [root@localhost human]# tree . ├── man │ └── programmer └── woman └── consumer 删除woman下的consumer, [root@localhost human]# rm -r woman/ rm:是否进入目录"woman"? 每删除一个非空目录都要提醒,很讨厌,希望不提醒,可以这样删: [root@localhost human]# tree . ├── man │ └── programmer └── woman └── consumer 4 directories, 0 files [root@localhost human]# rm -f -r woman/ [root@localhost human]# tree . └── man └── programmer 2 directories, 0 files

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册