Lua - mode ์ฒ˜๋ฆฌ ํ•จ์ˆ˜

์†Œ๊ฐœ lua์—์„œ mode ์ธ์ž๋ฅผ ๋ฐ›์„ ๋•Œ string, table ๋ชจ๋‘๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ด๋Š” vim.keymap.set() ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋‚ด๋ถ€์—์„œ type์ด table์ด ์•„๋‹ˆ๋ฉด {mode}๋กœ ํƒœ์ด๋ธ”๋กœ ๋ฐ”๊พธ๊ณ  For๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์˜ˆ์ œ -- ํ•จ์ˆ˜ ์ •์˜ function my_map(mode, short, command, opts) local modes = type(mode) == 'table' and mode or { mode } for _, m in ipairs(modes) do vim.keymap.set(m, short, command, opts) end end -- ์‚ฌ์šฉ my_map('n','<leader>r', ':source %<CR>', {noremap=true}) my_map({ 'n','v' },'<leader>r', ':source %<CR>', {noremap=true})

2025-07-29 ยท 72 words
์ˆฒ์†์˜ ๊ฟˆ(Un Sueรฑo en la Floresta)

Un Sueno en la Floresta - ์ˆฒ์†์˜ ๊ฟˆ

์ œ๋ชฉ: ์ˆฒ์†์˜ ๊ฟˆ(Un Sueรฑo en la Floresta) ์ž‘๊ณก๊ฐ€: ์•„๊ตฌ์Šคํ‹ด ๋ฐ”๋ฆฌ์˜ค์Šค ๋ง๊ณ ๋ ˆ (Agustรญn Barrios Mangorรฉ, 1885โ€“1944) ์—ฐ์ฃผ: ๋ฐ•๊ทœํฌ ๊ธฐํƒ€๊ณก์—์„œ ๊ฐ€์žฅ ์•„๋ฆ„๋‹ค์šด ๊ณก์ค‘์— ํ•˜๋‚˜๊ฐ€ ์•„๋‹๊นŒํ•œ๋‹ค. ์œ ํŠœ๋ธŒ์— ์ฐพ์•„ ๋ณธ ๊ฒƒ ์ค‘ ๊ฐ€์žฅ ์™„๋ฒฝํ•˜๊ณ  ์•„๋ฆ„๋‹ต๊ฒŒ ์—ฐ์ฃผํ–ˆ๋‹ค. ๋ฐ•๊ทœํฌ๋Š” ํ•œ๊ตญ์ด ๋‚ณ์€ ๋ณด๋ฌผ๊ฐ™์€ ๊ธฐํƒ€๋ฆฌ์ŠคํŠธ๋‹ค. ๋ง๊ณ ๋ ˆ์˜ ๋‹ค๋ฅธ ์ž‘ํ’ˆ์œผ๋กœ๋Š” ๋Œ€์„ฑ๋‹น(La Datedral), ์‹ ์˜ ์‚ฌ๋ž‘์œผ๋กœ ํ•œํ‘ผ์„(Una Limosna por el Amor de Dios) ๋“ฑ์ด ์žˆ๋‹ค. Links ๋ง๊ณ ๋ ˆ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ •๋ณด ๋ง๊ณ ๋ ˆ-๋‚˜๋ฌด์œ„ํ‚ค ํŒŒ๋ผ๊ณผ์ด์˜ ๋ณ„ โ€˜์•„๊ตฌ์Šคํ‹ด ๋ฐ”๋ฆฌ์˜ค์Šค ๋ง๊ณ ๋ ˆโ€™ - ๋…ธ์ตํ˜ธ์˜ ์Œ์•…์นผ๋Ÿผ https://happytownculturestory.tistory.com/735 ๋Œ€์„ฑ๋‹น ์ข…์†Œ๋ฆฌ์—์„œ ์˜๊ฐ ๋ฐ›์€ ๋ช…๊ณก - ์žฅ์ผ๋ฒ”์˜ ์œ ์พŒํ•œ ํด๋ž˜์‹ https://news.cpbc.co.kr/article/819047

2025-07-28 ยท (updated 2025-07-29) ยท 78 words
๋ณด์šฐ ์‚ผ๋‚ญ

๋ณด์šฐ ์‚ผ๋‚ญ - ์•„๋ฆ„๋‹ค์šด ๊ผด์ง€

์บ„๋ณด๋””์•„์˜ ์—ฌ์ž ์œก์ƒ ์„ ์ˆ˜๋‹ค. 2023๋…„ 5์›” 8์ผ ์ง„ํ–‰๋œ 2023 ํ”„๋†ˆํŽœ ๋™๋‚จ์•„์‹œ์•ˆ ๊ฒŒ์ž„ ์—ฌ์ž 5000m ์—์„œ ํญ์šฐ๊ฐ€ ์Ÿ์•„์ง€๋Š” ์™€์ค‘์—๋„ ๋๊นŒ์ง€ ๋‹ฌ๋ฆฌ๋ฉฐ ํ™”์ œ๊ฐ€ ๋˜์—ˆ๋‹ค. ์„ฑ์ ์€ 1๋“ฑ์—๊ฒŒ 6๋ถ„์ด๋‚˜ ๋’ค์ง„ 22๋ถ„ 54์ดˆ๋กœ ๊ผด์ฐŒ๋ฅผ ๊ธฐ๋กํ–ˆ์ง€๋งŒ, ํญ์šฐ์†์—๋„ ์™„์ฃผ์— ์„ฑ๊ณตํ•˜์ž ๊ด€์ค‘๋“ค์ด ํ™˜ํ˜ธ๋ฅผ ๋ณด๋‚ด์ฃผ์—ˆ๊ณ , ์ด ์„ ์ˆ˜๋„ ์บ„๋ณด๋””์•„ ๊ตญ๊ธฐ๋ฅผ ๋“ค์–ด ์˜ฌ๋ฆฌ๋ฉฐ ์‘๋‹ตํ•ด ์ฃผ์—ˆ๋‹ค. โ€œ๋ฌผ๋ก  ๊ฒฝ๊ธฐ๋ฅผ ํฌ๊ธฐํ•  ๊ถŒ๋ฆฌ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์บ„๋ณด๋””์•„๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ์˜๋ฌด๊ฐ€ ๋จผ์ €์˜€๋‹ค. " ...

2025-07-27 ยท 81 words

Luajit - Nvim Lsp Config

์†Œ๊ฐœ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ(Alpine Linux)์—์„œ lua-language-server ์„ค์น˜ํ•˜๊ณ  nvim์—์„œ ์„ค์ • ๋ฐ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด ๋ณธ๋‹ค. alpine 3.2x ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค. ๊ณผ๊ฑฐ alpine ๋ฒ„์ „๋“ค์€ lua-language-server๊ฐ€ ์—†๊ฑฐ๋‚˜ nvim์˜ ๋ฒ„์ „์ด ๋‚ฎ์•„ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ง€์›์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ํ˜„์žฌ ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋‘ ์ ์ ˆํ•œ ๋ฒ„์ „์„ ์ง€์›ํ•˜๊ณ  ํŒจํ‚ค์ง€๋„ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค ์ปดํŒŒ์ผ ๋“ฑ์˜ ๋ถ€๋‹ด์ด ์—†์–ด์กŒ๋‹ค. ์„ค์น˜ luajit๋ฐ lua-language-server ๊ทธ๋ฆฌ๊ณ  neovim๊ด€๋ จ ํŒจํ‚ค์ง€ ์„ค์น˜ ์•„๋ž˜์˜ ๊ฒฝ์šฐ nvim(neovim) ์„ค์น˜์‹œ lfs.so,penlight๋“ฑ์ด ๊ธฐ๋ณธ ํฌํ•จํ•˜๊ฒŒ ๋œ๋‹ค. (์ถ”๊ฐ€ ์„ค์น˜ ๋ถˆํ•„์š”) apk add --no-cache luajit luajit-dev lua-language-server ldoc apk add --no-cache neovim neovim-doc nvim-treesitter \ tree-sitter tree-sitter-cli tree-sitter-lua tree-sitter-bash \ tree-sitter-c tree-sitter-markdown tree-sitter-vimdoc ์„ค์ • ~/.config/nvim/init.lua์— ๋‹ค์Œ ์„ค์ •์„ ์ถ”๊ฐ€ my_project_path๋Š” ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. workspace์˜ library ๋ฒ”์œ„๊ฐ€ ํฌ๋ฉด ๋ถ€ํ•˜๊ฐ€ ์ปค์ง€๋ฏ€๋กœ ์ ๋‹นํžˆ ์กฐ์ ˆํ•ด ์ฃผ์–ด์•ผ nvim์—์„œ ๋ฌด๋ฆฌ๊ฐ€ ์—†๋‹ค. ์•„๋ž˜ ์ฃผ์„ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„์„ ์ฃผ์˜ํ•ด์„œ ํ™•์ธํ•˜๊ณ  ์ž์‹ ์—๊ฒŒ ๋งž๋Š” ํ™˜๊ฒฝ์„ ์„ค์ •ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณผ๊ฑฐ sumneko๋ผ๋Š” ์‹์œผ๋กœ ์„ค์ •ํ–ˆ๋Š”๋ฐ ํ˜„์žฌ lspconfig.lua_ls.setup์œผ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค. -- Now set capabilities on your LSP servers local lspconfig = require'lspconfig' local my_project_path = os.getenv('HOME') .. '/.local/lib/lua' print(my_project_path) lspconfig.lua_ls.setup { --capabilities = capabilities, root_dir = lspconfig.util.root_pattern(".git", ".luarc.json", ".luarc.js"), settings = { Lua = { runtime = { version = 'Luajit', path = vim.split(package.path, ";"), }, diagnostics = { globals = {'vim'}, update_in_insert = false, }, workspace = { library = { --// ๊ธฐ๋ณธ vim ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ ๋ชจ๋“ˆ ์ถ”๊ฐ€ [vim.env.VIMRUNTIME] = true, --// ๋ชจ๋“  vim์˜ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ ๋ชจ๋“ˆ ์ถ”๊ฐ€ --[vim.api.nvim_get_runtime_file("", true)] = true, --// my project ๋ชจ๋“ˆ ์ถ”๊ฐ€ [vim.fn.expand(my_project_path)] = true, }, --// ์ œ3์˜ ๋ชจ๋“ˆ ์ œ์™ธ checkThirdParty = false, }, telemetry = { enable = false, }, }, }, } ์ฐธ๊ณ  lua-language-server - Getting Started https://github.com/sumneko/lua-language-server/wiki/Getting-Started#command-line

2025-07-27 ยท 241 words

lua - Lazy Loading ์ง€์—ฐ ๋กœ๋”ฉ

์ง€์—ฐ ๋กœ๋”ฉ(lazy loading)์€ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ, ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค. Lua์—์„œ ์ง€์—ฐ ๋กœ๋”ฉ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ง€์—ฐ ๋กœ๋”ฉ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ํ•จ์ˆ˜๋กœ ๋ชจ๋“ˆ ๋กœ๋“œ: ๋ชจ๋“ˆ์„ ์ง์ ‘ ๋กœ๋“œํ•˜๋Š” ๋Œ€์‹ , ํ•„์š”ํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜์—ฌ ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•œ๋‹ค. ๋ณ€์ˆ˜๋กœ ๋ชจ๋“ˆ ์ €์žฅ: ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•œ ํ›„, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜์—ฌ ์ดํ›„์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์˜ˆ์ œ mymodule.lua (๋ชจ๋“ˆ ํŒŒ์ผ) local M = {} function M.hello() print("Hello from mymodule!") end function M.goodbye() print("Goodbye from mymodule!") end return M main.lua (๋ฉ”์ธ ํ”„๋กœ๊ทธ๋žจ) local mymodule -- ๋ชจ๋“ˆ์„ ๋ฏธ๋ฆฌ ์„ ์–ธํ•˜์ง€๋งŒ ๋กœ๋“œํ•˜์ง€ ์•Š์Œ local function loadModule() if not mymodule then mymodule = require 'mymodule' -- ํ•„์š”ํ•  ๋•Œ ๋ชจ๋“ˆ ๋กœ๋“œ end end -- ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ชจ๋“ˆ์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ local condition = true if condition then loadModule() -- ๋ชจ๋“ˆ ๋กœ๋“œ mymodule.hello() -- ๋ชจ๋“ˆ์˜ ํ•จ์ˆ˜ ์‚ฌ์šฉ else print("๋ชจ๋“ˆ์„ ๋กœ๋“œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.") end ์„ค๋ช… ๋ชจ๋“ˆ ํŒŒ์ผ: mymodule.lua ํŒŒ์ผ์—๋Š” ๋‘ ๊ฐœ์˜ ํ•จ์ˆ˜ hello์™€ goodbye๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ...

2025-07-22 ยท 218 words