💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## 前言 习惯了linux的指令操作,在使用windows总是不舒服,于是我们可以在windows上安装cygwin来运行linux上的shell脚本。<br/> Cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件。 Cygwin就是一个windows软件,该软件就是在windows上仿真linux操作系统 ,简言之,cygwin是一个在windows平台上运行的 linux模拟环境,使用一个Dll(动态链接库)来实现 这样,我们可以开发出Cygwin下的UNIX工具,使用这个DLL运行在Windows下。 ## 下载安装cygwin Cygwin下载的是一个安装器,可到其[官网](http://www.cygwin.com/)下载。 1、双击安装包 ![](https://img.kancloud.cn/be/e9/bee930c87b35db1cc4e304da0788e9cf_781x168.png) ![](https://img.kancloud.cn/c7/93/c7935731ea4a3ebef80c89d714f959f7_719x477.png) 2、三种安装模式 ①Install from Internet,这种模式直接从Internet安装,适合网速较快的情况; ②Download Without Installing,这种模式只从网上下载Cygwin的组件包,但不安装; ③Install from Local Directory,这种模式与上面第二种模式对应,当你的Cygwin组件包已经下载到本地,则可以使用此模式从本地安装Cygwin<br/> ***说明:当你安装过,在执行该安装程序可以选择本地安装,然后添加需要扩展的命令。*** 第一次安装使用第一种方式进行安装 ![](https://img.kancloud.cn/07/18/07189d9bf14222a637f1310371a1e343_715x480.png) 3、选择安装路径 ![](https://img.kancloud.cn/3d/f8/3df8ec1ece62d46b1c69353f617c39a5_725x486.png) 4、在下载的同时,Cygwin组件也保存到了本地,以便以后能够再次安装,这一步选择安装过程中从网上下载的Cygwin组件包的保存位置 ![](https://img.kancloud.cn/b5/f5/b5f59122be4c6bcf89b810ed62abcc55_726x480.png) 5、这一步选择连接的方式,选择你的连接方式,然后点击下一步,会出现选择下载站点的对话框,如下图所示 ![](https://img.kancloud.cn/20/c0/20c0be1da89c7573d5288100aaa4bdb5_720x481.png) ①Use System Proxy Settings 使用系统的代理设置 ②Direct Connection 一般多数用户都是这种直接连接的网络,所以都是直接使用默认设置即可 ③Use HTTP/FTP Proxy 使用HTTP或FTP类型的代理。如果有需要,自己选择此项后,设置对应的代理地址和端口,即可 6、选择下载站点 不同的镜像存放了不同的包,为了获得最快的下载速度,我们可以添加网易开源镜像`http://mirrors.163.com/cygwin/ `或者 阿里云镜像`http://mirrors.aliyun.com/cygwin/` ![](https://img.kancloud.cn/6b/16/6b16ff70a7365b4b317fa7bfe4fbe51c_726x480.png) 7、开始加载 ![](https://img.kancloud.cn/11/b0/11b05eccc816f79c4b1351c0073d125f_644x494.png) 8、选择需要下载安装的组件包 此处,对于安装Cygwin来说,就是安装各种各样的模块而已。最核心的,记住一定要安装Devel这个部分的模块,其中包含了各种开发所用到的工具或模块 展开devel ![](https://img.kancloud.cn/16/c3/16c3cd8ac4c47b377928d1d54f99da92_630x492.png) ***下面推荐推几个组件*** * fish:一个shell,具有良好的交互提示 * lynx:命令安装组件的必须工具,强烈推荐安装此项 组件可以在search框输入后搜索,然后选中组件,在new列双击,当看到版本号后,安装就会将此组件安装上。 9、确认改变,进行安装 ![](https://img.kancloud.cn/af/01/af01807d48f97dc1011c193694d6c3fe_612x470.png) ![](https://img.kancloud.cn/d5/8f/d58fb045e58eb55dbe52260ffb7f44d7_630x484.png) 10.添加环境变量 将`cygwin安装目录/bin`添加到系统环境变量,方便之后在其他终端调用相关命令。 ## 配置cygwin的默认shell 当我们没配置fish shell,使用默认的shell时我们打开`cygwin`的终端是这样的 ![](https://img.kancloud.cn/5e/62/5e62239240556e91af506969d01f0176_1162x802.png) ![](https://img.kancloud.cn/33/c3/33c323ec8f3d946646e4a1077f4b5232_1155x344.png) <br/> 前面我们安装了fish shell,现在我们要把fish shell设置为我们默认的shell,我们在打开的`cygwin`中连续输入以下几个命令即可: ```bash 1. cd /etc 2. echo "fish" >> profile ``` 然后我们重启`cygwin`应用即可。<br/> 配置好fish后我们是这样的 ![](https://img.kancloud.cn/a2/3e/a23e1719c746fa7337998c5db940f239_1162x790.png) 提示符会显示一些类容,包括当前路径 当你输入命令式,会根据你输入命令的历史提示你完整的命令,你可以使用键盘的`->`(右方向键)将提示的命令补充完整 ![](https://img.kancloud.cn/37/2b/372b5d5432cec4ef61ebaff34559137b_1154x791.png) ## 配置apt-cyg 工具实现命令安装新的软件和常见的命令 cygwin作为windows下模拟Linux环境的的工具,使得我们能在windows下非常方便的使用Linux的命令和工具,下面讲讲怎样在cygwin添加不支持的命令。<br/> 1.安装cygwin工具的安装工具`apt-cyg`,此工具类似于Ubuntu下的`apt-get`工具,所有的工具都是通过他安装,用过Ubuntu的人应该都知道。 由于刚开始安装cygwin,有很多命令没有安装,这里采用手动配置该工具<br/> step1、下载apt-cyg的源码 浏览器打开[apt-cyg源码](https://gitee.com/yuan_hp/apt-cyg) ![](https://img.kancloud.cn/75/7c/757c44aae2e3b0b26ce6d7f3c66ec9a3_1411x830.png) ![](https://img.kancloud.cn/c6/14/c614e176c7da486c673b1d6058ccfd14_1338x771.png) <br/> step2、解压后将apt-cyg文件拷贝到`cygwin安装目录/usr/local/bin`目录下 你可以使用命令,也可以直接使用图形化的操作进行拷贝。 使用命令拷贝的方法如下: ```bash cd 你刚刚下载文件的保存路径 cp apt-cyg /usr/local/bin/ ``` 然后你就可以看看`apt-cyg`命令是否可以了,在`cygwin`的终端输入`apt-cyg --help`,如果出现下面这样的结果就表示可以了。 ![](https://img.kancloud.cn/4b/09/4b0998fe13094b85279c22a0c3c70247_1156x793.png) 然后你就可以使用`apt-cyg`来安装一些组件,比如安装`python3`组件,使用`apt-cyg install python3`即可完成。 依据个人习惯,可以安装一些组件,比如你可以使用命令安装vim,wget,tree,openssh: ```bash apt-cyg install vim wget tree openssh ``` ## 一些配置文件 * vim的配置文件路径`$HOME/.vimrc` * fish配置文件是在`$HOME/.config/fish/`这个文件夹下面 当第一次安装的时候,上述文件可能不存在,需要我们自己创建。 为了款速配置,我放出自己的配置文件。 ### vimrc配置文件的类容 ```vim "设置 backspace的工作方式 set nocompatible set backspace=indent,eol,start "显示行号 set nu "忽略大小写 set ignorecase "开启文件类型检测 filetype plugin indent on "不忽略大小写 "set noignorecase "开启高亮 syntax on "显示光标当前位置 set ruler "启用鼠标 set mouse=a "显示状态栏 set laststatus=2 "============ "设置缩进" "============ "set smartindent " 开启新行时使用智能自动缩进 "set cindent " 按照C语言语法自动缩进 set shiftwidth=4 " 配置缩进空格数为4 set tabstop=4 " 配置TAB键移动距离为4个空格 set autoindent "自动对齐 "======== "括号匹配" "======== "set showmatch " 插入括号时,短暂地跳转到匹配的对应括号 "set matchtime=2 " 短暂跳转到匹配括号的时间 "本文件配置vim新建文件时自动生成的内容" "=========== "配置新建文件的模板(自动化完成) "=========== "==================================make file============================================" "cpp文件自动生成模板" autocmd BufNewFile *.cpp exec ":call SetTitle()" func SetTitle() call setline(1,"/**") call append(line("."), " * Copyright (C) ".strftime("%Y")." All rights reserved.") call append(line(".")+1, " *") call append(line(".")+2, " * FileName :".expand("%:t")) call append(line(".")+3, " * Author :hpy") call append(line(".")+4, " * Email :yuan_hp@qq.com") call append(line(".")+5, " * Date :".strftime("%Y年%m月%d日")) call append(line(".")+6, " * Description :") call append(line(".")+7, " */") call append(line(".")+8, "") endfunc "自动将光标定位到末尾" "autocmd BufNewFile * normal G" "==============================================================================" "配置shell脚本新建时的模板" autocmd BufNewFile *.sh exec ":call SetShTitle()" func SetShTitle() call setline(1,"#!/usr/bin/env bash") call append(line("."), "#-------------------------------------------------------") call append(line(".")+1, "# FileName : ".expand("%:t")) call append(line(".")+2, "# Author :hpy") call append(line(".")+3, "# Date :".strftime("%Y年%m月%d日")) call append(line(".")+4, "# Description :") call append(line(".")+5, "#-------------------------------------------------------") call append(line(".")+6, "") endfunc "==============================================================================" "配置verilog脚本新建时的模板" autocmd BufNewFile *.v exec ":call SetVTitle()" func SetVTitle() call setline(1,"`timescale 1ns / 1ps") call append(line("."), "// ********************************************************************") call append(line(".")+1, "// FileName : ".expand("%:t")) call append(line(".")+2, "// Author :hpy") call append(line(".")+3, "// Email :yuan_hp@qq.com") call append(line(".")+4, "// Date :".strftime("%Y年%m月%d日")) call append(line(".")+5, "// Description :") call append(line(".")+6, "// --------------------------------------------------------------------") call append(line(".")+7, "module " .expand("%:r") ."(") call append(line(".")+8, " input clk, ") call append(line(".")+9, " input rst_n") call append(line(".")+10, ");") call append(line(".")+11, " ") call append(line(".")+12, "always@(posedge clk or negedge rst_n)") call append(line(".")+13, "begin") call append(line(".")+14, " if(!rst_n)begin") call append(line(".")+15, " ") call append(line(".")+16, " end ") call append(line(".")+17, " else begin ") call append(line(".")+18, " ") call append(line(".")+19, " end ") call append(line(".")+20, "end") call append(line(".")+21, " ") call append(line(".")+22, "endmodule") endfunc "==============================================================================" "配置tcl脚本新建时的模板" autocmd BufNewFile *.tcl exec ":call SetTclTitle()" func SetTclTitle() call setline(1,"#!/usr/bin/env tclsh") call append(line("."), "#-------------------------------------------------------") call append(line(".")+1, "# FileName : ".expand("%:t")) call append(line(".")+2, "# Author :hpy") call append(line(".")+3, "# Email :yuan_hp@qq.com") call append(line(".")+4, "# Date :".strftime("%Y年%m月%d日")) call append(line(".")+5, "# Description :") call append(line(".")+6, "#-------------------------------------------------------") call append(line(".")+7, "") endfunc "==============================================================================" "配置python3脚本新建时的模板" autocmd BufNewFile *.py exec ":call SetPyTitle()" func SetPyTitle() call setline(1,"#!/usr/bin/env python3") call append(line("."), "# -- coding:utf-8 --") call append(line(".")+1, "#-------------------------------------------------------") call append(line(".")+2, "# FileName : ".expand("%:t")) call append(line(".")+3, "# Author :hpy") call append(line(".")+4, "# Email :yuan_hp@qq.com") call append(line(".")+5, "# Date :".strftime("%Y年%m月%d日")) call append(line(".")+6, "# Description :") call append(line(".")+7, "#-------------------------------------------------------") call append(line(".")+8, "") endfunc "自动将光标定位到末尾" autocmd BufNewFile * normal G "============================key=======================================" "===========" "配置markdown编辑时的快捷键" "===========" autocmd Filetype markdown inoremap // <Esc>/<++><CR>:nohlsearch<CR>c4l "加粗" autocmd Filetype markdown inoremap /b **** <++><Esc>F*hi "删除线" autocmd Filetype markdown inoremap /d ~~~~ <++><Esc>F~hi "分割线" autocmd Filetype markdown inoremap /- <Enter>---<Enter> "添加代码块" autocmd Filetype markdown inoremap /[ ```<Enter><++><Enter>```<Enter><Enter> "添加行内代码" autocmd Filetype markdown inoremap /e ``<++><Esc>F`i "文字下划线" autocmd Filetype markdown inoremap /u <u></u><++><Esc>F<F<i "换行实现 autocmd Filetype markdown inoremap /<Enter> <Space><Space><Space><br/><Space><Space><Enter><Enter> "自动填充3个空格 autocmd Filetype markdown inoremap /<Space> <Space><Space><Space> "上标 autocmd Filetype markdown inoremap /6 <sup></sup><++><Esc>F<F<i "下标 autocmd Filetype markdown inoremap /7 <sub></sub><++><Esc>F<F<i "链接 autocmd Filetype markdown inoremap /h [](<++>)<Esc>F]i "/ 生成" autocmd Filetype markdown inoremap /z / "双引号" autocmd Filetype markdown inoremap " ""<LEFT> "花括号" autocmd Filetype markdown inoremap { {}<LEFT> "小括号" autocmd Filetype markdown inoremap ( ()<LEFT> func! Mdgoto() if expand('%:t') != 'SUMMARY.md' return endif let currentLine = getline(".") let len = strlen(currentLine) "echo currentLine let a1= stridx(currentLine, '(') + 1 let a2= stridx(currentLine, ')') - 1 let a3 = a2-a1+1 if a3 > 0 let sub=strpart(currentLine,a1,a3) endif exec "vsp " .sub vertical res +200 endfunction autocmd Filetype markdown map <C-]> :call Mdgoto()<CR>" autocmd Filetype markdown map <C-q> :wq<CR>" "调出自定义输入快捷键帮助 autocmd Filetype markdown inoremap /,, <Esc>:!/home/yhp/.vim/mconf/keyhelp markdown<CR><Esc>i "===================================================================" "===========" "配置shell编辑时的快捷键" "===========" autocmd Filetype sh inoremap // <Esc>/<++><CR>:nohlsearch<CR>c4l "加粗" autocmd Filetype sh inoremap /e echo "<++>"<++><Esc>/<++><CR>:nohlsearch<CR>c4l "引用" autocmd Filetype sh inoremap /y $() <++><Esc>F)i "算数运算" autocmd Filetype sh inoremap /a $[]<++><Esc>F]i "if流程" autocmd Filetype sh inoremap /i if [ ];then<++><Esc>F]i "case流程" autocmd Filetype sh inoremap /c <Esc>:r !echo -e 'case <++> in\n <++>)<++>;;\nesac'<Esc>/<++><CR>:nohlsearch<CR>c4l "/ 生成" autocmd Filetype sh inoremap /z / "单引号" autocmd Filetype sh inoremap ' ''<LEFT> "双引号" autocmd Filetype sh inoremap " ""<LEFT> "花括号" autocmd Filetype sh inoremap { {}<LEFT> "小括号" autocmd Filetype sh inoremap ( ()<LEFT> "中括号" autocmd Filetype sh inoremap [ []<LEFT> "字符串替换" autocmd Filetype sh inoremap /t ${/<++>/<++>}<++><Esc>F/F/i "调出自定义输入快捷键帮助 autocmd Filetype sh inoremap /,, <Esc>:!/home/yhp/.vim/mconf/keyhelp shell<CR><Esc>i "===================================================================" "===========" "配置verilog编辑时的快捷键" "===========" autocmd Filetype verilog inoremap // <Esc>/<++><CR>:nohlsearch<CR>c4l "always语句" "autocmd Filetype verilog inoremap /a always@(<++>)<Enter>begin <Enter><Tab><++> end <Esc>/<++><CR>:nohlsearch<CR>c4l autocmd Filetype verilog inoremap /a <Esc>:r !echo -e 'always@(<++>)\nbegin\n <++>\nend'<CR><Esc>/<++><CR>:nohlsearch<CR>c4l "if 语句" autocmd Filetype verilog inoremap /i if()begin<++>end<Esc>F)i "else 语句" autocmd Filetype verilog inoremap /e else beginend<Esc>Fei "initial 语句" "autocmd Filetype verilog inoremap initial initial beginend<Esc>Fei "assign 语句" autocmd Filetype verilog inoremap /= assign = <++><Esc>F=i "module例化 设置" autocmd Filetype verilog inoremap /. .(<++>)<++><Esc>F(i "monitor 语句" autocmd Filetype verilog inoremap /m $monitor("",<++>)<++><Esc>F"i "display 语句" autocmd Filetype verilog inoremap /dd $display()<++><Esc>F)i "行注释 语句" autocmd Filetype verilog inoremap /z / "parameter 语句" autocmd Filetype verilog inoremap /p parameter <++> = <++>;<Esc>/<++><CR>:nohlsearch<CR>c4l "localparam 语句" autocmd Filetype verilog inoremap /l localparam <++> = <++>;<Esc>/<++><CR>:nohlsearch<CR>c4l "reg 语句" autocmd Filetype verilog inoremap /r reg[ : 0 ] <++><Esc>F:i "wire 语句" autocmd Filetype verilog inoremap /w wire[ : 0 ] <++><Esc>F:i "常量 语句" autocmd Filetype verilog inoremap /d <++>'d<++><Esc>/<++><CR>:nohlsearch<CR>c4l "case 语句" autocmd Filetype verilog inoremap /c case()<++>endcase<Esc>F)i "begin 语句" autocmd Filetype verilog inoremap /b beginend<Esc>Fei "? : 语句" autocmd Filetype verilog inoremap /s ? <++> : <++><Esc>F?i "function 语句" autocmd Filetype verilog inoremap /f <Esc>:r !echo -e 'function [ <++> : 0 ]<++>;\n <++>\nendfunction'<CR><Esc>/<++><CR>:nohlsearch<CR>c4l "中括号" autocmd Filetype verilog inoremap [ []<LEFT> "大括号" autocmd Filetype verilog inoremap { {}<LEFT> "小括号" autocmd Filetype verilog inoremap ( ()<LEFT> "调出自定义输入快捷键帮助 autocmd Filetype verilog inoremap /,, <Esc>:!~/.vim/mconf/keyhelp verilog<CR><Esc>i "===================================================================" "===========" "配置 python 编辑时的快捷键" "===========" autocmd Filetype python inoremap // <Esc>/<++><CR>:nohlsearch<CR>c4l "print 语句" autocmd Filetype python inoremap /p print()<++><Esc>F)i "多行注释" autocmd Filetype python inoremap /n '''<++>'''<++><Esc>/<++><CR>:nohlsearch<CR>c4l "if语句" autocmd Filetype python inoremap if if :<++><Esc>F:i "else语句" autocmd Filetype python inoremap else else: "elif语句" autocmd Filetype python inoremap elif elif :<++><Esc>F:i "while 语句" autocmd Filetype python inoremap while while :<++><Esc>F:i "for 语句" autocmd Filetype python inoremap for for <++> in <++> :<++><Esc>/<++><CR>:nohlsearch<CR>c4l "def 函数语句" autocmd Filetype python inoremap def def () :<++><Esc>F(i "input 语句" autocmd Filetype python inoremap input input()<++><Esc>F)i "中括号" autocmd Filetype python inoremap [ []<LEFT> "大括号" autocmd Filetype python inoremap { {}<LEFT> "小括号" autocmd Filetype python inoremap ( ()<LEFT> "单引号" autocmd Filetype python inoremap ' ''<LEFT> "双引号" autocmd Filetype python inoremap " ""<LEFT> ``` 使用时只需把上面的类容拷贝到`$HOME/.vimrc`文件即可配置vim编辑器。 ### fish shell配置 上面提过fish shell的配置路径在`$HOME/.config/fish/`文件夹下,以下我将简要介绍一些一些配置文件。 当不存在上述路径时,我们使用命令`mkdir -p $HOME/.config/fish`进行创建,然后我们使用`cd $HOME/.config/fish`切换到该路径下。 ![](https://img.kancloud.cn/8b/d7/8bd7eec4d690dc91ab7a4951588d19ba_1152x790.png) <br/> 然后我们新建配置文件`config.fish`,这个文件将会是配置fish shell的文件。使用命令`vim config.fish`, 文件内容可根据自己的需要进行配置,我的文件内容如下所示: ![](https://img.kancloud.cn/e7/8c/e78cf99c315f98645755ff274d3f64e7_1148x788.png) 上面的函数还可以单独写成一个文件,在当前路径下建立`functions`文件夹,里面放置我们的函数,里面的函数将会自动发的成为一条fish支持的命令。但是有一定的格式要求,就是文件名要求`命令名.fish`,文件中的函数名称要是`命令名`。比如我实现一个`web`命令,还命令可以快速打开一些指定网页,那么这个文件名就要是`web.fish`,我自己的web.fish的文件内容如下所示: ```bash #!/usr/bin/env fish #UFUNCTION=命令直接打开指定web页面 #-------路径存储的函数----------- function cat_web_list printf "\ #-h 显示帮助 #blbl 打开哔哩哔哩 https://www.bilibili.com/ #github 打开个人github页面 https://github.com/yuan-hp #gitee 打开gitee个人主页 https://gitee.com/ #kancloud 打开看云文档 https://www.kancloud.cn/dashboard #pon 打开ProcessOn在线作图页面 https://www.processon.com/diagrams #idata 打开iData文献搜索页面 https://www.cn-ki.net/ #zh 打开知乎 https://www.zhihu.com/ " end function web set cmd_name "web" #设计的指令名称 set real_cmd "open" #真正执行的指令 set data_src "cat_web_list" #数据来源 set cnt (count $argv) if test $cnt -gt 0 set CMD_IN $argv else echo "使用 $cmd_name -h 查看帮助!" return end switch $CMD_IN case "-h" echo "Usage: $cmd_name [option] 快速打开一些网页" echo cat_web_list | awk '{gsub(/#/, "");print $1,$2}' | column -s \ -t echo return case "*" set find_id "$data_src | awk '/#$argv/{print \$3}' " #echo $find_id set find_id (eval $find_id) if test -n "$find_id" eval "$real_cmd $find_id" return end echo "使用 $cmd_name -h 查看帮助!" return end end ``` 然后我们重新打开cygwin的终端输入`web -h`可以查看该命令是否成功! ![](https://img.kancloud.cn/d0/50/d0500daa191b49135ab2d0a5cff320ab_1162x431.png) 那么我现在打开bilibil就可以在cygwin的终端输入`web blbl`就可直接打开bilibili的网页 ![](https://img.kancloud.cn/8c/58/8c581f6f75008bdfaac1a066b854d222_2257x1008.png) 这样我们就能实现自定义的一些命令。 关于fish shell的使用,就简单介绍到这里,详细了解可以到fish shell的官网进行学习, [fish shell官网](http://fishshell.com/) ## 写一个shell脚本执行试试 如下所示: ![](https://img.kancloud.cn/ec/c0/ecc0044af1008ade3da37e790daa33d4_1166x794.png) ## 结束语 通过配置cygwin,我们可以获得使用linux的一种体验,上面的介绍对其使用做了简单的介绍,很多的功能需要自己慢慢琢磨。