{"id":21616025,"url":"https://github.com/9beach/vscode-hanspell","last_synced_at":"2025-04-08T04:18:45.191Z","repository":{"id":57394089,"uuid":"388710872","full_name":"9beach/vscode-hanspell","owner":"9beach","description":"비주얼 스튜디오 코드 한스펠(vscode-hanspell)은, (주)다음과 부산대학교 인공지능연구실/(주)나라인포테크의 웹 서비스를 이용해서 한글 맞춤법 검사 기능을 제공하는 비주얼 스튜디오 코드용 익스텐션입니다.","archived":false,"fork":false,"pushed_at":"2022-11-30T11:22:35.000Z","size":2896,"stargazers_count":203,"open_issues_count":2,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-26T19:10:51.263Z","etag":null,"topics":["hangul","korea","korean","spell","spell-check","spellcheck","visual-studio-code","vscode","vscode-extension"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/9beach.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-07-23T07:11:04.000Z","updated_at":"2024-10-23T08:40:30.000Z","dependencies_parsed_at":"2023-01-22T01:54:07.107Z","dependency_job_id":null,"html_url":"https://github.com/9beach/vscode-hanspell","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9beach%2Fvscode-hanspell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9beach%2Fvscode-hanspell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9beach%2Fvscode-hanspell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9beach%2Fvscode-hanspell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/9beach","download_url":"https://codeload.github.com/9beach/vscode-hanspell/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247773726,"owners_count":20993639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hangul","korea","korean","spell","spell-check","spellcheck","visual-studio-code","vscode","vscode-extension"],"created_at":"2024-11-24T22:13:24.406Z","updated_at":"2025-04-08T04:18:45.158Z","avatar_url":"https://github.com/9beach.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 비주얼 스튜디오 코드 한스펠\n\n[비주얼 스튜디오 코드 한스펠](https://github.com/9beach/vscode-hanspell)(vscode-hanspell)은 (주)다음과 부산대학교 인공지능연구실/(주)나라인포테크의 웹 서비스로 한글 맞춤법을 검사하는 [비주얼 스튜디오 코드](https://code.visualstudio.com)용 [익스텐션](https://code.visualstudio.com/docs/editor/extension-marketplace)입니다.\n\n터미널과 커맨드 라인 팬이라면 [hanspell](https://github.com/9beach/hanspell)을 추천합니다.\n\n## 설치\n\n[비주얼 스튜디오 코드 마켓 플레이스](https://marketplace.visualstudio.com/items?itemName=9beach.vscode-hanspell)나 비주얼 스튜디오 코드 익스텐션 탭에서 ‘한스펠’로 검색해서 설치합니다.\n\n## 주요 기능과 사용법\n\n### 맞춤법 검사\n\n`Ctrl+Shift+P`(macOS `⇧⌘P`) 또는 `F1` 키로 명령 팔레트에서 맞춤법 검사를 실행합니다. `맞춤법 검사 (다음)`, `맞춤법 검사 (부산대)`, `맞춤법 검사 (다음, 부산대)`, 모두 세 개의 커맨드를 제공하는데, `맞춤법 검사 (다음, 부산대)`는 두 서비스를 한 번에 실행한 뒤 결과를 모아서 보여줍니다.\n\n![commands](https://github.com/9beach/vscode-hanspell/raw/HEAD/images/hanspell-commands.png)\n\n명령 팔레트의 오른쪽, 톱니바퀴 아이콘을 클릭해서 핫키를 지정합니다. 맞춤법 검사는 자동으로 실행되지 않아서 핫키를 추천합니다.\n\n마우스로 드래그해서 문서의 특정 영역을 선택한 상태라면 해당 영역만 검사합니다. 유용하지만 주의가 필요합니다.\n\n### 맞춤법 교정\n\n맞춤법 검사를 마치면 오류가 의심되는 문자열에 물결 모양의 밑줄이 표시됩니다. `F8` 키를 누르거나 해당 문자열을 클릭하면 왼쪽에 녹색 전구가 뜹니다. 이것을 클릭하거나 `Ctrl+.`(macOS `⌘.`) 키를 누르면 추천어 등 교정 액션 메뉴가 뜹니다.\n\n![command actions](https://github.com/9beach/vscode-hanspell/raw/HEAD/images/hanspell-command-actions.png)\n\n`Shift+Alt+.`(macOS `⌥⌘.`) 키를 누르면 메뉴는 생략하고 바로 교정합니다. 다시 `F8` 키를 누르면 그다음 오류로 이동합니다.\n\n`맞춤법 검사 (다음, 부산대)` 커맨드는 두 서비스가 공통으로 발견한 오류와 한 서비스만 발견한 오류를, 각각 오렌지색(Warning)과 파란색(Information)으로 구분합니다. 나머지 두 커맨드는 모두 오렌지색으로 표시합니다.\n\n### 맞춤법 오류 정보\n\n마우스를 밑줄 위로 옮기면 맞춤법 오류 정보가 뜹니다. `Ctrl+Shift+M`(macOS `⇧⌘M`) 키를 눌러 결과 창에서 한눈에 볼 수도 있습니다. (주)다음 서비스보다 맞춤법 오류 정보가 충실하다는 점은 부산대 서비스의 장점이지만 접속 장애가 잦다는 단점도 있습니다.\n\n![message](https://github.com/9beach/vscode-hanspell/raw/HEAD/images/hanspell-problems.png)\n\n### 히스토리 파일\n\n`~/.hanspell-history` 파일에는 맞춤법 교정 내용이 기록됩니다. 핫키나 메뉴 등 교정 액션을 이용하지 않고 직접 수정했다면 기록되지 않습니다.\n\n파일 크기가 10MB를 넘으면 `.hanspell-history.N`(`N`은 1, 2, 3...)으로 백업한 뒤 새로 만듭니다.\n\n아래는 사용자가 자주 틀리는 맞춤법을 빈도순으로 보여주는 셸 스크립트입니다. 리눅스나 macOS 환경에서만 작동합니다.\n\n```console\n$ sort \u003c ~/.hanspell-history | uniq -c | sort -nr | head -n 5\n  17 모래속에 -\u003e 모래 속에\n  13 그 뿐만 -\u003e 그뿐만\n  13 했는 지 -\u003e 했는지\n  13 한바퀴 -\u003e 한 바퀴\n   7 내노라하는 -\u003e 내로라하는\n```\n\n### 맞춤법 검사 제외 문자열\n\n‘빠이빠이’를 맞춤법 검사에서 제외하고 싶다면 맞춤법 검사를 실행한 뒤 교정 액션 메뉴에서 `사전에 추가: “빠이빠이”`를 선택하세요. 직접 홈 디렉터리에 `.hanspell-ignore` 파일을 만들고 `빠이빠이`를 추가해도 됩니다. 다음 예를 봅시다.\n\n```txt\n바깡스*\n빠이빠이\n```\n\n이제 ‘바깡스’, ‘바깡스를’ 등 ‘바깡스’로 시작하는 문자열은 맞춤법 오류에서 제외됩니다. 반면 ‘빠이빠이’와 ‘빠이빠이!’는 제외되지만 ‘빠이빠이해요’는 제외되지 않습니다.\n\n`.hanspell-ignore`는 [globstar](https://www.linuxjournal.com/content/globstar-new-bash-globbing-option)를 포함한 [글로브 패턴](https://man7.org/linux/man-pages/man7/glob.7.html)을 지원합니다. 맞춤법 오류에서 URL을 제외하고 싶다면 다음을 추가하세요.\n\n```txt\n*http*/**\n```\n\n[맞춤법 검사 제외 문자열 예시](https://gist.github.com/9beach/3e11ceafcf9477b0bf9f6512f8a4b55a#맞춤법-검사-제외-문자열)에 더 많은 사례가 있습니다.\n\n### 사용자 정의 맞춤법\n\n`~/.hanspell-typos` 파일에 아래와 같이 사용자가 직접 맞춤법을 정의할 수 있습니다.\n\n```txt\n안녕 하세요 -\u003e 안녕하세요\n님에게 -\u003e 임에게\n```\n\n두음법칙으로 ‘님에게’가 아니라 ‘임에게’가 올바릅니다. 이것을 고치려다 ‘선생님에게’를 ‘선생임에게’로 바꾸는 우를 피하려면 단어 경계를 고려해야 합니다. (물론 한국어는 문맥 의존성이 커서 이것으로도 부족합니다.) 그래서 `님에게 -\u003e 임에게`를 등록하면 ‘님에게!’와 ‘님에게’에는 적용되지만 ‘선생님에게’와 ‘님에게만’에는 적용되지 않습니다.\n\n문서를 수정할 때마다 자동으로 분석해주는 점이 ‘사용자 정의 맞춤법’의 가장 큰 특징입니다. 새로 검사하기 전에는 최근 결과로 계속 분석하기 때문에 같은 실수를 반복하면 자동으로 밑줄이 표시됩니다. ‘사용자 정의 맞춤법’은 최근 검사에서 발견된 오류처럼 기능합니다.\n\n아래는 자주 틀리는 맞춤법 20개로 `~/.hanspell-typos` 파일을 만드는 셸 스크립트입니다.\n\n```bash\nsort \u003c ~/.hanspell-history | uniq -c | sort -nr | head -n 20 | sed -e 's:^  *[0-9][0-9]* \\(.*\\):\\1:' \u003e ~/.hanspell-typos\n```\n\n### 사용자 정의 표현식\n\n[정규 표현식](https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D)에 익숙하지 않은 사용자는 이 섹션을 건너뛰세요.\n\n‘사용자 정의 맞춤법’은 단어 경계를 지키려고 교정할 문자열을 검색할 때 [‘Lookahead and Lookbehind Zero-Length Assertions’](https://www.regular-expressions.info/lookaround.html)를 덧붙입니다. 예를 들어 `님에게`는 `/(^|(?\u003c=[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z]))님에게((?=[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z])|$)/g`로 검색합니다. 그래서 원하는 문자열이 포함된 다양한 표현을 규칙 하나로 처리하기는 힘듭니다.\n\n이 문제는 `~/.hanspell-bad-expressions.json`에 사용자가 직접 정규 표현식을 작성해서 어느 정도 해결할 수 있습니다. 다음 예를 봅시다.\n\n```json\n{\n  \"bad-expressions\": [\n    {\n      \"expression\": \"돈키호테\",\n      \"info\": \"우리 출판사의 공식 표기는 ‘돈 끼호떼’입니다.\",\n      \"suggestions\": [\"돈 끼호떼\"],\n      \"severity\": \"Error\"\n    },\n    {\n      \"expression\": \"([가-힣]+)의 +([가-힣]+)의((?=[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z])|$)\",\n      \"info\": \"‘-의’를 겹쳐 쓰면 어색합니다.\",\n      \"suggestions\": [\"$1 $2의\"],\n      \"severity\": \"Warning\"\n    },\n    {\n      \"_comments\": [\n        \"산다는 것의 의미 -\u003e 사는 의미\",\n        \"내 가슴에 있는 추억 -\u003e 내 가슴속의 추억\",\n        \"축구공을 가지고 멀리차기 놀이를 -\u003e 축구공(으로) 멀리차기 놀이를\",\n        \"죽게 되고 -\u003e 죽고\",\n        \"알려져 있는 -\u003e 알려진\",\n        \"알려 줍니다 -\u003e 알립니다\"\n      ],\n      \"info\": \"군더더기 있는 표현입니다.\",\n      \"expression\": \"[가-힣’”`』」》]+([다라]는 +것|에 +있는|[을를] +(가[지진질집져졌]|갖는|지[니닌닐닙녀녔])|게 +[되된될됩돼됐]|[져라고아] +있|[혀해여려겨] +[주준줄줍줘줬])[가-힣]*\",\n      \"severity\": \"Information\"\n    }\n  ]\n}\n```\n\n첫 번째 표현식은 ‘돈키호테’를 ‘돈 끼호떼’로 고치도록 제안합니다. 표현식 앞뒤에 ‘Lookahead and Lookbehind’가 없어서 ‘돈키호테는’, ‘신돈키호테’ 등에 모두 적용됩니다.\n\n두 번째 표현식은 ‘우리의 사랑의’처럼 ‘-의’를 겹쳐 쓴 표현을 ‘우리 사랑의’처럼 고치도록 제안합니다.\n\n세 번째 표현식은 ‘알려 줍니다’, ‘울게 되었다’ 등 군더더기 있는 표현에 파란 밑줄을 긋도록 설정합니다.\n\n[형태소](https://ko.wikipedia.org/wiki/%ED%98%95%ED%83%9C%EC%86%8C) 분석 없이 정규 표현식에 의존하는 것은 한계가 분명합니다. ‘세계의 불가사의’는 문제없는 표현이지만 위의 설정으로는 ‘-의’를 겹쳐 썼다고 분석합니다. 주의해서 사용하시기 바랍니다.\n\n`.hanspell-bad-expressions.json`에 `info`, `suggestions`, `severity`는 정의하지 않아도 되지만 `expression`은 정의해야 합니다. `severity`는 심각도에 따라 `Error`, `Warning`, `Information`, `Hint` 중 하나를 지정하세요. `Hint`로 지정하면 짧은 점선으로 표시되어 눈에 띄지 않습니다. 거짓 경보 가능성이 큰 표현식에 적합합니다.\n\n[사용자 정의 표현식 예시](https://gist.github.com/9beach/3e11ceafcf9477b0bf9f6512f8a4b55a#사용자-정의-표현식)에 유용한 사례가 계속 추가됩니다.\n\n## 알려진 문제점\n\n버그와 개선점은 [이슈 트래커](https://github.com/9beach/vscode-hanspell/issues)에 올려주세요.\n\n### 중첩된 오류로 `맞춤법 오류 모두 교정` 액션 실패\n\n`맞춤법 검사 (다음, 부산대)` 커맨드로 분석한 오류는 가끔 중첩될 때가 있습니다. 예를 들어 `abc def ghi...`와 같은 문장에서, `abc def`와 `def`가 모두 맞춤법 오류라면 `def`는 두 오류에 걸쳐 있습니다. 이런 식으로 복잡하게 얽히면 `맞춤법 오류 모두 교정` 액션이 실패할 수 있습니다. `다음, 부산대 공통 오류만 모두 교정` 액션은 이때에도 대부분 제대로 작동합니다.\n\n### 긴 문장 교정 시 부산대 맞춤법 서비스의 잦은 접속 오류\n\n서버 제약으로 긴 문장은 짧은 문장 여러 개로 나누어 요청합니다. 부산대 서비스는 이럴 때 자주 실패합니다.\n\n## 라이선스 고지\n\n이 프로그램의 소스 코드는 MIT 라이선스를 따르지만, 부산대학교 인공지능연구실/(주)나라인포테크의 맞춤법 웹 서비스는 권리자가 고지한 대로 개인이나 학생만 무료로 사용할 수 있습니다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F9beach%2Fvscode-hanspell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F9beach%2Fvscode-hanspell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F9beach%2Fvscode-hanspell/lists"}