程序开发软件

编辑器

Vim

img

https://www.runoob.com/linux/linux-vim.html

vi使用技巧

配置

在命令模式下输入set命令修改当前配置,或在配置文件/etc/vim/vimrc中配置相应命令以永久修改。

缩进
# edit 
set tabstop=4      
set softtabstop=0   # 不要将空格和tab混合输入
set shiftwidth=4    # 默认用4个空格
set autoindent      # 自动缩进
set expandtab       # tab转换为空格
# 对于下列文件类型,4个空格太宽了,可以换成2个空格。
autocmd FileType html,css,xml,yaml,json,sh set sw=2 ts=2 

https://www.kawabangga.com/posts/2817

显示行号
set [no]number          # => set [no]nu
set [no]relativenumber  # => set [no]rnu *
set numberwidth=2

*:相对行号和绝对行号可同时存在。

常用命令

查找
/<search-pattern>   # forward
?<search-pattern>   # backward

回到命令模式后,输入n查找下一个,输入N查找上一个。

替换

使用sed替换语法:

:n,[m]$s/<origin>/<replace>/g #替换第n行(到m行,默认到最后)中origin为replace

转义字符"/" $\rightarrow$ "\/"。

复制粘贴
yy  # 复制一行,
V   #选择连续多行,
v   # 移动方向键任意选择,Ctrl+v 选择光标开始的矩形区域
y   # 复制所选内容
d   # 剪切
p   # 粘贴所选内容,如果选择整行,则粘贴到所在行的后一行;否则粘贴到光标所在位置
删除
# 普通命令模式
gg	# 返回文件开始
dG	# 删除至文件末尾的所有行
# 底线命令模式
:1,$d   # 删除第1行至最后一行$的所有内容
:%d     # %代表所有行
撤销|重做
u,:u,:undo  # 撤销单步
4u          # 撤销多步
Ctrl+r      # 重做
保存
:w !sudo tee %   # 以管理员权限保存只读文件

If Ctrl+S freezes your terminal, type Ctrl+Q to get it going again.

Visual Studio Code

开发环境

VSCode+MSYS2

安装MSYS2后,在MSYS2终端中安装开发工具链,以C++/mingw64开发为例,

pacman -S --needed base-devel mingw-w64-x86_64-toolchain

$MSYS2_ROOT/mingw64/bin加入Windows路径,可在Windows下使用MSYS2的开发工具链。

Get Started with C++ and Mingw-w64 in Visual Studio Code

资源管理器

排除要显示的文件

设置的文件模式将不会在资源管理器中显示,如果直接在用户主目录下工作,通常需要将系统或程序产生的隐藏目录排除。

"files.exclude": {
  ".*hst": true,
  ".*rc": true,
  ".bash*": true,
  ".pki": true,
  ".vscode-server": true
}

离线安装VSCode远程服务

在联网状态下,VSCode远程服务会在建立远程连接后自动安装。在离线状态下,自动安装会失败,但可以从日志中得到要安装的远程服务软件包的地址。

https://update.code.visualstudio.com/commit:dfd34e8260c270da74b5c2d86d61aee4b6d56977/server-linux-x64/stable

利用此地址,可以从联网计算机上下载安装包,并解压到目标机器的~/.vscode-server/bin/目录下,并将解压内容根目录以上述URL中的commit ID命名。

Code-Server

安装

Install - code-server docs (coder.com)

Usage - code-server docs (coder.com)

安装插件

Code-Server从Open VSX Registry下载安装插件。如果存在网络问题,可离线安装:

code-server --install-extension  ext_name.vsix  # --list-extensions

反向代理

目前不支持为Web服务设置根路径,因此需要使用独立的服务站点(独立端口)来代理。

server {
    listen 80;
    listen [::]:80;
    server_name mydomain.com;
    location / {
      proxy_pass http://localhost:8080/;
      proxy_set_header Host $host;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection upgrade;
      proxy_set_header Accept-Encoding gzip;
    }
}

多用户使用

img

可以为每个系统用户启用一个服务:

systemctl enable --now code-server@USER
# ExecStart=/usr/local/code-server 

服务将从用户目录下读取配置文件~/.config/code-server/config.yaml(配置项对应命令行参数名),其中包含服务的监听地址端口和身份认证配置。

bind-addr: 0.0.0.0:8081
auth: password
password: xxxxyyyy
#cert: /PATH/CERTFILE
#cert-key: /PATH/CERT_KEY
disable-telemetry: true
disable-update-check: true
user-data-dir: /PATH
extensions-dir: /PATH

建议使用普通用户建立Code-Server服务,防止用户越权修改服务器后台文件。

Coder

安装

预装环境

如果需要在本地使用docker部署工作空间,则需要首先安装docker

如果未预先安装docker,会出现以下错误:...Got permission denied while trying to connect to the Docker daemon socket。此时,需要将用户coder加入docker组中。

sudo usermod -aG docker coder
systemctl restart coder.service
在线安装
curl -fsSL https://coder.com/install.sh | sh
离线安装

使用发行版软件包.deb.rpm.apk安装。

Docker-compose安装
Kubernetes+Helm

Helm 是 Kubernetes 的包管理器。

配置和启动服务

服务的访问地址CODER_ACCESS_URL,可通过/etc/coder.d/coder.env配置。

coder server 
      -a,--address $CODER_ADDRESS             # 127.0.0.1:3000 
      --access-url $CODER_ACCESS_URL          # http://localhost:3000
      --postgres-url $CODER_PG_CONNECTION_URL # 数据库地址*
      --global-config $CODER_CONFIG_DIR       # 配置数据目录**
sudo systemctl enable --now coder  # 作为服务启动

*:如果未指定,则Coder将自动下载PostgreSQL数据库,并将数据存储在配置目录下。使用coder server postgres-builtin-url可查看内置数据库的访问地址。

**:默认配置数据目录位于/root/.config/coderv2

网络代理:为了保证Coder服务访问registry.terraform.io以及github.com等网站下载资源,可能需要配置代理(通过/etc/coder.d/coder.env配置)。

身份认证

通过终端登录并配置第一个管理员用户。Coder默认使用用户名和密码认证。

coder login http://localhost:3000 # 配置用户名、邮箱和密码
coder login -u USER http://localhost:3000 # 在终端登录

管理用户身份:

FunctionsUser AdminTemplate AdminOwner
Add and remove Users
Change User roles
Manage Templates
View, update and delete ALL Workspaces
Execute and use ALL Workspaces

所有用户隐含Member身份,可创建工作空间。

工作空间配置

工作空间模板配置

在终端中登录用户并执行:

coder templates init [directory] -v  # 选择模板类型并初始化。
cd directory && vim main.tf          # 修改模板描述文件
coder templates create/push --parameter-file params.yaml # 创建/更新模板

directory是模板名称和模板文件所在目录名。

创建工作空间

命令行基于模板创建工作空间,也可登录Web界面选择模板创建。

coder create --template="yourTemplate" <workspace-name>
coder show <workspace-name>

问题:==访问https://registry.terraform.io/.well-known/terraform.json失败,网络连接问题。==

编写模板

Templates - Coder OSS main docs

安装IDE
resource "coder_agent" "main" {
    arch          = "amd64"
    os            = "linux"
    startup_script = <<EOF
    #!/bin/sh
    # install and start code-server
    curl -fsSL https://code-server.dev/install.sh | sh
    code-server --auth none --port 13337
    EOF
}

Configuring Web IDEs - Coder OSS main docs

安装JetBrains Projector
安装JupyterLab
安装airflow

终端

Windows Terminal

离线安装

从Github下载最新的发布版本,如果离线安装需要使用带依赖库的Win10版本包。

Add-AppxPackage FILENAME.msixbundle

安装时如果出现VC运行时版本错误,则首先安装附带的依赖库(Microsoft.VCLibs.x64.*.appx);如果手动安装,可能需要安装VC_redist.x64.exe

配置

Windows Terminal Tips and Tricks | Windows Command Line

配置文件为settings.json,其中终端配置项位于$.profiles.list[*],基本配置项如下:

{
	"name": "Windows PowerShell",
	"commandline": "powershell.exe",
	"startingDirectory": "%HOMEPATH%",
	"startingDirectory": "//wsl$/Ubuntu/home/gary",  // 代替默认的"~",避免找不到目录
}
字体

microsoft/cascadia-codeCascadia Code

{
	"fontFace": "Cascadia Code PL",
	"fontSize": 12    
}
颜色和背景

终端的颜色配置项包括:

{
	"colorScheme": "One Half Dark",    
    "useAcrylic": true,
    "opacity": 70
}

内置颜色方案位于配置文件的$.schemes[*],可自定义颜色方案。

>_TerminalSplash - Windows Terminal Themesimg

背景

{
	"backgroundImage": "C:\Users\admin\background.png",
	"backgroundImageAlignment" : "bottomRight",
	"backgroundImageStretchMode" : "uniform",
	"backgroundImageOpacity" : 0.3,
}

除上述基础配置外,可使用Oh-My-Posh等工具对终端进行个性化定制。

集成终端工具

MSYS2
C:\msys64\msys2_shell.cmd -mingw64 -defterm -no-start

启动的终端环境包括mingw64clang64msysucrt64等。

Anaconda
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -NoExit -Command "& 'C:\Users\gary\miniconda3\shell\condabin\conda-hook.ps1' ; conda activate 'C:\Users\gary\miniconda3' "

Nushell

Nushell is both a programming language and a shell.

安装

winget install nushell # [Windows]--> choco/scoop
brew   install nushell # [Linux/Mac]
设置登录终端

Linux:将nu加入/etc/shells白名单中,然后使用chsh命令切换Shell程序。

Windows:安装完成后将自动为Windows Terminal生成Nushell配置,初次启动会进行初始化。

配置

config nu

常用命令

Nushell命令输出内容为对象(类似于Powershell,包括表格、字典和字符串等)并以表格形式显示,方便后续命令操作数据。

命令支持Tab补全,并同时提供命令候选与帮助信息。

ps:显示进程信息。

date:显示日期信息。

date now | date to-table

sys:显示系统硬件信息。返回对象不是简单表格,而是键值组成的字典(以表格列的形式分别显示键和值),每个值是嵌套的字典或表格。

sys | get host # 返回嵌套字典
sys | get cpu  # 返回嵌套表格
sys | get host.sessions.name
文件操作

ls:显示目录内容。

ls | sort-by size | reverse  # 排序
ls | where size > 1kb        # 筛选
ls *.md                      # 匹配 (**/*.md:匹配所有子目录)

cdmvcprmmkdir(跨平台)。

读取数据
open package.json # 将数据加载为记录对象。
open pokemon.csv  # 将数据加载为表格对象。
open Cargo.lock | from toml  # 将未识别格式数据按指定格式处理
open Cargo.toml --raw        # 按原始文本输出

Nushell当前支持加载以下格式的数据:csvinijsonnuonSQLitetomlurlxlsx/xlsxmlyaml/yml……对于不支持的文件格式,Nushell将尝试直接输出文件内容。

Nushell Object Notation (NUON) 是JSON的一个超集,支持注释(#开头)。

读取SQLite
open foo.db | query db "select * from some_table"
读取URL指定的文件
fetch https://blog.rust-lang.org/feed.xml
帮助信息

除通过Tab补全时提供的提示信息外,通过help命令可查看Nushell命令的使用方法。

输出设置

使用ansi命令,设置输出文字颜色(ansi reset回复之前的设置)。

$'(ansi purple_bold)This text is a bold purple!(ansi reset)'

语法

Web终端

tsl0922/ttyd: Share your terminal over the web (github.com)

WebSSH

通过浏览器访问远程的SSH连接终端,其工作模式

+---------+     http     +--------+    ssh    +-----------+
| browser | <==========> | webssh | <=======> | ssh server|
+---------+   websocket  +--------+    ssh    +-----------+

webssh是一个Python模块,可通过pipConda安装。启动服务:

wssh --address=0.0.0.0 --port=8080 \       # 服务器地址端口
	   --ssladdress=0.0.0.0 --sslport=8088 \ # HTTPS地址端口
	   --certfile="path_to_certfile.crt" \
	   --keyfile="path_to_keyfile.key" \     # 证书密钥文件
	   --fbidhttp=True \                     # 禁用外部HTTP请求(只允许localhost访问)
     --maxconn=20 	\                      # 最大连接数
     --debug --origin='*'                  # 
     > /tmp/wssh/wssh.log 2> /tmp/wssh/wss.error.log & # 日志输出,脱离终端

避免证书/密钥文件询问密码。

Cross origin operation is not allowed:设置--debug --orgin='*'

butterfly

Butterfly is an xterm-compatible web terminal based on websocket and tornado.

butterfly.server.py --host=soc3.113.cn --port=57575 --unsecure

使用SSL加密通信

butterfly.server.py --generate-certs --host=soc3.113.cn
butterfly.server.py --generate-user-pkcs=root
butterfly.server.py --host=soc3.113.cn --port=57575

SSL Error on 8 ('172.28.76.6', 65440): [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: EE certificate key too weak (_ssl.c:997).

终端复用

Tmux

Tmux可以将终端窗口与会话解绑:

  • 从而使任务可以进入后台运行,
  • 同时也能在同一终端访问多个已存在的会话;
  • 且支持将终端窗口进行拆分,从而同时访问多个会话。

在终端中执行tmux进入Tmux环境,输入exit退出。

快捷键

使用Ctrl+b进入快捷键模式,输入命令对应的快捷键。

快捷键命令说明
?显示帮助信息
dattach分离当前会话
$rename重命名会话
%split-window -h左右拆分窗格
"split-window上下差分窗格
$\uparrow\downarrow$-><-`select-pane -UD
xexit退出当前窗格
Ctrl+$\uparrow\downarrow$-><-按箭头方向调整窗格大小
q显示窗格编号
cnew-window新建窗口(状态栏显示窗口信息)
`pn`
wselect-window从列表中选择窗口
,rename-window窗口重命名
会话管理

新建窗格(子窗口)时创建会话,并自动编号(0,1,...);或者手动创建会话并命名,方便后续访问该会话。

tmux new -s <session-name>
tmux detach  # 将当前会话与终端脱离
tmux ls      # 列出所有Tmux会话
tmux attach|switch -t <session-id>|<session-name>  # 重新接入或切换会话
tmux kill-session -t ......
tmux rename-session -t 0 <new-name>
划分窗格
tmux split-window [-h]   # -h => 拆分为左右两个窗口 
tmux swap-pane -U|D      # 移动当前窗口位置(上移|下移)
窗口管理

除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口并在多个窗口间切换(命令类型与窗格管理)。

tmux new-window -n <window-name>  # 默认自动编号
tmux select-window -t <window-number>|<window-name>  # 切换窗口
  1. Tmux 使用教程 - 阮一峰的网络日志 (ruanyifeng.com)

终端主题化工具

oh-my-posh

使用“Oh my Posh 3”来为PowerShell/Bash等终端提供主题功能。

安装
winget install|upgrade oh-my-posh # JanDeDobbeleer.OhMyPosh

安装内容:

  • oh-my-posh.exe - Windows executable, added to your $PATH;
  • oh-my-posh-wsl - Linux executable, added to your $PATH for use in the ==WSL==;
  • themes - The latest Oh My Posh themes (~\AppData\Local\Programs\oh-my-posh\themes\)。
安装Linux版本

使用linuxbrew安装/升级。

brew install oh-my-posh  # jandedobbeleer/oh-my-posh/oh-my-posh
brew update && brew upgrade oh-my-posh # 新版本的路径可能发生变化,需要重新开启Shell

安装内容位于$(brew --prefix oh-my-posh),包括可执行文件和主题。

应用样式

在Powshell中执行Get-PoshThemes预览样式。

在PowerShell初始化配置文件($PROFILE)中设置命令:

# code $PROFILE
oh-my-posh init pwsh --config $env:POSH_THEMES_PATH/paradox.omp.json | Invoke-Expression

Windows内置的PowerShell 5和独立安装的PowerShell 7使用的shell配置都为pwsh

Linux版本命令

预览主题:

THEME_PATH="$(brew --prefix oh-my-posh)/themes"
for file in $THEME_PATH/*.omp.json; do 
    eval "$(oh-my-posh init bash --config $file)" #**无法预览主题**
    echo "$file"
done

设置主题(~/.bashrc):

eval "$(oh-my-posh init bash --config $THEME_PATH/agnoster.omp.json)"
离线安装

Github Release直接下载发布的可执行文件以及主题文件,将可执行文件路径添加到系统路径中,配置方法与自动安装一致。

图标@SankeyMATIC Diagram

下载带图标的字体(nerdfont)。优先使用Windows Compatible的Code字体(Mono字体不支持连字)。

@SankeyMATIC Diagram

ryanoasis/nerd-fonts

ryanoasis/nerd-fonts

在PowerShell中安装并设置图标模块:

Install-Module -Name Terminal-Icons -Repository PSGallery -Scope CurrentUser
Import-Module -Name Terminal-Icons   # code $PROFILE
git插件
Install-Module posh-git -Scope CurrentUser

Posh-Git将Git状态信息添加到提示,并为Git命令、参数、远程和分支名称添加Tab自动补全。

Import-Module posh-git

powerline-go

A beautiful and useful low-latency prompt for your shell, written in go.

sudo apt install golang-go
export GOPROXY=https://goproxy.io
export GO111MODULE=on
go get -u github.com/justjanne/powerline-go

编辑shell配置文件(.bashrc

GOPATH=$HOME/go
function _update_ps1() {
    PS1="$($GOPATH/bin/powerline-go -error $?)"
}
if [ "$TERM" != "linux" ] && [ -f "$GOPATH/bin/powerline-go" ]; then
    PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi

justjanne/powerline-go: A beautiful and useful low-latency prompt for your shell, written in go (github.com)