Neovim을 사용하는 개발자라면, 코드 포맷팅이 얼마나 중요한지 잘 알고 계실 것입니다. 하지만 많은 포맷터들이 기존의 파일 전체를 교체하는 방식으로 동작해, extmark과 fold를 잃거나 커서 위치가 변경되는 등의 불편함을 초래하기도 합니다. 이런 문제를 해결하기 위해 등장한 conform.nvim은 가볍고 강력한 포맷팅 플러그인으로, Neovim 사용자들에게 큰 인기를 끌고 있습니다. 오늘은 이 프로젝트의 주요 특징과 설치 방법, 그리고 활용법에 대해 자세히 알아보겠습니다.
주요 특징
conform.nvim은 여러 가지 유용한 기능을 제공합니다. 이 프로젝트의 주요 특징은 다음과 같습니다:
- extmark과 fold 유지: 기존 포맷터들은 파일 전체를 교체해 extmark과 fold를 잃게 만들 수 있습니다. 그러나 conform.nvim은 최소한의 차이를 계산하여 변경 사항만 적용하므로, 이러한 문제를 방지합니다.
- LSP 포맷터 문제 수정: 일부 LSP 서버는 비효율적으로 전체 버퍼를 대체하는 경우가 있습니다. conform은 이러한 LSP 응답을 적절한 조각 변경으로 변환하여 문제를 해결합니다.
- 모든 포맷터에 대해 범위 포맷팅 지원: 최소한의 차이를 계산하기 때문에, 기본 포맷터가 범위 포맷팅을 지원하지 않아도 범위 포맷팅을 수행할 수 있습니다.
- 간단한 API: 사용자는
vim.lsp.buf.format()와 비슷한 간단한 API를 통해 포맷팅 기능을 사용할 수 있습니다. - 임베디드 코드 블록 형식 지원: 마크다운 파일 등에서 코드 블록을 포맷팅할 수 있는 기능도 제공합니다.
설치 방법
conform.nvim은 여러 플러그인 관리자에서 지원됩니다. 아래는 각기 다른 플러그인 관리자에 대한 설치 방법입니다.
1. lazy.nvim
{
'stevearc/conform.nvim',
opts = {},
}
2. Packer
require("packer").startup(function()
use({
"stevearc/conform.nvim",
config = function()
require("conform").setup()
end,
})
end)
3. Paq
require("paq")({
{ "stevearc/conform.nvim" },
})
4. vim-plug
Plug 'stevearc/conform.nvim'
5. dein
call dein#add('stevearc/conform.nvim')
6. Pathogen
git clone --depth=1 https://github.com/stevearc/conform.nvim.git ~/.vim/bundle/
7. Neovim native package
git clone --depth=1 https://github.com/stevearc/conform.nvim.git \
"${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/pack/conform/start/conform.nvim
기본 사용법
설치가 완료되면, 기본적인 설정을 통해 다양한 파일 유형에 대한 포맷터를 설정할 수 있습니다. 아래의 예시는 Lua, Python, Rust, JavaScript 파일에 대한 포맷터 설정을 보여줍니다.
require("conform").setup({
formatters_by_ft = {
lua = { "stylua" },
python = { "isort", "black" },
rust = { "rustfmt", lsp_format = "fallback" },
javascript = { "prettierd", "prettier", stop_after_first = true },
},
})
포맷팅을 저장할 때 자동으로 수행하려면, 다음과 같이 설정합니다.
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*",
callback = function(args)
require("conform").format({ bufnr = args.buf })
end,
})
실무 활용 시나리오
conform.nvim은 다양한 개발 환경에서 유용하게 사용될 수 있습니다. 예를 들어, 팀 프로젝트에서 여러 언어로 작성된 코드가 혼합되어 있을 때, 각 언어에 맞는 포맷팅 방식을 자동으로 적용할 수 있습니다. 이를 통해 코드의 일관성을 유지하고, 코드 리뷰 및 유지보수의 효율성을 높일 수 있습니다.
또한, 마크다운 파일에 코드 블록이 포함된 문서에서, 해당 코드 블록을 자동으로 포맷팅하여 가독성을 향상시킬 수 있습니다. 이러한 점에서 conform.nvim은 단순한 포맷팅 도구를 넘어 팀 협업의 품질을 높이는 데 기여할 수 있습니다.
유사 도구 비교
비슷한 도구로는 Prettier와 Black 등이 있습니다. Prettier는 JavaScript 및 TypeScript 환경에서 주로 사용되며, Black은 Python 전용 포맷터입니다. 두 도구 모두 강력하지만, conform.nvim은 범위 포맷팅 및 extmark을 유지하는 기능에서 더 유리합니다. 특히 Neovim 사용자를 대상으로 최적화되어 있기 때문에, Neovim 환경에서 더욱 부드러운 작업 경험을 제공합니다.
마무리
conform.nvim은 Neovim에서 포맷팅 문제를 해결하기 위한 강력한 도구입니다. 가볍고 직관적인 인터페이스로 다양한 언어의 코드를 쉽게 포맷할 수 있으며, 팀 프로젝트에 적합한 기능들도 갖추고 있습니다. Neovim을 사용하는 개발자라면, 이 플러그인을 통해 코드 포맷팅의 번거로움을 줄이고, 더 나은 개발 환경을 구축해보세요.
더 자세한 내용은 GitHub 페이지를 방문해 주시기 바랍니다.