-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
10439 lines (10300 loc) · 398 KB
/
search.xml
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>解决使用代理后 Git 无法获取本地证书问题</title>
<url>/Tools/%E8%A7%A3%E5%86%B3%E4%BD%BF%E7%94%A8%E4%BB%A3%E7%90%86%E5%90%8E%20Git%20%E6%97%A0%E6%B3%95%E8%8E%B7%E5%8F%96%E6%9C%AC%E5%9C%B0%E8%AF%81%E4%B9%A6%E9%97%AE%E9%A2%98/</url>
<content><![CDATA[<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/hint.css/2.4.1/hint.min.css"><ul>
<li>解决使用代理后 Git 无法获取本地证书问题。</li>
</ul>
<span id="more"></span>
<hr>
<h3 id="解决使用代理后-Git-无法获取本地证书问题"><a class="header-anchor" href="#解决使用代理后-Git-无法获取本地证书问题">#</a>解决使用代理后 Git 无法获取本地证书问题</h3>
<ul>
<li>
<p><strong>问题背景</strong></p>
<ul>
<li>使用代理访问 Github 后,出现<code>SSL certificate problem: unable to get local issuer certificate</code>的错误。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>原理解析</strong></p>
<ul>
<li>Git 配置的 http.sslBackend 默认使用 Openssl 会默认使用自己证书的信任链,如果代理的证书没有被客户端 Git 自带的证书库信任就会出现这个问题,使用 schannel 可以避免非透明代理出现这个的问题。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>解决方法</strong></p>
<ul>
<li>配置 Git 跳过 SSL 验证(不推荐)</li>
<li>配置 Git 在使用代理时使用正确的证书链</li>
<li>让 Git 使用 Windows 系统的证书存储来验证 SSL 连接</li>
</ul>
</li>
</ul>
<hr>
<h4 id="问题背景"><a class="header-anchor" href="#问题背景">#</a>问题背景</h4>
<ul>
<li>在使用<a href="https://www.dogfight360.com/blog/686/" rel="external nofollow noreferrer">steamcommunity 302</a>代理访问 Github 后,出现<code>SSL certificate problem: unable to get local issuer certificate</code>的错误,而且无法使用HTTPS上传项目到 Github 仓库了。</li>
</ul>
<hr>
<h4 id="原理解析"><a class="header-anchor" href="#原理解析">#</a>原理解析</h4>
<ul>
<li>
<p><strong>Git 使用 HTTPS 时验证 SSL 证书的基本流程</strong></p>
<ul>
<li>
<p>建立 TCP 连接:</p>
<ul>
<li>Git 客户端首先通过网络建立与远程服务器的 TCP 连接。<br>
<br></li>
</ul>
</li>
<li>
<p>SSL/TLS 握手:</p>
<ul>
<li>客户端和服务器进行 SSL/TLS 握手,交换加密信息。<br>
<br></li>
</ul>
</li>
<li>
<p>服务器证书验证:</p>
<ul>
<li>服务器在握手过程中提供自己的 SSL 证书,Git 客户端需要验证这个证书是否是由受信任的证书颁发机构(CA)签发的,是否有效(未过期),以及是否与远程服务器的域名匹配。<br>
<br></li>
</ul>
</li>
<li>
<p>建立加密连接:</p>
<ul>
<li>验证通过后,双方使用共享的加密密钥进行加密通信,确保数据的安全性。<br>
<br></li>
</ul>
</li>
</ul>
</li>
<li>
<p><strong>调试 SSL 证书问题</strong></p>
<ul>
<li>使用 GIT_CURL_VERBOSE 环境变量调试 Git 和服务器之间的 SSL/TLS 握手,能输出详细的 SSL 证书信息。
<ul>
<li><code>GIT_CURL_VERBOSE=1 git clone https://github.com/username/repo.git</code><br>
<br></li>
</ul>
</li>
</ul>
<p><img data-src="https://cdn.jsdelivr.net/gh/shuguang2000/cdn/images/SSL%E8%AF%81%E4%B9%A6%E8%B0%83%E8%AF%95%E4%BF%A1%E6%81%AF.png" alt="SSL证书调试信息"><br>
<br></p>
<ul>
<li>
<p>通过上图使用代理前后 SSL 证书信息可以看出:</p>
<ol>
<li>服务器返回被 CA 签名过的证书给客户端后</li>
<li>客户端验证该证书的然后强行中断了 TLS 连接</li>
<li>然后客户端通过 TCP 连接发送 TLS 协议中的警告通知,告知对方无法识别证书的颁发机构(CA)<br>
<br></li>
</ol>
</li>
<li>
<p><strong>总结</strong>:也就是说问题在 TLS 证书传给客户端处出现验证失败。<br>
<br></p>
</li>
</ul>
</li>
<li>
<p><strong>梳理该过程的证书链验证流程</strong></p>
<ul>
<li>
<p>正常情况下证书链(或者使用透明代理 -> <strong>代理正常转发证书链不会影响客户端和Github证书验证</strong>)</p>
<ul>
<li>GitHub 的服务器证书:这是 GitHub 服务器返回的原始证书,颁发给 <a href="http://github.com" rel="external nofollow noreferrer">github.com</a>。</li>
<li>GitHub 的中间证书:由受信任的 CA 机构签发,通常是 GitHub 使用的中间证书。</li>
<li>CA 的根证书:根证书由一个公认的受信任的 CA(如 DigiCert、Let’s Encrypt 等)签发。<br>
<br></li>
</ul>
</li>
<li>
<p>使用代理后的证书链(非透明代理 -> 常见的是<strong>使用 HTTPS 代理</strong>)</p>
<ul>
<li>代理服务器的伪造证书:证书颁发给 <a href="http://github.com" rel="external nofollow noreferrer">github.com</a>,但由代理服务器的中间证书签发。</li>
<li>代理的中间证书:代理会附带由自己信任的中间证书,目的是为了使客户端能够验证伪造的证书。</li>
<li>代理的根证书:如果代理是使用自签名的证书或由自己的私有 CA 颁发证书链,客户端必须信任这个根证书,否则会出现证书验证失败的错误。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>总结</strong>: 也就是说非透明代理修改了 Github 和客户端之间的 TLS 建立过程。<br>
<br></p>
</li>
</ul>
</li>
<li>
<p><strong>解决思路</strong></p>
<ul>
<li>
<p>配置 Git 跳过 SSL 验证(不推荐)<br>
<br></p>
</li>
<li>
<p>配置 Git 在使用代理时使用正确的证书链<br>
<br></p>
</li>
<li>
<p>让 Git 使用 Windows 系统的证书存储来验证 SSL 连接</p>
<ul>
<li>Git 配置 http.sslBackend 使用 Schannel<sup id="fnref:1"><a href="#fn:1" rel="footnote"><span class="hint--top hint--error hint--medium hint--rounded hint--bounce" aria-label="Schannel 使用的是 Windows 操作系统的证书存储,它默认包含了很多受信任的根证书,因此如果代理的证书是由一个已知的受信 CA 签发的,客户端(Windows)会信任它。">[1]</span></a></sup> (Windows SSL/TLS 栈)
<ul>
<li>
<p>客户端和代理建立连接时,会使用 Windows 操作系统的证书存储来验证 Github 服务器证书,不需要代理生成任何伪造的证书。<br>
<br></p>
</li>
<li>
<p>也就是说会直接使用 Windows 系统中已安装的证书(包括根证书和中间证书)来验证服务器证书。如果代理的证书是由一个已知的受信 CA 签发的,客户端(Windows)会信任它。</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h4 id="解决方法"><a class="header-anchor" href="#解决方法">#</a>解决方法</h4>
<ul>
<li>
<p>配置 Git 跳过 SSL 验证(不推荐)</p>
<ul>
<li>暂时禁用 SSL 验证(不推荐长期使用)
<ul>
<li><code>git config --global http.sslVerify false</code><br>
<br></li>
</ul>
</li>
</ul>
</li>
<li>
<p>配置 Git 在使用代理时使用正确的证书链</p>
<ul>
<li>这里由于代理相关信息不清楚,就暂时不考虑
<ul>
<li>确保代理配置正确,再考虑添加代理证书链
<ul>
<li><code>git config --global http.sslCAinfo /path/to/proxy/certificate.pem</code><br>
<br></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>让 Git 使用 Windows 系统的证书存储来验证 SSL 连接</p>
<ul>
<li>http.sslBackend: 这个配置项控制 Git 使用哪种 SSL/TLS 库来进行 HTTPS 连接的证书验证。
<ul>
<li>
<p>Schannel:<sup id="fnref:1"><a href="#fn:1" rel="footnote"><span class="hint--top hint--error hint--medium hint--rounded hint--bounce" aria-label="Schannel 使用的是 Windows 操作系统的证书存储,它默认包含了很多受信任的根证书,因此如果代理的证书是由一个已知的受信 CA 签发的,客户端(Windows)会信任它。">[1]</span></a></sup></p>
<ul>
<li>会使用 Windows 操作系统的证书存储来验证 Github 服务器证书。</li>
<li><code>git config --global http.sslBackend schannel</code><br>
<br></li>
</ul>
</li>
<li>
<p>Openssl:<sup id="fnref:2"><a href="#fn:2" rel="footnote"><span class="hint--top hint--error hint--medium hint--rounded hint--bounce" aria-label="OpenSSL 默认使用自己证书的信任链,需要确保代理使用的证书链能够被 OpenSSL 信任。若使用的是自签名证书或者未被信任的 CA,需要显式地将根证书或中间证书导入 OpenSSL 的信任列表。
">[2]</span></a></sup></p>
<ul>
<li>是一个独立的 SSL/TLS 实现,它不像 Schannel 那样直接使用操作系统的证书存储,而是依赖于自己的信任根证书库。默认情况下,OpenSSL 会检查客户端信任的根证书存储(如 ca-certificates)。</li>
<li><code>git config --global http.sslBackend openssl</code><br>
<br></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>相关补充</p>
<ul>
<li>
<p>Git 测试 HTTPS 连接</p>
<ul>
<li><code>git ls-remote https://github.com/username/repo.git</code><br>
<br></li>
</ul>
</li>
<li>
<p>Git 测试 SSH 连接</p>
<ul>
<li><code>ssh -T [email protected]</code><br>
<br></li>
</ul>
</li>
<li>
<p>Git 测试详细的 SSL 证书信息</p>
<ul>
<li><code>GIT_CURL_VERBOSE=1 git clone https://github.com/username/repo.git</code><br>
<br></li>
</ul>
</li>
<li>
<p>设置 Git 使用 HTTP/HTTPS 代理:</p>
<ul>
<li>git config --global http.proxy http://<代理地址>:<代理端口></li>
<li>git config --global https.proxy http://<代理地址>:<代理端口><br>
<br></li>
</ul>
</li>
<li>
<p>查看 OpenSSL 使用的证书存储位置(默认是Git安装目录下/mingw64/ssl)</p>
<ul>
<li><code>openssl version -d</code><br>
<br></li>
</ul>
</li>
</ul>
</li>
</ul>
<div id="footnotes"><hr><div id="footnotelist"><ol style="list-style: none; padding-left: 0; margin-left: 40px"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px; margin-left: -40px">1.</span><span style="display: inline-block; vertical-align: top; margin-left: 10px;">Schannel 使用的是 Windows 操作系统的证书存储,它默认包含了很多受信任的根证书,因此如果代理的证书是由一个已知的受信 CA 签发的,客户端(Windows)会信任它。<a href="#fnref:1" rev="footnote"> ↩</a></span></li><li id="fn:2"><span style="display: inline-block; vertical-align: top; padding-right: 10px; margin-left: -40px">2.</span><span style="display: inline-block; vertical-align: top; margin-left: 10px;">OpenSSL 默认使用自己证书的信任链,需要确保代理使用的证书链能够被 OpenSSL 信任。若使用的是自签名证书或者未被信任的 CA,需要显式地将根证书或中间证书导入 OpenSSL 的信任列表。<a href="#fnref:2" rev="footnote"> ↩</a></span></li></ol></div></div>]]></content>
<categories>
<category>Tools</category>
</categories>
<tags>
<tag>Git</tag>
</tags>
</entry>
<entry>
<title>常用端口及作用</title>
<url>/Tools/%E5%B8%B8%E7%94%A8%E7%AB%AF%E5%8F%A3%E5%8F%8A%E4%BD%9C%E7%94%A8/</url>
<content><![CDATA[<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/hint.css/2.4.1/hint.min.css"><ul>
<li>整理一些常用的端口及其作用。</li>
</ul>
<span id="more"></span>
<hr>
<h4 id="常用端口及作用"><a class="header-anchor" href="#常用端口及作用">#</a>常用端口及作用</h4>
<ul>
<li>
<p>HTTP: 用于标准的Web流量。</p>
<ul>
<li>端口: 80</li>
<li>备用端口: 8080
<ul>
<li>常用于Web服务器开发和测试环境中。<br>
<br></li>
</ul>
</li>
</ul>
</li>
<li>
<p>HTTPS: 用于加密的Web流量,通常使用SSL/TLS协议。</p>
<ul>
<li>端口: 443</li>
<li>端口: 8443
<ul>
<li>HTTPS协议的备用端口,常用于Web应用程序。<br>
<br></li>
</ul>
</li>
</ul>
</li>
<li>
<p>FTP (File Transfer Protocol): 用于文件传输服务。</p>
<ul>
<li>端口: 21<br>
<br></li>
</ul>
</li>
<li>
<p>SFTP (Secure FTP): 基于SSH的安全文件传输。</p>
<ul>
<li>端口: 22<br>
<br></li>
</ul>
</li>
<li>
<p>SSH (Secure Shell): 用于远程管理和登录,支持加密连接。</p>
<ul>
<li>端口: 22<br>
<br></li>
</ul>
</li>
<li>
<p>Telnet: 用于远程访问,但不加密,已经逐渐被SSH取代。</p>
<ul>
<li>端口: 23<br>
<br></li>
</ul>
</li>
<li>
<p>SMTP (Simple Mail Transfer Protocol): 用于发送电子邮件。</p>
<ul>
<li>端口: 25<br>
<br></li>
</ul>
</li>
<li>
<p>POP3 (Post Office Protocol 3): 用于从邮件服务器下载电子邮件。</p>
<ul>
<li>端口: 110<br>
<br></li>
</ul>
</li>
<li>
<p>IMAP (Internet Message Access Protocol): 用于从邮件服务器管理和下载电子邮件。</p>
<ul>
<li>端口: 143<br>
<br></li>
</ul>
</li>
<li>
<p>DNS (Domain Name System): 用于域名解析服务。</p>
<ul>
<li>端口: 53<br>
<br></li>
</ul>
</li>
<li>
<p>MySQL: 用于MySQL数据库的客户端连接。</p>
<ul>
<li>端口: 3306<br>
<br></li>
</ul>
</li>
<li>
<p>PostgreSQL: 用于PostgreSQL数据库的客户端连接。</p>
<ul>
<li>端口: 5432<br>
<br></li>
</ul>
</li>
<li>
<p>RDP (Remote Desktop Protocol): 用于Windows的远程桌面连接。</p>
<ul>
<li>端口: 3389<br>
<br></li>
</ul>
</li>
<li>
<p>LDAP (Lightweight Directory Access Protocol): 用于访问和管理目录服务。</p>
<ul>
<li>端口: 389<br>
<br></li>
</ul>
</li>
</ul>
]]></content>
<categories>
<category>Tools</category>
</categories>
<tags>
<tag>Port</tag>
</tags>
</entry>
<entry>
<title>关于个人能力提升的心得</title>
<url>/Feelings/%E5%85%B3%E4%BA%8E%E4%B8%AA%E4%BA%BA%E8%83%BD%E5%8A%9B%E6%8F%90%E5%8D%87%E7%9A%84%E5%BF%83%E5%BE%97/</url>
<content><![CDATA[<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/hint.css/2.4.1/hint.min.css"><ul>
<li>讲讲如何避免精神内耗,从而逐渐提升个人能力。</li>
</ul>
<span id="more"></span>
<hr>
<ul>
<li><a href="#%E5%89%8D%E8%A8%80">前言</a></li>
<li><a href="#%E7%89%A9%E8%B4%A8%E5%9F%BA%E7%A1%80">物质基础</a></li>
<li><a href="#%E8%83%BD%E5%8A%9B%E5%9F%BA%E7%A1%80">能力基础</a></li>
<li><a href="#%E6%83%85%E7%BB%AA%E8%B0%83%E8%8A%82">情绪调节</a></li>
<li><a href="#%E8%AE%A4%E7%9F%A5%E6%8F%90%E5%8D%87">认知提升</a></li>
<li><a href="#thanks">Thanks</a></li>
</ul>
<h4 id="前言"><a class="header-anchor" href="#前言">#</a>前言</h4>
<ul>
<li>
<p>本文是在看完<a href="https://www.bilibili.com/video/BV1ieDQYuErS?vd_source=122690021e22a64532cdcd305038ac97" rel="external nofollow noreferrer">于东来给年轻人得建议</a>后,有感而发重新思考如何提升个人能力这一问题的解决思路。<br>
<br></p>
</li>
<li>
<p>一个人会精神内耗,最重要的原因之一是物质需求和精神需求不匹配,从而导致失控。换句话说就是有多大的能力就做多大的事。<br>
<br></p>
</li>
</ul>
<hr>
<h4 id="物质基础"><a class="header-anchor" href="#物质基础">#</a>物质基础</h4>
<ul>
<li>
<p>pass<br>
<br></p>
</li>
<li>
<p>pass<br>
<br></p>
</li>
</ul>
<hr>
<h4 id="能力基础"><a class="header-anchor" href="#能力基础">#</a>能力基础</h4>
<ul>
<li>
<p>pass<br>
<br></p>
</li>
<li>
<p>pass<br>
<br></p>
</li>
</ul>
<hr>
<h4 id="情绪调节"><a class="header-anchor" href="#情绪调节">#</a>情绪调节</h4>
<ul>
<li>
<p>pass<br>
<br></p>
</li>
<li>
<p>pass<br>
<br></p>
</li>
</ul>
<hr>
<h4 id="认知提升"><a class="header-anchor" href="#认知提升">#</a>认知提升</h4>
<ul>
<li>
<p>pass<br>
<br></p>
</li>
<li>
<p>pass<br>
<br></p>
</li>
</ul>
<hr>
<h4 id="Thanks"><a class="header-anchor" href="#Thanks">#</a>Thanks</h4>
<ul>
<li>
<p><a href="https://www.bilibili.com/video/BV1ieDQYuErS?vd_source=122690021e22a64532cdcd305038ac97" rel="external nofollow noreferrer">于东来给年轻人得建议</a><br>
<br></p>
</li>
<li>
<p>pass<br>
<br></p>
</li>
</ul>
]]></content>
<categories>
<category>Feelings</category>
</categories>
<tags>
<tag>Capability</tag>
</tags>
</entry>
<entry>
<title>李光耀观天下</title>
<url>/Book/%E6%9D%8E%E5%85%89%E8%80%80%E8%A7%82%E5%A4%A9%E4%B8%8B/</url>
<content><![CDATA[<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/hint.css/2.4.1/hint.min.css"><ul>
<li>pass</li>
</ul>
<span id="more"></span>
<hr>
<h3 id="李光耀观天下"><a class="header-anchor" href="#李光耀观天下">#</a>李光耀观天下</h3>
<ol>
<li>
<p>One</p>
<ul>
<li>pass<br>
<br></li>
</ul>
</li>
<li>
<p>Two</p>
<ul>
<li>pass<br>
<br></li>
</ul>
</li>
</ol>
<hr>
<h4 id="Topic"><a class="header-anchor" href="#Topic">#</a>Topic</h4>
<ul>
<li>
<p>pass<br>
<br></p>
</li>
<li>
<p>pass<br>
<br></p>
</li>
</ul>
<hr>
<h4 id="Thanks"><a class="header-anchor" href="#Thanks">#</a>Thanks</h4>
<ul>
<li>
<p>pass<br>
<br></p>
</li>
<li>
<p>pass<br>
<br></p>
</li>
</ul>
]]></content>
<categories>
<category>Book</category>
</categories>
<tags>
<tag>tag1</tag>
</tags>
</entry>
<entry>
<title>VSCode 快速切换工作区</title>
<url>/Tools/VSCode%20%E5%BF%AB%E9%80%9F%E5%88%87%E6%8D%A2%E5%B7%A5%E4%BD%9C%E5%8C%BA/</url>
<content><![CDATA[<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/hint.css/2.4.1/hint.min.css"><ul>
<li>本文就是为解决 VSCode 快速切换不同的工作区问题(VSCode 目前只允许<strong>一次打开一个工作区实例</strong>)。</li>
</ul>
<span id="more"></span>
<hr>
<h3 id="VSCode-快速切换工作区"><a class="header-anchor" href="#VSCode-快速切换工作区">#</a>VSCode 快速切换工作区</h3>
<ol>
<li>
<p><strong>手动创建 VSCode 工作区</strong></p>
<ul>
<li>将工作区文件夹添加到工作区,另存为 <code>custom.code-workspace</code>文件,通过文件打开工作区间。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>使用 VSCode 插件 Workspace Explorer</strong>【推荐】</p>
<ul>
<li>通过插件手动配置不同工作区,实现快速切换不同的工作区。</li>
</ul>
</li>
</ol>
<hr>
<h4 id="手动创建-VSCode-工作区"><a class="header-anchor" href="#手动创建-VSCode-工作区">#</a>手动创建 VSCode 工作区</h4>
<ul>
<li>
<p>将工作区文件夹添加到工作区,另存为 <code>custom.code-workspace</code>文件,通过文件打开工作区间。<br>
<br></p>
</li>
<li>
<p>通过 <code>Ctrl + Shif + P</code> 打开Open Workspace Settings(json)任务编辑工作区文件和工作区设置。</p>
</li>
</ul>
<hr>
<h4 id="使用-VSCode-插件-Workspace-Explorer"><a class="header-anchor" href="#使用-VSCode-插件-Workspace-Explorer">#</a>使用 VSCode 插件 Workspace Explorer</h4>
<ul>
<li>
<p>安装插件 <a href="https://marketplace.visualstudio.com/items?itemName=tomsaunders.vscode-workspace-explorer" rel="external nofollow noreferrer">Workspace Explorer</a></p>
</li>
<li>
<p><a href="https://github.com/sirfuzzalot/workspace-explorer?tab=readme-ov-file#opening-a-workspace-using-command-palette" rel="external nofollow noreferrer">Workspace Explorer Github 文档</a><br>
<br></p>
</li>
<li>
<p>配置 Workspace Explorer</p>
<ul>
<li>设置<strong>自定义图标目录路径</strong>和<strong>工作区文件目录</strong>,并开启自定义图片搜索
<ul>
<li>需注意:windows 平台不能设置路径为盘符根目录即(如 D:\)<br>
<br></li>
</ul>
</li>
</ul>
<p><img data-src="https://cdn.jsdelivr.net/gh/shuguang2000/cdn/images/%E9%85%8D%E7%BD%AEWorkspaceExplorer.png" alt="配置 Workspace Explorer"><br>
<br></p>
<ul>
<li>关于自定义图标可以从<a href="https://www.flaticon.com/" rel="external nofollow noreferrer">Flaticon</a>下载。<br>
<br></li>
</ul>
</li>
<li>
<p>最终效果<br>
<img data-src="https://cdn.jsdelivr.net/gh/shuguang2000/cdn/images/20240924151131.png" alt="Workspace"></p>
</li>
</ul>
<hr>
<h4 id="Thanks"><a class="header-anchor" href="#Thanks">#</a>Thanks</h4>
<ul>
<li><a href="https://marketplace.visualstudio.com/items?itemName=tomsaunders.vscode-workspace-explorer" rel="external nofollow noreferrer">Workspace Explorer</a></li>
</ul>
]]></content>
<categories>
<category>Tools</category>
</categories>
<tags>
<tag>VSCode</tag>
</tags>
</entry>
<entry>
<title>Windows 解决端口占用</title>
<url>/Tools/Windows%20%E8%A7%A3%E5%86%B3%E7%AB%AF%E5%8F%A3%E5%8D%A0%E7%94%A8/</url>
<content><![CDATA[<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/hint.css/2.4.1/hint.min.css"><ul>
<li>Windows 解决端口占用问题。</li>
</ul>
<span id="more"></span>
<hr>
<h3 id="Windows-解决端口占用的方法"><a class="header-anchor" href="#Windows-解决端口占用的方法">#</a>Windows 解决端口占用的方法</h3>
<ul>
<li>
<p><strong>终止占用进程</strong></p>
<ul>
<li>使用命令查找占用端口的进程并终止它。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>更改端口号</strong></p>
<ul>
<li>在应用程序或服务的配置文件中更改端口号,避免与其他进程冲突。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>重新启动计算机</strong></p>
<ul>
<li>重启计算机可以清除端口占用情况,特别是当端口被僵尸进程占用时。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>检查防火墙设置</strong></p>
<ul>
<li>确保防火墙设置允许使用该端口,或添加规则以开放端口。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>查看网络配置</strong></p>
<ul>
<li>在某些情况下,网络配置或代理设置可能影响端口使用,检查并调整相关设置。</li>
</ul>
</li>
</ul>
<hr>
<h4 id="终止占用进程"><a class="header-anchor" href="#终止占用进程">#</a>终止占用进程</h4>
<ul>
<li>
<p><strong>查找占用端口的进程的PID</strong></p>
<ul>
<li>运行cmd/powershell, 查找5000端口的 PID, 下图箭头即为PID
<ul>
<li>执行<code>netstat -aon|findstr :5000|findstr LISTEN</code><br>
<br></li>
</ul>
</li>
</ul>
<p><img data-src="https://cdn.jsdelivr.net/gh/shuguang2000/cdn/images/FindPort.png" alt="FindPort"><br>
<br></p>
</li>
<li>
<p><strong>根据PID查找进程</strong></p>
<ul>
<li>接下来打开任务管理器,查找PID为6916的应用程序<br>
<br><br>
<img data-src="https://cdn.jsdelivr.net/gh/shuguang2000/cdn/images/FindProcess.png" alt="FindProcess"><br>
<br></li>
</ul>
</li>
<li>
<p><strong>重点:补充</strong></p>
<ul>
<li>
<p><strong>当占用进程为系统进程(即PID 4)或者是无法结束的进程(即服务)</strong></p>
<ul>
<li>运行cmd/powershell, <code>tasklist /svc | findstr</code> + PID 或者 服务名称,得到服务名称和PID:<br>
<img data-src="https://cdn.jsdelivr.net/gh/shuguang2000/cdn/images/FindService.png" alt="FindService"></li>
<li>然后以管理员权限运行cmd/powershell, 输入<code>net stop 服务名称 /y</code>停掉对应服务<br>
<img data-src="https://cdn.jsdelivr.net/gh/shuguang2000/cdn/images/StopService.png" alt="StopService"><br>
<br></li>
</ul>
</li>
<li>
<p><strong>当占用进程为PID4且没有服务名称</strong></p>
<ul>
<li>运行命令<code>netsh http show servicestate</code>查看进程PID对应的服务</li>
<li>然后运行<code>net stop 服务名称 /y</code>停掉对应服务即可<br>
<br></li>
</ul>
</li>
<li>
<p><strong>关于443端口若被vmware-hostd.exe占用</strong></p>
<ul>
<li>打开vmwre > 首选项 > 共享虚拟机 > 禁用共享, 或者自行修改为其他端口</li>
<li>针对VMWARE16/更新版本,可以编辑(C:\ProgramData\VMware\hostd\proxy.xml),将httpsPort改成非443/80就行<br>
<br></li>
</ul>
</li>
<li>
<p><strong>当查询不到端口被任何进程占用</strong></p>
<ul>
<li>即 <code>netstat -aon|findstr :端口号|findstr LISTEN</code> 查询不到端口被任何进程占用且无法监听,可能是LSP<sup id="fnref:1"><a href="#fn:1" rel="footnote"><span class="hint--top hint--error hint--medium hint--rounded hint--bounce" aria-label="LSP(Layered Service Provider)是 Windows 平台上的一种技术,允许开发人员在(应用层)网络协议栈中插入自定义的层来实现网络数据的处理和管理。这可以包括数据包过滤、监控、修改等功能。
">[1]</span></a></sup>被劫持的原因。</li>
<li>然后以管理员权限运行cmd/powershell, 输入<code>netsh winsock reset</code>, 重启电脑</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h4 id="更改端口号"><a class="header-anchor" href="#更改端口号">#</a>更改端口号</h4>
<ul>
<li>
<p>例如:Hexo可以通过更改本地服务器端口号解决端口占用</p>
<ul>
<li>bash 运行<code>hexo server -p 5000</code> 命令或者在 _config.yml中添加下面代码:<br>
<br></li>
</ul>
<figure class="highlight yml"><table><tr><td class="code"><pre><span class="line"><span class="attr">server:</span></span><br><span class="line"> <span class="attr">port:</span> <span class="number">5000</span></span><br></pre></td></tr></table></figure>
</li>
</ul>
<hr>
<h4 id="检查防火墙设置"><a class="header-anchor" href="#检查防火墙设置">#</a>检查防火墙设置</h4>
<ul>
<li>当端口被防火墙阻止时
<ul>
<li>可以选择“高级安全Windows防火墙”,新建“入站规则”,指定规则类型为端口并输入端口号配置即可解决端口问题。</li>
</ul>
</li>
</ul>
<div id="footnotes"><hr><div id="footnotelist"><ol style="list-style: none; padding-left: 0; margin-left: 40px"><li id="fn:1"><span style="display: inline-block; vertical-align: top; padding-right: 10px; margin-left: -40px">1.</span><span style="display: inline-block; vertical-align: top; margin-left: 10px;">LSP(Layered Service Provider)是 Windows 平台上的一种技术,允许开发人员在(应用层)网络协议栈中插入自定义的层来实现网络数据的处理和管理。这可以包括数据包过滤、监控、修改等功能。<a href="#fnref:1" rev="footnote"> ↩</a></span></li></ol></div></div>]]></content>
<categories>
<category>Tools</category>
</categories>
<tags>
<tag>Port</tag>
</tags>
</entry>
<entry>
<title>VSCode 快速创建 Hexo 文章</title>
<url>/Blog/VSCode%20%E5%BF%AB%E9%80%9F%E5%88%9B%E5%BB%BA%20Hexo%20%E6%96%87%E7%AB%A0/</url>
<content><![CDATA[<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/hint.css/2.4.1/hint.min.css"><ul>
<li>使用VSCode快速创建带有Front-matter格式的Markdown文档。</li>
</ul>
<span id="more"></span>
<hr>
<h3 id="VSCode-快速创建-Hexo-文章"><a class="header-anchor" href="#VSCode-快速创建-Hexo-文章">#</a>VSCode 快速创建 Hexo 文章</h3>
<ol>
<li>
<p><strong>使用 Hexo CLI</strong></p>
<ul>
<li>在终端中运行 <code>hexo new post <post-title></code> 命令来创建新文章。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>使用代码片段</strong>(Snippets)</p>
<ul>
<li>设置自定义代码片段来插入文章的基本结构。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>使用自定义脚本任务</strong></p>
<ul>
<li>在 tasks.json 文件中配置一个任务,运行 Hexo 的新建文章命令。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>使用插件 vscode-hexo-utils</strong></p>
<ul>
<li>使用专门的 Hexo 插件,如 <a href="https://github.com/0x-jerry/vscode-hexo-utils?tab=readme-ov-file" rel="external nofollow noreferrer">vscode-hexo-utils</a>,来生成文章模板。</li>
</ul>
</li>
</ol>
<hr>
<h4 id="使用-Hexo-CLI"><a class="header-anchor" href="#使用-Hexo-CLI">#</a>使用 Hexo CLI</h4>
<ul>
<li>
<p><strong>使用VSCode终端</strong></p>
<ul>
<li>使用快捷键 Ctrl+` 打开VSCode集成终端</li>
<li>在终端中使用 Git Bash 终端并运行命令 <code>hexo new post "Title"</code>
<ul>
<li>关于hexo常用命令:<a href="./Hexo%20%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C.md">Hexo 常用操作</a><br>
<br></li>
</ul>
</li>
</ul>
</li>
<li>
<p><strong>关于集成终端显示此系统上禁止运行脚本问题</strong></p>
<ul>
<li>
<p>通常是由于 Windows 的执行策略限制了脚本的执行<br>
<br></p>
</li>
<li>
<p>解决方案:</p>
<ul>
<li>打开 PowerShell 以管理员身份运行</li>
<li>使用<code>Get-ExecutionPolicy</code>命令检查当前的执行策略</li>
<li>使用<code>Set-ExecutionPolicy RemoteSigned</code>命令更改策略为 RemoteSigned 或者使用<code>Set-ExecutionPolicy Unrestricted</code> 命令更改策略为 Unrestricted<br>
<br></li>
</ul>
</li>
<li>
<p>关于这三种策略:</p>
<ul>
<li><strong>Restricted</strong>
<ul>
<li>是 PowerShell 的默认执行策略,该策略下 PowerShell 只能运行交互式命令,不能执行脚本文件(.ps1 文件)或配置文件</li>
</ul>
</li>
<li><strong>RemoteSigned</strong>
<ul>
<li>要求所有从互联网下载的脚本必须经过签名才能执行,但本地创建的脚本可以不需要签名</li>
</ul>
</li>
<li><strong>Unrestricted</strong>
<ul>
<li>不限制脚本的来源或签名,允许所有脚本(包括从互联网下载的未签名脚本)运行</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h4 id="使用自定义代码片段(推荐)"><a class="header-anchor" href="#使用自定义代码片段(推荐)">#</a>使用自定义代码片段(推荐)</h4>
<ul>
<li>
<p><strong>创建代码块</strong></p>
<ul>
<li>打开 VSCode,进入 “文件” > “首选项” > “用户代码片段”</li>
<li>选择 “New Global Snippets file” 或 “New Snippets file for <your_workspace>”(如果只在某个工作区有效)。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>添加代码片段</strong></p>
<ul>
<li>默认会在<your_workspace>/.vscode下创建Enter.code-snippets文件(建议在.gitignore文件中忽略该文件夹)</li>
<li><a href="https://code.visualstudio.com/docs/editor/userdefinedsnippets" rel="external nofollow noreferrer">自定义代码片段官方文档</a><br>
<br></li>
</ul>
<figure class="highlight json"><table><tr><td class="code"><pre><span class="line"><span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"Hexo Post Template"</span><span class="punctuation">:</span> <span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"prefix"</span><span class="punctuation">:</span> <span class="string">"hexopost"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"body"</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line"> <span class="string">"---"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"title: ${TM_FILENAME_BASE}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"date: ${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE} ${CURRENT_HOUR}:${CURRENT_MINUTE}:${CURRENT_SECOND}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"updated: {{ updated }}"</span><span class="punctuation">,</span> </span><br><span class="line"> <span class="string">"categories: ${2:category1}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"tags: ${3:tag1}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"keywords: ${4:keyword1}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"author: shuguang2000"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"comments: true"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"---"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">""</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"- ${1:pass}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"\n<!--more-->\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"------\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"### Topic Introduction\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"1. ${5:One}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">" - ${6:pass}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"<br>\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"2. ${7:Two}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">" - ${8:pass}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"<br>\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"------\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"#### Topic\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"- ${9:pass}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"<br>\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"- ${10:pass}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"<br>\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"------\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"#### Thanks\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"- ${11:pass}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"<br>\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"- ${12:pass}"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="string">"<br>\n"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"description"</span><span class="punctuation">:</span> <span class="string">"Template for Hexo post"</span></span><br><span class="line"> <span class="punctuation">}</span></span><br><span class="line"><span class="punctuation">}</span></span><br></pre></td></tr></table></figure>
</li>
</ul>
<br>
<ul>
<li>
<p><strong>使用代码块</strong></p>
<ul>
<li>使用 <code>Ctrl+N</code> 快捷键新建一个文件,输入我们上面定义好的代码前缀(即:hexopost)即可快速插入。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>补充</strong>【推荐】</p>
<ul>
<li>可使用自定义快捷键实现不用输入前缀,即可快速在任意文件中插入自定义代码片段(这里使用的是 <code>Ctrl+Alt+M</code> ),并通过 Tab 键快速修改内容。
<ul>
<li>打开 VSCode,进入 “文件” > “首选项” > “键盘快捷方式” > “打开键盘快捷方式JSON” > <code>keybindings.json</code></li>
<li>或者是打开<code>keybindings.json</code>文件(默认在<code>C:\Users\<your_username>\AppData\Roaming\Code\User</code>下)添加下面JSON代码:<br>
<br></li>
</ul>
</li>
</ul>
<figure class="highlight json"><table><tr><td class="code"><pre><span class="line"><span class="punctuation">[</span></span><br><span class="line"> <span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"key"</span><span class="punctuation">:</span> <span class="string">"ctrl+alt+m"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"command"</span><span class="punctuation">:</span> <span class="string">"editor.action.insertSnippet"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"when"</span><span class="punctuation">:</span> <span class="string">"editorTextFocus"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"args"</span><span class="punctuation">:</span> <span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"langId"</span><span class="punctuation">:</span> <span class="string">"markdown"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"name"</span><span class="punctuation">:</span> <span class="string">"Hexo Post Template"</span></span><br><span class="line"> <span class="punctuation">}</span></span><br><span class="line"> <span class="punctuation">}</span></span><br><span class="line"><span class="punctuation">]</span></span><br></pre></td></tr></table></figure>
</li>
</ul>
<hr>
<h4 id="使用自定义任务"><a class="header-anchor" href="#使用自定义任务">#</a>使用自定义任务</h4>
<ul>
<li>
<p><strong>准备工作</strong></p>
<ul>
<li>
<p>配置默认终端配置为: <code>Git Bash</code></p>
<ul>
<li>在xxx.code-workspace文件中添加如下代码:<br>
<br></li>
</ul>
<figure class="highlight json"><table><tr><td class="code"><pre><span class="line"><span class="attr">"settings"</span><span class="punctuation">:</span> <span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"terminal.integrated.defaultProfile.linux"</span><span class="punctuation">:</span> <span class="string">"bash"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"terminal.integrated.defaultProfile.osx"</span><span class="punctuation">:</span> <span class="string">"bash"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"terminal.integrated.defaultProfile.windows"</span><span class="punctuation">:</span> <span class="string">"Git Bash"</span><span class="punctuation">,</span> <span class="comment">// 如果你在 Windows 上使用 Git Bash</span></span><br><span class="line"><span class="punctuation">}</span><span class="punctuation">,</span></span><br></pre></td></tr></table></figure>
<br>
</li>
<li>
<p>在<your_workspace>/.vscode下创建 <code>tasks.json</code> 文件, 编辑生成的 <code>tasks.json</code> 文件,添加一个新任务来运行 Hexo 命令:<br>
<br></p>
</li>
</ul>
<figure class="highlight json"><table><tr><td class="code"><pre><span class="line"><span class="punctuation">{</span></span><br><span class="line"><span class="attr">"version"</span><span class="punctuation">:</span> <span class="string">"2.0.0"</span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">"tasks"</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line"> <span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"label"</span><span class="punctuation">:</span> <span class="string">"Create Hexo Post"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"type"</span><span class="punctuation">:</span> <span class="string">"shell"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"command"</span><span class="punctuation">:</span> <span class="string">"bash"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"args"</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line"> <span class="string">"-c"</span><span class="punctuation">,</span> <span class="comment">//用于指定要执行的命令字符串</span></span><br><span class="line"> <span class="string">"hexo new ${input:postTitle}"</span></span><br><span class="line"> <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"problemMatcher"</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line"> <span class="punctuation">}</span><span class="punctuation">,</span></span><br><span class="line"><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">"inputs"</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line"> <span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"id"</span><span class="punctuation">:</span> <span class="string">"postTitle"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"type"</span><span class="punctuation">:</span> <span class="string">"promptString"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"description"</span><span class="punctuation">:</span> <span class="string">"Enter the title of the new post"</span></span><br><span class="line"> <span class="punctuation">}</span></span><br><span class="line"><span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">}</span></span><br></pre></td></tr></table></figure>
</li>
</ul>
<br>
<ul>
<li><strong>运行任务</strong>
<ul>
<li>
<p><code>Ctrl + Shift + P</code> 选择<code>Takes: Run Task</code>运行标签为 Create Hexo Post 的任务。</p>
</li>
<li>
<p><a href="https://code.visualstudio.com/docs/editor/tasks" rel="external nofollow noreferrer">VSCode自定义任务文档</a></p>
</li>
</ul>
</li>
</ul>
<hr>
<h4 id="使用插件-vscode-hexo-utils"><a class="header-anchor" href="#使用插件-vscode-hexo-utils">#</a>使用插件 vscode-hexo-utils</h4>
<ul>
<li>
<p>使用 VSCode 插件 <a href="https://github.com/0x-jerry/vscode-hexo-utils?tab=readme-ov-file" rel="external nofollow noreferrer">vscode-hexo-utils</a></p>
<ul>
<li>安装后在插件扩展设置中,设置时间格式<code>YYYY-MM-DD HH:mm:ss</code>。<br>
<br></li>
</ul>
</li>
<li>
<p>侧边栏 Hexo 图标点开再点击加号输入标题即可快速创建模板文章(默认模板是scaffolds/post.md)。</p>
</li>
</ul>
<hr>
<h4 id="总结"><a class="header-anchor" href="#总结">#</a>总结</h4>
<ul>
<li>
<p><strong>使用 Hexo CLI(Command Line Interface )</strong></p>
<ul>
<li>适合简单的创建模板。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>使用代码片段</strong>(Snippets)</p>
<ul>
<li>适合快速插入简单的模板。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>使用自定义脚本任务</strong></p>
<ul>
<li>适合更复杂的模板生成或批量创建。<br>
<br></li>
</ul>
</li>
<li>
<p><strong>使用插件 vscode-hexo-utils</strong></p>
<ul>
<li>能集成 Hexo 特性,并使用更多的功能,比如图片上传,文章分类显示等。</li>
</ul>
</li>
</ul>
<hr>
<h4 id="Thanks"><a class="header-anchor" href="#Thanks">#</a>Thanks</h4>
<ul>
<li>
<p><a href="https://code.visualstudio.com/docs/editor/tasks" rel="external nofollow noreferrer">Integrate with External Tools via Tasks</a><br>
<br></p>
</li>
<li>
<p><a href="https://code.visualstudio.com/docs/editor/tasks" rel="external nofollow noreferrer">Snippets in Visual Studio Code</a><br>
<br></p>
</li>
<li>
<p><a href="https://github.com/0x-jerry/vscode-hexo-utils?tab=readme-ov-file" rel="external nofollow noreferrer">vscode-hexo-utils</a></p>
</li>
</ul>
]]></content>
<categories>
<category>Blog</category>
</categories>