工欲善其事,必先利其器。一个强大的开发环境可以大大提高工作效率。估计大家经常用的IDE工具如SourceInsight,Notepad++,VScode等等。SourceInsight属于收费软件,其实费用并不贵。Notepad++和VScode均属于开源免费软件。其实IDE工具使用完全看个人习惯与爱好。本人SOC和MCU都开发过,基本基于ARM架构。所以平常开发工具和环境基本实在Ubuntu/Linux环境下。使用的IDE环境自然是Vim. 个人习惯基本都是Linux的开发习惯。但是日常工作办公使用windows的Laptop居多。那如何可以在windows下搭建跟Linux下一样的开发IDE环境呢?

其实在windows下类Unix的工具有三个。

  • Git-2.33.0.2-64-bit.exe 最新的版本你可以到Git官网下载。因为简化的MINGW64。
  • Cygwin 是运行于Windows平台的POSIX”子系统“,提供Windows下的类Unix环境,并提供将部分Linux应用”移植“到Windows平台的开发环境的一套软件。
  • msys2-installer MSYS是用于辅助Windows版MinGW进行命令行开发的配套软件包,提供了部分Unix工具以使得MinGW的工具使用起来方便一些。整套MSYS以及MinGW,主要一基本Linux工具为主,大小在200M左右,并没有多少扩展能力。

总概括MinGW和Cygwin的主要区别:MinGW设计思想是“最小化支持”,Cygwin是最大可能的模拟一个Linux环境。

下面介绍三种工具搭建vim+ctags+cscope的方法。基本可以理解Cygwin和MinGW的自动安装版,Git-bash类似于绿色安装版。

1. Git-bash安装方法

首先根据安装教程Windows系统Git安装教程(详解Git安装过程),安装好Git。

Git-bash是一个简易版的mingw64环境,shell为bash,基本就和Linux一样了,但它没有携带gcc,,make,cmake,ctags 和 cscope等程序。

gcc/make安装

从http://www.equation.com/servlet/equation.cmd?fa=fortra 下载gcc套件,gcc套件内包含make,所以一并就装了这俩。

解压gcc套件,比如默认按照在了个人账户目录内为 C:\Users\Westo\gcc ,那好,打开这个文件

C:\Program Files\Git\etc\profile.d\env.sh

添加一行:

export PATH="$HOME/gcc/bin:$PATH"

再次打开git-bash,gcc套件内工具就能使用了,make自然包括。

仅make安装

如果用不到gcc,只想使用下make。那从 http://www.equation.com/servlet/equation.cmd?fa=make 下载make程序即可,同样,将make程序直接放到 C:\Program Files\Git\mingw64\bin 内就可以了。

cmake安装

从 https://cmake.org/download/ 下载相应的安装包,仿前,安装后打开这个文件

C:\Program Files\Git\etc\profile.d\env.sh

再添加一行:

export PATH="/c/Program Files/CMake/bin:$PATH"

cscope安装

从https://code.google.com/archive/p/cscope-win32/downloads 下载相应的压缩包。同样,将cscope.exe程序直接放到 C:\Program Files\Git\mingw64\bin 内就可以了。

ctags安装

从http://ctags.sourceforge.net/ 下载ctags58.zip之后。同样,将ctags.exe程序直接放到 C:\Program Files\Git\mingw64\bin 内就可以了。

2. Cygwin64安装方法

Cygwin的安装很简单,但是选择正确的软件包可能很棘手。 我们建议您按照Cygwin主页上的说明进行操作,这是我使用的步骤的摘要: 1.下载并运行/安装 setup-x86_64.exe (64-bit installation)。

2.选择“从Internet安装”作为下载源。

我这里选择在D盘根目录下。

下面是你下载的软件包存放在哪里,我这里是把我的安装程序和软件包放在同一个文件夹里

选择下载代理。

3.安装下面列出的软件包。 Cygwin Devel软件包要安装:

  • autobuild
  • autoconf
  • autoconf-archive
  • automake
  • dos2unix
  • git
  • gcc-core
  • gcc-g++
  • wget
  • vim
  • ctags
  • cscope
  • make
  • cmake
  • pkg-config
  • usbutils
  • libtool
  • libusb1.0
  • libusb1.0-devel

查看已安装的软件包:

简单举例git软件包截图:

其他的软件包操作类型。

  1. 让安装程序在桌面上创建一个Cygwin终端,然后在安装程序完成后启动终端/shell。

3. MinGW W64安装方法

MinGWW64的安装同样很简单,直接安装msys2-x86_64-latest.exe及其工具组件

a.双击msys2-x86_64-latest.exe,并点击下一步选择安装文件夹在对应的toolchain目录下

然后下一步直到开始安装

b.安装完成后点击完 成退出安装程序

c.进入到“MSYS2 MSYS”命令界面

打开后执行命令pacman -Syu更新系统核心和各种包等,如下面的截图

输入“Y”键开始更新 注意: 更新时会遇到下图的警告,这时一定要点击右上角的×来关闭窗口

关闭窗口时会弹出一个对话框(如下图),点击Y就可以了。

上面的更新没有结束,需要继续更新, 再执行一次pacman -Syu

继续输入“Y”键开始更新。再执行一次pacman -Syu

这样更新就可以顺利结束了, msys2的安装也顺利结束了。

使用下面命令安装所需组件pacman -S mingw-w64-x86_64-gcc make cmake git vim ctags cscope wget pkg-config openssh dos2unix

# pacman -S mingw-w64-x86_64-gcc make cmake git vim ctags cscope wget pkg-config openssh dos2unixwarning: wget-1.21.2-1 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...Packages (59) expat-2.4.3-1  heimdal-7.7.0-3  jsoncpp-1.9.5-1  libarchive-3.5.2-1  librhash-1.4.2-1  libuv-1.42.0-1  mingw-w64-x86_64-binutils-2.37-4  mingw-w64-x86_64-crt-git-9.0.0.6373.5be8fcd83-1  mingw-w64-x86_64-gcc-libs-11.2.0-6  mingw-w64-x86_64-gmp-6.2.1-3mingw-w64-x86_64-headers-git-9.0.0.6373.5be8fcd83-1  mingw-w64-x86_64-isl-0.24-1  mingw-w64-x86_64-libiconv-1.16-2  mingw-w64-x86_64-libwinpthread-git-9.0.0.6373.5be8fcd83-1  mingw-w64-x86_64-mpc-1.2.1-1  mingw-w64-x86_64-mpfr-4.1.0.p13-1mingw-w64-x86_64-windows-default-manifest-6.4-3  mingw-w64-x86_64-winpthreads-git-9.0.0.6373.5be8fcd83-1  mingw-w64-x86_64-zlib-1.2.11-9  mingw-w64-x86_64-zstd-1.5.1-1  perl-Authen-SASL-2.16-2  perl-Clone-0.45-2  perl-Convert-BinHex-1.125-1perl-Encode-Locale-1.05-1  perl-Error-0.17029-1  perl-File-Listing-6.14-1  perl-HTML-Parser-3.76-1  perl-HTML-Tagset-3.20-2  perl-HTTP-Cookies-6.10-1  perl-HTTP-Daemon-6.12-1  perl-HTTP-Date-6.05-1  perl-HTTP-Message-6.35-1  perl-HTTP-Negotiate-6.01-2perl-IO-HTML-1.004-1  perl-IO-Socket-SSL-2.072-1  perl-IO-Stringy-2.113-1  perl-LWP-MediaTypes-6.04-1  perl-MIME-tools-5.509-1  perl-MailTools-2.21-1  perl-Net-HTTP-6.21-1  perl-Net-SMTP-SSL-1.04-1  perl-Net-SSLeay-1.90-1  perl-TermReadKey-2.38-2perl-TimeDate-2.33-1  perl-Try-Tiny-0.31-1  perl-URI-5.10-1  perl-WWW-RobotRules-6.02-2  perl-libwww-6.57-1  cmake-3.22.1-2  cscope-15.9-1  ctags-5.8-2  dos2unix-7.4.2-1  git-2.34.1-1  make-4.3-3  mingw-w64-x86_64-gcc-11.2.0-6  openssh-8.8p1-1pkg-config-0.29.2-4  vim-8.2.3582-1  wget-1.21.2-1Total Download Size:    72.53 MiB
Total Installed Size:  532.69 MiB
Net Upgrade Size:      529.64 MiB:: Proceed with installation? [Y/n] Y

4. Vim插件安装

其实两个cscope_maps.vimtaglist.vim插件完全满足我们日常编写和查阅代码使用。

下面是我常用的.vimrc文件配置。

set wildmenu
set number
set nocompatible
set autoindent
set history=50
set ruler
set showcmd
set incsearch
set ai
set showmatch
set showmode
set hlsearchset t_Co=8
set cino=:0
set cindentcolo ron
syntax on""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" CSCOPE settings for vim
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
" This file contains some boilerplate settings for vim's cscope interface,
" plus some keyboard mappings that I've found useful.
"
" USAGE:
" -- vim 6:     Stick this file in your ~/.vim/plugin directory (or in a
"               'plugin' directory in some other directory that is in your
"               'runtimepath'.
"
" -- vim 5:     Stick this file somewhere and 'source cscope.vim' it from
"               your ~/.vimrc file (or cut and paste it into your .vimrc).
"
" NOTE:
" These key maps use multiple keystrokes (2 or 3 keys).  If you find that vim
" keeps timing you out before you can complete them, try changing your timeout
" settings, as explained below.
"
" Happy cscoping,
"
" Jason Duell       jduell@alumni.princeton.edu     2002/3/7
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" This tests to see if vim was configured with the '--enable-cscope' option
" when it was compiled.  If it wasn't, time to recompile vim... """"""""""""" Standard cscope/vim boilerplate" use both cscope and ctag for 'ctrl-]', ':ta', and 'vim -t'" set cscopetag" check cscope for definition of a symbol before checking ctags: set to 1" if you want the reverse search order.set csto=0" add any cscope database in current directoryif filereadable("cscope.out")cs add cscope.out  "else add the database pointed to by environment variable elseif $CSCOPE_DB != ""cs add $CSCOPE_DBendif" show msg when any other cscope db addedset cscopeverbose  """"""""""""" My cscope/vim key mappings"" The following maps all invoke one of the following cscope search types:""   's'   symbol: find all references to the token under cursor"   'g'   global: find global definition(s) of the token under cursor"   'c'   calls:  find all calls to the function name under cursor"   't'   text:   find all instances of the text under cursor"   'e'   egrep:  egrep search for the word under cursor"   'f'   file:   open the filename under cursor"   'i'   includes: find files that include the filename under cursor"   'd'   called: find functions that function under cursor calls"" Below are three sets of the maps: one set that just jumps to your" search result, one that splits the existing vim window horizontally and" diplays your search result in the new window, and one that does the same" thing, but does a vertical split instead (vim 6 only)."" I've used CTRL-\ and CTRL-@ as the starting keys for these maps, as it's" unlikely that you need their default mappings (CTRL-\'s default use is" as part of CTRL-\ CTRL-N typemap, which basically just does the same" thing as hitting 'escape': CTRL-@ doesn't seem to have any default use)." If you don't like using 'CTRL-@' or CTRL-\, , you can change some or all" of these maps to use other keys.  One likely candidate is 'CTRL-_'" (which also maps to CTRL-/, which is easier to type).  By default it is" used to switch between Hebrew and English keyboard mode."" All of the maps involving the <cfile> macro use '^<cfile>$': this is so" that searches over '#include <time.h>" return only references to" 'time.h', and not 'sys/time.h', etc. (by default cscope will return all" files that contain 'time.h' as part of their name)." To do the first type of search, hit 'CTRL-\', followed by one of the" cscope search types above (s,g,c,t,e,f,i,d).  The result of your cscope" search will be displayed in the current window.  You can use CTRL-T to" go back to where you were before the search.  "nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>   nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR> nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR> nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR> nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR> nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR> nmap <C-\>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>    " Using 'CTRL-spacebar' (intepreted as CTRL-@ by vim) then a search type" makes the vim window split horizontally, with search result displayed in" the new window."" (Note: earlier versions of vim may not have the :scs command, but it" can be simulated roughly via:"    nmap <C-@>s <C-W><C-S> :cs find s <C-R>=expand("<cword>")<CR><CR> nmap <C-@>s :scs find s <C-R>=expand("<cword>")<CR><CR>   nmap <C-@>g :scs find g <C-R>=expand("<cword>")<CR><CR>   nmap <C-@>c :scs find c <C-R>=expand("<cword>")<CR><CR>   nmap <C-@>t :scs find t <C-R>=expand("<cword>")<CR><CR>   nmap <C-@>e :scs find e <C-R>=expand("<cword>")<CR><CR>   nmap <C-@>f :scs find f <C-R>=expand("<cfile>")<CR><CR>   nmap <C-@>i :scs find i ^<C-R>=expand("<cfile>")<CR>$<CR> nmap <C-@>d :scs find d <C-R>=expand("<cword>")<CR><CR>   " Hitting CTRL-space *twice* before the search type does a vertical " split instead of a horizontal one (vim 6 and up only)"" (Note: you may wish to put a 'set splitright' in your .vimrc" if you prefer the new window on the right instead of the leftnmap <C-@><C-@>s :vert scs find s <C-R>=expand("<cword>")<CR><CR>nmap <C-@><C-@>g :vert scs find g <C-R>=expand("<cword>")<CR><CR>nmap <C-@><C-@>c :vert scs find c <C-R>=expand("<cword>")<CR><CR>nmap <C-@><C-@>t :vert scs find t <C-R>=expand("<cword>")<CR><CR>nmap <C-@><C-@>e :vert scs find e <C-R>=expand("<cword>")<CR><CR>nmap <C-@><C-@>f :vert scs find f <C-R>=expand("<cfile>")<CR><CR>    nmap <C-@><C-@>i :vert scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>    nmap <C-@><C-@>d :vert scs find d <C-R>=expand("<cword>")<CR><CR>map  <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>let Tlist_Show_One_File=1let Tlist_Exit_OnlyWindow=1

vim插件大家可以通过访问我的公众号“背包旅行码农”,输入关键字“vim ctags cscope”获取。把.vim目录和.vimrc文件解压到用户目录下。

git-bash对应目录在”/c/Users/用户名”。

Cygwin64对应目录在"/盘符/cygwin64/home/用户名"。

MinGWW64对应目录在"/盘符/msys64/home/用户名"。

Vim常用命令

Vim 键盘图:

====命令模式======字符间==
[NUM] h 向左NUM个字符
[NUM] l 向左NUM个字符
[NUM] j 向左NUM个字符
[NUM] k 向左NUM个字符==单词间==
[NUM] w 下NUM个单词
[NUM] e 当前或下NUM个单词词尾
[NUM] b 当前或上NUM个单词词首==页间==
H   页首
M   页中
L   页底`
zt  当前行移到顶
zz  当前行移到中
zb  当前行移到底==行间、句间、段落间==
^   行首(非空)
0   行首
$   行尾
NUM G   跳到NUM行
G   尾行
gg  首行
(   下一句
)   下一句
{   上一段
}   下一段==翻屏快捷键==
Ctrl+f 向下一屏
Ctrl+b 向上一屏
Ctrl+d 向下半屏
Ctrl+u 向上半屏==字符操作==
[NUM] x 删除当前NUM个字符
p   粘贴x删除的字符
~   大小写转换
gu  变小写
gU  变大写
J   删除当前行的换行符
r   替换当前字符
R   替换模式==删除命令==
[NUM] d 删除命令(结合下面使用),
d$ 或 D  删到尾
d0  删到头
d^  删到头(非空)
dw  删除当前字符
de  后删单词
db  前删单词
[NUM] dd    删除NUM行==删除命令==
[NUM] y 复制命令(结合下面使用),
y$  复制到尾
y0  复制到头
y^  复制到头(非空)
yw  复制当前字符
ye  复制后单词
yb  复制前单词
[NUM] yy    复制NUM行==粘贴命令==
p   往后粘贴
P   往前粘贴==改变命令==
c   修改后进入插入模式(下同)
c$ 或 C  删到尾
c0  删到头
c^  删到头(非空)
cw  删除当前字符
ce  后删单词
cb  前删单词
[NUM] cc    删除NUM行di"  删除" " 之间内容
yi( 复制( ) 之间内容
vi[ 选中[ ] 之间内容
dtCHAR  删除之后直到CHAR字符
ytCHAR  复制之后直到CHAR字符==查找==
/PATTERN    向下查找
?PATTERN    向上查找
n   查找方向(对查找结果)
N   查找反向(对查找结果)==撤消更改==
[NUM] u 撤消NUM次
U   撤消行的所有更改
Ctrl + r   重做
[NUM] . 重复前一个/NUM个操作====扩展命令模式======关闭文件==
:q  退出
:q! 强制退出
:wq 保存退出
:x  保存退出
ZZ  保存退出
ZQ  不保存退出==地址定界+COMMAND==
==地址定界==
:start_pos,end_pos  地址定界
:NUM    跳转到NUM行
:NUM,+NUM  如:2,+3表示2,5行
:.  当前行
:$  最后行
:%  全文
/STR1/,/STR2/   从匹配到的STR1到STR2
NUM,/STR/   从第NUM行到STR匹配行
/STR/,$ 从STR匹配行到结束
==COMMAND==
d   删除
w FILE  选中范围保存到文件FILE
r FILE  选中范围保存到指定FILE==查找并替换==
格式: s/要查的内容/要替换的内容/修饰符
I   忽略大小写
g   每行替换1次
gc  全部替换
s/string1/string2/g
s@string1@string2@gc
s#string1#string2#i

tags文件生成与ctags常用命令

使用ctags的也很简单。 进入我们的项目代码根目录,执行以下命令:

      ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

另外,由于在前面第5条,我们已经在Vim中配置了Ctrl-F12组合快捷键,所以我们也可以进入代码根目录后,打开Vim,按下Ctrl-F12快捷键自动生成tags文件。

命令执行完后,会在源代码目录生成tags文件。Vim默认会自动读取当前目录下的tags文件,所以不需要修改~/.vimrc文件。此时,我们已经具有定义跳转的功能了。有两组快捷键是最常用的。

Ctrl+]           跳转到光标所在符号的定义。
Ctrl+o           返回上一个标签
Ctrl+t            回到上次跳转前的位置。
:tag  TagName     跳到TagName标签
:stag TagName     新窗口显示TagName标签,光标跳到标签处
Ctrl+W + ]       新窗口显示当前光标下单词的标签,光标跳到标签处
:tfirst           到第一个匹配
:[count]tprevious 向前 [count] 个匹配
:[count]tnext     向后 [count] 个匹配
:tlast            到最后一个匹配
:tselect TagName  展示TagName标签选择列表
:ptag TagName     预览窗口显示TagName标签,光标跳到标签处
Ctrl+W + }       预览窗口显示当前光标下单词的标签,光标跳到标签处
:pclose           关闭预览窗口

更多功能通过命令man ctags或在Vim命令行下运行help ctags查询。

cscope.out文件生成与cscope常用命令

生成索引cscope.out

先找出你关心的头文件和.c文件,我是在linux的根目录下执行find来找出所有的.h和.c文件。Linux中使用是GNU find命令,默认是递归查询的,所以找文件很简单。不像solaris中的find命令需要使用一些trick来实现递归查找。

$ find . -name "*.[h|c]"  >  cscope.files

然后,生成索引文件

$ cscope -bkq -i cscope.files

等命令结束后,你会发现根目录下生成了一个名为cscope.out的文件。此时,你就可以独立使用cscope来浏览代码了,执行Ctrl-d可以退出cscope。

:cs find s ---- 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
:cs find g ---- 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
:cs find d ---- 查找本函数调用的函数
:cs find c ---- 查找调用本函数的函数
:cs find t ---- 查找指定的字符串
:cs find e ---- 查找egrep模式,相当于egrep功能,但查找速度快多了
:cs find f ---- 查找并打开文件,类似vim的find功能
:cs find i ---- 查找包含本文件的文

大家可以直接加我的公众号“背包旅行码农”,输入关键字“vim ctags cscope”获取。

参考文献

将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete
MinGw 和 cygwin 的区别和联系
Cygwin 和MinGW 的区别与联系是怎样的
MinGW and Cygwin - An Introduction and Differences
给git-bash加点儿料——gcc/make/cmake
Linux入门_Vim文本编辑器详解
VIM-Editor-Mind-Map/VIM用法

Windows10下用vim+ctags+cscope搭建属于自己的IDE相关推荐

  1. vim cscope php,使用Vim+Ctags+Cscope阅读源代码

    因为所有设计思想.内部机制都是 以代码的形式实现,所有的资料也都是为了更好的诠释代码.那么一个好的阅读工具,能 够提高阅读的效率和效果. • "Cscope"[4]为终端下的代码阅 ...

  2. Linux 内核阅读工具vim+ctags+cscope+taglist

    今天,来介绍一下vim+ctags+cscope+taglist的内核阅读配置.当使用过之后,我相信大部分人都会舍弃之前的Eclipse(我就是活生生的一个例子).我们先来看看实现的界面是怎么样的: ...

  3. 使用Vim+Ctags+Cscope阅读源代码

    2019独角兽企业重金招聘Python工程师标准>>> 因为所有设计思想.内部机制都是 以代码的形式实现,所有的资料也都是为了更好的诠释代码.那么一个好的阅读工具,能 够提高阅读的效 ...

  4. 配置vim支持源码浏览(vim+ctags+cscope)

    2019独角兽企业重金招聘Python工程师标准>>> 配置vim支持源码浏览(vim+ctags+cscope) 介绍 windows下流行的源码阅读软件是source insig ...

  5. linux vim ctags,Linux环境上代码阅读与编写的利器-vim+ctags+cscope

    Linux环境下代码阅读与编写的利器----vim+ctags+cscope 所谓工欲善其事,必先利其器. 从事Linux程序开发,特别是Linux驱动程序的开发,不管是通过windows下虚拟一个L ...

  6. Windows10下利用Visual Studio Code搭建C语言开发环境

    Windows10下利用Visual Studio Code搭建C语言开发环境 1. 前言 2. 下载安装VSCode以及MinGW 2.1 下载安装VSCode 2.2 下载安装MinGW-w64 ...

  7. Linux下编译cscope,vim+ctags+cscope 常用技巧和命令

    首先声明,本文不适用于初学者! 1 编译ctags需要的文件 #make ARCH=x86 tags ARCH=x86 的意思是除了索引指定的x86体系结构的代码外,不索引其他体系结构的想关代码 2 ...

  8. Ubuntu下创建Vim+Taglist+Cscope+Ctags组合编辑器

    ubuntu 中cscope的安装 Ubuntu给我们安装软件提供了很大的便利,比如说,安装vim,我们可以直接使用"sudo apt-get install vim"即可安装! ...

  9. ubuntu ctags php,Ubuntu下创建vim+Taglist+cscope+ctags组合编辑器

    有人抱怨Linux系统下没有类似于VC之类的方便快捷的编辑器,有人用gedit, 有人用vim,但是都不方便而且也没有自动补全之类的方便用户的功能.本文简单介绍使用vim中的几个插件(Ctags.Cs ...

最新文章

  1. android从放弃到精通 第八天 freedom
  2. 2015/5/9站立会议(补发)
  3. Microsoft 顺序分析和聚类分析算法
  4. RFC894--以太网上IP数据报的传输标准
  5. vue tag=“li“ 和event原有样式渲染不出来
  6. JQuery-学习笔记02【基础——JQuery选择器】
  7. java对象是如何创建的
  8. 一个IP绑定多个域名(虚拟主机)设置方法
  9. HDU 3062 Party(2-sat题模板+tarjan )
  10. 【模板/经典题型】并查集维护生成树
  11. 上线前,一款To B产品要做哪些运营动作?
  12. 《javascript高级程序设计》第八章 The Browser Object Model
  13. cat的用法matlab,MATLAB中“repmat”与“cat”函数的用法
  14. 编程算法 - 赛马问题
  15. 解决大疆无人机飞了一段距离就停下来的问题(大疆限飞50米)
  16. 天猫小黑盒从发布新品到影响供应链
  17. Android项目迁移到Androidx经验总结
  18. android mvvm
  19. 干货 | 手把手教你iOS自定义视频压缩
  20. ubuntu进去安全模式_ubuntu 14.04全攻略

热门文章

  1. 前端构造桌面级应用(QQ音乐)
  2. 左耳听风 第四十一周
  3. 西澳推出两大创新型住宅太阳能加存储项目
  4. illustrator下载_在Illustrator和手绘中创建矢量图形
  5. 计算机网络思维导图-第一章-计算机网络体系结构
  6. 计算机组成原理 《总线系统》
  7. 技术工程师-年会(四)
  8. 39 操作系统 18h-北京大学陈向群老师
  9. 按键精灵的回车和换行符如何打
  10. 刚开始学egret开发,第一课 《小鸡过马路》- 绘制npc,绘制玩家控制角色,碰撞检测还不完善,嘿嘿!