我尝试把我的这个笔记使用lvim进行编辑, 感觉还挺爽
记录一下最近在做的事情, 基本上是开发环境的配置, 我居然实现了godot+lunarvim, 然后用lvim代替了obsidian和vscode, 这真是太库拉lmain
parent
3a6054d6dc
commit
726baede9b
|
@ -0,0 +1,188 @@
|
||||||
|
""""""""""""""""""""""
|
||||||
|
" Leader
|
||||||
|
""""""""""""""""""""""
|
||||||
|
" let mapleader=,
|
||||||
|
" can't set leaders in Obsidian vim, so the key just has to be used consistently.
|
||||||
|
" However, it needs to be unmapped, to not trigger default behavior: https://github.com/esm7/obsidian-vimrc-support#some-help-with-binding-space-chords-doom-and-spacemacs-fans
|
||||||
|
unmap ,
|
||||||
|
|
||||||
|
" map ; to : in normal mode, so that I don’t rely on the shift key
|
||||||
|
" nmap ; :
|
||||||
|
|
||||||
|
" no modifier key for jumping to next word
|
||||||
|
nmap + *
|
||||||
|
|
||||||
|
" Have j and k navigate visual lines rather than logical ones
|
||||||
|
nmap j gj
|
||||||
|
nmap k gk
|
||||||
|
|
||||||
|
" I like using H and L for beginning/end of line
|
||||||
|
nmap H ^
|
||||||
|
nmap L $
|
||||||
|
" nmap J 5j
|
||||||
|
" nmap K 5k
|
||||||
|
|
||||||
|
" Moving to next/prev paragraph
|
||||||
|
nmap [ {
|
||||||
|
nmap ] }
|
||||||
|
|
||||||
|
" Yank to system clipboard
|
||||||
|
set clipboard=unnamed
|
||||||
|
|
||||||
|
" Surround
|
||||||
|
exmap surround_wiki surround [[ ]]
|
||||||
|
exmap surround_double_quotes surround " "
|
||||||
|
exmap surround_single_quotes surround ' '
|
||||||
|
exmap surround_brackets surround ( )
|
||||||
|
exmap surround_square_brackets surround [ ]
|
||||||
|
exmap surround_curly_brackets surround { }
|
||||||
|
exmap surround_chinese_double_quotes surround “ ”
|
||||||
|
exmap surround_chinese_brackets surround 「 」
|
||||||
|
|
||||||
|
" NOTE: must use 'map' and not 'nmap'
|
||||||
|
map [[ :surround_wiki
|
||||||
|
nunmap s
|
||||||
|
vunmap s
|
||||||
|
map s" :surround_double_quotes
|
||||||
|
map s' :surround_single_quotes
|
||||||
|
map s( :surround_brackets
|
||||||
|
map s) :surround_brackets
|
||||||
|
map s[ :surround_square_brackets
|
||||||
|
map s{ :surround_curly_brackets
|
||||||
|
map s} :surround_curly_brackets
|
||||||
|
" Surround 中文双引号
|
||||||
|
map s] :surround_chinese_brackets
|
||||||
|
map s\ :surround_chinese_brackets
|
||||||
|
map ss :surround_chinese_double_quotes
|
||||||
|
map sy :surround_chinese_double_quotes
|
||||||
|
|
||||||
|
" Surround Admonition https://github.com/esm7/obsidian-vimrc-support/discussions/146
|
||||||
|
exmap CodeBlockAdmonitionNote obcommand code-block-from-selection:17f30753-d5f4-4953-abed-5027a25ede58
|
||||||
|
map san :CodeBlockAdmonitionNote
|
||||||
|
exmap CodeBlockSelectionAdmonitionNote jscommand { editor.setSelections([selection]); this.app.commands.commands['code-block-from-selection:17f30753-d5f4-4953-abed-5027a25ede58'].callback() }
|
||||||
|
vmap san :CodeBlockSelectionAdmonitionNote
|
||||||
|
|
||||||
|
exmap CodeBlockAdmonitionBrainstorm obcommand code-block-from-selection:36a8b91d-c4f1-4ac4-999c-7bfc53c998c1
|
||||||
|
map sab :CodeBlockAdmonitionBrainstorm
|
||||||
|
exmap CodeBlockSelectionAdmonitionBrainstorm jscommand { editor.setSelections([selection]); this.app.commands.commands['code-block-from-selection:36a8b91d-c4f1-4ac4-999c-7bfc53c998c1'].callback() }
|
||||||
|
vmap sab :CodeBlockSelectionAdmonitionBrainstorm
|
||||||
|
|
||||||
|
exmap CodeBlockAdmonitionQuote obcommand code-block-from-selection:91dc799c-4f7e-4d75-9cde-d9e6db990a5a
|
||||||
|
map saq :CodeBlockAdmonitionQuote
|
||||||
|
exmap CodeBlockSelectionAdmonitionQuote jscommand { editor.setSelections([selection]); this.app.commands.commands['code-block-from-selection:91dc799c-4f7e-4d75-9cde-d9e6db990a5a'].callback() }
|
||||||
|
vmap saq :CodeBlockSelectionAdmonitionQuote
|
||||||
|
|
||||||
|
exmap CodeBlockAdmonitionContext obcommand code-block-from-selection:cb332ef3-8053-42b0-88c9-a233e6dae6d0
|
||||||
|
map sac :CodeBlockAdmonitionContext
|
||||||
|
exmap CodeBlockSelectionAdmonitionContext jscommand { editor.setSelections([selection]); this.app.commands.commands['code-block-from-selection:cb332ef3-8053-42b0-88c9-a233e6dae6d0'].callback() }
|
||||||
|
vmap sac :CodeBlockSelectionAdmonitionContext
|
||||||
|
|
||||||
|
exmap CodeBlockAdmonitionRoutine obcommand code-block-from-selection:31f32950-d8df-4d8a-9ca3-91a34d2a67ab
|
||||||
|
map sar :CodeBlockAdmonitionRoutine
|
||||||
|
exmap CodeBlockSelectionAdmonitionRoutine jscommand { editor.setSelections([selection]); this.app.commands.commands['code-block-from-selection:31f32950-d8df-4d8a-9ca3-91a34d2a67ab'].callback() }
|
||||||
|
vmap sar :CodeBlockSelectionAdmonitionRoutine
|
||||||
|
|
||||||
|
exmap CodeBlockAdmonitionThink obcommand code-block-from-selection:655b28f0-353f-479e-bc5a-c0b422b987c9
|
||||||
|
map sat :655b28f0-353f-479e-bc5a-c0b422b987c9
|
||||||
|
exmap CodeBlockSelectionAdmonitionThink jscommand { editor.setSelections([selection]); this.app.commands.commands['code-block-from-selection:655b28f0-353f-479e-bc5a-c0b422b987c9'].callback() }
|
||||||
|
vmap sat :CodeBlockSelectionAdmonitionThink
|
||||||
|
|
||||||
|
" Emulate Folding https://vimhelp.org/fold.txt.html#fold-commands
|
||||||
|
exmap togglefold obcommand editor:toggle-fold
|
||||||
|
nmap zo :togglefold
|
||||||
|
|
||||||
|
exmap unfoldall obcommand editor:unfold-all
|
||||||
|
nmap zR :unfoldall
|
||||||
|
|
||||||
|
exmap foldall obcommand editor:fold-all
|
||||||
|
nmap zM :foldall
|
||||||
|
|
||||||
|
" Emulate Tab Switching https://vimhelp.org/tabpage.txt.html#gt
|
||||||
|
" requires Pane Relief: https://github.com/pjeby/pane-relief
|
||||||
|
exmap tabnext obcommand pane-relief:go-next
|
||||||
|
nmap gt :tabnext
|
||||||
|
exmap tabprev obcommand pane-relief:go-prev
|
||||||
|
nmap gT :tabprev
|
||||||
|
" Same as CMD+\
|
||||||
|
nmap g\ :tabnext
|
||||||
|
|
||||||
|
exmap openlink obcommand editor:open-link-in-new-leaf
|
||||||
|
nmap go :openlink
|
||||||
|
nmap gd :openlink
|
||||||
|
|
||||||
|
" [g]oto [f]ile (= Follow Link under cursor)
|
||||||
|
exmap followLinkUnderCursor obcommand editor:follow-link
|
||||||
|
nmap gf :followLinkUnderCursor
|
||||||
|
|
||||||
|
" Link Jump (similar to Vimium's f)
|
||||||
|
exmap linkjump obcommand mrj-jump-to-link:activate-lightspeed-jump
|
||||||
|
nmap ,f :linkjump
|
||||||
|
|
||||||
|
" g; go to last change - https://vimhelp.org/motion.txt.html#g%3B
|
||||||
|
nmap g; u<C-r>
|
||||||
|
|
||||||
|
" exmap cursorBackward obcommand heycalmdown-navigate-cursor-history:cursor-position-backward
|
||||||
|
" exmap cursorForward heycalmdown-navigate-cursor-history:cursor-position-forward
|
||||||
|
" nmap g; :cursorBackward
|
||||||
|
" nmap g' :cursorForward
|
||||||
|
|
||||||
|
" mapping next/previous heading
|
||||||
|
exmap nextHeading jsfile .obsidian.markdown-helper.js {jumpHeading(true)}
|
||||||
|
exmap prevHeading jsfile .obsidian.markdown-helper.js {jumpHeading(false)}
|
||||||
|
nmap g] :nextHeading
|
||||||
|
nmap g[ :prevHeading
|
||||||
|
|
||||||
|
exmap scrollToCenterTop70p jsfile .obsidian.markdown-helper.js {scrollToCursor(0.7)}
|
||||||
|
nmap zz :scrollToCenterTop70p
|
||||||
|
|
||||||
|
" rename file
|
||||||
|
exmap renameFile obcommand Obsidian-VimEx:file-rename-modal
|
||||||
|
nmap gr :renameFile
|
||||||
|
|
||||||
|
" mapping vs/hs as workspace split
|
||||||
|
exmap vs obcommand workspace:split-vertical
|
||||||
|
exmap sp obcommand workspace:split-vertical
|
||||||
|
exmap hs obcommand workspace:split-horizontal
|
||||||
|
nmap <C-w>v :vs
|
||||||
|
nmap <C-w>s :hs
|
||||||
|
|
||||||
|
" window controls
|
||||||
|
exmap wq obcommand workspace:close
|
||||||
|
exmap q obcommand workspace:close
|
||||||
|
|
||||||
|
" focus
|
||||||
|
exmap focusLeft obcommand editor:focus-left
|
||||||
|
exmap focusRight obcommand editor:focus-right
|
||||||
|
exmap focusBottom obcommand editor:focus-bottom
|
||||||
|
exmap focusTop obcommand editor:focus-top
|
||||||
|
nmap <C-w>h :focusLeft
|
||||||
|
nmap <C-w>l :focusRight
|
||||||
|
nmap <C-w>j :focusBottom
|
||||||
|
nmap <C-w>k :focusTop
|
||||||
|
|
||||||
|
" Blockquote
|
||||||
|
exmap toggleBlockquote obcommand editor:toggle-blockquote
|
||||||
|
nmap ,< :toggleBlockquote
|
||||||
|
nmap ,> :toggleBlockquote
|
||||||
|
|
||||||
|
" complete a Markdown task
|
||||||
|
exmap toggleTask obcommand editor:toggle-checklist-status
|
||||||
|
nmap ,x :toggleTask
|
||||||
|
|
||||||
|
" Zoom in/out
|
||||||
|
exmap zoomIn obcommand obsidian-zoom:zoom-in
|
||||||
|
exmap zoomOut obcommand obsidian-zoom:zoom-out
|
||||||
|
nmap zi :zoomIn
|
||||||
|
nmap zo :zoomOut
|
||||||
|
|
||||||
|
nmap &a :zoomOut
|
||||||
|
nmap &b :nextHeading
|
||||||
|
nmap &c :zoomIn
|
||||||
|
nmap &d :prevHeading
|
||||||
|
nmap z] &a&b&c
|
||||||
|
nmap z[ &a&d&c
|
||||||
|
|
||||||
|
" Stille Mode
|
||||||
|
exmap toggleStille obcommand obsidian-stille:toggleStille
|
||||||
|
nmap zs :toggleStille
|
||||||
|
nmap ,s :toggleStille
|
|
@ -1,5 +1,8 @@
|
||||||
{
|
{
|
||||||
"promptDelete": false,
|
"promptDelete": false,
|
||||||
"attachmentFolderPath": "Aseets",
|
"attachmentFolderPath": "Aseets",
|
||||||
"alwaysUpdateLinks": true
|
"alwaysUpdateLinks": true,
|
||||||
|
"vimMode": false,
|
||||||
|
"showLineNumber": true,
|
||||||
|
"useMarkdownLinks": true
|
||||||
}
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
[
|
||||||
|
"obsidian-better-command-palette"
|
||||||
|
]
|
|
@ -1 +1,26 @@
|
||||||
{}
|
{
|
||||||
|
"darlal-switcher-plus:switcher-plus:open-commands": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "P"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"darlal-switcher-plus:switcher-plus:open": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "O"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"darlal-switcher-plus:switcher-plus:open-symbols": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "I"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"id": "obsidian-better-command-palette",
|
||||||
|
"name": "Better Command Palette",
|
||||||
|
"version": "0.17.1",
|
||||||
|
"minAppVersion": "0.12.0",
|
||||||
|
"description": "A command palette that does all of the things you want it to do.",
|
||||||
|
"author": "Alex Bieg",
|
||||||
|
"authorUrl": "www.github.com/AlexBieg",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
.better-command-palette .better-command-palette-title {
|
||||||
|
color: var(--text-accent);
|
||||||
|
margin: 5px;
|
||||||
|
}
|
||||||
|
.better-command-palette .hidden-items-header {
|
||||||
|
margin: 0px;
|
||||||
|
margin-left: 13px;
|
||||||
|
margin-top: 10px;
|
||||||
|
font-size: 15px;
|
||||||
|
color: var(--text-faint);
|
||||||
|
}
|
||||||
|
.better-command-palette .hidden-items-header:hover {
|
||||||
|
color: var(--text-muted);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.better-command-palette .suggestion-item.hidden {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
.better-command-palette .suggestion-item.hidden .suggestion-flair {
|
||||||
|
transform: rotate(45deg);
|
||||||
|
}
|
||||||
|
.better-command-palette .suggestion-item .suggestion-flair {
|
||||||
|
color: var(--text-faint);
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.better-command-palette .suggestion-item .suggestion-hotkey {
|
||||||
|
white-space: nowrap;
|
||||||
|
margin-left: 10px;
|
||||||
|
padding: 0px 10px;
|
||||||
|
}
|
||||||
|
.better-command-palette .suggestion-item .suggestion-content svg {
|
||||||
|
margin: 0px 5px;
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
.better-command-palette .suggestion-item .suggestion-aux {
|
||||||
|
flex-direction: row-reverse;
|
||||||
|
}
|
||||||
|
.better-command-palette .suggestion-item .suggestion-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.better-command-palette .suggestion-item .suggestion-note {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.better-command-palette .suggestion-item .unresolved {
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
.better-command-palette .suggestion-item .unresolved::after {
|
||||||
|
content: "(Unresolved link)";
|
||||||
|
color: var(--text-faint);
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Settings Styles */
|
||||||
|
.macro-setting {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
.macro-setting .setting-item-name {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.macro-setting .macro-main-settings {
|
||||||
|
width: 100%;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 80% 20%;
|
||||||
|
border-top: solid 1px var(--background-modifier-border);
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.macro-setting .macro-main-settings * {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.macro-setting .macro-command {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.macro-setting .macro-command button {
|
||||||
|
margin-left: 30px;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
|
@ -4,19 +4,15 @@
|
||||||
"type": "split",
|
"type": "split",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "19312355a28b9d05",
|
"id": "4b0a608721888c78",
|
||||||
"type": "tabs",
|
"type": "tabs",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "daf761d0297d992f",
|
"id": "32c3ce4c80742947",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "empty",
|
||||||
"state": {
|
"state": {}
|
||||||
"file": "README.md",
|
|
||||||
"mode": "source",
|
|
||||||
"source": false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -69,8 +65,7 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"direction": "horizontal",
|
"direction": "horizontal",
|
||||||
"width": 300,
|
"width": 300
|
||||||
"collapsed": true
|
|
||||||
},
|
},
|
||||||
"right": {
|
"right": {
|
||||||
"id": "008332ab0f5949de",
|
"id": "008332ab0f5949de",
|
||||||
|
@ -79,14 +74,48 @@
|
||||||
{
|
{
|
||||||
"id": "35484acf1a42a40b",
|
"id": "35484acf1a42a40b",
|
||||||
"type": "tabs",
|
"type": "tabs",
|
||||||
|
"dimension": 47.23809523809523,
|
||||||
"children": [
|
"children": [
|
||||||
|
{
|
||||||
|
"id": "853e57e78eb9785c",
|
||||||
|
"type": "leaf",
|
||||||
|
"state": {
|
||||||
|
"type": "localgraph",
|
||||||
|
"state": {
|
||||||
|
"options": {
|
||||||
|
"collapse-filter": false,
|
||||||
|
"search": "",
|
||||||
|
"localJumps": 1,
|
||||||
|
"localBacklinks": true,
|
||||||
|
"localForelinks": true,
|
||||||
|
"localInterlinks": false,
|
||||||
|
"showTags": false,
|
||||||
|
"showAttachments": false,
|
||||||
|
"hideUnresolved": false,
|
||||||
|
"collapse-color-groups": true,
|
||||||
|
"colorGroups": [],
|
||||||
|
"collapse-display": false,
|
||||||
|
"showArrow": true,
|
||||||
|
"textFadeMultiplier": -2.6,
|
||||||
|
"nodeSizeMultiplier": 1,
|
||||||
|
"lineSizeMultiplier": 1,
|
||||||
|
"collapse-forces": true,
|
||||||
|
"centerStrength": 0.518713248970312,
|
||||||
|
"repelStrength": 10,
|
||||||
|
"linkStrength": 1,
|
||||||
|
"linkDistance": 250,
|
||||||
|
"scale": 1.5204648971557617,
|
||||||
|
"close": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "8c626ec87463284e",
|
"id": "8c626ec87463284e",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "backlink",
|
"type": "backlink",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "README.md",
|
|
||||||
"collapseAll": false,
|
"collapseAll": false,
|
||||||
"extraContext": false,
|
"extraContext": false,
|
||||||
"sortOrder": "alphabetical",
|
"sortOrder": "alphabetical",
|
||||||
|
@ -103,7 +132,6 @@
|
||||||
"state": {
|
"state": {
|
||||||
"type": "outgoing-link",
|
"type": "outgoing-link",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "README.md",
|
|
||||||
"linksCollapsed": false,
|
"linksCollapsed": false,
|
||||||
"unlinkedCollapsed": true
|
"unlinkedCollapsed": true
|
||||||
}
|
}
|
||||||
|
@ -116,27 +144,30 @@
|
||||||
"type": "tag",
|
"type": "tag",
|
||||||
"state": {
|
"state": {
|
||||||
"sortOrder": "frequency",
|
"sortOrder": "frequency",
|
||||||
"useHierarchy": true
|
"useHierarchy": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "a3d6ffbe49e6cc2b",
|
||||||
|
"type": "tabs",
|
||||||
|
"dimension": 52.76190476190477,
|
||||||
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "30292489daefa915",
|
"id": "30292489daefa915",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "outline",
|
"type": "outline",
|
||||||
"state": {
|
"state": {}
|
||||||
"file": "README.md"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
],
|
|
||||||
"currentTab": 3
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"direction": "horizontal",
|
"direction": "horizontal",
|
||||||
"width": 300,
|
"width": 300
|
||||||
"collapsed": true
|
|
||||||
},
|
},
|
||||||
"left-ribbon": {
|
"left-ribbon": {
|
||||||
"hiddenItems": {
|
"hiddenItems": {
|
||||||
|
@ -150,24 +181,38 @@
|
||||||
"random-note:Open random note": false
|
"random-note:Open random note": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"active": "daf761d0297d992f",
|
"active": "32c3ce4c80742947",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"破解享乐的欲望牢笼.md",
|
|
||||||
"局域网共享文件方法.md",
|
|
||||||
"Vim Superpower.md",
|
|
||||||
"TODO模板.md",
|
"TODO模板.md",
|
||||||
|
"有关Godot和Lunarvim如何结合使用.md",
|
||||||
|
"linux安装与应用.md",
|
||||||
|
"Lunarvim.md",
|
||||||
|
"Linux Setup.md",
|
||||||
|
"lazygit.md",
|
||||||
|
"neovim.md",
|
||||||
|
"youtube.be/CPLdltN7wge.md",
|
||||||
|
"youtube.be",
|
||||||
|
"vim.md",
|
||||||
|
"Aseets/dev2.png~",
|
||||||
|
"WorldTreeModule.md",
|
||||||
|
"软件工程.md",
|
||||||
|
"GDShader.md",
|
||||||
"Think in UML.canvas",
|
"Think in UML.canvas",
|
||||||
"README.md",
|
"README.md",
|
||||||
|
"Git.md",
|
||||||
|
"Awesome window manager.md",
|
||||||
|
"局域网共享文件方法.md",
|
||||||
|
"Vim Superpower.md",
|
||||||
|
"Pasted image 20231008173544.png.md",
|
||||||
|
"Aseets/Procedure.jpeg",
|
||||||
|
"Godot GDScript Trick.md",
|
||||||
|
"Aseets/Pasted image 20231008173544.png",
|
||||||
|
"破解享乐的欲望牢笼.md",
|
||||||
|
"Aseets/vimEdit.png",
|
||||||
"ObsidianNotes/README.md",
|
"ObsidianNotes/README.md",
|
||||||
"ObsidianNotes",
|
"ObsidianNotes",
|
||||||
"Git.md",
|
|
||||||
"Godot GDScript Trick.md",
|
|
||||||
"Aseets/dev2.png",
|
"Aseets/dev2.png",
|
||||||
"Awesome window manager.md",
|
|
||||||
"Aseets/Dev.png",
|
"Aseets/Dev.png",
|
||||||
"Linux Setup.md",
|
|
||||||
"软件工程.md",
|
|
||||||
"Aseets/Procedure.jpeg",
|
|
||||||
"Ability.md",
|
"Ability.md",
|
||||||
"平铺式窗口管理软件.md",
|
"平铺式窗口管理软件.md",
|
||||||
"Aseets/85dbdd074d403555e95e832745425c43.jpeg",
|
"Aseets/85dbdd074d403555e95e832745425c43.jpeg",
|
||||||
|
|
BIN
Aseets/dev2.png
BIN
Aseets/dev2.png
Binary file not shown.
Before Width: | Height: | Size: 747 KiB After Width: | Height: | Size: 747 KiB |
Binary file not shown.
After Width: | Height: | Size: 203 KiB |
|
@ -0,0 +1,31 @@
|
||||||
|
#GODOT
|
||||||
|
|
||||||
|
### 基础语法
|
||||||
|
``` glsl
|
||||||
|
// gdscript 如何传递数据给 material
|
||||||
|
ShaderMaterial.set_shader_parameter
|
||||||
|
// Shader 的 vertex 如何传递 worldPosition 给 fragment 使用
|
||||||
|
声明变量时不用uniform 而是用 varying
|
||||||
|
// 如何读取repeat的贴图 (如果是主贴图的话, 需要在导入设置或者在CanvasItem内的Texture中 选择 repeat)
|
||||||
|
uniform sampler2D noise : repeat_enable;
|
||||||
|
或者去fract uv 获得小数部分然后采样
|
||||||
|
// 如何uniform 一个可以编辑的颜色
|
||||||
|
uniform vec4 new_color : source_color = vec4(1,1,1,1);
|
||||||
|
// 如何uniform 一个range float
|
||||||
|
uniform float test: hint_range(0.0, 1.0, 0.1) = .5;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example : 顶点中获得世界坐标并传递给片元(2D)
|
||||||
|
``` glsl
|
||||||
|
varying vec2 worldPos;
|
||||||
|
void vertex() {
|
||||||
|
worldPos = (MODEL_MATRIX * vec4(VERTEX, 0.0, 1.0)).xy;
|
||||||
|
}
|
||||||
|
void fragment(){
|
||||||
|
//do some thing..
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
- [For More Detail Document](https://docs.godotengine.org/zh_CN/4.x/tutorials/shaders/shader_reference/index.html)
|
10
Git.md
10
Git.md
|
@ -2,14 +2,16 @@
|
||||||
|
|
||||||
每次都需要输入帐号密码的解决方案, 这个类似记住密码的功能吧
|
每次都需要输入帐号密码的解决方案, 这个类似记住密码的功能吧
|
||||||
全局配置:
|
全局配置:
|
||||||
`git config --global credential.helper store`
|
> git config --global credential.helper store
|
||||||
|
|
||||||
当前仓库:
|
当前仓库:
|
||||||
`git config credential.helper store
|
|
||||||
|
> git config credential.helper store
|
||||||
|
|
||||||
优先找当前, 然后找全局.
|
优先找当前, 然后找全局.
|
||||||
|
|
||||||
`git config --global user.name yogi
|
> git config --global user.name yogi
|
||||||
`git config --global user.email 1273750265@qq.com
|
|
||||||
|
>git config --global user.email 1273750265@qq.com
|
||||||
|
|
||||||
也有生成ssh 公 私钥的, 然后把公钥发到服务器的 .ssh 目录的对应文件内的... 但是我测试下来发现是失败的, 原因是因为我是一个类似 github 的仓库, 填入后没生效, 不确定是什么原因
|
也有生成ssh 公 私钥的, 然后把公钥发到服务器的 .ssh 目录的对应文件内的... 但是我测试下来发现是失败的, 原因是因为我是一个类似 github 的仓库, 填入后没生效, 不确定是什么原因
|
|
@ -0,0 +1,40 @@
|
||||||
|
## 常用
|
||||||
|
- C + w + s or C + w + v 分屏
|
||||||
|
- `C+\`Terminal
|
||||||
|
- 窗口导航
|
||||||
|
- C + (hjkl)
|
||||||
|
- leader b 标签导航
|
||||||
|
- 退出
|
||||||
|
- leader + q
|
||||||
|
- :q
|
||||||
|
- leader + e 文件树
|
||||||
|
- leader s 搜索
|
||||||
|
- leader f 打开文件
|
||||||
|
- 搜索
|
||||||
|
- / 向后搜索, 其中 `\<value\>` 代表整词搜索
|
||||||
|
- ? 向前搜索
|
||||||
|
- :% 替换 :%s/搜索值/替换值/g 代表替换当前文档的所有搜索值为目标值 比如 :%s/a/b/g
|
||||||
|
- 搜索输入完毕后, 按回车, 然后按n 可以下一个
|
||||||
|
- 进入编辑模式可以用 i a o s O S C
|
||||||
|
- 但是还有实用的 A I 分别可以在尾行和首行插入
|
||||||
|
- 撤销与重做 u `<C+r>`
|
||||||
|
- 递进与回退 `<C+.>` `C+,>` 这里可以组合其他按键使用 比如组合键加数字键 但是这个组合键要按两次,不知道为啥
|
||||||
|
- 翻页可以用 `<C+d>` `<C+f` `<C+u>` `<C+b>`
|
||||||
|
|
||||||
|
> tips: 以上的 C 都是 Control 的意思 `<>`代表组合键
|
||||||
|
|
||||||
|
TreeSetter安装不同语言:
|
||||||
|
:TSInstall+tab 可以搜索自己想要安装的语言, 安装即可
|
||||||
|
|
||||||
|
:MarkdownPreview 实时在浏览器中浏览markdown
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
[好用视频教程](https://www.youtube.com/watch?v=l-P6COY7GeQ)
|
||||||
|
lazygit 挺好用
|
||||||
|
|
||||||
|
[vim 快捷键](https://devhints.io/vim)
|
||||||
|
|
||||||
|
[Lunarvim 特殊快捷键](https://www.lunarvim.org/zh-Hans/docs/master/beginners-guide/keybinds-overview)
|
||||||
|
|
||||||
|
[有关Godot和Lunarvim如何结合使用](有关Godot和Lunarvim如何结合使用.md)
|
|
@ -1,5 +1,7 @@
|
||||||
# ObsidianNotes
|
# ObsidianNotes
|
||||||
|
|
||||||
此仓库是我的Obsidina笔记的第二个仓库, 前一个仓库在坚果云里面, 但是那个有下载限制, 于是我直接把新仓库做到了我这个私人服务器中.
|
此仓库是我的 Obsidian 笔记的第二个仓库, 前一个仓库在坚果云里面, 但是那个有下载限制, 于是我直接把新仓库做到了我这个私人服务器中.
|
||||||
|
|
||||||
|
使用方法就是下载完毕后, 使用 Obsidian 打开这个文件夹即可
|
||||||
|
|
||||||
|
|
||||||
使用方法就是下载完毕后, 使用Obisidan打开这个文件夹即可
|
|
|
@ -4,36 +4,36 @@
|
||||||
{"id":"f7a5a05e3b3adbee","type":"group","x":-880,"y":-360,"width":907,"height":1440,"label":"基于顺序流程开发 (面向流程开发)"},
|
{"id":"f7a5a05e3b3adbee","type":"group","x":-880,"y":-360,"width":907,"height":1440,"label":"基于顺序流程开发 (面向流程开发)"},
|
||||||
{"id":"01381dfb0d849945","type":"group","x":177,"y":120,"width":707,"height":180,"label":"节点(对象)"},
|
{"id":"01381dfb0d849945","type":"group","x":177,"y":120,"width":707,"height":180,"label":"节点(对象)"},
|
||||||
{"id":"5598149665daee13","type":"group","x":-96,"y":-840,"width":246,"height":380,"label":"现实因果"},
|
{"id":"5598149665daee13","type":"group","x":-96,"y":-840,"width":246,"height":380,"label":"现实因果"},
|
||||||
{"id":"3dd7047c8798b5be","type":"text","text":"因","x":98,"y":-320,"width":67,"height":60},
|
{"id":"e151bed3b296b893","type":"file","file":"WorldTreeModule.md","x":2080,"y":-352,"width":1120,"height":2132},
|
||||||
{"id":"e55941a9e3bc5761","type":"text","text":"节点A","x":218,"y":-100,"width":111,"height":60},
|
{"id":"43c25dad51fed755","type":"text","text":"## 流程划分\n- 进入游戏\n- 新建存档\n- 配置角色存档\n- 读取存档\n- 进入主场景\n- 打开战斗场景\n- 关闭战斗场景\n- 退出主场景\n- 写入存档\n- 游戏结束","x":1760,"y":-352,"width":192,"height":363},
|
||||||
|
{"id":"c38d1a12d50745c6","type":"text","text":"## 大地图解决方案\n\n## 必做方案\n- 从美术那里获得`大地图`(比如一个种族的地图)\n- 程序切图变成`小地图`且批量命名\n\n### 普通 2D 方案\n- 详情参考`2DPathFindExample'\n- 配置流产\n\t- 一张`小地图` 可以作为一个 `场景` 使用\n\t- 每个场景中, 配置 `物理碰撞` `AI寻路` `城池` `副本` 等等\n- 此做法类似我们早期使用Unity实现的方法思路, 但是他有更方便的 2D 功能\n#### 优劣分析\n- 优: 自定义能力极强\n- 劣: 相比较其他方案, 批量修改处理不易\n- 劣: 相比较其他方案, 需要实现大地图编辑器, 从而实现游戏内配置, 方便进行直观的配置 (运行增删查改, 动态加载等等)\n\n### Tile Map方案\n- 详情参考 `TileMapExample`\n- 配置流程\n\t- (笔刷) 先配置 每个网格资源 本身的属性 (比如 可以AI导航区域, 碰撞区域, 颜色, 材质, 高度 等等)\n\t- (底色) 用`小地图`做背景\n\t- (画图) 再在把网格刷在地图上\n- 网格中的物体: 1. 可交互 2.可挡路 3.可以动态消失和增加\n\n### 优劣分析\n- 优: 性能不错, 我测试下来性能可以接受\n- 劣: Godot在编辑时, 有可能会闪退 具体原因不明\n- 劣: 因为是基于网格的, 所以具体的网格都是以格子为基准的, 比如 \"材质\" \"高度\" \"导航区域\" \"碰撞区域\". 没有其他方式的那种自定义的方式自由 (必须是格子图)\n","x":3280,"y":-352,"width":960,"height":1090},
|
||||||
|
{"id":"56c4798c604b529d","type":"text","text":"## Route Map\n- 游戏框架分析\n- 代码架构分析\n- 游戏模块分析\n- 游戏模块 UML 图制作\n- 代码实现\n\t- 大地图解决方案\n\t- 战斗模块\n\t\t- 战斗模块配置功能(能力与效果)\n\t- 存档初始化模块\n\t- 大地图模块\n","x":1203,"y":-352,"width":517,"height":732},
|
||||||
|
{"id":"7dc171478dd606af","type":"text","text":"战斗角色是使用的回合计数\n大地图角色使用时间计数\n\n是否可以\n战斗时 时间暂停\n一个回合结束时, 增加对应游戏时间\n(这样会有一些意想不到的效果, 比如当前回合结束后, 刚好经过了一天, 一天一时间一过, 角色某个效果会触发, 比如回复满血)","x":1308,"y":420,"width":412,"height":300},
|
||||||
{"id":"c33ab99b87004926","type":"text","text":"果","x":898,"y":-320,"width":67,"height":60},
|
{"id":"c33ab99b87004926","type":"text","text":"果","x":898,"y":-320,"width":67,"height":60},
|
||||||
|
{"id":"4ae0834068c8c432","type":"text","text":"封装/特性/继承/聚合/多态","x":584,"y":220,"width":280,"height":50},
|
||||||
|
{"id":"6ecc964c9042cafe","type":"text","text":"结果","x":744,"y":140,"width":120,"height":50},
|
||||||
|
{"id":"02979079622fc748","type":"text","text":"节点D","x":731,"y":-100,"width":111,"height":60},
|
||||||
|
{"id":"be3e0105f3877ef9","type":"text","text":"- 对象眼界狭窄, 只关心和自己相关的几个对象, 不关心和自己无关的\n- 没有特性的可以称之为类, 被赋予特性后, 可以被称之为实例\n- 需求发生改变时, 一般是直接新增类. 不会大幅度的影响其他对象.\n- 举例\n\t- 面向对象就像是把建造一辆车这个目标, 分解成建造每一个零部件后组装\n\t- 当车辆更新换代的时候, 用于组装的类会发生变更(可以重载或是继承), 也会新增一些新的对象类型(同样可以是继承和承载)","x":233,"y":660,"width":583,"height":260},
|
||||||
{"id":"b78f0a5a2d476e66","type":"text","text":"``` python\nfunc main(i)\n\ta = nodeA.do(i)\n\tb = nodeB.do(a)\n\te = nodeE.do(a)\n\tf = nodeF.do(b,a,e)\n\tc = nodeC.do(b)\n\to = nodeD.do(c,f)\n\treturn o\n```","x":233,"y":360,"width":583,"height":280},
|
{"id":"b78f0a5a2d476e66","type":"text","text":"``` python\nfunc main(i)\n\ta = nodeA.do(i)\n\tb = nodeB.do(a)\n\te = nodeE.do(a)\n\tf = nodeF.do(b,a,e)\n\tc = nodeC.do(b)\n\to = nodeD.do(c,f)\n\treturn o\n```","x":233,"y":360,"width":583,"height":280},
|
||||||
|
{"id":"ccc50c45875e8121","type":"text","text":"节点F","x":550,"y":-45,"width":111,"height":60},
|
||||||
|
{"id":"baeb4b1fe957ac3e","type":"text","text":"节点C","x":550,"y":-175,"width":111,"height":60},
|
||||||
|
{"id":"6e4257fdd05e9ae8","type":"text","text":"功能计算","x":444,"y":140,"width":160,"height":50},
|
||||||
|
{"id":"7aab729a19843255","type":"text","text":"节点B","x":358,"y":-175,"width":111,"height":60},
|
||||||
|
{"id":"301c14f628e0d44e","type":"text","text":"节点E","x":390,"y":15,"width":111,"height":60},
|
||||||
{"id":"67cc784857841adc","type":"text","text":"特性","x":320,"y":220,"width":160,"height":50},
|
{"id":"67cc784857841adc","type":"text","text":"特性","x":320,"y":220,"width":160,"height":50},
|
||||||
|
{"id":"e55941a9e3bc5761","type":"text","text":"节点A","x":218,"y":-100,"width":111,"height":60},
|
||||||
|
{"id":"6cd0aa5fd7e08b73","type":"text","text":"数据","x":197,"y":140,"width":131,"height":50},
|
||||||
|
{"id":"3dd7047c8798b5be","type":"text","text":"因","x":98,"y":-320,"width":67,"height":60},
|
||||||
{"id":"1e71eae3e8ab4dd7","type":"text","text":"果","x":44,"y":-540,"width":67,"height":60},
|
{"id":"1e71eae3e8ab4dd7","type":"text","text":"果","x":44,"y":-540,"width":67,"height":60},
|
||||||
{"id":"20e8d9b9baff4d3d","type":"text","text":"因","x":-76,"y":-540,"width":67,"height":60},
|
{"id":"20e8d9b9baff4d3d","type":"text","text":"因","x":-76,"y":-540,"width":67,"height":60},
|
||||||
{"id":"a1a7be26d20eaca1","type":"text","text":"抽象","x":-19,"y":-660,"width":96,"height":29},
|
{"id":"a1a7be26d20eaca1","type":"text","text":"抽象","x":-19,"y":-660,"width":96,"height":29},
|
||||||
{"id":"3749392e088d5fa1","type":"text","text":"现实","x":-19,"y":-820,"width":96,"height":29},
|
{"id":"3749392e088d5fa1","type":"text","text":"现实","x":-19,"y":-820,"width":96,"height":29},
|
||||||
{"id":"4ae0834068c8c432","type":"text","text":"封装/特性/继承/聚合/多态","x":584,"y":220,"width":280,"height":50},
|
|
||||||
{"id":"6cd0aa5fd7e08b73","type":"text","text":"数据","x":197,"y":140,"width":131,"height":50},
|
|
||||||
{"id":"be3e0105f3877ef9","type":"text","text":"- 对象眼界狭窄, 只关心和自己相关的几个对象, 不关心和自己无关的\n- 没有特性的可以称之为类, 被赋予特性后, 可以被称之为实例\n- 需求发生改变时, 一般是直接新增类. 不会大幅度的影响其他对象.\n- 举例\n\t- 面向对象就像是把建造一辆车这个目标, 分解成建造每一个零部件后组装\n\t- 当车辆更新换代的时候, 用于组装的类会发生变更(可以重载或是继承), 也会新增一些新的对象类型(同样可以是继承和承载)","x":233,"y":660,"width":583,"height":260},
|
|
||||||
{"id":"ccc50c45875e8121","type":"text","text":"节点F","x":550,"y":-45,"width":111,"height":60},
|
|
||||||
{"id":"6ecc964c9042cafe","type":"text","text":"结果","x":744,"y":140,"width":120,"height":50},
|
|
||||||
{"id":"6e4257fdd05e9ae8","type":"text","text":"功能计算","x":444,"y":140,"width":160,"height":50},
|
|
||||||
{"id":"301c14f628e0d44e","type":"text","text":"节点E","x":390,"y":15,"width":111,"height":60},
|
|
||||||
{"id":"56c4798c604b529d","type":"text","text":"## Route Map\n- 游戏框架分析\n- 代码架构分析\n- 游戏模块分析\n- 游戏模块 UML 图制作\n- 代码实现\n\t- 大地图解决方案\n\t- 战斗模块\n\t\t- 战斗模块配置功能(能力与效果)\n\t- 存档初始化模块\n\t- 大地图模块\n","x":1203,"y":-352,"width":517,"height":732},
|
|
||||||
{"id":"7dc171478dd606af","type":"text","text":"战斗角色是使用的回合计数\n大地图角色使用时间计数\n\n是否可以\n战斗时 时间暂停\n一个回合结束时, 增加对应游戏时间\n(这样会有一些意想不到的效果, 比如当前回合结束后, 刚好经过了一天, 一天一时间一过, 角色某个效果会触发, 比如回复满血)","x":1308,"y":420,"width":412,"height":300},
|
|
||||||
{"id":"43c25dad51fed755","type":"text","text":"## 流程划分\n- 进入游戏\n- 新建存档\n- 配置角色存档\n- 读取存档\n- 进入主场景\n- 打开战斗场景\n- 关闭战斗场景\n- 退出主场景\n- 写入存档\n- 游戏结束","x":1760,"y":-352,"width":192,"height":363},
|
|
||||||
{"id":"c202cf6940c88b13","type":"text","text":"## 模块划分\n- 流程模块(状态机)\n\t- 游戏初始化\n\t- 存档配置流程\n\t- 游戏时间流程\n- 资源模块(读写模块)\n\t- 读取指定路径下的场景文件\n\t- 保存到执行路径下的对应文件位置\n- 存档模块(对存档进行 增删改查)\n\t- 游戏设置存档结构 (分辨率,画质,特效等级 etc...)\n\t- 游戏存档结构\n\t\t- 角色信息\n\t\t- 任务信息\n\t\t- 时间信息\n\t\t- 大地图信息\n\t- 读取存档后, 对存档进行处理\n\t- 写入存档时, 对存档进行处理\n- 场景模块(对场景进行切换)\n\t- 加载场景\n\t- 删除场景\n\t- 切换场景(删除与加载同时进行)\n\t- 场景分级 (对场景树进行管理)\n- 标签模块\n\t- 角色标签,技能标签,效果标签等标签 (主要是字符串)\n\t- 标签需要可以进行检测判断(包含,不包含,必须包含,必须不包含)\n\t- 标签需要方便配置(标签的配置工具)\n\t- 标签需要方便在脚本中使用 (标签配置导出标签常量类 方便调用)\n- 游戏时间模块\n\t- 现实 总时间 统计\n\t- 现实 战斗时间 统计\n\t- 游戏 时间 累加\n\t- 游戏 战斗回合 累加\n- 任务模块\n\t- 接任务\n\t- 交任务\n\t- 任务链(任务依赖)\n\t- 任务监听\n- 大地图模块\n\t- 配置模块(这里我打算使用 Godot 中的 Tilemap 进行配置), 后期可以把配置表导出成文本方便调试与修改\n\t- 角色与摄像机大地图移动功能(碰撞与层级与检测)\n\t- 大地图动态(增删改查)\n\t- 基于游戏时间进行动态变更\n- 战斗模块\n\t- 角色\n\t\t- 属性\n\t\t- 常用方法\n\t- 能力\n\t\t- 能力的脚本继承, 能力功能实现 (触发特效 或 特殊判断条件)\n\t\t- 配置能力属性(CD, 消耗等)\n\t\t- 对指定角色添加与删除效果 (添加灼伤buff等)\n\t- 效果\n\t\t- 效果的脚本继承,状态功能实现 (修改属性或触发特效)\n\t\t- 配置效果属性(持续时间, 间隔时间等)\n\t\t- 对角色产生效果的常用方法(添加血量上限等)\n\t- 战斗数据\n\t\t- 战斗网格\n\t\t- 战斗角色\n\t- 战斗回合切换\n\t\t- 回合匹配\n- AI模块(敌人AI)\n\t- blackboard数据\n\t- AI行为树\n\t- 行为树配置功能\n- 角色配置模块 (配置基础属性, 能力, 掉落ID)\n\t- NPC\n\t- 敌人\n\t- 自身\n- 掉落模块(ID 关联, 有嵌套)\n- 常量配置表\n\t- 资源路径配置(UI路径, 场景路径, 角色路径, 技能路径, 效果路径)\n- 全局事件模块\n\t- 全局的各种事件触发 (玩家选择角色, 玩家选择地面, 进入战斗事件等)\n- UI模块\n\t- 监听游戏中不同数据的变化\n\t- 打开与关闭UI\n\t- 触发不同特效\n- 本地化模块\n\t- 翻译功能(表)\n","x":2080,"y":-352,"width":1120,"height":2132},
|
|
||||||
{"id":"c38d1a12d50745c6","type":"text","text":"## 大地图解决方案\n\n## 必做方案\n- 从美术那里获得`大地图`(比如一个种族的地图)\n- 程序切图变成`小地图`且批量命名\n\n### 普通 2D 方案\n- 详情参考`2DPathFindExample'\n- 配置流产\n\t- 一张`小地图` 可以作为一个 `场景` 使用\n\t- 每个场景中, 配置 `物理碰撞` `AI寻路` `城池` `副本` 等等\n- 此做法类似我们早期使用Unity实现的方法思路, 但是他有更方便的 2D 功能\n#### 优劣分析\n- 优: 自定义能力极强\n- 劣: 相比较其他方案, 批量修改处理不易\n- 劣: 相比较其他方案, 需要实现大地图编辑器, 从而实现游戏内配置, 方便进行直观的配置 (运行增删查改, 动态加载等等)\n\n### Tile Map方案\n- 详情参考 `TileMapExample`\n- 配置流程\n\t- (笔刷) 先配置 每个网格资源 本身的属性 (比如 可以AI导航区域, 碰撞区域, 颜色, 材质, 高度 等等)\n\t- (底色) 用`小地图`做背景\n\t- (画图) 再在把网格刷在地图上\n- 网格中的物体: 1. 可交互 2.可挡路 3.可以动态消失和增加\n\n### 优劣分析\n- 优: 性能不错, 我测试下来性能可以接受\n- 劣: Godot在编辑时, 有可能会闪退 具体原因不明\n- 劣: 因为是基于网格的, 所以具体的网格都是以格子为基准的, 比如 \"材质\" \"高度\" \"导航区域\" \"碰撞区域\". 没有其他方式的那种自定义的方式自由 (必须是格子图)\n","x":3280,"y":-352,"width":960,"height":1090},
|
|
||||||
{"id":"02979079622fc748","type":"text","text":"节点D","x":731,"y":-100,"width":111,"height":60},
|
|
||||||
{"id":"baeb4b1fe957ac3e","type":"text","text":"节点C","x":550,"y":-175,"width":111,"height":60},
|
|
||||||
{"id":"7aab729a19843255","type":"text","text":"节点B","x":358,"y":-175,"width":111,"height":60},
|
|
||||||
{"id":"2f08f916dda4c384","type":"file","file":"Aseets/Procedure.jpeg","x":-731,"y":470,"width":586,"height":550},
|
|
||||||
{"id":"a58cc0223dab5c53","type":"text","text":"- 依赖关系\n- 固定流程\n- 需求变更时, 不容易修改\n- 随着需求发生变化, 节点的复杂度和因果关系也会大幅度变化\n- 举例\n\t- 面向流程就像一次性把建造一辆车设定成目标, 然后分析整个流产的线路, 使得这个产线能一次性就把车生产出来\n\t- 而车辆会随时更新换代, 所以车的管线也会经常大改, 每次大改都会伤筋动骨","x":-731,"y":95,"width":583,"height":285},
|
|
||||||
{"id":"4d32b080f139a489","type":"text","text":"因","x":-728,"y":-338,"width":67,"height":60},
|
|
||||||
{"id":"150aa8c33533e9d6","type":"text","text":"果","x":-215,"y":-335,"width":67,"height":60},
|
{"id":"150aa8c33533e9d6","type":"text","text":"果","x":-215,"y":-335,"width":67,"height":60},
|
||||||
{"id":"a86a7ac36ae3f4f0","type":"text","text":"``` python\nfunc main(i)\n\ta = get(i)\n\tb = ClacA(a)\n\te = ClacE(a)\n\tf = CalcF(b,a,e)\n\tc = CalcC(b)\n\to = CalcO(c,f)\n\treturn o\n\n# 需求变更时, 新写方法, 插入/删除流程\n```","x":-728,"y":-245,"width":583,"height":285},
|
{"id":"a86a7ac36ae3f4f0","type":"text","text":"``` python\nfunc main(i)\n\ta = get(i)\n\tb = ClacA(a)\n\te = ClacE(a)\n\tf = CalcF(b,a,e)\n\tc = CalcC(b)\n\to = CalcO(c,f)\n\treturn o\n\n# 需求变更时, 新写方法, 插入/删除流程\n```","x":-728,"y":-245,"width":583,"height":285},
|
||||||
{"id":"a5b1c2cce5f1efbb","type":"text","text":"功能计算","x":-519,"y":-333,"width":160,"height":50}
|
{"id":"a5b1c2cce5f1efbb","type":"text","text":"功能计算","x":-519,"y":-333,"width":160,"height":50},
|
||||||
|
{"id":"2f08f916dda4c384","type":"file","file":"Aseets/Procedure.jpeg","x":-731,"y":470,"width":586,"height":550},
|
||||||
|
{"id":"a58cc0223dab5c53","type":"text","text":"- 依赖关系\n- 固定流程\n- 需求变更时, 不容易修改\n- 随着需求发生变化, 节点的复杂度和因果关系也会大幅度变化\n- 举例\n\t- 面向流程就像一次性把建造一辆车设定成目标, 然后分析整个流产的线路, 使得这个产线能一次性就把车生产出来\n\t- 而车辆会随时更新换代, 所以车的管线也会经常大改, 每次大改都会伤筋动骨","x":-731,"y":95,"width":583,"height":285},
|
||||||
|
{"id":"4d32b080f139a489","type":"text","text":"因","x":-728,"y":-338,"width":67,"height":60}
|
||||||
],
|
],
|
||||||
"edges":[
|
"edges":[
|
||||||
{"id":"c0b4be46a6f0aeb1","fromNode":"3749392e088d5fa1","fromSide":"bottom","toNode":"a1a7be26d20eaca1","toSide":"top"},
|
{"id":"c0b4be46a6f0aeb1","fromNode":"3749392e088d5fa1","fromSide":"bottom","toNode":"a1a7be26d20eaca1","toSide":"top"},
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
#worldtree
|
||||||
|
## 模块划分
|
||||||
|
- 流程模块(状态机)
|
||||||
|
- 游戏初始化
|
||||||
|
- 存档配置流程
|
||||||
|
- 游戏时间流程
|
||||||
|
- 资源模块(读写模块)
|
||||||
|
- 读取指定路径下的场景文件
|
||||||
|
- 保存到执行路径下的对应文件位置
|
||||||
|
- 存档模块(对存档进行 增删改查)
|
||||||
|
- 游戏设置存档结构 (分辨率,画质,特效等级 etc...)
|
||||||
|
- 游戏存档结构
|
||||||
|
- 角色信息
|
||||||
|
- 任务信息
|
||||||
|
- 时间信息
|
||||||
|
- 大地图信息
|
||||||
|
- 读取存档后, 对存档进行处理
|
||||||
|
- 写入存档时, 对存档进行处理
|
||||||
|
- 场景模块(对场景进行切换)
|
||||||
|
- 加载场景
|
||||||
|
- 删除场景
|
||||||
|
- 切换场景(删除与加载同时进行)
|
||||||
|
- 场景分级 (对场景树进行管理)
|
||||||
|
- 标签模块
|
||||||
|
- 角色标签,技能标签,效果标签等标签 (主要是字符串)
|
||||||
|
- 标签需要可以进行检测判断(包含,不包含,必须包含,必须不包含)
|
||||||
|
- 标签需要方便配置(标签的配置工具)
|
||||||
|
- 标签需要方便在脚本中使用 (标签配置导出标签常量类 方便调用)
|
||||||
|
- 游戏时间模块
|
||||||
|
- 现实 总时间 统计
|
||||||
|
- 现实 战斗时间 统计
|
||||||
|
- 游戏 时间 累加
|
||||||
|
- 游戏 战斗回合 累加
|
||||||
|
- 任务模块
|
||||||
|
- 接任务
|
||||||
|
- 交任务
|
||||||
|
- 任务链(任务依赖)
|
||||||
|
- 任务监听
|
||||||
|
- 大地图模块
|
||||||
|
- 配置模块, 后期可以把配置表导出成文本方便调试与修改
|
||||||
|
- 角色与摄像机大地图移动功能(碰撞与层级与检测)
|
||||||
|
- 大地图动态(增删改查)
|
||||||
|
- 基于游戏时间进行动态变更
|
||||||
|
- 区域配置
|
||||||
|
- 画区域
|
||||||
|
- 配置区域类型
|
||||||
|
- 地形
|
||||||
|
- 森林 移速-0.3
|
||||||
|
- 丘陵 移速-0.5
|
||||||
|
- 山脉 移速-0.5 + 需要天赋才能移动
|
||||||
|
- 海洋 只有船只才能移动
|
||||||
|
- 事件
|
||||||
|
- 如果事件可能包含战斗,那么从怪物区域中取得对应的怪物数据, 如果当前不在怪物区域,那么说明配置有误
|
||||||
|
- Tag:陆地/海洋, 战斗/探索/奇遇
|
||||||
|
- 名字+描述+备注
|
||||||
|
- n*选项
|
||||||
|
- 消耗
|
||||||
|
- 结果
|
||||||
|
- 概率触发
|
||||||
|
- 怪物区域
|
||||||
|
- 名称+等级+n*种类
|
||||||
|
- 战斗模块
|
||||||
|
- 角色
|
||||||
|
- 属性
|
||||||
|
- 常用方法
|
||||||
|
- 能力
|
||||||
|
- 能力的脚本继承, 能力功能实现 (触发特效 或 特殊判断条件)
|
||||||
|
- 配置能力属性(CD, 消耗等)
|
||||||
|
- 对指定角色添加与删除效果 (添加灼伤buff等)
|
||||||
|
- 效果
|
||||||
|
- 效果的脚本继承,状态功能实现 (修改属性或触发特效)
|
||||||
|
- 配置效果属性(持续时间, 间隔时间等)
|
||||||
|
- 对角色产生效果的常用方法(添加血量上限等)
|
||||||
|
- 战斗数据
|
||||||
|
- 战斗网格
|
||||||
|
- 战斗角色
|
||||||
|
- 战斗回合切换
|
||||||
|
- 回合匹配
|
||||||
|
- AI模块(敌人AI)
|
||||||
|
- blackboard数据
|
||||||
|
- AI行为树
|
||||||
|
- 行为树配置功能
|
||||||
|
- 角色配置模块 (配置基础属性, 能力, 掉落ID)
|
||||||
|
- NPC
|
||||||
|
- 敌人
|
||||||
|
- 自身
|
||||||
|
- 掉落模块(ID 关联, 有嵌套)
|
||||||
|
- 常量配置表
|
||||||
|
- 资源路径配置(UI路径, 场景路径, 角色路径, 技能路径, 效果路径)
|
||||||
|
- 全局事件模块
|
||||||
|
- 全局的各种事件触发 (玩家选择角色, 玩家选择地面, 进入战斗事件等)
|
||||||
|
- UI模块
|
||||||
|
- 监听游戏中不同数据的变化
|
||||||
|
- 打开与关闭UI
|
||||||
|
- 触发不同特效
|
||||||
|
- 本地化模块
|
||||||
|
- 翻译功能(表)
|
|
@ -0,0 +1,4 @@
|
||||||
|
可以按?打开快捷方式的keymap
|
||||||
|
>[Lazygit tutorial](https://www.youtube.com/watch?v=hwC4JduRHyg)
|
||||||
|
>[lunavim + lazygit 教程](https://www.youtube.com/watch?v=l-P6COY7GeQ)
|
||||||
|
>[github 仓库](https://github.com/jesseduffield/lazygit)
|
|
@ -0,0 +1,93 @@
|
||||||
|
## 问题:
|
||||||
|
ubuntu 我解压了 nvim程序后, 如何让他可以用指令直接生效
|
||||||
|
|
||||||
|
## 答案:
|
||||||
|
要让解压后的 Neovim(通常缩写为 nvim)程序可以通过命令行直接启动,你可以将它的可执行文件添加到系统的 PATH 环境变量中,或者创建一个符号链接到一个目录在 PATH 中。
|
||||||
|
|
||||||
|
以下是两种方法中的一种,你可以根据个人喜好选择其中一种:
|
||||||
|
|
||||||
|
**方法一:将可执行文件添加到 PATH 环境变量**
|
||||||
|
|
||||||
|
1. 打开一个终端窗口。
|
||||||
|
2. 使用 `cd` 命令导航到解压后 Neovim 可执行文件所在的目录。
|
||||||
|
|
||||||
|
例如,如果你解压了 Neovim 到 `/home/你的用户名/nvim`,你可以使用以下命令:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd /home/你的用户名/nvim
|
||||||
|
```
|
||||||
|
|
||||||
|
3. 确保可执行文件在当前目录中,你可以运行 `ls` 命令检查。
|
||||||
|
|
||||||
|
4. 现在,你可以使用以下命令将当前目录添加到 PATH 环境变量中:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
export PATH=$PATH:$(pwd)
|
||||||
|
```
|
||||||
|
|
||||||
|
这会将当前目录添加到 PATH 中,使得系统可以找到 Neovim 可执行文件。
|
||||||
|
|
||||||
|
5. 为了使这个更改永久生效,你可以将上述命令添加到你的 shell 配置文件中,如 `~/.bashrc` 或 `~/.zshrc`,这样每次登录时都会自动加载。
|
||||||
|
|
||||||
|
**方法二:创建符号链接**
|
||||||
|
|
||||||
|
1. 打开一个终端窗口。
|
||||||
|
2. 使用 `cd` 命令导航到解压后 Neovim 可执行文件所在的目录,就像方法一中一样。
|
||||||
|
|
||||||
|
3. 使用以下命令创建一个符号链接到一个在 PATH 中的目录,比如 `/usr/local/bin`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo ln -s $(pwd)/nvim /usr/local/bin/nvim
|
||||||
|
```
|
||||||
|
|
||||||
|
这将在 `/usr/local/bin` 目录中创建一个名为 `nvim` 的符号链接,使得你可以通过 `nvim` 命令启动 Neovim。
|
||||||
|
|
||||||
|
现在,你应该能够在终端中直接使用 `nvim` 命令启动 Neovim 编辑器了。请注意,你需要适当替换命令中的路径和用户名。
|
||||||
|
|
||||||
|
|
||||||
|
## 别名
|
||||||
|
### Bash
|
||||||
|
打开配置(bash) 如果是zsh是另一个
|
||||||
|
```Shell
|
||||||
|
lvim ~/.bashrc
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 配置别名
|
||||||
|
alias cd_worldtree='cd ~/Projects/WorldTree/'
|
||||||
|
```
|
||||||
|
|
||||||
|
刷新
|
||||||
|
```Shell
|
||||||
|
source ~/.bashrc
|
||||||
|
```
|
||||||
|
|
||||||
|
## zsh
|
||||||
|
```shell
|
||||||
|
lvim ~/.zshrc
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
alias _worldtree="cd ~/Projects/WorldTree/"
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
source ~/.zshrc
|
||||||
|
```
|
||||||
|
|
||||||
|
### 我的别名配置
|
||||||
|
```shell
|
||||||
|
# 我的别名配置
|
||||||
|
# 常用指令
|
||||||
|
alias v='lvim'
|
||||||
|
alias g='lazygit'
|
||||||
|
alias x='exit'
|
||||||
|
# 指令结合路径
|
||||||
|
alias v_bashrc='v ~/.bashrc'
|
||||||
|
alias v_worldtree='v ~/Projects/WorldTree/'
|
||||||
|
alias cd_worldtree='cd ~/Projects/WorldTree/'
|
||||||
|
# 程序快捷方式
|
||||||
|
alias _godot='~/Software/Godot/Godot4'
|
||||||
|
# 指令组合
|
||||||
|
alias _work='godot | lvim_worldtree'
|
||||||
|
```
|
|
@ -0,0 +1,19 @@
|
||||||
|
## 常用快捷键:
|
||||||
|
- / 搜索
|
||||||
|
- super nh 取消搜索高亮
|
||||||
|
- super sv 或 super sh 水平or垂直分屏
|
||||||
|
- 自动补全
|
||||||
|
- ctrl + b or ctrl + f 翻页
|
||||||
|
- ctrl + e 取消自动补全
|
||||||
|
- 添加新的语法服务使用 :Mason 然后/搜索 选择后按i 安装
|
||||||
|
## 个性化快捷键:
|
||||||
|
- Visual模式
|
||||||
|
- 选中后 J K 多行移动
|
||||||
|
- normal
|
||||||
|
- super nh 取消搜索高亮
|
||||||
|
- 文档
|
||||||
|
- super e 展开文档tree
|
||||||
|
- tab预览 or 回车打开
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
https://www.bilibili.com/video/BV1Td4y1578E/?spm_id_from=333.337.search-card.all.click&vd_source=ba468568caebc92479698e83c28be8b0
|
|
@ -0,0 +1,97 @@
|
||||||
|
# Vim
|
||||||
|
少数派 obsidian vim config
|
||||||
|
https://sspai.com/post/78030
|
||||||
|
|
||||||
|
bilibili vim 收藏夹
|
||||||
|
|
||||||
|
vscode + vim
|
||||||
|
https://www.bilibili.com/video/BV1z541177Jy?p=5&vd_source=ba468568caebc92479698e83c28be8b0
|
||||||
|
|
||||||
|
## 切换模式
|
||||||
|
- ecs 退出到普通模式
|
||||||
|
- v visual
|
||||||
|
- 进入编辑模式
|
||||||
|
- i/I Insert
|
||||||
|
- a/A Append
|
||||||
|
- o/O One line
|
||||||
|
- : 命令模式
|
||||||
|
## 指针移动
|
||||||
|
- i j k l 移动
|
||||||
|
- b w
|
||||||
|
https://github.com/ahrencode/Miscellaneous/blob/master/vim-cheatsheet.pdf
|
||||||
|
![[vimEdit.png]]
|
||||||
|
|
||||||
|
## 普通模式:操作符 + 动作
|
||||||
|
## 可组合操作符号
|
||||||
|
- d delete 剪切
|
||||||
|
- c change 剪切并进入编辑模式
|
||||||
|
- y yank 复制
|
||||||
|
- v visual 选中并进入 visual mode
|
||||||
|
|
||||||
|
## 动作
|
||||||
|
- i inner 内置 比如 i"选中 a"Test"b 中的 Test
|
||||||
|
- a around 包含内置字符和包含符号 比如a" a"Test"b 中的"Test"
|
||||||
|
- iw 选中单词
|
||||||
|
- i( 选中括号内的
|
||||||
|
- a( 选中括号和括号内的
|
||||||
|
- gu 小写
|
||||||
|
- gU 大写
|
||||||
|
|
||||||
|
## 组合3(可组合操作符+动作)
|
||||||
|
- ciw change inner world 剪切光标所在的单词 然后进入编辑模式
|
||||||
|
- diw delete inner world 删除光标所在的单词
|
||||||
|
- ci< change inner < 修改尖括号内的字符
|
||||||
|
- ci( change inner ( 修改括号内的字符
|
||||||
|
- da< delete around < 删除包含尖括号在内的字符
|
||||||
|
- yi(/yib yank inner brackets 复制小括号内的字符
|
||||||
|
- yi{/yiB yank inner brackets 复制大括号内的字符
|
||||||
|
- `ca[` change around `[` 剪切中括号和中括号内的字符 然后进入编辑模式
|
||||||
|
- die delete inner entire 删除全部
|
||||||
|
- viw 选中单词 然后 d 可以删除
|
||||||
|
- 总结
|
||||||
|
- 操作符 + i/w/f + 特殊符号
|
||||||
|
## 不可组合操作符
|
||||||
|
- yy 复制一行
|
||||||
|
- dd 剪切一行
|
||||||
|
- p 粘帖
|
||||||
|
- u 撤销
|
||||||
|
- C+r Redo
|
||||||
|
- m+字符 标签
|
||||||
|
- ``+字符` 跳转到标签
|
||||||
|
- ~ 字符大小写切换
|
||||||
|
- guu 行小写
|
||||||
|
- gUU 行大写
|
||||||
|
- gd go define
|
||||||
|
- ctrl + o 回到上个指针所在位置
|
||||||
|
- gh go hover 鼠标悬浮 显示代码Tips提示
|
||||||
|
- gt go tag 向后标签 4gt向后4个标签...
|
||||||
|
- gT go Tag 向前标签
|
||||||
|
- Contrl + 0 跳转到左侧标签(VSCode) 然后 jk 可以上下选择文件 space展开 enter/l 编辑
|
||||||
|
### 重复命令
|
||||||
|
- 2dd 删除两行
|
||||||
|
- 2gg 跳转到index为2的行
|
||||||
|
- 其他类似
|
||||||
|
### 组合2
|
||||||
|
- 操作符 + w/b/p
|
||||||
|
|
||||||
|
## VsCode中
|
||||||
|
|
||||||
|
### 多指针
|
||||||
|
### surround
|
||||||
|
- s surround 包含符号 比如 s" a"Test"b 选中 ""
|
||||||
|
- ysiw + 符号 可以把词用双引号套住 我不明白为什么可以 但是就是可以
|
||||||
|
### 打开VimSetting中的 vim.easymotion 的话
|
||||||
|
然后设置 vim.leader 可以设置 `<leader>` 键位
|
||||||
|
可以类似ChromePlugin的Vim一样, 用一些快捷键直接跳转到字符
|
||||||
|
具体其他指令可以在 Vim 插件的readme中找到, 这里我只写我常用的
|
||||||
|
我把 leader 键位设置成了 空格
|
||||||
|
- 空 + 空 + w 向后跳转到词头
|
||||||
|
- 空 + 空 + b 向前跳转到词头
|
||||||
|
- 空 + 空 + e 向后跳转到词尾
|
||||||
|
- 空 + 空 + j 向上跳转到行
|
||||||
|
- 空 + 空 + k 向下跳转到行
|
||||||
|
- 空 + 空 + f + 字母 向下搜索
|
||||||
|
- 空 + 空 + F + 字母 向上搜索
|
||||||
|
具体看: https://github.com/VSCodeVim/Vim
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
```shell
|
||||||
|
lvim ~/.config/lvim/config.lua
|
||||||
|
```
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Read the docs: https://www.lunarvim.org/docs/configuration
|
||||||
|
-- Video Tutorials: https://www.youtube.com/watch?v=sFA9kX-Ud_c&list=PLhoH5vyxr6QqGu0i7tt_XoVK9v-KvZ3m6
|
||||||
|
-- Forum: https://www.reddit.com/r/lunarvim/
|
||||||
|
-- Discord: https://discord.com/invite/Xb9B4Ny
|
||||||
|
|
||||||
|
-- Disable use space to instead of tab
|
||||||
|
vim.o.expandtab = false
|
||||||
|
|
||||||
|
-- DAP configuration
|
||||||
|
local dap = require('dap')
|
||||||
|
dap.adapters.godot = {
|
||||||
|
type = "server",
|
||||||
|
host = '127.0.0.1',
|
||||||
|
port = 6006,
|
||||||
|
}
|
||||||
|
|
||||||
|
dap.configurations.gdscript = {
|
||||||
|
{
|
||||||
|
type = "godot",
|
||||||
|
request = "launch",
|
||||||
|
name = "Launch scene",
|
||||||
|
project = "${workspaceFolder}",
|
||||||
|
launch_scene = true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-- LSP Mappings.
|
||||||
|
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
|
||||||
|
local opts = { noremap=true, silent=true }
|
||||||
|
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)
|
||||||
|
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
|
||||||
|
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
|
||||||
|
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)
|
||||||
|
|
||||||
|
-- Use an on_attach function to only map the following keys
|
||||||
|
-- after the language server attaches to the current buffer
|
||||||
|
local on_attach = function(client, bufnr)
|
||||||
|
-- Enable completion triggered by <c-x><c-o>
|
||||||
|
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
|
||||||
|
|
||||||
|
-- Mappings.
|
||||||
|
-- See `:help vim.lsp.*` for documentation on any of the below functions
|
||||||
|
local bufopts = { noremap=true, silent=true, buffer=bufnr }
|
||||||
|
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
|
||||||
|
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
|
||||||
|
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
|
||||||
|
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
|
||||||
|
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
|
||||||
|
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
|
||||||
|
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
|
||||||
|
vim.keymap.set('n', '<space>wl', function()
|
||||||
|
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
||||||
|
end, bufopts)
|
||||||
|
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
|
||||||
|
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
|
||||||
|
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
|
||||||
|
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
|
||||||
|
vim.keymap.set('n', '<space>f', function() vim.lsp.buf.format { async = true } end, bufopts)
|
||||||
|
|
||||||
|
local _notify = client.notify
|
||||||
|
|
||||||
|
client.notify = function (method, params)
|
||||||
|
if method == 'textDocument/didClose' then
|
||||||
|
-- Godot doesn't implement didClose yet
|
||||||
|
return
|
||||||
|
end
|
||||||
|
_notify(method, params)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- LSP Config for Godot
|
||||||
|
|
||||||
|
local lsp_flags = {
|
||||||
|
-- This is the default in Nvim 0.7+
|
||||||
|
debounce_text_changes = 150,
|
||||||
|
}
|
||||||
|
|
||||||
|
require'lspconfig'.gdscript.setup{
|
||||||
|
on_attach = on_attach,
|
||||||
|
flags = lsp_flags,
|
||||||
|
filetypes = { "gd", "gdscript", "gdscript3" },
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
[有关Godot和Lunarvim如何结合使用](https://github.com/LunarVim/LunarVim/issues/3292#issuecomment-1754531163)
|
|
@ -30,3 +30,7 @@
|
||||||
- 尝试把手机上的, 电脑上的, 容易获得的浪费时间的入口给移除, 从而让自己不那么容易立即满足
|
- 尝试把手机上的, 电脑上的, 容易获得的浪费时间的入口给移除, 从而让自己不那么容易立即满足
|
||||||
|
|
||||||
最重要的是,要明白破解享乐的欲望牢笼是一个长期的过程,需要耐心和坚定的决心。不要期望立刻就能彻底改变,但通过逐步采取这些方法,你可以渐渐减少享乐欲望的影响,更有目的地追求更有意义的生活。如果觉得无法自行控制享乐欲望,不妨寻求专业心理咨询的帮助。
|
最重要的是,要明白破解享乐的欲望牢笼是一个长期的过程,需要耐心和坚定的决心。不要期望立刻就能彻底改变,但通过逐步采取这些方法,你可以渐渐减少享乐欲望的影响,更有目的地追求更有意义的生活。如果觉得无法自行控制享乐欲望,不妨寻求专业心理咨询的帮助。
|
||||||
|
|
||||||
|
## 我的回答
|
||||||
|
1. 要有事情干
|
||||||
|
2. 要是对自己未来有好处的事情
|
||||||
|
|
Loading…
Reference in New Issue