初装系统,初装软件安装,搭建开发环境等的步骤。重装备用。会持续更新。
目前(2023)包括mac zshell,vim,git及常用软件。这次比较折腾了一下的是vim主题,忍不住跑偏。

安装 homebrew

因为被墙的关系,很多文章记录的都行不通。故记录。

  1. 官网下载,步骤点进去有

  2. 如果ping github不通,就要改host

  3. 在终端用vpn下载方法:

    1. 选择clashX的“复制终端代理命令”,黏贴到终端运行
    2. 运行完了再进行步骤1

    * 此命令关掉此终端就没了

  4. 如果遇到错误命令
    error: Not a valid ref: refs/remotes/origin/master
    运行
    export HOMEBREW_NO_INSTALL_FROM_API=1

brew 一些命令的说明

brew list  # 列出通过brew安装的所有包
brew list go  # 查看go实际安装的路径
>> /usr/local/Cellar/go/1.21.6/bin/go
>> /usr/local/Cellar/go/1.21.6/bin/gofmt
>> /usr/local/Cellar/go/1.21.6/libexec/api/ (24 files)
...
>> /usr/local/Cellar/go/1.21.6/libexec/ (6 files)

brew --prefix  # brew本身的安装路径
brew --prefix go  # 显示出来是软链,指向当前激活的go版本
>> /usr/local/opt/go

终端设置和dotfiles文件

文档管理

这段是第一段,但是是后面补的。当各种文件配置越来越多,就会需要一个统一的规范将这些配置文档管理起来。也有很多学名,此文件夹一般叫做dotfiles。 意思就是里面放置了各软件的配置文件,包括shell zsh/bash,vim,等等一些配置。这样统一托管起来,一键拉下就可以在不同的系统环境上使用熟悉的配置。
比较系统的介绍是这篇:使用 GNU stow 管理你的點文件

我参考了许多,综合了一下,目前的方案是这样。
dotfiles:
– init.sh # 初始化shell,启动设置以及source prompt.sh 和 config.sh,如果当前是zsh,source zsh.zshrc,如果是bash,目前还没用到,就先source ~/.bashrc
– prompt.sh # 放prompt提示符样式的配置,zsh和sh都可以
– config.sh # 放普通的通用设置,颜色啊历史啊,以及export各文件path。这下就没有用.zshenv这个文件了。
– zsh.zshrc # zsh专用配置,分出此脚本因为绑定热键的时候发现zsh和bash语法又不一样。目前配了一些快捷键,主要是想用前缀查找历史命令
– init.vim # 和init.sh对应,初始化vim配置。但目前还没有太多功能需求,所以都写在这里面了。
– bootstrap.sh # 运行一下,把init.sh 添到~/.zshrc (bash是~/.bashrc)里去,把init.vim 添到 ~/.vimrc里去。

配置文件的注意点

  • 此时(2023年)之后mac默认shell是zsh。查看 echo $SHELL (需大写)。
    而root的shell是sh,且没有软链到bash 。查看-lh /bin/sh
  • 以前一般bash的默认配置在~/.bashrc里,mac的shell是zsh的话,用~/.zshrc
    普通bash和zsh这两者,不登陆模式也加载,但是每次开新shell都会加载,多了启动会慢。
    这两者还分别有对应文件~/.bash_profile~/.zprofile。这两个只初始加载一次,但需要登陆。
  • 本机(普通和root都)初装没有.zshrc,也没有.bash_profile.bashrc
  • 现在一般都只留rc系列,即 mac默认配置shell的话,普通用户配置 ~/.zshrc指向 /User/[USERNAME]/.zshrc,root用户(bash版)配置~/.bashrc指向 /var/root/.bashrc
  • ~/.zshrc不分登不登陆。
    ~/.bashrc ,如果只有它的话就都读它,如果还存在~/.bash_profile,且是登陆方式,就会跳过/.bashrc
  • 但是root的sh初始化是POSIX模式,为了兼容。只初始化尽可能少的内容,只有$ENV变量扩展而得到的文件,其他文件通通不执行。所以相当于上一条那些文件都没有的样子,所以命令行启动项是这样子的:
     sh-3.2#
    
    因为sh不是bash,不会加载 /etc/bashrc 来规范 PS1 的变量。
    且由于sudo su过来什么都不执行,所以source各种下次再开也没用。

环境语言

  • 在iTerm2里面,profile-terminal下的Set locale variables automatically 去掉。

  • 此时默认locale就为空了,那么再export LANG="zh_CN.UTF-8",考虑到语言是全局设定,在/etc/profile里添加此设置。

  • 此时vim编辑时中文乱码,在~/.vimrc中添加

    set termencoding=utf-8
    set encoding=utf8
    set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030
    

    后面配置文件改成[mypath]/init.vim了,在~/.vimrc中source。
    如果后面vim配置文件多了,再拆分init.vim

    忽然又ls乱码了,source了一下etc/profile。为啥要手动source?
    原来是因为zsh不会加载此文件,于是改成将LANG的设置添入/etc/zshenv,因为搜了一下,这个文件在交互/不交互各种模式都会加载。

  • 最后在git的时候,文件名里的中文也不能显示,敲命令git config --global core.quotepath off

shell设置

搜索了一圈,拒绝ohmyzsh,太重了,所以后面的配置都是自己弄的。但是以下这三个官方插件,权衡很久还是很有必要装一下。

  • zsh-autosuggestions # 自动补全
  • zsh-syntax-highlighting # 代码错误高亮
  • zsh-history-substring-search # 前缀搜索
    在终端运行:brew install [插件名称]

要source的path是:"$(brew --prefix)/share/$pkg/$pkg.zsh"
其中 $pkg是包名字。
$(brew –prefix)是brew的安装路径。*这里不能直接取包路径,因为包安装路径和它source的路径还不一样。

shell设置复杂的多。现在已经有三个文件,$HOME/.zshrc的本机文件。给所有通用的配了init.sh文件,放在/Users/config/下面,终端的样式prompt配置单独写了一个prompt.sh也放在这里。最后因为热键绑定zsh和sh又不一样,最后又单独分离出一个zsh.zshrc文件出来写专门zsh的配置,给init.sh只留下通用的启动项。

目前方案是,单独本机的配置先放在~/.zshrc中,它source init.sh,which放一些公共的设置,init.sh 再source zsh.zshrcprompt.sh,which设置zsh的配置和终端外观。等我思考一下如何从github上将它们一键布置。

目前~/.zshrc的设置只有source init.sh和 各语言的alias和export path。

init.sh是一些通用配置,目前有color,history大小,启动propmt和zsh专有配置。

zshrc和prompt单独说。

zshrc

先阅读 archwiki-zsh

zsh.zshrc的热键映射语法和sh不一样,所以单独分出来。这边绑热键,涉及键盘键位、iterm设置,终端设置,所以绕了好久。

补:
Zsh 使用自带的 zle 代替 readline,并且不会读取 /etc/inputrc 或者 ~/.inputrc。 Zle 有 emacs 和 vi 两个模式,默认根据环境变量 $EDITOR 来决定模式,为空/默认为 emacs 模式。bindkey -e 或者 bindkey -v 来手动指定模式。

首先是键盘,目前是宁芝x99(嘿嘿),先设置了mac布局。
然后下载了karabiner,主要在这里改键盘热键。
主要是我还是想用win的ctrl+cv复制黏贴,短手caps用不了一点,默认的大拇指折进去也费劲。且同时win和mac的cmd和alt好像换了键位,导致涉及三个键的更改,后面配屏幕显示和实际按键的时候已经晕了,又从头开始捋。

一层一层加。先在mac系统配键盘快捷键→修饰键那里,互换ctrl和cmd。这一层是为了用ctrl+cv来复制黏贴。
💡 这里要注意的是,如果使用了karabiner,在mac设置里,要选karabiner键盘,选物理键盘改键没用。

然后这时cmd和alt的键位是错的,再进入karabiner,互换左comd和左opt(alt),以及右opt和右ctrl又反了不知为何,这里也换过来。
复杂映射目前配了鼠标的侧键复制黏贴(感觉上键有点费劲);改了用left_shift切换输入法;用shift+esc代替cmd+backspace来删除文件夹中的文件;将caps_lock映射成cmd+ctrl+opt+shift。
caps映射这里本来我用caps映射了fn的,但是很容易误触,因为我打开了fn唤出表情符号,而且这四个+其他键还可以组好多快捷键,所以后面换成这个了。但是我的fn又没地方放了,宁芝键盘没有单纯的fn键,fn+F1这些就很难按。
💡 这里要注意的是,我已经换了ctrl和opt,所以删文件的json原本是opt的地方要改成ctrl。

顺便在karabiner重新配了f1-f12,宁芝默认音量和播放那些键和系统默认的不一样,改一下。并打开as standard function keys,意思是音量和播放这些键要配合辅助键使用。默认的f1-f12这些,又回mac设置里绑了启动台,调度中心这些。

mac默认没有json,所以浅记录一下目前弄的mac系统快捷键

命令 键盘按下 屏幕显示 其他
打开/关闭程序坞 ctrl+esc ⌘⎋
显示启动台 F1 F1
聚焦搜索 F2 F2
打开/关闭台前调度 F9 F9
应用程序窗口 F10 F10
调度窗口 F11 F11
显示桌面 F12 F12
截屏 alt+1 ⌥1
截屏内容拷到剪贴板 alt+2 ⌥2
全屏拷到剪贴板 alt+3 ⌥3
服务→通用→newfile caps+t ⌃⌥⇧⌘T 自己建的,新建文件,建法请搜索
服务→文本→半全繁简 cmd+拼音首字母 ⌃拼音首字母 起作用了一下就失灵了不知为何
服务→下面想唤出应用笺条和iterm caps+字母 ⌃⌥⇧⌘字母 应用想统一用ctrl,但不起作用不知为何
访达搜索窗 ctrl+shift+f ⇧⌘F

其他的目前还没懂啥意思。

====

自此可以在zsh.zshrc里配置快捷键了,其实我想记的也不多,就是想实现ipython中上下翻历史前缀匹配,和按word和line移动和删除。但是❗️要时刻注意的是,映射的时候,^名字是叫ctrl,但是alt映射上去的。反之一样。

这里面涉及到两个地方,三个概念。两个地方是指iterm2的preference,和终端的zshrc文件设置。三个概念是指,需要将键盘的按键,按键所指的ascii(之类的)码,以及需要绑定的动作,都对应起来。
为什么要这么多,因为终端bindkey命令的字符,竟然系统跟系统都能不一样,照别人的配完了有的都不起作用。
而来到iterm配置,send映射的又有两种,一种是send esc+[让你填],这里面填的码和终端的部分一样。一种是直接send hexcode,这个code我翻了很久也不知道它如果用终端代码写对应的是什么。

终端查看已有的映射 敲命令bindkey,结果like:

"^[[3~" delete-char
"^[[A" up-line-or-history
"^[[B" down-line-or-history
"^_" undo
" "-"~" self-insert
"^?" backward-delete-char
"\M-^@"-"\M-^?" self-insert
"^U" kill-whole-line
"^X^U" undo

结合iterm的key,esc写死了,delete-char为[3~,可知esc的码为^[(虽然不知为什么,并没按下esc键啊),不过照猫画虎可以模仿一些命令。但是不以^[开头的就不懂了。
又搜了一阵,开始使用命令【我按下的是】cmd+v,然后输入想看的组合键,看屏幕上显示什么,就是该组合键的码。发现^也大概是ctrl,(但我要按cmd键),譬如^U我就按了cmd+U。但是我按ctrl+← 还是什么也出现的是^U,而且我在zshrc里bindkey它也不起作用。真的很confuse。还有很多比如ctrl+backspace用这个方式不显示。

后面知道这个码叫做 CSI序列
ctrl+v 或输入cat > /dev/null,之后输入想查的按键可得。

最先确定和有效的是 backward/forward-word/line,上下左右键底层对应的是ABCD。ctrl(我按下alt)应该对应^[[1;5,alt(我按下ctrl)应该对应^[[1;3。但其中alt【按键,非显示】没有对应,于是在iterm设置里的key,send了esc+[1;5D/[1;5C map上alt【按键,非显示】+←/→
我私自许cmd对应^[[1;4,不过没绑。

iterm里有两处可设置key,我设在全局里。profile的按终端设置处,先配置了Natural Text Editing,再适当删减冲突。

相应zshrc里写

bindkey '^[[1;3D' backward-word  # [ctrl-left]
bindkey '^[[1;3C' forward-word  # [ctrl-right]
bindkey '^[[1;5D' beginning-of-line  # [alt-left]
bindkey '^[[1;5C' end-of-line  # [alt-right]

然后解决上下键查历史前缀匹配,^[[A是上,这个比较好确认。在上面下载history插件的基础上,唯一迷惑了一下的就是history-substring-search-*history-beginning-search-* 有什么区别。原来前者是前缀匹配,后者是全string中任意匹配。
此部分代码如下:

autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search # Up
bindkey "^[[B" down-line-or-beginning-search # Down

然后又各种搜索,发现一张唯一看起来靠谱的表。copy过来。

key[F1]        = '^[[[A'
key[F2]        = '^[[[B'
key[F3]        = '^[[[C'
key[F4]        = '^[[[D'
key[F5]        = '^[[[E'
key[F6]        = '^[[17~'
..
key[F10]       = '^[[21~'
key[F11]       = '^[[23~' # 缺22
key[F12]       = '^[[24~'

key[Shift-F1]  = '^[[25~'
key[Shift-F2]  = '^[[26~'
key[Shift-F3]  = '^[[28~' # 缺27
key[Shift-F4]  = '^[[29~'
key[Shift-F5]  = '^[[31~' # 缺30
..
key[Shift-F8]  = '^[[34~'

key[Insert]    = '^[[2~'
key[Delete]    = '^[[3~'
key[Home]      = '^[[1~'
key[End]       = '^[[4~'
key[PageUp]    = '^[[5~'
key[PageDown]  = '^[[6~'
key[Up]        = '^[[A'
key[Down]      = '^[[B'
key[Right]     = '^[[C'
key[Left]      = '^[[D'

key[Bksp]      = '^?'
key[Bksp-Alt]  = '^[^?'
key[Bksp-Ctrl] = '^H'    console only.

key[Esc]       = '^['
key[Esc-Alt]   = '^[^['

key[Enter]     = '^M'
key[Enter-Alt] = '^[^M'

key[Tab] = '^I' or '\t' unique form! can be bound, but does not 'showkey -a'.
key[Tab-Alt]   = '^[\t'

A            = 'a'    (duhhh)
A-Shift      = 'A'    (who would have guessed?)
A-Alt        = '^[a'
A-Ctrl       = '^A'
A-Alt-Ctrl   = '^[^A'
A-Alt-Shift  = '^[A'
A-Ctrl-Shift = '^A'   (Shift has no effect)

/-Shift-Ctrl = Bksp      = '^?'
[-Ctrl       = Esc       = '^['
M-Ctrl       = Enter     = '^M'
I-Ctrl       = Tab       = '^I' or '\t'

# Actually that is ASCII DELete not Backspace.  Backspace is ^H ... but 
of course the Del key might send any of ^? or ^H or ^[[3~ etc., and
the key labeled Backspace often sends ^?.

它还解释了为什么缺以及

for some reason if you use 'bindkey' within a script (as in '.zshrc') '^[' must be replaced with '\e'  
bindkey -s '^[[[A' 'my-command \C-m' 
bind 'F1' to 'my-command' and execute it (the '\C-m' simulates the 'Enter' key).
in '.zshrc':
bindkey -s '\e[25' 'my-command1 ; my command2 \C-m'
bind 'Shift-F1' to 'my-command1' followed by 'my-command2' and execute both of them.

回来试试\e的。
可惜它没写del的。我恨。

由于 ctrl+backspace^H,直接写在终端我这不起作用,在iterm的send esc处又无法分解,bindkey里现有的码又不知道它代表什么键。只能转向iterm的send hexcode。
浅收下最终映射表:

后面用着调整了回删
alt+backspace删word更顺手一点。

意义 hex code CSI 序列 我附加的weight【按键版】
往前删一个词 0x1b 0x08 alt + backspace
往后删一个词 0x1b 0x64 alt + del
往前删到头 0x17 ctrl + backspace
往后删到头 0x0b ctrl + del
删整行 0x15 cmd + backspace
左移一个词 0x1b 0x62 ^[[1;5D ctrl + ←
右移一个词 0x1b 0x66 ^[[1;5C ctrl + →
移至行首 0x01 ^[[1;3D alt + ←
移至行尾 0x05 ^[[1;3C alt + →
undo 0x1f
redo 0x18 0x1f

最后我的整个删除都是直接在iterm里配的没有用bindkey。

上面的还是得更新一下。
此外cmd+c是kill进程,ctrl+c是copy,因为我的ctrl按下去是cmd。
stty -a可查看kill进程快捷键

最后搜到了权威的wiki定义:ANSI转义序列,部分相关。

还要研究一下ctrl+z 的undo和停止进程的冲突问题。

参考:
依云的zsh tag
我是如何让我的 Zsh 像丝般顺滑的
在不借助oh-my-zsh的前提下进行Zsh配置
如何使用 shell(3/3)—— 配置 zsh

配置:
https://github.com/Aloxaf/dotfiles
https://github.com/skywind3000/vim/blob/master/etc/zshrc.zsh
https://github.com/goreliu/zshguide/wiki/.zshrc
https://github.com/QuarticCat/dotfiles/blob/main/zsh/.zshrc
https://github.com/ckelsel/vim-init/blob/master/init.vim

M1芯片的mac: omz reload 97bcde

prompt

单独说一下prompt终端样式配置。目前放在 [mypath]/prompt.sh下,里面zsh,bash都有配。从 [mypath]/init.sh内source。

我需要的:
不要ohmyzsh。简单,不要复杂图案,颜色不要跳。
错误提示;
git提示,韦易笑主张不要但我还是加上;但是是自己写的
单行,韦易笑又主张不要但是我看依云两行也挺好看的,她要命令起始位置相同,方便看;
path除了最后一个其他缩进;

几个坑点:bash和zsh语法又不一样;mac切换root变成了sh环境,最后也简单配了一下。但是其他linux适配还是等有机器再说;语法真的好难懂。

目前我的bash_profile.sh里面都是配置终端样式的内容。
我的终端样式:

my-termial

 表示是mac,输错命令会变红;
路径折叠,节省行空间;
添加git提示;
右端添加显示时间;又更新了
背景是黄其淋gucci官摄,加了透明度。

好好看呀。

一些参考资料:

vim的设置

目前设置在init.vim中。

vim和sh编辑器不一样 注释符号是👉 "

vim的设置退出后不用source。

这个blogVim中的按键映射科普的比较好。
这个blogMy Vim是唯一见的写的比较好的,配置不是复制黏贴。
其他都不如这两个。

记录一下坑:
首先除了必要的文字编码、语法高亮、缩进等等内容,用vim比较少,我目前最想设置的还是跟shell一样的复制黏贴,左右移动和删除。但是始终两个地方很迷乱。

一是vim的寄存器太多,状态也多,什么visual、insert,试了好多命令都没法达到在所有状态下选中可复制黏贴。最后成功的设置是这样的:

set mouse=v
set clipboard=unnamed
" CTRL-A Select all
noremap <快捷键> gggH<C-O>G “ggVG是光标自动移到行尾
" CTRL-X Cut
inoremap <快捷键> "+x
" CTRL-C Copy
noremap <快捷键> "+y
inoremap <快捷键> <C-o>"+y
" CTRL-V Paste
noremap <快捷键> "*p
inoremap <快捷键> <Esc>"*p

参考:https://gist.githubusercontent.com/razrLeLe/76cecb05d5b0e282f2a6/raw/57ab6f21f945307ef587e690d45fbf175757d398/.vimrc

原来mouse=a之后,用鼠标复制黏贴就失效了。但是不设=a,又不能使用鼠标,必须用上下左右移动。
且可以复制的时候,多行复制行号也复制进去了。世事难两全。
搜到了和我设置一样的Vim 复制粘贴探秘,也没有解决。
先不搞了,有时间再精进……

二是mac中,又又又是alt和ctrl的问题。上面代码中的<快捷键>,比如复制,应该是ctrl+c,即,但我按下ctrl映射的是alt,所以我应该改成,但是不知为何alt失效的彻底。
后面排查到是alt+快捷键没用,不止vim,在shell里都没用,而且alt+F1到F12有效,只是0-9a-zA-Z没用,打开了iterm的设置option to esc+也没用,在vim强硬设置也没用。不知道怎么回事,暂且搁置吧。

GIT 配置

初始配置

  1. 生成 SSH key
    # 配置用户名("username"是自己GitHub上的用户名)
    git config --global user.name "username"
    
    # 配置邮箱("username@email.com"是注册GitHub账号时所用的邮箱)
    git config --global user.email "username@email.com"
    
    # 看配好没 
    git config --global --list
    
    # 检查电脑是否已经有 SSH key
    ls ~/.ssh
    # 此时应该无
    
    # 生成本台电脑的ssh 
    ssh-keygen -t rsa
    # 一路空格
    
    然后把.pub结尾的文件内容复制进github.com。
    然后看好了没有。
    # 不要按回车!要输入yes
    ssh -T git@github.com
    
  2. 开始
    # 在当前目录新建一个Git代码库
    git init
    
    # 新建一个目录,将其初始化为Git代码库
    git init <project-name>
    
    # 下载一个项目和它的整个代码历史
    git clone <url>
    

目前软件path设置都放在<mypath>/config.sh下,从 <mypath>/init.sh内source。

git 配置文件

git 有三个配置文件

  • system 系统
    系统所有用户都会生效,一般在安装路径下
    查看此文件路径:git config -e --system
    我的在:/opt/homebrew/etc/gitconfig
  • global 全局
    当前用户生效
    路径:$HOME/.gitconfig
  • local 本地
    仅当前项目生效
    路径:(当前项目)/.git/config

优先级:local > global > system

设置用户名密码的时候使用的命令git config --global <用户名>,global意思就是改在了global config里。

给global,因为是我自己电脑,我就设系统里了,添加下面配置:

[init]
    defaultBranch = main  # 初始分支设为main
[core]
    quotepath = off  # 允许中文显示
[gui]
    encoding = utf-8  # 代码库统一使用utf-8
[i18n]
    commitencoding = utf-8  # log编码
[svn]
    pathnameencoding = utf-8  # 支持中文路径

此外,我的dotfiles文件也要建仓库,但本地文件没放在当前user下,而是放在根目录下,所以上传的时候报错fatal: Could not read from remote repository.
给全局文件dotfiles的.git/config增添设置:

[core]
    sshCommand = "ssh -i <想设的路径>/.ssh/id_rsa"
[user]
	name = xxx
	email = xxx@xxx.com

主要是ssh路径,下面的user想想也添上了。
再pull,大成功。

语言配置 & 软件安装

安装 python

python 设置

使用brew可以安装指定版本的python,且不用配置环境。

brew search python@ # 搜索版本
brew install python@3.10 #安装
brew uninstall python@3.9 #卸载
brew cleanup python@3.11 #清一下不用的包

目前mac默认安装了python3.9,而且软链是python3,所以要换。
先查探

which python # 这条会error 因为此时python还没连
which python3 # 这条会在/usr/bin/python3,默认那版
which python3.10 # 这条会在/opt/homebrew/bin/python3.10,刚下的

而且brew下的python已经默认被brew link了,因为 %python3.10 回车有东西:

brew link python@3.10
>> Warning: Already linked: /opt/homebrew/Cellar/python@3.10/3.10.12_1

每个python都有pip,所以python10的pip也叫pip3.10

whereis pip3.10
>> pip3.10: /opt/homebrew/bin/pip3.10

所以需要alias上面which的那个地址

alias python="/opt/homebrew/bin/python3.10"
alias pip="/opt/homebrew/bin/pip3.10"

然后source

最后改成了 alias python=python3

安装java和maven

就统一使用brew安装了

brew install temurin
# 检查
java -version
javac -version

maven是要去官网下压缩包,然后解压。并关联环境变量。我就想把它放在java目录下。正好java无论哪种方式安装,目录都是/Library/Java/JavaVirtualMachines/,于是我就解压在这里。
顺便这样如果忘了,可以/Lib一路tab下去。

然后配置环境变量。我就先不集成到dotfiles了,直接export在.zshrc里。

export JAVA_HOME="$(/usr/libexec/java_home)"
export MAVEN_HOME=$(ls -d /Library/Java/JavaVirtualMachines/apache-maven-* | sort -V | tail -n 1)
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

安装 Go

go的path委实太迷惑了,而且所有项目都在一个/go下面,蛮奇葩的。幸亏在v1.12之后改成go module模式,不用纠结go path了。
以下的设置都基于v1.12及以后的版本。

如果不自己设路径,go会自动分配。看了一下,goroot,which应该设置为go的安装路径,是对的。所以不用管goroot了。
❗️但是go env出的GOROOT是go运行时的环境变量,而echo $GOROOT则会显示当前shell环境中的GOROOT环境变量,which是没有赋值的,而GOBIN,还需要设置一下,而GOBINGOROOT/bin(应该是吧!),所以要在脚本中使用,还是需要手动获取一下GOROOT

gopath它是自动设了一个/usr/user_name/go的路径,此文件夹之后存放的是下载的第三方包之类的东西。可以自己重新设置。

# Go
go env -w GO111MODULE=on  # 爱gomodule模式,开。
GOROOT=$(go env GOROOT)  # 获取GOROOT
export GOPATH="$(brew --prefix go)"  # 此时 gopath就可以随便设置文件了,我设到brew go软链的路径下了。
export GOBIN="${GOROOT}/bin"

# 添加path看到有可能重复添加,防止重复添加:
if [[ ":${PATH}:" != *"${GOBIN}"* ]]; then
  export PATH="$PATH:${GOBIN}"
fi
if [[ ":${PATH}:" != *"${GOPATH}/bin"* ]]; then
  export PATH="$PATH:${GOPATH}/bin"
fi

安装 React

几个步骤:

  1. 安装node。
    node是js的开发环境,要运行js脚本必须安装
    brew install node
    
  2. 安装create-react-app
    是官方推出的构建react单页应用的手脚架工具。集成了webpack,并配置了一系列内置的loader和默认的npm的脚本。
    sudo npm install -g create-react-app
    

顺便装一个TypeScript

sudo npm install -g typescript

mac配置

finder显示资源库:chflags nohidden ~/Library

rime输入法

为了写markdown,需要rime输入法。见配置适合写markdown程序员体质的rime-鼠须管

其他

  • 解决v2ex打不开的问题。
    它在clash里是直连。打开配置文件夹-西部世界,在rule下找到v2ex,把direct改成proxy。然后重载文件夹。

sublime 设置

环境配置

安装package control:
Ctrl+Shift+p,输入install package,然后回车。

go build 环境

Tools → Build System → New Build System
打开的文档写:

{
"shell_cmd": "${GOPATH}/bin/go run $file", // $里面的内容,填自己go编译的路径,用`go env`查。一般是GOROOT,因为我把GOPATH设成系统给的运行go的软链,所以这个path我就设成了这个软链的path。
"encoding": "utf-8"
}

保存,命名为Golang。这个名字就是保存后,在build system里选择编译语言的名字。然后就选这个就行了。
网上那一堆是按插件的,妈呀能不能提前说明是插件。以为是必须的,其实并没有很想要。那个gosublime存的路径在mac上怎么打开:
Sublime Text → Setting → Browse Packages

python build 环境

java build 环境

Tools → Build System → New Build System
打开的文档写:

{
    "shell_cmd": "javac -encoding utf-8 $file_name && java $file_base_name",
    "file_regex": "^ *\\[javac\\] (.+):([0-9]+):() (.*)$",
    "working_dir": "${project_path:${folder}}",
    "selector": "source.java",
    "encoding": "utf-8",
    "shell": true
}

保存为java.sublime-build

❗️注意然后再运行的时候,一定要切换 Tools → Build System → java先,否则会有权限问题。

个人配置

我默认需要:自动换行 和 显示路径。
设置path:

  • win Preferens - Settings
  • mac Sublime Text - Settings - Settings

我的设置

{
"word_wrap": "true",   # 我爱换行
"auto_complete": false,  # 不爱提示
"save_on_focus_lost": true,  
"show_full_path": true, 
}

vscode

打开setting快捷键:ctrl + p

已安extensions:

  • live server
  • leetcode

换主题

挑theme:按ctrl+shift+p,再输入 color theme

vscode主题大赏

一些设置:

  1. 不知为何直接选reference的setting点不开,要去help里敲setting
  2. 关闭各种提示:
    - editor > hover: enabled。取消它。(错误提示,后面又打开了)
    - editor.parameterHints.enabled。取消它。
    - editor.quickSuggestions & editor.suggestOnTriggerCharacters。 取消
  3. 世界清净了。

多个标签页显示

多个标签页有的就给挤没了,找的时候小心翼翼又怕不小心点着❌。
不想用多行显示,丑。
不想用快捷键。
本来想找有没有像浏览器那样前后翻页的,没找到。
最后找到一个setting: workbrench > editor:Tab Sizing,改为shrink。

leetcode的坑

首先是登录的时候总登不上去。【就不登cn版】
选择使用cookies登录。获取cookies的路径:
leetcode.com网页版登录 → 检查的network选all → 刷新 → 选request标头的cookie

其次leetcode的配置怎么找:
gui的最左选extension图标 → 右键leetcode选extension setting

然后很让人裂开的一件事,一直提示缺插件让安然后它安装又fail。此是准备工作没做好:

  1. 先要设置go mod
  2. 要设置go proxy
    怎么设见 [go语法笔记]
    最后我怎么找不见test和submit呢。原来是,已经保存的文件它就不会改了,比如已经有1.two_sum.go了,然后改了配置:题目写在文件里,但是默认打开的还是这个文件,它就没有更改。要把这个文件删了,然后重新从题目那边code now,才会生成正确的file。不用自己写测试函数!