热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

把VIM打造成IDE

安装vim相关软件1编译安装VIM7.42安装ctags5.8ctags.sourceforge.netCent

=======================================
                                  
安装vim相关软件
=======================================

1 编译安装VIM7.4

2 安装 ctags 5.8    ctags.sourceforge.net

  CentOS6 和 Debian7 安装系统自带的

3 安装 安装Cscope   cscope.sourceforge.net
tar zxvf
cscope-15.8a.tar.gz &&
cd cscope-15.8a &&
./configure
--prefix=/usr/local &&
make &&
make install

{解决了cscope的不退出一键更新的问题
su -
cd
/usr/local/include/boost/
find |grep -E
"\.(c|cc|cp|cpp|cxx|ipp|c\+\+|h|h\+\+|hh|hp|hpp|hxx)美元符"
>cscope.files
cscope -bq -i cscope.files
exit
cd
vi
.vimrc
加入:
    cs add ~/Ice-3.4.2/cpp/cscope.out
~/Ice-3.4.2/cpp
    cs add
~/Ice-3.4.2/ThirdParty/db-4.8.30.NC/cscope.out
~/Ice-3.4.2/ThirdParty/db-4.8.30.NC
    cs add
/usr/local/include/boost/cscope.out /usr/local/include/boost/
}

=======================================
                                  
安装VIM插件
=======================================

插件安装目录: ~/.vim/plugin/     帮助文件目录:
~/.vim/doc/
拷贝新的帮助文件后,执行:   vim -c "helptags ~/.vim/doc" -c "q"

1 安装 AutoTag
1.13版 自动更新tags的插件
    { This utility will only work when
using vim that‘s been compiled with python support. }
把 autotag.vim 拷贝到:
~/.vim/plugin/  目录下。
修改 autotag.vim
217行改为:
   
cmd = "%s -R --c++-kinds=+p --fields=+iaS --extra=+q -f %s -a " %
(self.ctags_cmd, self.tags_file)
219行改为:
    cmd = "%s -R
--c++-kinds=+p --fields=+iaS --extra=+q -a " % (self.ctags_cmd,)

2 安装 TagList 4.6版
cd ~/.vim/doc
mv taglist.txt
taglist2.txt
vi taglist2.txt
  { 修改: *taglist.txt*  为
*taglist2.txt* }
vim -c "helptags ~/.vim/doc" -c "q"
   

3 安装 showfunc.vim
这个插件实现了按下fd,就可以提示当前光标所在函数的定义,另外还实现了当输入‘(‘时,会自动匹配tags,展示函数的定义原型
只需要把这个插件放到plugin下就行,不需要配置。

4
安装 OmniCppComplete
自动补全
安装
执行:   vim -c "helptags ~/.vim/doc" -c
"q"
{
    1) 生成 C函数的tags
    su
-
    mkdir /opt/bk
    cd
/usr/include
    mv c++ /opt/bk/.
   
exit
    ctags -R --c-kinds=+p --fields=+iaS --extra=+q
--language-force=C -f ~/.vim/c_tags /usr/include
    su
-
    mv /opt/bk/* /usr/include/.
   
exit
    
    2) 生成
C++函数的tags
    下载 cpp_src.tar.bz2
    解压到:
/usr/local
    ctags -R --c++-kinds=+p --fields=+iaS
--extra=+q --language-force=C++ -f ~/.vim/cpp_tags
/usr/local/cpp_src
    
    3) 生成
ICE的tags
    ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
--language-force=C++ --append=yes -f ~/.vim/ice_tags
~/Ice-3.4.2/cpp/include
    ctags -R --c++-kinds=+p
--fields=+iaS --extra=+q --language-force=C++ --append=yes -f ~/.vim/ice_tags
~/Ice-3.4.2/cpp/src
    
    4) 生成
BDB的tags
    ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
-f ~/.vim/bdb_tags ~/Ice-3.4.2/ThirdParty/db-4.8.30.NC
  
 
    5) 生成 其它的tags
    ctags -R
--c++-kinds=+p --fields=+iaS --extra=+q --append=yes -f ~/.vim/misc_tags
~/Ice-3.4.2/ThirdParty/bzip2-1.0.6
    ctags -R --c++-kinds=+p
--fields=+iaS --extra=+q --append=yes -f ~/.vim/misc_tags
/usr/local/include/mongo
    
    x)
修改以下tags文件中的路径  /home/yucheng   为:  ~
   
sed -i "s/\/home\/yucheng/~/g" ice_tags bdb_tags misc_tags
}

vi
~/.vimrc
{
    set
tags=~/.vim/ice_tags,~/.vim/bdb_tags,~/.vim/misc_tags,~/.vim/cpp_tags,~/.vim/c_tags,../../include/tags,../include/tags,./tags
}

5
安装 WinManager
先安装 bufexplorer.vim
然后安装 WinManager 
执行:   vim -c "helptags
~/.vim/doc" -c "q"
在 .vimrc 中加入以下几行:
    let
g:winManagerWindowLayout=‘FileExplorer|TagList‘ " 设置窗口布局
   
let g:winManagerhelptags ~/.vim/doc" -c "q"
map
,c   
"这样的话,在光标所在行上,按下一次ctrl+h是注释,再按下一次是取消注释
其内建的指令,cm是多行注释,类似C++的/**/,,cu是取消注释
(安装后,无效,why?
)    
    
10 安装 DoxygenToolkit.vim 生成Doxygen风格的注释
Copy to your
‘~/.vim/plugin‘ directory
     
11 安装 a.vim 
快速切换.cpp和.h文件
把a.vim放到plugin下,不需要配置
直接可以:A,打开.cpp和.h对应的文件,:AV,打开.cpp和.h对应的文件,并且分屏

=======================================
       
.vimrc    需要替换下文中的 "美元符"
为正确的符号
=======================================

if v:lang =~ "^zh_CN"
set fileencodings=gb18030
set
guifOntset=*-r-*
elseif v:lang =~ "utf8美元符" || v:lang =~ "UTF-8美元符"
set
fileencodings=utf-8,latin1
elseif v:lang =~ "^zh_TW"
set
fileencodings=big5
set
guifOntset=-sony-fixed-medium-r-normal--16-150-75-75-c-80-iso8859-1,-taipei-fixed-medium-r-normal--16-150-75-75-c-160-big5-0
elseif
v:lang =~ "^ko"
set fileencodings=euc-kr
set
guifOntset=-*-*-medium-r-normal--16-*-*-*-*-*-*-*
elseif v:lang =~
"^ja_JP"
set fileencodings=euc-jp
set
guifOntset=-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*
endif
"
对语言的支持,utf8和gbk之类
set
fileencodings=gb18030,gbk,gb2312,big5,utf-8,latin1,euc-jp,euc-kr,ucs-bom,cp936

if(has("win32")
|| has("win95") || has("win64") || has("win16"))
"判定当前操作系统类型
    let
g:iswindows=1
else
    let g:iswindows=0
endif

if
&term=="xterm"
set t_Co=8
set t_Sb=^[4%dm
set
t_Sf=^[3%dm
endif

" Only do this part when compiled with support for
autocommands
if has("autocmd")
" In text files, always limit the width of
text to 78 characters
autocmd BufRead *.txt set tw=78
" When editing a
file, always jump to the last cursor position
autocmd BufReadPost
*
endif

" Switch syntax highlighting on, when the terminal has
colors
" Also switch on highlighting the last used search pattern.
syntax
enable
" if &t_Co > 2 || has("gui_running")
syntax
on
"   set hlsearch
" endif
set mouse=a

set
nocompatible        " Use Vim defaults (much
better!)
set
bs=2               
" allow backspacing over everything in insert mode
"set
ai                
" always set autoindenting on
"set
backup             "
keep a backup file
set viminfo=‘20,\"50    " read/write a
.viminfo file, don‘t store more than 50 lines of registers
set
history=50          " keep 50 lines
of command line history
set
ruler              
" show the cursor position all the time

set number " 显示行号
set
autoindent " 智能自动缩进
set smartindent " 开启新行时使用智能自动缩进
set shift
缩进所表示的空格数
set tabstop=4
set expandtab " 用空格替换tab字符
%retab
set
softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格
filetype plugin indent on "
让filetype-plugin根据文件类型自动缩进
set hlsearch  " 对被搜索的表达式显示高亮
set incsearch
" 在输入要搜索的文字时,实时匹配

set
foldenable             
" 开始折叠     :help zo
set
foldmethod=syntax       " 设置语法折叠
set
foldcolumn=0            "
设置折叠区域的宽度
set
foldlevel=100           "
启动vim时不要自动折叠代码
nnoremap @=((foldclosed(line(‘.‘)) <0) ?
‘zc‘ :
‘zo‘)

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" cscope的设置
" 查看帮助     :help
if_cscop.txt
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if
has("cscope")
        set
csprg=/usr/local/bin/cscope
        "
优选搜索标签库,未找到匹配项后搜索cscope数据库
        set
csto=1
        " vim内置命令
同时搜索cscope数据库和标签库
        set
cst
        set
nocsverb
        " add any database in
current directory
        if
filereadable("cscope.out")
               
cs add cscope.out
        " else add
database pointed to by environment
       
elseif 美元符CSCOPE_DB !=
""
               
cs add 美元符CSCOPE_DB
       
endif
        " 添加cscope.out文件 Ice BDB
mongodb
        " cs add
~/source/Ice-3.5.0/cpp/cscope.out ~/source/Ice-3.5.0/cpp
    "
cs add ~/source/db-5.3.21.NC/cscope.out
~/source/db-5.3.21.NC
    " cs add
~/source/mongodb-src-r2.4.1/cscope.out
~/source/mongodb-src-r2.4.1
    "
给出添加cscope数据库成功与否信息
        set
csverb
        " 用 quickfix 窗口来显示 cscope
结果
        set
cscopequickfix=s-,c-,d-,i-,t-,e-
        "
cscope用的快捷键
    nmap s :cs find s
=expand(""):copen
   
imap s s
    nmap g
:cs find g
=expand("")
   
imap g g
    nmap d
:cs find d
=expand(""):copen
   
imap d d
    nmap c
:cs find c
=expand(""):copen
   
imap c c
    nmap t
:cs find t
=expand(""):copen
   
imap t t
    nmap e
:cs find e
=expand(""):copen
   
imap e e
    nmap f
:cs find f
=expand("")
   
imap f f
    nmap i
:cs find i
=expand(""):copen
   
imap i i
endif   " if
has("cscope")

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
快捷键设置
"       nmap
是command模式,    imap
是insert模式
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
F3       --- 查找
nmap
:Grep
imap
"
F4       --- 全部退出
nmap
:qall
imap
"
F5       --- 全部保存
nmap
:wall
imap
"
F6       --- 代码补全 ( insert模式 )
imap

" F7       ---
编译项目
nmap :call MyFun_make()
imap

" F8       ---
重新编译项目
nmap :call MyFun_remake()
imap

" F10      ---
生成当前目录的tags
nmap :call
MyFun_mktag()
imap
"
    --- 生成当前目录的cscope
nmap
:call MyFun_mkcscope(".")
imap

"
    --- 清除所有tags文件
nmap
:call MyFun_cleantag(".")
imap


"       
--- 清除屏幕高亮(搜索产生的)
nmap :noh
imap
a

fun! MyFun_cleantag(p_dir)
   
if has("cscope")
        silent! execute
"cs kill -1"
    endif
    let dir = a:p_dir
. "/"
    exe ‘:!rm -f tags ‘ . dir .
‘cscope.*‘
endfun

fun! MyFun_mktag()
    exe
‘:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .‘
endfun

fun!
MyFun_mkcscope(p_dir)
    if
has("cscope")
        silent! execute "cs
kill -1"
   
else
        return
   
endif
    let dir = a:p_dir . "/"
    if
filereadable(dir."cscope.files")
       
let
csfilesdeleted=delete(dir."cscope.files")
       
if(csfilesdeleted!=0)
           
echohl WarningMsg | echo "Fail to do cscope! I cannot delete the " . dir .
"cscope.files" | echohl
None
           
return
        endif
   
endif
    if
filereadable(dir."cscope.out")
        let
csoutdeleted=delete(dir."cscope.out")
       
if(csoutdeleted!=0)
           
echohl WarningMsg | echo "Fail to do cscope! I cannot delete the " . dir .
"cscope.out" | echohl
None
           
return
        endif
   
endif
    silent! exe ‘:!rm -f ‘ .dir  .
‘cscope.*‘
    if(executable(‘cscope‘) &&
has("cscope") )
        silent! execute
‘!find ‘ . dir . ‘ |grep -E
"\.(c|cc|cp|cpp|cxx|ipp|c\+\+|h|h\+\+|hh|hp|hpp|hxx|java|cs)美元符" > ‘ . dir .
‘cscope.files‘
        silent! execute
"!cscope -bq -i " . dir . "cscope.files" . " -f " . dir .
"cscope.out"
        execute "normal
:"
        exe ‘:call MyFun_loadcscope("‘
. a:p_dir  . ‘")‘
    endif
endfun

fun!
MyFun_loadcscope(p_dir)
    if
has("cscope")
        let dir = a:p_dir .
"/"
        if
filereadable(dir."cscope.out")
           
execute "cs add " . dir . "cscope.out " .
dir
        endif
   
endif
endfun

fun! MyFun_check_tag()
    if
filereadable("tags")
        silent! exe
‘:call MyFun_mktag()‘
    endif
    if
filereadable("cscope.out")
        silent!
exe ‘:call MyFun_mkcscope(".")‘
   
endif
endfun

fun! MyFun_make()
    exe
‘:wall‘
    exe ‘:make‘
endfun

fun!
MyFun_remake()
    exe ‘:wall‘
    exe
‘:call MyFun_check_tag()‘
    exe ‘:make
clean‘
    exe ‘:make‘
endfun

command! -nargs=1 Csm
:call MyFun_mkcscope()
command! -nargs=1 Csc :call
MyFun_cleantag()
command! -nargs=1 Csl :call
MyFun_loadcscope()

set
tags=~/.vim/cpp_tags,~/.vim/c_tags,../../include/tags,../include/tags,./tags,../tags,../../tags
"set
tags=~/.vim/ice_tags,~/.vim/bdb_tags,~/.vim/mongodb_tags,~/.vim/cpp_tags,~/.vim/c_tags,../../include/tags,../include/tags,./tags,../tags,../../tags

""""""""""""""""""""""""""""""

" taglist的配置
""""""""""""""""""""""""""""""
filetype
on                            
"文件类型自动检测
let Tlist_Ctags_Cmd =
‘ctags‘           "ctags
执行文件
let Tlist_Show_One_File =
0             "0
显示多个文件  1 不同时显示多个文件的tag
let Tlist_File_Fold_Auto_Close =
1      "非当前文件,函数列表折叠隐藏
let Tlist_Exit_OnlyWindow=
1          
"如果taglist窗口是最后一个窗口,则退出vim
let Tlist_WinWidth = 40
nmap
:Tlist
imap
a

""""""""""""""""""""""""""""""
"
WinManager
""""""""""""""""""""""""""""""
let
g:winManagerWindowLayout=‘FileExplorer|TagList‘ " 设置窗口布局
let
g:winManager"""""""""""""""""""""""""""""
"
MiniBufExplorer
""""""""""""""""""""""""""""""
let
g:miniBufExplMapWindowNavArrows = 1 " 通过方向键切换窗口
let
g:miniBufExplMapCTabSwitchBufs = 1  " 供过tab切换窗口
let
g:miniBufExplModSelTarget = 1
let g:miniBufExplMapWindowNavVim =
1    " 通过h,j,k,l切换窗口 ( l没有发挥作用: 关闭金山词霸的热键
)

""""""""""""""""""""""""""""""
"
OmniCppComplete
""""""""""""""""""""""""""""""
set nocp
filetype
plugin on
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess =
1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let
OmniCpp_MayCompleteDot = 1   " 输入 .  后自动补全
let
OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope =
1 " 输入 :: 后自动补全
let OmniCpp_ShowScopeInAbbr = 1  "
显示匹配项所在域,并移除缩略信息中最后一列
let OmniCpp_DefaultNamespaces = ["std","Emdp"]
"
自动关闭补全窗口
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent!
pclose|endif
set completeopt=menuone,menu,longest
" highlight
Pmenu    guibg=darkgrey  guifg=black
" highlight PmenuSel
guibg=blue guifg=white

""""""""""""""""""""""""""""""
"
NERD_commenter的配置 无效?
""""""""""""""""""""""""""""""
"let
NERDShutUp=1               
" 支持单行和多行的选择
"map
,c

""""""""""""""""""""""""""""""
"
DoxygenToolkit的配置
""""""""""""""""""""""""""""""
map fg :
Dox
let g:DoxygenToolkit_authorName="yucheng"
let
g:DoxygenToolkit_licenseTag="yucheng"
let
g:DoxygenToolkit_undocTag="DOXIGEN_SKIP_BLOCK"
let
g:DoxygenToolkit_briefTag_pre = "@brief\t"
let g:DoxygenToolkit_paramTag_pre
= "@param\t"
let g:DoxygenToolkit_returnTag = "@return\t"
let
g:DoxygenToolkit_briefTag_funcName = "no"
let
g:DoxygenToolkit_maxFunctiOnProtoLines=
30

""""""""""""""""""""""""""""""
" grep.vim
的配置
""""""""""""""""""""""""""""""
let Grep_Default_Filelist = ‘*.h *.hp
*.hpp *.hxx *.cpp *.ipp *.cxx *.cp *.cc *.c‘

"colorscheme
darkblue
colorscheme desert
"colorscheme professional
"colorscheme
Dark
"colorscheme shine
"colorscheme devcpp
"colorscheme
wuye
"colorscheme borland
"colorscheme ron
"colorscheme
blue
"colorscheme pablo
"colorscheme delek

把VIM打造成IDE,布布扣,bubuko.com


推荐阅读
  • 在执行 Vim/VM 命令时遇到错误提示:检测到名为
    在使用 Docker 时,通过 Vim 编辑 Dockerfile 文件时遇到了错误提示:“检测到名为 .dockerfile.swp 的交换文件”。这一问题通常是因为上次编辑该文件时意外中断,导致系统生成了临时的交换文件。为了解决这个问题,可以手动删除该交换文件或使用 Vim 的恢复功能来恢复未保存的更改。 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • 本文深入解析了 Apache 配置文件 `httpd.conf` 和 `.htaccess` 的优化方法,探讨了如何通过合理配置提升服务器性能和安全性。文章详细介绍了这两个文件的关键参数及其作用,并提供了实际应用中的最佳实践,帮助读者更好地理解和运用 Apache 配置。 ... [详细]
  • Python学习:环境配置与安装指南
    Python作为一种跨平台的编程语言,适用于Windows、Linux和macOS等多种操作系统。为了确保本地已成功安装Python,用户可以通过终端或命令行界面输入`python`或`python3`命令进行验证。此外,建议使用虚拟环境管理工具如`venv`或`conda`,以便更好地隔离不同项目依赖,提高开发效率。 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • 在使用关系型数据库时,通常需要通过用户名和密码进行身份验证才能访问数据。然而,MongoDB默认情况下并不强制要求这种身份验证机制,使得用户无需凭据即可访问并执行各种操作。虽然这一设计简化了初学者的上手过程,但也带来了显著的安全风险。为了提升MongoDB的连接安全性,本文将探讨多种策略与实践,包括启用身份验证、配置网络访问控制、加密通信以及定期审计安全设置,以确保数据库的安全性和数据的完整性。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • DHCP三层交换机设置方式全局模式和接口模式设置方式和命令resetsave回车输入yreboot输入n输入y重启后就恢复默认设置了默认用户名密码adminAdmin@huawei ... [详细]
  • POJ 1696: 空间蚂蚁算法优化与分析
    针对 POJ 1696 的空间蚂蚁算法进行了深入的优化与分析。本研究通过改进算法的时间复杂度和空间复杂度,显著提升了算法的效率。实验结果表明,优化后的算法在处理大规模数据时表现优异,能够有效减少计算时间和内存消耗。此外,我们还对算法的收敛性和稳定性进行了详细探讨,为实际应用提供了可靠的理论支持。 ... [详细]
  • 题目描述非常吸引人。每颗星星可以通过其在窗口的左下角和右上角位置构建两条扫描线,从而将问题转化为区间增减和求最大值的操作。需要注意的是,位于边界的星星不应计入结果,因此在处理时应分别对左右边界进行适当的增减调整。此外,利用线段树和离散化技术可以显著提高算法效率,确保在大规模数据下的性能表现。 ... [详细]
  • Vuex 实战进阶:构建高效笔记本应用(第二篇)
    在上一篇文章中,我们初步探讨了 Vuex 在该项目中的应用。本文将深入解析整个项目的架构设计。首先回顾 `main.js` 的内容,然后重点分析 `App.vue` 文件,其中引入了 `Toolbar.vue` 和 `NodeList.vue` 组件,详细说明它们在应用中的作用和交互方式。通过这些组件的协同工作,我们将展示如何构建一个高效且响应迅速的笔记本应用。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 如果你对项目管理和系统架构感兴趣,欢迎关注微信订阅号“softjg”,加入我们这个PM和架构师的大家庭。本文将探讨编写高质量软件架构文档的重要性及其优势。良好的架构文档不仅能够促进不同利益相关者之间的沟通与理解,还能为项目的长期维护和扩展提供坚实的基础。通过详细记录系统的设计决策和关键组件,架构文档能够确保团队成员在项目周期内保持一致性和高效协作。 ... [详细]
  • 在椭圆形状设计中,色彩搭配方案对视觉效果和用户体验至关重要。本文分析了不同色彩组合在椭圆形状设计中的应用效果,特别探讨了白色背景与绿色文字的搭配,指出长期观看这种配色可能会导致视觉疲劳。通过引入多种色彩搭配方案,本文旨在为设计师提供更加科学和舒适的色彩选择建议。 ... [详细]
author-avatar
工商领域LW
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有