개발자라면 코드 포맷팅이 얼마나 중요한지 잘 알고 계실 것입니다. 코드의 가독성을 높이고, 팀원 간의 협업을 원활하게 해주는 포맷팅 툴은 이제 필수입니다. 특히 Neovim 사용자라면 이번에 소개할 conform.nvim을 주목해보세요. 이 경량화된 포맷터 플러그인은 Neovim에서의 코드 포맷팅을 한층 더 강력하고 유연하게 만들어 줍니다. 이번 포스트에서는 conform.nvim의 주요 기능과 설치 및 사용법을 자세히 알아보겠습니다.
conform.nvim의 주요 기능
conform.nvim은 다음과 같은 매력적인 기능들을 제공합니다:
- Extmarks와 folds 보존: 일반적인 포맷터는 전체 버퍼를 교체하여 extmarks와 folds를 지워버리는 경우가 많습니다. 하지만
conform은 최소한의 diff를 계산하여 내장 LSP 포맷 유틸리티를 사용해 이를 해결합니다. - 불량 LSP 포맷터 수정: 일부 LSP 서버는 전체 버퍼를 단순히 교체하는 방식으로 동작합니다.
conform은 LSP 핸들러에 연결되어 이러한 응답을 올바른 조각별 변경으로 변환합니다. - 모든 포맷터를 위한 범위 포맷팅 지원:
conform은 최소한의 diff를 계산하므로, 기본 포맷터가 지원하지 않더라도 범위 포맷팅을 수행할 수 있습니다. - 간단한 API:
conform은vim.lsp.buf.format()를 모델로 한 간단하고 직관적인 API를 제공합니다. - 내장 코드 블록 포맷팅: 마크다운 파일이나 유사한 파일 내의 코드 블록도 포맷팅할 수 있습니다.
설치 가이드
conform.nvim은 다양한 플러그인 관리자를 지원합니다. 아래는 가장 많이 사용되는 몇 가지 플러그인 관리자에 대한 설치 방법입니다.
lazy.nvim
{
'stevearc/conform.nvim',
opts = {},
}
Packer
require("packer").startup(function()
use({
"stevearc/conform.nvim",
config = function()
require("conform").setup()
end,
})
end)
vim-plug
Plug 'stevearc/conform.nvim'
기본 사용법
설치가 완료되었다면, 이제 기본 설정을 해보겠습니다. 최소한의 설정으로 파일 유형별 포맷터를 지정해야 합니다.
require("conform").setup({
formatters_by_ft = {
lua = { "stylua" },
python = { "isort", "black" },
rust = { "rustfmt", lsp_format = "fallback" },
javascript = { "prettierd", "prettier", stop_after_first = true },
},
})
이제 conform.format()을 사용하여 파일을 포맷할 수 있습니다. 예를 들어, 파일 저장 시 자동으로 포맷팅을 적용하고 싶다면 다음과 같이 설정할 수 있습니다.
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*",
callback = function(args)
require("conform").format({ bufnr = args.buf })
end,
})
실무 활용 시나리오
conform.nvim은 팀 프로젝트에서 특히 유용합니다. 코드 포맷팅 규칙이 정해진 팀에서는 각 개발자가 작성한 코드 스타일을 일관되게 유지할 수 있습니다. 예를 들어, Python 프로젝트에서 isort와 black을 함께 사용하면, 코드의 정렬과 스타일을 동시에 관리할 수 있습니다. 이는 리뷰 시간을 단축시키고, 코드 품질을 높이는 데 기여합니다.
비슷한 도구와의 비교
conform.nvim 외에도 다양한 포맷팅 도구들이 존재합니다. 예를 들어, prettier와 같은 도구는 JavaScript 관련 작업에서 많이 사용됩니다. 하지만 conform은 Neovim에 최적화되어 있으며, 여러 포맷터를 연속적으로 실행할 수 있는 점에서 차별화됩니다.
추천 대상
conform.nvim을 통해 Neovim에서의 포맷팅 경험을 한층 더 향상시켜 보세요. 더 자세한 정보는 GitHub에서 확인하실 수 있습니다.