VIM에서 저장 시 JSON을 자동 포맷하는 방법
말하면 ★★★★★★★★★★★★★★★★★★★★★.go
나를 망쳤다.와 함께go
저는 제 편집자(vim)가 강요하는 엄격한 포맷 기준에 익숙해져 팀원들과 전 세계 모든 사람들에게 거의 받아들여지고 있습니다.
저장 시 JSON 파일을 포맷하고 싶었습니다.
질문:.vim에 저장할 때 json 파일을 자동 포맷/인텐트/lint하는 방법.
1개의 명령어로 다음과 같이 시험합니다.
execute '%!python -m json.tool' | w
그런 다음 자체 키 바인딩을 추가하여 키 입력을 단순화할 수 있습니다.물론 이것이 작동하려면 Python이 컴퓨터에 설치되어 있어야 합니다.
을 가지고 을 하고 , json을 을 추천합니다.jq
:
https://stedolan.github.io/jq/
다음 '실행'을 할 수 있습니다.:%!jq .
현재 버퍼를 jq 출력으로 대체합니다.
%!python -m json.tool
또는
%!python -c "import json, sys, collections; print json.dumps(json.load(sys.stdin, object_pairs_hook=collections.OrderedDict), ensure_ascii=False, indent=4)"
vimrc에 추가할 수 있습니다.
com! FormatJSON %!python -m json.tool
할 수 있는 보다 더 많이:FormatJson
filesjson 파일 형식
mMontu와 Jose B 덕분에 저는 이렇게 되었습니다.
경고 버퍼를 덮어씁니다.따라서 구문 오류가 이미 있는 json 파일을 열면 파일 전체가 손실되거나 손실될 수 있습니다.
도 이 을 이을 때 같이 쓰세요.~/.vimrc
" Ali: to indent json files on save
autocmd FileType json autocmd BufWritePre <buffer> %!python -m json.tool
물론 기계에 비단뱀이 있어야 합니다.
편집: json에 오류가 있는 경우 다음 버퍼는 덮어쓰지 않습니다.정답은 맞지만, 저는 Vim 스크립트나 쉘에 대해 잘 모르기 때문에 운이 좋다면 시험 삼아 제시합니다.껍질에 따라서도 다를 수 있습니다.경고합니다.
" Ali: to indent json files on save
autocmd FileType json autocmd BufWritePre <buffer> %!python -m json.tool 2>/dev/null || echo <buffer>
vim.org에서 JSON 플러그인을 검색한 결과 다음과 같이 반환되었습니다.
설명은 다음과 같습니다.
gqaj
커서 아래에 JSON이 구성하는 "예쁜 인쇄"(글씨/입력/키 정렬/그 외의 경우 정리)
이 되어 는, 「 」를할 수 있습니다.autocmd BufWritePre
포맷할 수 있습니다.
제 해결책은 이렇습니다.「저장중」의 질문 부분에 대해서는 정확하게 설명되고 있지 않습니다만, 보존전에 이 조작을 실행하면 에러가 출력됩니다.그 후, 보존전에 수정할 수 있습니다.
하나의 도구에 합니다.-외부 도구에 의존합니다.jq
쉘 JSON 툴의 UNIX JSON은 JSON을 사용합니다., 이미 인스톨 있을 이 있습니다( 및 만, how in idk.
기본적으로는,
ggVG!jq '.'
그러면 JSON 문서 전체가 강조 표시된 후 실행됩니다.jq
그러면 올바르게 해석하고 다시 포맷(인텐트 수정 등)한 후 출력을 Vim 편집기에 다시 뱉을 수 있습니다.
문서의 일부만 구문 분석하려면 를 눌러 해당 부분을 수동으로 강조 표시할 수 있습니다.v
또는V
그리고 나서 달려라
!jq '.'
여기서의 이점은 문서의 하위 섹션을 다음과 같이 수정할 수 있다는 것입니다.
Vim 자동 포맷
https://github.com/Chiel92/vim-autoformat
이 Vim 플러그인은 여러 자동 포맷 및 들여쓰기 방식을 지원하며 파일 유형별로 커스텀 포맷터를 사용하여 확장합니다.
https://github.com/Chiel92/vim-autoformat#default-formatprograms
주의:
필요한 것은, 다음과 같습니다.nodejs
그리고.js-beautify
로서 인스톨 된.vim-autoformat
는 이러한 도구를 기본 외부 도구로 사용합니다.
npm install -g js-beautify
또 다른 해결책은 coc-format-json을 사용하는 것입니다.
정리도 좀 하고 (그 중 일부는 vim과 무관하지만) 직접 neovim에 대본을 쓰기도 했어요!
솔루션 1: neovim
1-1: 스크립트를 직접 작성
Neovim은 python 파일 또는 패키지를 배치하여 Python3 플러그인을 정의할 수 있도록 합니다.rplugin/python3/
에 있어서runtimepath
폴더)
나 같은 경우에는
- init.vim
- rplugin/python3/[your_py_file_set].py
- rplugin/python3/fmt_file.py
그fmt_file.py
다음과 같이
# rplugin/python3/fmt_file.py
import pynvim
import json
@pynvim.plugin
class Plugin:
__slots__ = ('vim',)
def __init__(self, vim):
self.vim = vim
@pynvim.command('FormatJson', nargs='*', range='')
def format_json(self, args, rg):
"""
USAGE::
:FormatJson
"""
try:
buf = self.vim.current.buffer
json_content: str = '\n'.join(buf[:])
dict_content: dict = json.loads(json_content)
new_content: str = json.dumps(dict_content, indent=4, sort_keys=True)
buf[:] = new_content.split('\n')
except Exception as e:
self.vim.current.line = str(e)
실행 후::UpdateRemotePlugins
내부에서Nvim
플러그인을 사용할 수 있도록 하기 위해 필요한 Vimscript를 생성합니다.(neovim을 재시작하는 것이 좋습니다)
그런 다음 포맷할 JSON 파일을 열고 다음과 같이 입력합니다.:FormatJson
명령어로 지정합니다.다 했어요.
잊지 말고 vim에게 너의 비단뱀이 어디 있는지 알려줘
" init.vim
let g:python3_host_prog = '...\python.exe''
그리고.pip install pynvim
1-2: 도구를 사용합니다.화이
어디에tool.py
에 있습니다.Lib/json/tool.py
:%!python -m json.tool
솔루션 2: 명령줄
python을 이미 설치하고 명령줄을 열 수 있는 경우:
python -m json.tool "test.json" >> "output.json"
솔루션 3: python
나는 그런 것들을 위한 간단한 대본을 쓴다.
"""
USAGE::
python fmt_file.py fmt-json "C:\test\test.json"
python fmt_file.py fmt-json "C:\test\test.json" --out_path="abc.json"
python fmt_file.py fmt-json "test.json" --out_path="abc.json"
"""
import click # pip install click
from click.types import File
import json
from pathlib import Path
@click.group('json')
def gj():
...
@gj.command('fmt-json')
@click.argument('file_obj', type=click.File('r', encoding='utf-8'))
@click.option('--out_path', default=None, type=Path, help='output path')
def format_json(file_obj: File, out_path: Path):
new_content = ''
with file_obj as f:
buf_list = [_ for _ in f]
if buf_list:
json_content: str = '\n'.join(buf_list)
dict_content: dict = json.loads(json_content)
new_content: str = json.dumps(dict_content, indent=4, sort_keys=True)
if new_content:
with open(out_path if out_path else Path('./temp.temp_temp.json'),
'w', encoding='utf-8') as f:
f.write(new_content)
def main():
for register_group in (gj,):
register_group()
if __name__ == '__main__':
main()
vim-json-line-format' 플러그인을 검색할 수 있습니다.Normal mode
, 커서를 json 행으로 이동하여<leader>pj
인쇄하여 정형화된 json을 표시하려면 , 를 사용합니다.<leader>wj
텍스트가 포맷된 json으로 변경될 수 있습니다.잘못된 json은 포맷할 수 없습니다!
저장 시 ALE을 사용하여 자동 포맷
.vim/vimfiles/after/ftplugin/json.vim에 다음을 추가합니다.
let b:ale_fix_on_save = 1 " Fix files when they are saved.
언급URL : https://stackoverflow.com/questions/26214156/how-to-auto-format-json-on-save-in-vim
'programing' 카테고리의 다른 글
ng-option을 사용하여 선택 요소의 기본값을 설정하는 방법 (0) | 2023.03.23 |
---|---|
jQuery ui 날짜 선택기(Angularjs 포함) (0) | 2023.03.23 |
ng-timeout 디렉티브는 (키, 값)을 사용할 때 데이터를 정렬합니다. (0) | 2023.03.23 |
.py 파일의 MIME 유형은 무엇입니까? (0) | 2023.03.23 |
gson을 사용한 객체의 특정 JSON 필드 역직렬화 (0) | 2023.03.18 |