配置VS Code

  VS Code是世界上最好的IDE! Visual Studio、Pycharm加载太慢, Vim键盘操作对菜鸟不友好, Jupyter Notebook版本管理混乱, Spyder太鸡肋. 在这几个IDE之间游走了很久, 最后下定决心, 把所有的生产工作全部集中到VS Code上. 优点是轻量化, 跨平台通用, 支持丰富的插件. 下面记录一下当前采用的VS Code配置, 以便以后在新的平台上部署生产力.


  • 远程连接服务器

  1. 下载插件: Remote - SSH.
  2. 在local host上生成SSH key, 将SSH key加入到remote的authorized_keys中, 即获得访问权限.
  3. 配置local host的.ssh/config文件.
    1
    2
    3
    4
    5
    6
    7
     Host hh-b.brainpp.cn
     HostName hh-b.brainpp.cn
     Compression yes
     ForwardAgent yes
     ForwardX11 yes
     ForwardX11Trusted yes
     User wayne-fung-v2.fengwei.ws2
    
  4. 在VS Code中输入host id, 按Enter开始连接.
  5. 打开VS Code下的终端, 如果连接成功的话, 终端的路径就是在remote端的文件夹下了, 同时左下角会显示绿色的成功标识.
  6. 打开remote的文件夹, 就可以开始工作了.
  7. 需要关闭远程连接时, 选择文件 - 关闭远程连接或者直接关闭窗口即可.

  • 编译LaTeX

  1. 在本机上下载TexLive(Windows) / MacTex(Mac)配置好$LaTex$所需的各种环境包.
  2. 下载插件: LaTeX Workshop.
  3. 文件 - 设置中, 打开settings.json添加以下配置. 这里指定了四种基本的编译器: xelatex, latexmk, pdflatexbibtex, 由这四种编译器组成了几种基本的编译pipeline.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     "latex-workshop.view.pdf.viewer": "external",
         "latex-workshop.view.pdf.external.synctex": {
         "command": "C:/Program Files/SumatraPDF/SumatraPDF.exe",
         "args": [
             "-forward-search",
             "%TEX%",
             "%LINE%",
             "%PDF%"
         ]
     },
         "latex-workshop.latex.recipes": [
         {
             "name": "xelatex",
             "tools": [
             "xelatex",
             ]
         },
         {
             "name": "xelatex ➞ bibtex ➞ xelatex`×2",
             "tools": [
             "xelatex",
             "bibtex",
             "xelatex",
             "xelatex"
             ]
         },  
         {
             "name": "bibtex",
             "tools": [
             "bibtex"
             ]
         },
         {
             "name": "latexmk 🔃",
             "tools": [
             "latexmk"
             ]
         },
         {
             "name": "pdflatex ➞ bibtex ➞ pdflatex`×2",
             "tools": [
             "pdflatex",
             "bibtex",
             "pdflatex",
             "pdflatex"
             ]
         }
         ],
         "latex-workshop.latex.tools": [
             {
                 "name": "xelatex",
                 "command": "xelatex",
                 "args": [
                     "-synctex=1",
                     "-interaction=nonstopmode",
                     "-file-line-error",
                     "%DOC%"
                 ]
             },
             {
             "name": "latexmk",
             "command": "latexmk",
             "args": [
                 "-synctex=1",
                 "-interaction=nonstopmode",
                 "-file-line-error",
                 "-pdf",
                 "%DOC%"
             ]
             },
             {
             "name": "pdflatex",
             "command": "pdflatex",
             "args": [
                 "-synctex=1",
                 "-interaction=nonstopmode",
                 "-file-line-error",
                 "%DOC%"
             ]
             },
             {
             "name": "bibtex",
             "command": "bibtex",
             "args": [
                 "%DOCFILE%"
             ]
             }
         ],
         "latex-workshop.latex.clean.fileTypes": [
             "*.aux",
             "*.bbl",
             "*.blg",
             "*.idx",
             "*.ind",
             "*.lof",
             "*.lot",
             "*.out",
             "*.toc",
             "*.acn",
             "*.acr",
             "*.alg",
             "*.glg",
             "*.glo",
             "*.gls",
             "*.ist",
             "*.fls",
             "*.log",
             "*.fdb_latexmk",
             "*.spl",
             "*.synctex.gz",
             ],
    
  4. 若当前选中.tex文件, 插件会在左侧栏自动弹出. 如果要把参考文献.bib的引用也编译进pdf的话, 需要按照latex -> bibtex -> latex -> latex的pipeline接力编译才行. 另外, 需要注意的是, 如果文中图片是.eps格式, 则只能用xelatex编译; 如果是.pdf格式, 则只能用pdflatex编译.
  5. 特殊字符提示Snippet Panel, 这个好功能一起一直忘了用, 免去了查书的过程.
  6. 一些辅助: Code Spell Checker拼写检查, English word hint英文自动补全(巨好用, 直接导致我不会打英文单词了), latex count统计写作字数.
  7. .eps格式的图片在编译后可能会出现显示不全的问题. 为此可以先生成该文件的.pdf版, 再用PS或Adobe Acrobat转成.eps格式(注意在输出时要选择无压缩无插值保证清晰度). 也可以不经过.pdf格式, 直接编译, 但需要经由DVI -> PS -> PDF转换.

  • Jupyter Notebook

  微软2019年10月份新推出的原生功能, 以后再也不用在IDE和Chrome Jupyter之间来回切换了, 图个画图的方便. 不过经过亲测, 还是有一些bug的, 比如刚打开时加载内核非常慢, 写文件时还会遇到权限错误, 后来就弃用了, 还是浏览器的视觉效果要好一点, 应该后续更新会解决这些问题.


「评论区」: