前言

卡片式设计对于我们来说并不陌生,从设计类网站上或市场上的一些APP中也会看到很多的卡片式设计的案例,卡片式设计也是UI设计中最常用的方式之一。

 

最近在新项目的设计中也尝试使用了卡片式设计,结合实际项目中的得到了一些思考进行总结并归纳出一些卡片式设计的小知识点。同时希望自己通过本次的总结进行知识沉淀,以及跟大家一起探讨下卡片式的设计。

来源于日常

在现实生活中的卡片式设计可以说是无处不在,例如身份证、交通卡、银行卡、名片、便利贴、扑克牌、游戏卡......诸如此类的生活常见品都是以卡片的方式存在,其共同点都使用一个容器中承载着内容,并且具有“便携性、信息简洁和相对独立性”。

浅谈卡片式设计

UI设计中卡片的使用场景

在项目设计之初我分析了一些使用卡片设计的App,并且从中整理总结了几个较为常见的卡片式设计的使用场景。

 

Feed流

卡片式的feed流设计是一种非常常见的设计,早在前几年Facebook、Google+等产品就使用了这一方式,Feed流作为一种长内容的媒介,用户需要长时间的滑动看内容并筛选有效信息,卡片式设计很好的解决了内容与内容的区块分隔,让用户在长屏幕滑动中依旧可以很好的明确每一块的内容。

浅谈卡片式设计

实际案例-淘宝微淘

浅谈卡片式设计

瀑布流设计

瀑布流的出现让单屏区域内显示了更多的内容,而内容较多的情况下,使用卡片式设计较好的对内容进行了区域划分,让左右上下的内容从整体中具有相对的独立性。

浅谈卡片式设计

实际案例-Pinterest

浅谈卡片式设计

左右滑动组合型内容

卡片式设计具有较强的层次感,相比于拉通平铺更能呈现内容可滑动感受,并且块状化的设计让内容具有较高的区域分割感。

浅谈卡片式设计

实际案例-QQ音乐

浅谈卡片式设计

Tips提醒

作为非界面固定内容,卡片式设计可以让tips提醒设计变得更自由,在符合用户体验的基础上,它可以出现在任何我们想要它出现的位置。

浅谈卡片式设计

实际案例-淘票票会员提醒

浅谈卡片式设计

结合手势的单块可互动内容

若页面中有且只有一个主内容,并且需要用户进行快速筛选时,可考虑这种结合卡片式设计与手势设计的方式。大大增强了用户对于设计的体验感知和丰富视觉表现。

浅谈卡片式设计

实际案例-探探首页

浅谈卡片式设计

卡券类设计

卡券类的设计实际上是一种物化映射的过程,我们在现实中看到的卡券造型,结合卡片式的拟物化设计,让用户在屏幕上可以更直观的感知,提升了设计的代入感。

浅谈卡片式设计

实际案例-京东领券中心

浅谈卡片式设计

集合型功能入口

集合型功能入口往往会有多个入口,使用卡片式设计让入口形成一个区域整体,可以做到既统一又相对独立。

浅谈卡片式设计

实际案例-淘宝微淘关注账号

浅谈卡片式设计

个人主页顶部内容卡片

个人主页的设计往往会在氛围上营造沉浸感,卡片式的设计可以把关键信息进行概括收归,让原本单个的内容形成一个整体。

浅谈卡片式设计

实际案例-美团外卖会员

浅谈卡片式设计

规则探讨

基础的卡片设计规则,相信大家在一些系统级别的设计指导规范中也或多或少都能了解到,不同平台的规范差异性其实不会有太多本质性的区别,更多的是处理技巧或方式的差异,而每个设计师对其理解的角度也会具有一些差异化,这里分享下我对于卡片式设计的一些基础想法。

 

1.卡片的质感打磨

同样的卡片设计,不同的人做出来的感受可能会有差别,而表达卡片质感的主要关键基础点在于:卡片形体、投影深度、卡片颜色对比,我们需要了解这些基础知识点之后,再结合实际的APP风格进行设计。

浅谈卡片式设计

卡片形体

就像图标的图形设计一样,不一样的形体也能表达出不一样的气质,因此在设计的时候我们需要依据整体的风格进行表达。异形卡片的设计,可以让原有方方正正的卡片表达出差异化,从造型上打破一些传统的处理方式,再结合一些IP人物元素可以更加深入的表达出具体的内容氛围。

浅谈卡片式设计

投影深度

投影的视觉效果,会直接影响着整体卡片的质感,太深太大的投影会显得整体卡片过于厚重,太浅太小的投影则显得过度生硬,因此合理的数值比例则可以让卡片看起来自然有质感。在项目中我常用的一组数值规律是1:2或1:3,例如Y轴偏移10px,模糊度则设定为20或30px,这样成比例的数值出来的效果会较为自然,如下图:

浅谈卡片式设计

卡片颜色对比

卡片与背景的颜色对比会影响这卡片的整体质感,在设计时我们需要把握好卡片与底色的对比,不同的明暗对比出来的质感也会有差异。这里有两点建议:1.卡片色与背景色不宜太过接近或使用同一颜色,因为会影响卡片整体的空间质感或使得卡片的边缘锐度下降;2.深色背景上,尽量让卡片与背景色在同一色系或者明度不要差异太大,避免过于突兀。

浅谈卡片式设计

2.边距的设定

在使用卡片式设计时,经常会纠结边距的设定,宽边还是窄边?多少像素更为合适?经常我会带着这种疑问去设计。 

基于内容的简单规则

卡片式设计作为设计的表现形式,最终是为了承载内容,因此边距的宽窄也需要依赖于实际内容的判断。结合我在项目中的尝试分享以下几点: 

多窄少宽

卡片内容较多是使用窄边距,让卡片具有足够的空间来展现内容,内容较少则可以考虑采用宽边距来打造整体的视觉空间感,如下图app store和淘宝的设计对比。当然这只是一个建议,实际还得具体问题具体分析。

浅谈卡片式设计

再如一些瀑布流、宫格、横滑模块较多的APP的设计亦是如此,在内容较多的情况下会把边距压缩到最小的合理间距。

浅谈卡片式设计

内外成比例

以最外边为基础值往里设计,间距以固定比例进行缩减,虽然没有删格来得规范,但也可以让设计变得有迹可循。

浅谈卡片式设计

基于删格

删格系统解决了一些基础的板式问题,有助于提升设计的规范性,让设计更加有迹可循。在设定卡片式的边距时可以适当应用删格系统,让边距与内容形成固定的关系,这样可以帮助整体的卡片设计更加具有细节和规则。

浅谈卡片式设计

4.卡片的标题设定

标题的设定主要考虑以下几点:1.是在卡片内还是卡片外;2.标题的字号设定多少更合适;3标题是否加粗?

 

卡片内或外的对比

在项目设计中让我较为纠结的是:标题应该在卡片内还是卡片外?通过了一些案例的尝试之后,我总结了一个规则(需要依据内容的形态而进行设计):当卡片内容是独立的模块或模块中只有一个大标题时可设定在卡片内;当卡片内容是以组合呈现或者具有延续性内容时设定在卡片外,形成最外层的主标题。

浅谈卡片式设计

标题的字号设定

标题主要作用为2点:1.简短说明每个模块的内容;2.让用户在长页面浏览中起到引导、定位的作用。通过一些尝试发现:1.当内容较少时,并不需要太大的字号即可起到标题的作用;2.当内容较多时,较小的标题字号则容易被沉入内容中,让用户在浏览的过程中难以发现,而导致信息获取缺失;3.标题应该与正文字号大小差异建议在6-10px,这样可以更好的拉开差异,让标题更具有标题感。

浅谈卡片式设计

字体是否加粗

常规思维下我们都会对标题进行加粗,我在实际中的经验得到的总结是:需要看手机系统或不同厂商的机型。我在项目之初都对标题进行了加粗,但后续在跟进还原时看到的效果并不理想,特别是Android的机型上,因为我们使用的是系统默认字体,android系统很多字体并未对系统进行优化,而是使用微软雅黑,微软雅黑在android系统上再加粗,就会显得整个系统的外轮廓特别粗糙,最后我们依据不同的机型进行了差异化的选择。

浅谈卡片式设计

4.圆角的规则

圆角的设定实际上没有太多的原则问题,只要符合整体的风格调性即可。当然不同的圆角也能表达出不同的质感,大圆角表达柔和、小圆角表达硬朗。

 

圆角的规则设定

以卡片的圆角作为基础的参考值往内推算整体的圆角使用规范,卡片与卡内的元素形成合理的比例规则,而非随意根据“经验”进行设定。

浅谈卡片式设计

圆角大小差异对比

大小的差异化呈现出不同的视觉感受和风格差异,我们在设计时更多需要考虑我们设计的产品风格或气质是适合大圆角还是小圆角,而非依据一些设计网站上的流行趋势。因此基于不同的风格或者实际内容场景下进行设定才更为合理。

浅谈卡片式设计

5.宽窄间距对比

卡片式设计相比拉通式设计更需要考虑设计中的透气感。在常规的规则下,对内容边距及四周边距进行调整,让内容之间具有较好的空间呼吸感,从而让设计得到留白的效果。如下图对比案例,在基础删格不变的情况下,每个间距都在原有基础上扩大了12px(接近1.33倍),从而让内容具有较为舒适的宽度进行阅读

浅谈卡片式设计

优点分析

选择某一种设计方式的重点在于我们了解这种方式的优点,并且可以把这些优点融合到我们的设计当中。在项目设计中,我总结了几点卡片式设计的优点。

 

优化模块化,提升内容区域感

模块化的设计也是我们日常中会应用到的方法,结合卡片式的设计可以让模块化的规则变得更加简单,增加了模块之间的可复用性和延展性。而当内容较多的情况下,使用卡片式设计可以有效直接的形成区域分隔,从视觉感知上就对内容进行了分隔,提升用户获取信息的效率。

浅谈卡片式设计

提升内容独立性

在组合型的内容设计上,使用卡片式设计可以让每个小块内容呈现相对独立的展现特性,结合模块化的设计,可以在一大片关联的内容中,做到既统一又相对独立。

浅谈卡片式设计

增强视觉空间感

卡片式的设计可以提升整体设计层次感,通过投影、前后颜色的设定,让内容与背景之间产生视觉空间感。

浅谈卡片式设计

增强视觉表现力

在设计中我们可以对卡片进行异形设计,用来达到我们想要的风格表现。当然在一个页面内尽量不要太多,尽量使用页面中的首个卡片进行差异化处理,让整体表现出一点不同即可。

浅谈卡片式设计

增强可点性

卡片式设计产生的空间感,让每个模块更加突出,相比扁平式的处理方式,卡片式从视觉感官上会较为突出,从感官上更具可点击感知。

浅谈卡片式设计

缺点及建议

任何一种设计方式都会有其利弊,最终选择某一种其实不过就是当下最适合而已,而在尝试中我也总结了几点卡片式设计存在的一些缺点,当然只是个人的思考而已。

 

横向空间利用率降低

卡片式设计的存在左右边距,因此在有限的屏宽内内容横向区域相比于拉通式设计有所减少,在内容较多的情况下可以适当调小卡片左右边距。

浅谈卡片式设计

避免过多的层级

从整体来说,卡片式的设计本身就是增加了基础背景的层级表现,其视觉层级相比拉通式更为丰富,因此不建议在卡片上再二次叠加块状式设计,避免造成层级复杂。在项目中也会遇到内容层级需要多层级的表现,从中总结了2种方式:1.利用不拉通分割线;2.利用浅色背景底色。

浅谈卡片式设计

不适合长文或内容多的表达

若在设计上使用了卡片式的设计风格,但在一些长文表现的界面建议去除卡片。长文章的页面更强调阅读的沉浸感,用户需要更多的专注于文字,这时候无边的体验更适合。

浅谈卡片式设计

把握好界面的分区,避免过于拥挤的排版

卡片设计具有独特的视觉空间感,但卡片与卡片直接也会有分隔,因此在设计时更应该对内容进行归纳,避免产生过多的小块卡片而导致排版过于拥挤、凌乱或者内容不够宽度展现。

浅谈卡片式设计

最后总结

无论是卡片式或者拉通平铺的方式,其最终的目的都是为了服务于内容,我们在做设计的过程中只是选择适合于呈现我们内容的一种方式。根据具体的内容情况给出合理/合适的设计判断才是我们需要不断提升的关键点,切莫流于形式而忽略了内容设计本身的重要性。

作者 | IDfor
微信公众号 | IDfor_all(IDfor)

前言

《平凡的世界》是一只居居推荐我看一下的

一座村庄捆住了两个硬汉,两条河流阻绝了两对鸳鸯,三代农民,凝嘻成一段历史。三种颜色的馍馍代表了三种阶层的贫富悬殊,三代人住的窑洞锤炼着百年历史风雨,烂包的光景就这样呈现在平凡人的世界,温饱,成了一切努力的终极梦想。

简介

平凡的世界


《平凡的世界》时间是在上个世纪70年代到80年代,讲的是西北一个农村里发生的故事。聚焦了一代人的人生选择。描写了那一代人如何面对磨难,如何在其中挣扎、如何面对内心的冲突、在平凡的世界中如何生活。
书中给我印象最深的人物是孙少平,他是一位对苦难有着深切的认识,对生活有着深远的理解、对精神世界有着深刻追求的人。他经历的是艰苦卓绝的人生奋斗,然而在痛苦与磨砺中,他形成了一种对苦难的骄傲感、崇高感。我欣赏他对苦难的哲学,钦佩他对劳动认识、羡慕他对生活的理解。我想说,如果生活需要我们忍受痛苦,那么我们一定要咬紧牙关坚持下去。

摘录书中优美而感人至深的美句:

人活一生,风雨雷电和寒霜黑雪,有时候会在同一个时辰向你的头上倾倒下来!
大自然不管人世间的喜怒哀乐,总是按它自己的规律循序渐进地变换着一年四季。
知识这种力量可以改变一个人,甚至可以重新塑造一个人。
在人的一生中,最美好的时光也许正是在自己的中学时代。那时我们多么年轻、纯洁、真挚,内心充满了生活的诗情。
人啊,有时候觉得日子过得太慢;有时候又觉得太快了,简直来不及做什么事!
大地是不会衰老的,冬天只是它的一个宁静的梦;它将会在温暖的春风中苏醒过来,使自己再一次年轻!
社会在变化,生活在变化,人也在变化;没有什么不是一成不变的,包括人的关系。
一茬又一茬的男人就是这样不知不觉地走上了严峻的生活舞台。
农民啊,他们一生的诗情都在这土地上!每一次充满希望的耕耘和播种,每一次沉甸甸的收割和获取,都给人带来多么大的满足!这不是因为虚荣,而是不愿遭受虚荣者的嘲笑;我想默默地、宁静地走自己的路……
时光静悄悄地在流逝。世界上有些人因为忙而感到生活的沉重,也有些人因为闲而活得压抑。人啊,都有自己一本难念的经;可是不同处境的人又很难理解别人的苦处。
正如一棵树,枝叶可以任意向天空伸展,可根总是扎在老地方……
生活不能等待别人来安排,要自己去争取和奋斗;而不论其结果是喜是悲,你总不枉在这世界上活了一场人。有了这样的认识,你就会珍重生活,而不会玩世不恭;同时也会给人自身注入一种强大的内在力量……
日常生活的纷繁不会让人专注地沉湎于自己的不幸。即使人的心灵伤痕累累,也还得要去为现实中的生存和发展而挣扎。
痛苦啊,往往是人走向成熟的最好课程。
中学时代的生活啊,将永远鲜活地保持在每个人一生的记忆之中;即使我们进入垂暮之年,我们也常常会把记忆的白帆,驶回到那些金色的年月里……
有了希望,人就会产生激情,并可以义无反顾地为之而付出代价;在这样的过程中,才能真正体会到人生的意义。什么是人生?人生就是永不休止的奋斗!只有选定了目标并在奋斗中感到自己的努力没有虚掷,这样的生活才是充实的,精神也会永远年轻!
不要怕苦难,如果能深刻地理解苦难,苦难就会给人带来崇高感。
这是人生的心酸。在我们短促而又漫长的一生中,我们在苦苦地寻找人生的幸福。可幸福往往又与我们失之交臂。当我们为此而耗尽宝贵的青春年华,皱纹也悄悄地爬上了眼角的时候,我们或许才能稍稍懂得生活实际上意味着什么……
没有爱情,人的生活就不堪设想。爱情啊!它使荒芜变为繁荣,平庸变为伟大;使死去的复活,活着的闪闪发光。即便爱情是不尽的煎熬,不尽的折磨,像冰霜般严厉,烈火般烤灼,但爱情对心理和身体健康的男女永远是那样的自然;同时又永远让我们感到新奇、神秘和不可思议……
花朵是美丽的,果实的价值更高。
人生啊,是这样不可预测。没有永恒的痛苦。没有永恒的幸福。生活像流水一般,有时是那么平展,有时又那么曲折。
……人哪,活着是这么的苦!一旦你从幸福的彼岸被抛到苦难的此岸,你真是处处走投无路;而现在你才知道,在天堂与地狱之间原本也只有一步之遥!
命运总是不如人愿。但往往是在无数的痛苦中,在重重的矛盾和艰难中,才使人成熟起来,坚强起来;虽然这些东西在实际感受中给人带来的并不都是欢乐。
爱情,应该真正建立在现实生活坚实的基础上,否则,它就是在活生生的生活之树上盛开的一朵不结果实的花……
多少美好的东西消失和毁灭了,世界还像什么事也没有发生。是的,生活在继续着。可是,生活中的每一个人却在不断地失去自己最珍贵的东西。生活永远是美好的;人的痛苦却时时在发生……
青年,青年!无论受怎样的挫折和打击,都要咬着牙关挺住,因为你们完全有机会重建生活;只要不灰心丧气,每一次挫折就只不过是通往新境界的一块普通的绊脚石,而绝不会置人于死命。人啊,忍、韧、仁……
的确,有时候,往往一个极偶然的因素,就可能会改变一个人的生活。
不惋惜,不呼唤,我也不啼哭……金黄的落叶堆满心间,我已不再是青春少年……
即使最平凡的人,也得要为他那个世界的存在而战斗。从这个意义上说,在这些平凡的世界里,也没有一天是平静的。

结束语

如果你不知如何面对人生的挫折与苦难,如何做一个不平庸的平凡人,愿这本书会带给你点思考或提示,给你信心!
年轻人走点弯路不是什么了不起的事。能反省自己,这是一个人成熟的表现。年轻人,甩掉包袱吧!
年轻人!不要急,得慢慢来,一口吃不成个胖子!
在平凡的世界中,用尽全力,去做一个不平庸的人。
风吹过的,路依然远,继续着......

编写 vim 配置,我的 vim 我做主

本教程基于慕课网视频教程 玩转 Vim 从放弃到爱不释手 进行记录的第二篇插件篇。
第一篇链接:初始 VIM 篇

什么是Vim配置

什么是Vim的配置,为什么要使用它?

Vim里非常多常用的设置,比如 :set number 设置行号
Vim里临时设置,没法持久化,每次设置很烦
Vim提供了一种持久化配置的方式,让我们自定义配置

如何编写Vim配置文件

如何编写自己的Vim配置文件呢?
Linux/Unix下新建一个隐藏文件 .vimrc
或使用Vim直接打开 vim ~/.vimrc 进行编写然后保存。
这里的 ~/.vimrc 文件表示用户个人的配置,只对当前用户生效。
另外,Vim 的全局配置一般在 /etc/vim/vimrc 或者 /etc/vimrc,对所有用户生效。

接着我们就可以开始自定义自己的配置了

Vim配置都包含什么
编辑Vim配置文件,都可以设置什么
常用设置,比如:set nu 设置行号 :colorscheme hybrid 设置主题
常用的vim映射,vim中的映射比较复杂,源于vim有多种模式
自定义的vimscript函数和插件的配置

常用设置

我们可以把常用到的设置写到.vimrc里避免每次打开vim重新设置。

比如上面的:set nu :colorscheme hybrid 等,Vim里有非常多的这种配置,可以自己加入一些常见的设置选项看看效果.

不熟悉的情况下也可以做拿来主义,多去参考一下別人的配置看看那些对自己有用(不建议直接整个配置文件的复制拿来用,刚起步有些东西还搞不懂,而且遇到报错也解决不下,只会更糟心)。
这里推荐一篇 Vim配置入门,介绍了配置基础知识和部分基础配置。

Vim映射

什么是Vim映射?
Vim映射就是把[一个操作]映射到[另一个操作

如果你不满意现在的按键设置,比如vim本来的命令
或者你想映射一些方便的快捷键
按照你的意愿定制Vim。[当按下某些按键时,放弃你默认的操作,按照我的想法去做]

Vim中的映射比较复杂,源于 vim 有多种模式

设置一下 leaderlet mapleader="," 常用的是逗号或空格

比如用 inoremap <leader>w <Esc>:w<cr> 在插入模式保存

Vim中的映射概念稍微复杂,但是非常强大。

Vim 映射迷人眼

模式映射

Vim 常用模式 normal / visual / insert 都可以定义映射
nmap / vmap / imap定义映射只在normal / visual / insert分别有效

基本映射

基本映射指的是normal模式下的映射

使用 map 就可以实现映射。

比如 :map - x 然后按 - 就会删除字符
:map <space> viw 告诉 vim 按下 空格 的时候选中整个单词
:map <c-d> dd 可以使用 ctrl+d执行 dd删除一行

visual模式映射

:vmap \ U把在 visual 模式下选中的文本大小(u / U转换大小写)

insert模式映射

:imap <c-d> <Esc>ddi 在 insert 模式下删除一行后继续编辑模式

现有映射的问题?

定义了如下映射

:nmap - dd
:nmap \ -

当你按下 \ 时,Vim会解释其为 -。我们又映射了 -!Vim会继续解
-dd,即宅会删除整行。(是不是有点类似于递归)

递归与非递归映射

*map系列命令有递归的风险
如果你安装了一个插件,插件映射了同一个按键的不同行为,有冲突就会有一个失效
想要保证插件映射没有冲突会非常痛苦
解决方案就是使用非递归映射

非递归映射

Vim提供了非递归映射,这些命令不会递归解释

使用 *map 对应的 nnoremap / vnoremap / inoremap

何时使用递归映射(*map)?何时使用非递归映射呢?(*nnoremap

任何时候都应该使用非递归映射,拯救自己和插件作者

Vim 安装插件,竟如此简单

什么是插件?

和其他现代流行编辑器一样,Vim 同样支持强大的插件扩展

Vim 插件是使用 vimscript 或者其他语言编写的 vim 功能扩展
编辑器自带的功能有限,有了插件之后几乎可以无限制扩充其功能

如何安装插件?

原始的方式是直接clone 插件代码,如今 vim 有很多插件管理器

目前 Vim 有很多插件管理器可供选择,你可以选择一个顺手的

常见的有 vim-plug, Vundle, Pathogen, Dein.Vim, volt

综合性能、易用性、文档等几个方面,这里推荐使用 vim-plug

使用vim-plug安装插件

我们将使用 vim-plug 安装我们的第一个插件

https://github.com/junegunn/vim-plug

学习一个新东西的最好方式就是看官方的文档示例
按照官方的教程,我们就可以非常容易地了解它的使用方式

Unix下安装:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

vim ~/.vimrc 文件末尾加入以下亮行配置来启用 vim-plug

call plug#begin()

call plug#end()

安装你的第一个插件

我们将安装 vim-startify,一个好用的 vim 开屏插件

https://github.com/mhinz/vim-startify

修改你的.vimrc 文件,增加该插件名称

call plug#begin()

Plug 'mhinz/vim-startify'

call plug#end()

重新启动 vim 或者 :source ~/.vimrc,执行 :PlugInstall

使用 :q 退出安装界面(:qa 退出所有窗口),重启 Vim 你见过会神奇地发现插件生效了!

如何寻找自己需要的插件

如何搜寻插件

现有需求,后有插件。大部分插件托管在了 github 上,

寻找插件途径:

1.通过 google 搜索关键词寻找想要的插件

例如:

搜索文件管理相关的:vim file manager plugin

搜索编写 Python 的插件:vim python plugin github

2.vim 插件库:https://vimawesome.com/

3.浏览网上开源的vim配置借鉴想要的插件

vim美化插件,让你的 vim 与众不同

vim 美化插件

更改 vim 的外观

修改启动界面:https://github.com/mhinz/vim-startify

状态栏美化:https://github.com/vim-airline/vim-airline

增加代码缩进线条:https://github.com/yggdroot/indentline

主题美化:https://github.com/dracula/vim

注意:dracula主题启用要放在插件结束之后

call plug#begin()

" vim 开屏插件
Plug 'mhinz/vim-startify'

" 状态栏美化插件
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'

" 代码缩进线条
Plug 'yggdroot/indentline'

" 主题
Plug 'dracula/vim'

call plug#end()

" 主题启用要放在插件结束之后
" 设置主题
colorscheme dracula

Vim文件目录和搜索插件,跳转文件so easy

文件管理器nerdtree

使用nerdtree插件进行文件目录树管理

https://github.com/scrooloose/nerdtree

安装

call plug#begin()
......
" nerdtree
Plug 'preservim/nerdtree'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

插件配置

" nerdtree
" 查找文件位置
nmnnoremap <leader>v :NERDTreeFind<cr>
" 打开关闭目录树
nnoremap <leader>g :NERDTreeToggle<cr>
" 显示隐藏文件
let NERDTreeShowHidden=1
" 隐藏文件
let NERDTreeIgnore = [
            \ '\.git$', '\.hg$', '\.svn$', '\.stversions$', '\.pyc$', '\.pyo$', '\.svn$', '\.swp$',
            \ '\.DS_Store$', '\.sass-cache$', '__pycache__$', '\.egg-info$', '\.ropeproject$',
            \ ]

快捷键:

,g 可以快速打开关闭目录树

,v 光标快速移回目录树,定位到光标在移之前的文件名上,<ctrl>+w+p 可以快速跳转过去打开的文件上

快速搜索文件-模糊搜索器

如果想快速根据文件名查找打开一个文件呢?
如果想快速查找并且打开一个文件可以用 ctrlp 插件

https://github.com/ctrlpvim/ctrlp.vim

安装

call plug#begin()
......
"ctrlp
Plug 'ctrlpvim/ctrlp.vim'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

插件配置

"ctrlp
let g:ctrlp_map = '<c-p>'

更改默认映射调用 CtrlP 进行搜索:<ctrl>+p

Vim快速定位插件,文件位置任我行

Vim移动命令

在基础篇讲了很多 vim 中移动的命令

比如w / e基于单词移动,gg / G文件首尾,0 / 行首尾,f{char}查寻字符

ctrl+f ctrl+u 前后翻屏

那假如我想快速跳到当前窗口显示区的任意位置呢?

如何移动到任意位置

可以使用vim的搜索/加上n跳转,但是使用easymotion更方便

https://github.com/easymotion/vim-easymotion

安装

call plug#begin()
......
" easymotion
Plug 'easymotion/vim-easymotion'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

插件配置

官方文档比较长,其实一个映射就能应付

" easymotion
nmap ss <Plug>(easymotion-s2)

使用 ss 调用搜索就可以在整个文件可视区域快速跳转到任意位置。

Vim-surround,编辑也要成双成对

vim-surround

如果快速让你更换一对单引号为双引号,你会怎么做?

一个一个查找然后替换,是不是比较低效?

https://github.com/tpope/vim-surround

安装

call plug#begin()
......
" 快速更换成对的字符
Plug 'tpope/vim-surround'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

插件使用

normal 模式下增加,删除,修改成对内容

ds (delete a surrounding)
cs(change a surrounding)
ys (you add a surrounding)

给单词加引号,光标移动到要加入的单词上,可以依次按ys iw "

Hello  # ys iw "
"Hello"

给单词的双引号改单引号,光标移动到要加入的单词上,可以依次按cs " '

"Hello"  # cs " '
'Hello'

给单词的括号,光标移动到要加入的单词上,可以依次按cs ( ]这里要更改的括号使用后面的反括号可以避免出现空格

("Hello") # cs ( ]
["Hello"]

删除成对的内容用 ds,删除 " 可以用 ds "

["Hello"] # ds "
[Hello] #ds [
Hello

强大的Vim模糊搜索与替换插件

模糊搜索

我们经常需要在一个代码项目中模糊搜索一些文本,怎么办呢?

Vim 自带的搜索/可以搜索当前文件,但是项目有很多个文件

需要一个插件来模糊搜索多个文件内容

使用 Ag.vim 或者 fzf.vim 都可以很好地支持模糊搜索

fzf与fzf.vim

fzf是一个强大的命令行模糊搜索工具,fzf.vim集成到了 vim 里

https://github.com/junegunn/fzf.vim

fzf.vim 依赖于主 fzf 资源库的基本 Vim 插件,这意味着你需要在 Vim 上同时设置 "fzf""fzf.vim"

安装fzf

fzfgithub:https://github.com/junegunn/fzf

使用 git 安装:

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

安装fzf.vim

call plug#begin()
......
" 模糊搜索工具
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

插件使用

使用 Ag [PATTERN] 模糊搜索字符串(也可以替代ctrlp 插件)
使用 Files [PATH] 模糊搜索目录

搜索替换插件far.vim

如果想要批量搜索替换,可以试试 far.vim

https://github.com/brooth/far.vim

安装

call plug#begin()
......
" 搜索替换插件
Plug 'brooth/far.vim'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

插件使用

# 把 foo 替换成 bar,指定文件夹和目录 **/*.py
:Far foo bar **/*.py
# 确认替换
:Fardo
# 退出预览窗口
:q

Vim tagbar,更愉快地浏览代码

tagbar

代码大纲,Vim 当然也有,而且支持非常多编程语言

https://github.com/majutsushi/tagbar

需要安装 Universal Ctags 生成对应的 tag 文件

依赖

文档:https://docs.ctags.io/en/latest/

github:https://github.com/universal-ctags/ctags

安装

Building with configure (*nix including GNU/Linux)

$ git clone https://github.com/universal-ctags/ctags.git
$ cd ctags
$ ./autogen.sh
$ ./configure --prefix=/where/you/want # defaults to /usr/local
$ make
$ make install # may require extra privileges depending on where to install

Building on Mac OS

Building with Homebrew

brew tap universal-ctags/universal-ctags
brew install --HEAD universal-ctags

安装tagbar

call plug#begin()
......
Plug 'preservim/tagbar'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

插件使用

" tagbar
nnoremap <leader>t :TagbarToggle<CR>

使用快捷键 ,t 进行打开

vim-interestingwords

高亮你感兴趣的单词,浏览代码很有用

https://github.com/lfv89/vim-interestingwords

浏览代码的时候经常需要知道一个变量的使用方式

我们可以使用这个插件同事高亮多个单词

安装tagbar

call plug#begin()
......
" 单词高亮
Plug 'lfv89/vim-interestingwords'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

插件使用

光标移动到要高亮的词上,用 ,k 高亮显示 (小写k)
用 n 和 N 导航高亮显示的单词
使用 ,K 清除整个缓冲区中的所有高亮字词(大写K)

Vim快速注释代码

vim-commentary

vim 注释插件有很多,这里使用这个比较轻量

https://github.com/tpope/vim-commentary

记住常用的命令 gc 注释和取消注释

插件会根据不同的文件类型使用不同注释,python(#) golang(//)

安装vim-commentary

call plug#begin()
......
" 快速注释代码
Plug 'tpope/vim-commentary'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

插件使用

光标移动到要注释的行或者词上,按快捷键 gc 进行注释,有注释的按会解注释

强大的 vim 代码补全插件

deoplete.nvim

一个强大的 neovim/vim8 异步补全插件

https://github.com/shougo/deoplete.nvim

多编程语言的支持,支持模糊匹配

需要安装对应编程语言的扩展

安装deoplete

call plug#begin()
......
" 代码补全
if has('nvim')
  Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
  Plug 'Shougo/deoplete.nvim'
  Plug 'roxma/nvim-yarp'
  Plug 'roxma/vim-hug-neovim-rpc'
endif

call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

插件配置

" deoplete
let g:deoplete#enable_at_startup = 1
set completeopt-=preview

coc.vim

一个强大的 neovim/vim8 补全插件。LSP 支持

https://github.com/neoclide/coc.nvim

full Language Server Protocol support as VSCode

多语言插件支持

Vim代码格式化与静态检查

格式化与静态检查

为什么需要这些工具呢?能让工具做的就不用让人去费心

把精力集中代码逻辑本身,而不是整理格式这些浪费精力的事情上

静态检查是为了让编写的代码更加规范。golint/pylint/eslint等

无论你编写何种编程语言,最好都加上自动格式化和静态检查

Neoformat

vim-autoformat 和 Neoformat 是两种使用较多的格式化插件

https://github.com/sbdchd/neoformat

需要安装对应语言的格式化库。python autopep8/js的prettier等

安装Neoformat

call plug#begin()
......
Plug 'sbdchd/neoformat'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

需要安装对应语言的格式化库,如:autopep8

pip install autopep8

插件使用

输入命令 :Neoformat 后回车

静态检查Lint

neomake 和 ale 是两种常用的int 插件,这里我们选用 ale

https://github.com/wOrp/ale

同样需要安装对应语言的 lint 库。比如eslint/pylint/golint等

vim8/neovim 支持异步检查,不会影响 vim 编辑,推荐使用

安装ale

call plug#begin()
......
Plug 'wOrp/ale'
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

需要安装对应语言的格式化库,如:pylint

pip install pylint

vim和git,强强联手

Fugitive

在Vim 里使用 Git

https://github.com/tpope/vim-fugitive

Gedit, Gdiff, Gblame, Gcommit 等

vim-gitgutter

在vim 里显示文件变动

https://github.com/airblade/vim-gitgutter

当我们修改文件之后可以显示当前文件的变动

哪些行新增,哪些行修改了,哪些行删除了

gv.vim

如何在命令行查看提交记录呢?有个命令行工具叫做 tig

https://github.com/junegunn/gv.vim

使用:GV 命令调用

可以浏览代码提交变更

愉快写 golang 之vim-go插件

功能强大的 golang 插件 vim-go

https://github.com/fatih/vim-go

代码补全,重构,跳转,自动格式化,自动导入等功能

安装vim-go

call plug#begin()
......
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

python-mode把 vim 打造成轻量 Python IDE

Python 插件使用比较多的是 jedi-vim 和 python-mode

https:/github.com/python-mode/python-mode

python-mode同样具备基本的补全、跳转、重构、格式化功能

即使是在服务器上也能愉快调试 python 代码了

安装python-mode

call plug#begin()
......
Plug 'python-mode/python-mode', { 'for': 'python', 'branch': 'develop' }
call plug#end()

重新加载一下:source ~/.vimrc,然后安装 :PlugInstall

Vim和Tmux,天作之合

强大的终端复用工具。通过 brew(mac) apt-get(ubuntu)安装

可以复用终端、分屏、托管进程等

在服务器上即使退出服务器也不会被kill,托管进程也很方便

可以方便地分割屏幕实现多个进程公用屏幕

5-4 站在巨人的肩膀上,使用强大的开源配置

开箱即用

如果你已经熟悉了 vim 配置,可以从网上直接使用一些开源配置

https://github.com/SpaceVim/SpaceVim

https://github.com/PegasusWang

其他开源配置。不推荐新手直接使用,越复杂的配置上手成本越高

前言

在迁移网站过程中,导入数据库的时候发现上传文件那有个最大限制2048kb,并且上传小于2048kb的单文件也报413 Request Entity Too Large
作为小白的我一看到这些个问题就慌了,心想这可咋整

错误解决办法

在这简单记录下百度上找来的解决办法
使用的环境是Nginx + PHP + MySQL + Wordpress

phpMyAdmin相关问题

由于自己太菜。命令模式下MySQL玩不起来,就装了个phpMyAdmin,而phpMyAdmin一次导入数据库文件最大限制为2M,
而我sql文件可不止2M,于是百度看了下各位大佬总结出来的教程大致都是修改php.ini文件里的upload_max_filesizepost_max_size来解决的
1、首先打开php.ini,我的php.ini路径是:/etc/php.ini
2、搜索upload_max_filesize可以看到默认为2M,因此我将其修改为50M。具体多少可以根据自己实际需求去改

3、然后搜索post_max_size,这个修改为和upload_max_filesize一样的值

4、最后保存php.ini文件后重启服务器就可以导入超过2M的数据库了,记得一定要重启后才能生效

Nginx相关问题

phpMyAdmin改好了但上传文件是还是提示413 Request Entity Too Large
遇到不要换,不要怀疑你改错了php.ini,这是nginx捣的鬼,nginx默认限制上传文件大小1M
知道问题所在,解决就好办了,找到自己主机的nginx.conf配置文件,稍作修改即可
1、打开nginx服务的配置文件nginx.conf, 我的nginx.conf路径是:/etc/nginx/nginx.conf

2、将以下代码粘贴到nginx.conf内,我这里配置的是50M,可以其他


client_max_body_size 20M;

可以选择在http{ }中设置:client_max_body_size 20m;
也可以选择在server{ }中设置:client_max_body_size 20m;
还可以选择在location{ }中设置:client_max_body_size 20m;
三者有区别
设置到http{}内,控制全局nginx所有请求报文大小
设置到server{}内,控制该server的所有请求报文大小
设置到location{}内,控制满足该路由规则的请求报文大小


http {

client_max_body_size 100m;

include       mime.types;

default_type  application/octet-stream;

3、重新nginx服务


systemctl restart nginx

最后,本次上传限制到这也就结束了,博客数据也成功恢复过来,简单记录本次遇到的错误!