Skip to content

파일 편집

파일을 단순히 보는 것이 아니라 변경해야 할 때, Peach Commander는 기본 제공 편집기에서 파일을 엽니다. 텍스트 및 코드 파일은 구문 강조, 찾기 및 바꾸기, 코드 내 심볼 개요, 빠른 탐색을 위한 미니맵을 갖춘 완전한 편집기에서 열립니다. 이진 파일은 개별 바이트를 검사하고 변경할 수 있는 별도의 16진수 편집기에서 열 수 있습니다. 빠른 편집을 위해 앱을 떠날 필요가 전혀 없습니다.

텍스트 또는 코드 파일 편집

  1. 어느 패널에서든 변경할 파일로 커서를 이동합니다.
  2. F4를 누르거나 파일 ▸ Edit를 선택합니다. 파일이 편집기 창에서 열립니다.
  3. 변경합니다. 파일이 인식된 프로그래밍 또는 데이터 형식이면 키워드, 문자열, 주석이 자동으로 색이 지정됩니다.
  4. Cmd+S를 누르거나(또는 저장을 클릭하여) 변경 내용을 기록합니다. 첫 저장 시 원본의 백업을 파일 옆에 보관하므로, 언제든 되돌아갈 수 있습니다.

현재 위치에 완전히 새로운 텍스트 파일을 시작하려면 Shift+F4를 누르십시오.

구문 강조, 심볼 개요, 미니맵을 보여주는 기본 제공 텍스트 편집기 (그림: 구문 강조와 함께 왼쪽에 심볼 개요, 오른쪽에 미니맵이 있는 편집기.)

파일이 root 소유일 때 — /etc의 항목, launchd plist, 웹 서버 설정 — 저장은 관리자로 하겠다고 제안합니다. macOS가 평소처럼 인증을 요청하고, 내용은 명령줄이 아니라 비공개 임시 파일로 전달되며, 파일은 조용히 사용자 소유가 되는 대신 원래의 소유자와 권한을 그대로 유지합니다.

파일을 쓸 수 없으면 저장할 때가 아니라 열 때 알려 줍니다. 제목에 잠금 표시가 붙고, 상태 줄이 무엇이 막고 있는지 알려 줍니다. 다른 사용자의 소유, 쓰기를 금지하는 권한, 잠긴 파일, 읽기 전용 볼륨 또는 시스템의 보호입니다. 이 가운데 첫 번째만 저장을 승인해서 해결할 수 있으며, 그 경우에만 승인을 제안합니다. 나머지에서는 암호만 들이고 결국 실패하기 때문입니다.

여백에 행 번호가 표시되고, 커서가 있는 행은 다른 행보다 밝습니다. 인코딩 메뉴 옆의 버튼으로 숨길 수 있습니다. 줄바꿈된 행은 한 번만 번호가 붙으므로, 번호는 컴파일 오류나 리뷰 의견이 가리키는 행과 항상 같습니다.

찾기, 바꾸기, 탐색

  • Cmd+F를 눌러 찾기 막대를 엽니다. 텍스트를 바꾸려면 찾기 막대를 열고 바꾸기 보기로 전환하거나, 도구 모음에서 찾기/바꾸기를 클릭합니다.
  • JSON/XML 서식을 클릭하면 JSON 또는 XML 문서를 깔끔하고 읽기 쉬운 레이아웃으로 다시 들여씁니다.
  • 심볼(또는 Cmd+Shift+O)을 클릭하면 코드 내 클래스, 함수, 메서드를 나열하는 사이드바가 표시됩니다. JSON, YAML, XML 파일이라면 키와 요소가 나열됩니다. 항목을 클릭하면 바로 이동합니다. 이 구조로 무엇을 더 할 수 있는지는 JSON, YAML, XML 작업을 보십시오.
  • Cmd+L을 눌러 특정 줄로 이동합니다.
  • Cmd+\를 눌러 괄호와 그 짝 사이를 이동합니다.
  • 지도 버튼을 클릭하면 미니맵을 표시하거나 숨깁니다. 미니맵은 파일 전체의 축소된 개요로, 클릭하여 스크롤할 수 있습니다.
  • 파일이 기본 텍스트 인코딩이 아닌 다른 것으로 저장된 경우 도구 모음의 인코딩 메뉴를 사용하십시오.

JSON, YAML, XML 작업

이 세 가지 형식은 따로 다룹니다. 설정 파일은 줄 번호가 아니라 구조를 따라 이동하기 때문입니다.

심볼 사이드바는 JSON 또는 YAML 파일의 키와 XML 파일의 요소를 문서와 같은 중첩 구조로 나열합니다. 요소에 id, name, key 속성이 있으면 그 값으로 이름을 붙이므로 <server> 항목이 스무 개라도 구별됩니다. 리스트는 항목을 [0], [1]로 표시하고, 항목이 키로 시작하면 그 키도 함께 보여줍니다 — [0] name. 목록 위의 필터 필드는 크기에 상관없이 파일에서 키를 이름으로 찾아주며, 상태 표시줄은 커서가 들어 있는 위치의 경로를 항상 보여줍니다.

깨진 파일도 깨진 지점까지는 개요가 만들어집니다. 개요가 가장 필요한 순간이 바로 그때입니다.

구조 메뉴는 — 편집기가 앞에 있는 동안 메뉴 막대에 나타나며 — 그 구조 안에서 이동시켜 줍니다:

  • 상위 노드로 이동(Ctrl+Cmd+위쪽)은 커서를 담고 있는 블록으로 나갑니다. image:에서 그것이 속한 서비스로 이동합니다.
  • 첫 자식으로 이동(Ctrl+Cmd+아래쪽)은 안으로 들어갑니다.
  • 이전 / 다음 형제로 이동(Ctrl+Cmd+왼쪽 / 오른쪽)은 같은 단계의 항목 사이를 이동하며 그 사이의 블록 전체를 건너뜁니다. 설정 마흔 줄을 스크롤하지 않고 한 서버에서 다음 서버로 갑니다.
  • 상위 노드 선택(Ctrl+Cmd+A)은 커서가 있는 블록을 선택합니다. 다시 누르면 선택 범위가 그 바깥 블록으로 넓어지므로, 드래그하지 않고도 서비스 하나 또는 요소 하나를 정확히 선택할 수 있습니다.
  • 구조 경로 복사(Ctrl+Cmd+C)는 커서 위치를 해당 형식의 도구가 그대로 받는 식으로 복사합니다. JSON과 YAML은 jqyq가 기대하는 .services.web.ports[0], XML은 XPath인 //server[@id='web-1']/port입니다. 단순한 낱말이 아닌 키는 자동으로 인용부호가 붙습니다 — .content-type이 아니라 ."content-type"이며, 앞의 것은 jq에서 전혀 다른 뜻입니다.
  • 문서 검사(Ctrl+Cmd+V)는 파일을 검사하고 커서를 문제 위에 놓으며, 이유는 창 제목에 표시합니다. 도구 사슬의 다른 어떤 것도 알려주지 않는 것까지 보고합니다. 모든 JSON 구문 분석기가 조용히 받아들이면서 두 값 중 하나를 버리는 중복 키, 그리고 Apple의 구문 분석기는 받아들이지만 Python, Go, jq는 거부하는 뒤에 남은 쉼표입니다.

긴 파일은 지금 다루지 않는 부분을 접어 두고 읽습니다. 노드 접기(Option+Cmd+왼쪽)는 커서가 있는 블록을 접습니다. 본문이 있는 가장 가까운 블록이므로, 한 줄짜리 항목에서 누르면 그것을 감싸는 매핑이 접힙니다. 노드 펼치기(Option+Cmd+오른쪽)는 다시 엽니다. 최상위 단계 접기(Option+Cmd+위쪽)는 전체를 훑어보기 위해 가장 바깥 단계를 모두 접고, 모두 펼치기(Option+Cmd+아래쪽)는 되돌립니다. 키나 태그가 있는 줄은 그대로 보이고 표시가 붙으므로, 접힌 블록은 접힌 것으로 보입니다. 줄 번호는 숨겨진 줄을 건너뜁니다. 문서에서 지워지는 것은 없습니다. 텍스트를 그리지 않을 뿐이므로 저장, 되돌리기, 찾기는 그대로이고, 찾기는 접힌 블록 안의 텍스트도 찾아냅니다. 접힌 곳에 커서를 놓으면 열리고, 편집을 하면 전부 열립니다. 접힘은 두 위치의 쌍이고, 텍스트를 넣으면 그 위치가 움직이기 때문입니다.

같은 메뉴에 변환 명령도 있습니다. 문서 전체를 — 텍스트가 선택되어 있으면 그 부분만 — 되돌릴 수 있는 한 단계로 다시 씁니다. curl 명령에 넣어야 하는 JSON 본문을 위한 한 줄로 압축, 같은 설정을 두 번 내보냈을 때 차이가 나지 않게 하는 키를 재귀적으로 정렬, 인증서나 스크립트, 또는 JSON 문서 전체를 JSON 필드 안에 넣는 매일의 잡일을 위한 JSON 문자열로 이스케이프JSON 문자열 이스케이프 해제, 그리고 JSON을 YAML로 변환입니다. 압축은 키 순서와 모든 숫자의 표기를 그대로 지킵니다. 1.01은 같은 버전이 아니기 때문입니다. 정렬은 일부러 그러지 않습니다. 정렬 자체가 순서를 바꾸는 일이니까요. 이스케이프는 JSON뿐 아니라 어떤 파일에도 적용됩니다. YAML을 JSON으로 바꾸는 명령은 없으며, 이는 결정입니다. 그러려면 이 시스템에 없는 YAML 구문 분석기가 필요하고, 앵커나 인용부호에 든 true를 잘못 짐작하면 설정 파일이 다른 설정 파일로 바뀝니다.

JSON과 XML은 진짜 구문 분석기가 검사합니다. YAML은 시스템에 구문 분석기가 없으므로, 없이도 찾을 수 있는 실수들을 검사합니다. YAML이 명시적으로 금지하는 탭 들여쓰기, 아무 단계와도 맞지 않는 들여쓰기, 중복 키, 닫히지 않은 인용부호입니다. 그리고 파일이 유효하다고 주장하는 대신 그 사실을 그대로 알립니다.

셸 명령으로 필터링

필터…를 클릭하거나 Shift+Cmd+\를 누르면 선택한 텍스트가 명령으로 전달되고, 명령이 출력한 내용으로 대체됩니다. 선택된 내용이 없으면 문서 전체가 전달됩니다. 이렇게 하면 이미 익숙한 도구들이 편집기 명령이 됩니다. sort -u는 중복된 줄을 없애고, jq .는 JSON 응답을 읽기 쉽게 만들며, column -t는 표를 정렬하고, base64 -d는 블록을 디코딩하며, openssl x509 -noout -text는 인증서를 읽을 수 있는 형태로 보여 줍니다.

명령은 로그인 셸에서 실행되므로 PATH와 별칭, 함수가 터미널에서와 똑같이 동작하고, 파이프와 인용부호도 기대한 대로 해석됩니다. 작업 디렉터리는 편집 중인 파일이 있는 폴더이므로 상대 경로도 예상한 위치에서 확인됩니다. 사용한 명령은 기억되어 다음에 드롭다운 목록에 표시됩니다.

명령이 실패하면 텍스트는 그대로 남고 명령이 낸 오류 메시지가 상태 줄에 표시됩니다. jq 구문 오류가 파일에 붙여지는 일은 없습니다. 아무것도 출력하지 않는 명령은 선택 영역을 비우는데, grep으로 걸러 내는 것이 바로 그런 용도이며 Cmd+Z로 되돌릴 수 있습니다. 끝나지 않는 명령은 20초 후에 중단됩니다.

줄 정렬, 중복 제거, 정리

메뉴는 도구 모음에 있고, 편집기가 앞에 있는 동안에는 메뉴 막대에도 있습니다. 명령을 입력하지 않고 도구를 설치하지 않아도, 반복해서 필요한 편집을 처리합니다.

  • A→Z 또는 Z→A 정렬. 숫자는 값으로 비교하므로 file9file10보다 앞에 옵니다.
  • 줄 순서 뒤집기.
  • 중복된 줄 제거. 각각의 첫 줄을 남기고 나머지 순서는 그대로 둡니다.
  • 빈 줄 제거. 공백만 있어서 비어 보이는 줄도 함께 제거합니다.
  • 줄 끝 공백 제거 — diff를 지저분하게 만드는, 눈에 보이지 않는 차이입니다.
  • 입력한 텍스트를 포함한 줄만 남기거나, 반대로 그 줄을 제거합니다.

텍스트가 선택되어 있으면 각 작업은 선택한 줄에 적용됩니다. 선택 영역은 먼저 줄 전체로 확장되는데, 줄의 절반을 정렬하는 것은 의미가 없기 때문입니다. 선택된 것이 없으면 문서 전체에 적용됩니다. 각 작업은 하나의 실행 취소 단계이므로 Cmd+Z로 작업 전체를 되돌릴 수 있습니다.

줄 바꿈 문자는 인코딩 메뉴 옆에 있습니다. Unix와 macOS는 LF, Windows는 CRLF, 클래식 Mac OS는 CR이고, 한 파일에 여러 종류가 섞여 있으면 (mixed)로 표시됩니다. 이해할 수 없는 오류의 원인이 되는 경우가 많습니다. 다른 것을 고르면 파일 전체가 되돌릴 수 있는 한 단계로 변환됩니다. 줄 작업은 줄 바꿈 문자를 스스로 바꾸지 않습니다. CRLF 파일을 정렬해도 CRLF로 남습니다.

파일 서식 정리

편집기에서 서식을 누르면(뷰어에도 같은 명령이 있습니다) 파일을 다시 들여씁니다. Peach Commander는 확장자로 서식 도구를 고르고, 어느 것을 썼는지 상태줄에 보여 줍니다 — 예를 들어 formatted (jq) — 그래서 결과를 무엇이 다듬었는지 늘 알 수 있습니다.

아무것도 설치하지 않아도 JSON, XML, SVG, plist, HTML, INI 형태의 설정, YAML이 됩니다. YAML은 예외입니다. 다시 들여쓰는 대신 정리만 합니다. YAML에서는 들여쓰기가 구조이고, 진짜 YAML 파서 없이 다시 쓰면 파일의 뜻이 바뀔 수 있기 때문입니다. 줄 끝 공백은 사라지고, 들여쓰기에 섞인 탭은 공백이 되고, 빈 줄이 여러 개면 줄어듭니다. 블록 스칼라(| 또는 >) 안은 그대로 둡니다. 거기서는 공백이 내용이니까요.

더 나은 도구가 있으면 자동으로 넘어갑니다. 아래 중 하나가 설치되어 있으면 Peach Commander가 그것을 씁니다. 전용 도구가 보통 생태계의 기대에 맞고, 설정 형식에서는 주석을 지켜 주기 때문입니다:

설치하면 이렇게 됩니다
yq 또는 prettier 완전한 YAML 서식, 주석 유지
taplo TOML
sqlformat 또는 sql-formatter SQL
prettier Markdown
jq 관례적인 스타일의 JSON
xmllint XML과 SVG

서식 도구가 없는 형식이면 버튼이 흐려지고 메뉴 항목도 꺼집니다. 그래도 시도하면 이유를 알려 줍니다 — “taplo가 설치되어 있지 않습니다”“올바른 JSON이 아닙니다”와 다른 이야기입니다.

직접 만든 서식 도구 쓰기

Peach Commander가 모르는 형식을 다루거나 다른 도구를 쓰려면 설정 폴더에 formatters.ini를 만드십시오. 확장자마다 한 구역씩입니다:

[swift]
tool = swiftformat
args = --quiet stdin

[sql]
tool = /opt/homebrew/bin/sqlfluff
args = format -

tool은 실행 파일 이름(셸이 찾는 방식으로 찾습니다)이거나 절대 경로이고, args는 그대로 전달됩니다. 파일의 텍스트는 표준 입력으로 들어가고 정리된 텍스트는 표준 출력에서 읽으므로, 예의를 지키는 명령줄 서식 도구라면 무엇이든 됩니다. 여기 적은 항목이 다른 모든 것을 이깁니다. 처음 실행할 때 주석이 달린 서식 파일이 만들어지니, 열어서 채우면 됩니다.

플러그인도 서식 도구를 제공할 수 있습니다 — Plugins 참조.

파일을 바이트 단위로 편집

  1. 패널에서 파일을 선택합니다.
  2. 파일 ▸ Edit as Hex를 선택합니다(또는 파일을 마우스 오른쪽 버튼으로 클릭하고 Edit as Hex를 선택합니다).
  3. 16진수 자릿수를 입력하여 바이트를 덮어쓰거나, 화살표 키로 파일을 이동합니다. Backspace와 Delete는 바이트를 제거합니다.
  4. Cmd+S를 눌러 저장합니다. 텍스트 편집기와 마찬가지로 원본의 일회성 백업이 보관됩니다.

단축키

작업
파일 편집 F4
새 텍스트 파일 만들고 편집 Shift+F4
저장 Cmd+S
찾기 Cmd+F
심볼 개요 표시/숨기기 Cmd+Shift+O
줄로 이동 Cmd+L
짝 괄호로 이동 Cmd+\
상위 노드로 이동(JSON/YAML/XML) Ctrl+Cmd+위쪽
첫 자식으로 이동 Ctrl+Cmd+아래쪽
이전 / 다음 형제로 이동 Ctrl+Cmd+왼쪽 / 오른쪽
상위 노드 선택 Ctrl+Cmd+A
구조 경로 복사 Ctrl+Cmd+C
문서 검사 Ctrl+Cmd+V
노드 접기 / 펼치기 Option+Cmd+왼쪽 / 오른쪽
최상위 단계 접기 / 모두 펼치기 Option+Cmd+위쪽 / 아래쪽
실행 취소 / 다시 실행(16진수 편집기) Cmd+Z / Cmd+Shift+Z
선택 영역을 명령으로 필터링 Shift+Cmd+\

참고

  • 구문 강조는 JSON, C, C#, Java, JavaScript, TypeScript, Python, Rust를 지원합니다. 다른 파일 유형도 기본 색상으로 정상적으로 열리고 편집되지만, 상세한 강조는 지원되는 언어에서만 사용할 수 있습니다.
  • 개요는 지원되는 프로그래밍 언어와 JSON, YAML, XML을 포함합니다. .plist, .svg, .csproj, .storyboard처럼 XML을 기반으로 한 형식도 포함됩니다. 구조 이동, 경로, 검사 명령은 JSON, YAML, XML에 적용됩니다.
  • 심볼 개요와 줄로 이동 기능은 텍스트 편집기에 적용됩니다. 16진수 편집기는 텍스트가 아니라 이진 검사와 바이트 수준 편집을 위한 것입니다.
  • 두 편집기 모두 처음 저장할 때 원본 파일의 백업을 보관하므로, 실수로 변경한 것은 해당 백업을 복원하여 쉽게 되돌릴 수 있습니다.