VSCode格式化代码功能失效的bug解决方法

我在更换了系统,并使用VSCode的Settings Sync插件同步设置和其他插件后,部分插件功能失效,无法格式化代码等问题的查找和解决

VSCode格式化代码功能失效的bug解决方法

前不久我装上了黑苹果,那么为了快速转移开发环境,我使用了VSCode(Visual Studio Code下面简称VSCode)的插件Settings Sync来同步个人设置和其他常用插件,如果不熟悉Settings Sync的可以参考之前我写的一篇文章《Visual Studio Code 设置同步到github的插件介绍及使用方法(Settings Sync)》来使用。

现象

当然本文并不是介绍同步,而是要说同步后的编码过程中出现的异常。在Mac下安装好VSCode,用Settings Sync同步成功后,接着git clone正在开发的项目到本地,开发过程中,却发现一个非常奇怪的问题:所有的格式化代码的功能都失效了。Mac下使用快捷键“Alt+Shift+F”(我用的windows键盘),却提示,“当前没有安装“xxx”文件的文档格式化程序。”!我的Vue,SCSS代码都无法正常格式化!这个非常令人不爽,难道Mac下的VSCode会有格式化代码功能的缺失?和Windows版本的VSCode功能不一致?我觉得不太可能。于是重启回到Windows 10,重新拉了项目测试,毫无问题。无论是Windows还是Mac,都是最新版的Visual Studio Code。

分析

无奈之下去google了一下格式化代码的问题,发现很多人都遇到过,有的人说重装VSCode,但是我才新装的,所以排除了,但是重装这个词让我想起一个东西,就是这些格式化代码工具,例如VeturPrettier,他们正常运行的时候都是会在编辑器中产生一个服务或者提示,而失效状态下是看不到的。于是我尝试把Vetur插件停用,重新加载再启用,然而还是无效!

想来想去,插件也安装了,编辑器也是新装的,为何插件没起到作用,突然记起之前Windows下的输出面板中是有Vue Language Server的,而现在却没有,是不是要重新安装插件呢,或者说通过Settings Sync自动化同步插件安装的功能还存在一些其他的问题呢?

解决方案

带着疑问我尝试着将Vetur和Prettier卸载,然后再重新安装,启动VSCode,打开项目,切换到一个Vue页面,终于看到了Vetur的服务,比如下面这张图中表现了正常的格式化功能的效果(截图为我解决问题后的图片)

正常的格式化插件效果

图中看到这里有个Vue Language Server,才是真正表示Vetur插件正常,右下角还有个Prettier,说明一切正常,再试了一下使用快捷键“Alt+Shift+F”,也终于可以正常格式化代码了!问题完美解决。

结论

有时候自动化工具安装的插件可能会存在一些问题,虽然不排除我这个问题发生的偶然性。

另一方面,重装软件有时候能解决问题,不过需要针对问题分析,从最小的改变逐渐排除故障。如果我把VSCode重装,再用Settings Sync同步一次,也许的确可以解决问题,但是也有可能依旧存在问题,而从插件重装下手才是比较省时省力的。

那么,如果开发中依赖插件的部分功能失效了,你也可以尝试重装插件,或许问题就能快速解决了~

中介找房小记

不要找中介。就算找一定不要留电话,打死不给。爱带看房不带!看完房他开了个价不接受就不要被他怂恿还能和业主谈谈了。没诚意!否则坑会越陷越深!

中介的内部斗争很严重,找中介租房务必谨慎啊!

之前有发过贴说,老妈来广州玩,所以要搬家找个两房一厅,于是上周末就去看了信息港附近的房源,很多是安居客上面看了联系中介去看房,也有些是直接去店里直接咨询。看了房有十几套,有些跟中介交流的感想分享下。

前面比较啰嗦,嫌麻烦可直接看总结部分- -!

最早看到网上大部分是裕三I的房源,感觉挺不错,约看房,服务态度感觉也不错,就是都超出预算,很旧的房子楼层较高,60平米开价基本3300-3500,所以部分没考虑,有几个3000出头的在考虑中,他们就天天问考虑咋样。很蛋疼,这不是重点重点是,下面这种情况。

有两组来自不同分店的裕三I的员工,假设组A和组B,推荐了房子,组A的一名同事A1起初说是3200?(后来他说当时跟我说的是3000),我看了下没衣柜没桌子,3200太贵没考虑,又约到组B的同事B1,看了一套3000块的,当时已经看了很多,差不多就这样了,问还能便宜点嘛,说不能,那行那就这个3000块的吧。我说明天来详谈。

第二天早上A1的又微信问我说考虑咋样,我说B1推荐了个3000的不错,你们同一个公司咋没推荐那个给我,他说那个以为我看过了,还是说了别的什么理由记不清了,就说所以没告诉我,接着说,为什么你不考虑另外一个之前推荐的3000的那个还新一些,我说啥时候有个3000的推荐了(我记得之前好像说的是3200左右,也有可能我记错了),后来聊了下才知道原来说的是那套没柜子没桌子的那套,突然说可以谈到2700,2800的样子,我说那边3000的我都说好了,这样反悔不好吧,他说那你自己觉得哪个划算,我说你这个划算,他说,没交定金,口头协议无效的,这行都是这样没事的。在他的怂恿下,我说那行那我跟那边推了吧,就你这个了,晚上再聊聊屋内家具的问题。

于是我就很不好意思的跟B1说,“不好意思,那边开了个价格性价比挺高。”我想了下晚上过去聊聊,如果可以估计就租那边了。B1听了说,“行吧那你晚上看完回个消息”,估计心里有点不爽了。

晚上约了A1,A1还带了店长A2,A2说2700可以,但是家具可能要自己买,或者再跟业主商量下,然后没过多久等消息回复说跟业主沟通过了,2700可能不行,2800业主配家具应该是可以,不过我还会争取一下尽量便宜点,你看咋样(以上全程沟通是店长A2,似乎权力更大,还提到A1说挺努力,也挺希望能和我成交,是的我的确很感谢。),我正在想这个问题的时候,又来个电话。。。

这个电话是B1的同事店长B2,我擦,这些中介这么看得起我,我组个破2室一厅,这么多店长出动啊。B2又在电话说,“B1才来一个月,可能跟业主沟通不到位,我刚才问了,那个3000的最低可以2800”,这尼玛,A1那边的刚微信过来收据都写好了。B2又来这一出。

此刻,作为选择困难症的我,非常纠结,我是一个比较反感出尔反尔的人,所以我对自己变来变去也感到恶心。但是B2的那边有家具什么的,的确更有优势,而且楼层还低一层(7楼)(其实我观察过8楼的还有隐藏劣势,插座位置设计不合理,插座数量很少等等)。。。但是A1那边收据都发来了等我转账呢,我刚答应人家的。B2又开始怂恿我说,那还没转帐就没事,你自己觉得同样的价格是不是我们的更好。我说我实在不好再改变了,我去找A1确认2700的事情。

结果跟A1聊了下说最低2800了,业主自己配家具,我说之前不是2700吗,这样我自己配吧,就2700,他那边又说可能不行。最低2800,然后我就婉言推辞了,那我还是选另外一家了。

过程中,有微信和A1聊到,天真的我透露了那边3000变2800的消息,这个极其危险!

我不再纠结了,就选组B了,说好2800,不再折腾了,于是回复B2,“我已经推掉组A了,你给个确定的答复”,B2这次却又没有斩钉截铁的说行,成交。我知道这事估计凉凉。。。B2说他跟业主再沟通下回复我。等了半小时还没回复,我已经做了不租了的打算,并写下这篇坑爹租房记。

写到尾声的时候,B1突然来电话了,说,沟通过了2800没问题。明天签,我也比较郑重地说,我这边没问题,不过鉴于你们这个多次变动的情况,我希望你能再次准确的确认,2800一个月,没有额外费用等等,他说没问题了,明天签合同。

至此,几乎到了晚上11点,和组A,组B搞了一晚上。我写的也有点累了。明天希望能顺利成交吧。

经验结论:

1. 中介之间的斗争似乎相当激烈,千万不要透露任何一方中介的房源情况,应当简单明了的说,我找到更好的了,我没有义务告诉你是哪套房源。

2. 和中介在确定是否租房的时候,一定要下定决心,看好就签合同,不要和其他中介说过多的信息,而且他们真的会经常发生变动,比如你其实看好了,就直接签吧,说不定他们或者业主(他们甩锅给业主也可能)会突然变卦。

3. 如果不是特别难找的或比较着急,不建议找中介。

好了希望明天不出什么幺蛾子。睡觉,累死爹了。

我也是第一次和中介打交道,可能也是最后一次,这次在处理某些事情上有很多错误,我沟通中也存在一些问题,不过希望这个情况不是非典型案例,仅供参考。

2018年5月10日

今天晚上总算成交了,那个B1今天也跟我吐苦水,说我泄露了他这边低价,估计组A暗中欺骗业主说有更好的价格(租金高100),来阻止我这边成交。他也很无奈。

总之不要找中介。就算找一定不要留电话,打死不给。爱带看房不带!看完房他开了个价不接受就不要被他怂恿还能和业主谈谈了。没诚意!否则坑会越陷越深!

Vue下滚动到页面底部无限加载数据Demo

看到一篇Implementing an Infinite Scroll with Vue.js, 觉得挺实用的就看了下, 顺便简单翻译了一下给需要的人参考.
从这个项目中可以加深对Vue的生命周期的理解, 何时开始axios请求, 如何结合Vue使用原生js来写scroll事件等等, 我这里主要是对原文的重点提取和补充

Vue下滚动到页面底部无限加载数据Demo

看到一篇Implementing an Infinite Scroll with Vue.js, 觉得挺实用的就看了下, 顺便简单翻译了一下给需要的人参考.

从这个项目中可以加深对Vue的生命周期的理解, 何时开始axios请求, 如何结合Vue使用原生js来写scroll事件等等, 我这里主要是对原文的重点提取和补充

本文技术要点

  • Vue生命周期
  • axios简单用法
  • moment.js格式化日期
  • 图片懒加载
  • 结合原生js来写scroll事件
  • 请求节流

创建项目

首先创建一个简单的vue项目

# vue init webpack-simple infinite-scroll-vuejs

然后安装项目所需要用的一些插件

# npm install axios moment

初始化用户数据

项目搭建完后, 跑起来看看

# npm run dev

打开http://localhost:8080无误后, 我们开始修改代码, 先看看获取用户数据这块,

<script>
import axios from 'axios'
import moment from 'moment'
export default {
  name: 'app',
  // 创建一个存放用户数据的数组
  data() {
    return {
      persons: []
    }
  },
  methods: {
    // axios请求接口获取数据
    getInitialUsers() {
      for (var i = 0; i < 5; i++) {
        axios.get(`https://randomuser.me/api/`).then(response => {
          this.persons.push(response.data.results[0])
        })
      }
    },
    formatDate(date) {
      if (date) {
        return moment(String(date)).format('MM/DD/YYYY')
      }
    },
  beforeMount() {
    // 在页面挂载前就发起请求
    this.getInitialUsers()
  }
}
</script>

这里原作者也专门提醒, 完全没有必要也不建议在加载页面的时候请求5次, 只是这个接口一次只能返回1条数据, 仅用于测试才这样做的. 当然我这里也可以通过Mock来模拟数据, 就不详细说了~

接下来来写模板结构和样式, 如下:

<template>
  <div id="app">
    <h1>Random User</h1>
    <div class="person" v-for="(person, index) in persons" :key="index">
      <div class="left">
        <img :src="person.picture.large" alt="">
      </div>
      <div class="right">
        <p>{{ person.name.first}} {{ person.name.last }}</p>
        <ul>
          <li>
            <strong>Birthday:</strong> {{ formatDate(person.dob)}}
          </li>
          <div class="text-capitalize">
            <strong>Location:</strong> {{ person.location.city}}, {{ person.location.state }}
          </div>
        </ul>
      </div>
    </div>
  </div>
</template>

<style lang="scss">
.person {
  background: #ccc;
  border-radius: 2px;
  width: 20%;
  margin: 0 auto 15px auto;
  padding: 15px;

  img {
    width: 100%;
    height: auto;
    border-radius: 2px;
  }

  p:first-child {
    text-transform: capitalize;
    font-size: 2rem;
    font-weight: 900;
  }

  .text-capitalize {
    text-transform: capitalize;
  }
}
</style>

这样页面就能显示5个人的个人信息了.

处理无限滚动加载逻辑

我们接下来需要在methods里面添加scroll()来监听滚动, 并且这个事件是应该在mounted()这个生命周期内的. 代码如下:

<script>
  // ...
  methods: {
    // ...
    scroll(person) {
      let isLoading = false
      window.onscroll = () => {
        // 距离底部200px时加载一次
        let bottomOfWindow = document.documentElement.offsetHeight - document.documentElement.scrollTop - window.innerHeight <= 200
        if (bottomOfWindow && isLoading == false) {
          isLoading = true
          axios.get(`https://randomuser.me/api/`).then(response => {
            person.push(response.data.results[0])
            isLoading = false
          })
        }
      }
    }
  },
  mounted() {
    this.scroll(this.persons)
  }
}
</script>

这段代码原文是有一点拼写错误的. 我这里修正了, 另外增加了距离底部即开始加载数据, 并进行截流.

保存好, 回到浏览器, 查看效果, 已经没有问题了~

总结

滚动到页面底部无限加载的功能在Vue上实现其实和普通的页面开发差不多, 每次滚动加载未完成的情况下不会触发请求下一次, 每次请求push到数组内, 通过<img :src="">的数据绑定实现了懒加载(其实0 0我不太认可…), 看完是不是感觉挺简单的.

最后, 我把这个也弄了一份在GitHub上面, 有需要的可以看看infinite-scroll-vuejs-demo~

Clevo W350ETQ(神舟K590S)安装黑苹果10.13总结

作为一名爱瞎折腾的前端来说, 学会使用MacOSX, 或许是有必要的, 于是想着去买一台MBP, 可是无奈电脑太多, 不想再添置, 于是把我的神级Clevo W350ETQ(也是神舟后来出的K590S)忍痛的挂在了闲鱼上, 自己一直保养很好, 后来怒加4G条子和SSD, 所以卖的比一般的二手贵, 无人识相, 遂继续自用.

2018年7月16日更新

经过了长达半年的折腾。陆陆续续修修补补,终于把这个机型的黑苹果给完善了。此文档主要做备份说明和分享。我将相关Clover配置和补丁文件发布到了Github,有兴趣可以直接访问:

准系统W350ETQ(神舟K590S)的黑苹果Clover

下载下来直接尝试使用。

以下内容是之前4月写的,有兴趣可以阅读。


作为一名爱瞎折腾的前端来说, 学会使用MacOSX, 或许是有必要的, 于是想着去买一台MBP, 可是无奈电脑太多, 不想再添置, 于是把我的神级Clevo W350ETQ(也是神舟后来出的K590S)忍痛的挂在了闲鱼上, 自己一直保养很好, 后来怒加4G条子和SSD, 所以卖的比一般的二手贵, 无人识相, 遂继续自用. 我的电脑配置及相关评测曾经也在博客(相关索引)中提到. 在当年来说是非常强悍的一款游戏本, 至今依然能算一台中端性能笔记本, 只是便携性太差, 一直以来都作为办公台式机使用, 我这台配置如下:

处理器名称: Mobile QuadCore Intel Core i7-3612QM, 3000 MHz (30 x 100)
主板名称: Clevo W35_37ET
主板芯片组: Intel Panther Point HM77, Intel Ivy Bridge
系统内存: 8084 MB (4 GB * 2 DDR3-1600)
显示适配器:
  Intel(R) HD Graphics 4000
  NVIDIA GeForce GTX 660M
显示器: LG Philips LP156WF1-TLC1 [15.6" LCD]
音频适配器: Realtek ALC269 @ Intel Panther Point PCH - High Definition Audio Controller [C-1]
IDE 控制器: Intel(R) 7 Series Chipset Family SATA AHCI Controller
IDE 控制器: Realtek PCIE CardReader
硬盘驱动器: OCZ-VERTEX4
硬盘驱动器: ST9500423AS
光盘驱动器: TSSTcorp CDDVDW SN-208AB
键盘: PS/2 标准键盘
鼠标: ELAN Input Device
网络适配器: Realtek PCIe GBE Family Controller
网络适配器: Realtek RTL8723AE Wireless LAN 802.11n PCI-E NIC (192.168.31.248)
USB 设备: BisonCam, NB Pro
USB 设备: Realtek Bluetooth 4.0 Adapter
USB 设备: TouchStrip Fingerprint Sensor (WBF advanced mode)
DMI 系统制造商: CLEVO CO.
DMI 系统产品: W35_37ET

只有先弄清楚配置才能接下来进行黑苹果的安装, 其实几年前我尝试过安装黑苹果, 最终以失败告终, 然而本来是抱着看看的心理, 又跑去看远景论坛, 看到一个帖子: 

【初春之献】macOS High Sierra 10.13.4 17E199 With Clover 4423修正原版镜像, 一下子又动了心, 于是这清明几天假又没有休息好, 为了安装上黑苹果简直比上班工作的状态还要投入, 一下子三天过去了, 我后背越发疼了. 心想这几天本来可以好好休息顺便学习下Vuex, 计划泡汤! 好在, 最后还是折腾出来了点结果. 基本上算比较完美了. 接下来我就对这几天的研究做个总结. 先上图两张图过过瘾. 继续阅读“Clevo W350ETQ(神舟K590S)安装黑苹果10.13总结”

X79SR主板安装4TB大容量硬盘后开机奇慢折腾数日小结

自从坑爹的3TB希捷ST3000DM001突然暴毙,电脑上就只有一个480G的SSD了,这怎么能行呢。SSD肯定是不能做仓库盘的,毕竟还有很多不常用数据不适合放在SSD上,比如下载的电影,音乐,照片,视频教程之类。于是,鉴于历史的教训,我决定买故障率最低的东芝监控盘MD04ABA400V, 回来装上后发现开机奇慢。于是又折腾了几天几夜。。。

自从坑爹的3TB希捷ST3000DM001突然暴毙,电脑上就只有一个480G的SSD了,这怎么能行呢。SSD肯定是不能做仓库盘的,毕竟还有很多不常用数据不适合放在SSD上,比如下载的电影,音乐,照片,视频教程之类。于是,鉴于历史的教训,我决定买故障率最低的东芝监控盘MD04ABA400V, 回来装上后发现开机奇慢。于是又折腾了几天几夜。。。

最后无奈退货了。折腾的过程我就不详细说了,几天几夜的收获我简单总结下吧。

异常现象:

我的电脑主板是Intel X79SR,有2个原生SATA3,2个原生SATA2,2个第三方SATA3控制器,一个SSD(WIN10,开启了AHCI且UEFI引导)和4T新硬盘安装在原生SATA接口上,一直会开机的时候在BIOS自检后卡顿接近2到3分钟,此时硬盘等持续亮着,也就是一直在读取操作。

分析原因:

起初以为是主板对4T硬盘支持不好,自检时间过长,查阅主板说明书和相关相同主板有关资料,考虑到之前用的3T都没什么,认为与此无关。

换成第三方SATA3接口后,竟解决了开机慢的问题,然而出现新问题,关机时,硬盘断电异常,也就是无法正常停止硬盘供电,导致每次关机咔嚓一声响,SMART检测异常关机次数累加。因此该方案无效!

怀疑是硬盘问题,可是经过各方检测,一切属性良好,故排除。

怀疑过电源问题,供电不足导致,经过接口调换,单独供电等测试无效,故排除。

怀疑是硬盘分区格式问题,将4T硬盘的GPT改为MBR(此时仅可使用容量不到2T),似乎开机恢复正常,但是少了2T的容量是不可行的。

怀疑是UEFI问题,于是拔掉SSD,单装4T硬盘,通过U盘进入PE,依旧很慢,于是关闭UEFI,就好了。但是我SSD上WIN10系统用的是UEFI引导,又不想重装系统,于是十分纠结。

解决方案:

最后我还是很抱歉的退掉了4T的东芝神盘,决定买个2T的HDD,因为京东上希捷价格相对低一些,而且2T的故障率没有那么高了,最后还是买了希捷(我想用个几年就备份一次数据,还新硬盘吧)。

由于事情过去一个多月了,记不清楚是否装上开机就正常了,但是我清楚地记得,并可以得出一个准确的结论

Intel X79TO/SI/SR系列的主板,对UEFI的支持是绝对很差的。当磁盘处于GPT分区状态下,会发生不可预料的异常(我记得当时UEFI下安装WIN10装不上,我后来通过特殊手段在PE下才装好)。

那么最好的方案是该主板安装WIN7,可以开启AHCI模式,不要开启UEFI!尽量使用MBR,如果硬盘容量过大,采用GPT也可(之前3T从未出现开机很慢的情况)。

如果非要安装WIN10(比如我玩游戏仅支持WIN10系统,所以才换了系统),也不要用UEFI,使用MBR引导方式来进行安装即可。如果系统盘是大硬盘,也可使用GPT,这个虽然后来没办法测试,但是理论上应该是可以的。

最后简单来说,Intel X79系列主板对UEFI支持很差,慎重使用!的确有些老主板说明支持一些新特性,但是实际上容易出现的问题很多,也就是说旧电脑即便配置性能达标,但是也不建议追新~