난잡한 Xcode 의 Find & Replace 기능들을 쭉 정리해 본다. 2025 년 가을 기준.


Xcode 에서 사용자 단축키를 넣으려면 Ctrl-Shift 계열이나 Ctrl-Alt 계열이 무난하다. 빈 곳이 많다. Select 단축키들은 Ctrl-Shift 쪽에, 다른 기능들은 Ctrl-Alt 쪽에 두는 것을 추천.
전통적인 Find 는 Find 버퍼에 내용을 채우고 Find 버퍼의 내용을 검색하는 식으로 작동한다. 최신 방식들은 Find 버퍼를 채우는 단계가 생략되어 있다.

일단 검색할 단어를 선택해야 한다. 단어를 더블 클릭하면 Select 된다. 키보드 숏컷을 만들고 싶으면 Ctrl-Shift-W 정도 무난해 보인다.

Cmd-F 나 Opt-Cmd-F, 에디터 상단에 Find Box 가 생긴다. UI 버튼 들을 눌러 쓰면 된다.
Cmd-G, Find 버퍼의 내용을 파일에서 찾는다. Find 후 가장 단순한 오퍼레이션.
Cmd-E, 에디터에 Select 되어 있는 텍스트로 Find 버퍼를 채운다. Xcode 의 기괴한 점인데, Find Box 안에서 Cmd-E 를 누르면 내부적으로 Find 버퍼는 업데이트 되지만 Find Box UI 는 업데이트가 안 된다. 내부적으로 업데이트 되었겠지, 라고 생각하고 써야 한다.
단어 선택 -> Cmd-F -> Cmd-E (UI 는 업데이트 안된다) -> Cmd-G (선택한 단어가 검색된다)
사실 Cmd-E 를 쓰게 되면 Cmd-F 로 Find Box 를 부르는 일을 생략할 수 있다.
단어 선택 -> Cmd-E (Find Box UI 는 애초에 필요없었다) -> Cmd-G (선택한 단어가 검색된다)
Opt+Cmd+G, Find 버퍼의 내용을 찾고 Select 에 추가한다. 여러 개의 Select 가 만들어 진다. Multi Cursor 가 생성된다.
단어 선택 -> Cmd-E (선택한 단어를 Find 버퍼에 입력) -> Opt-Cmd-G (다음 단어를 검색하고 선택에 추가)
위 과정에서 Cmd-E 누르는 단계를 생략하는 숏컷이 있다. 아래.
Opt-Cmd-E, 선택한 단어를 Find 버퍼에 입력하고, 단어를 검색하고, 선택에 추한다.
아래 과정은 같은 동작을 한다.
단어 선택 -> Cmd-E (선택한 단어를 Find 버퍼에 입력) -> Opt-Cmd-G (다음 단어를 검색하고 선택에 추가)
단어 선택 -> Opt+Cmd-E (선택한 단어를 Find 버퍼에 입력 + 단어를 검색하고 선택에 추가)
아쉽게도 Xcode 에는 마지막 단어 추가 취소 기능이 없다; VS Code 등에서는 가능.
Find 버퍼의 내용을 모두 찾고, 선택하고, 멀티 커서를 만든다. 근데 기본 키보드 매핑이 없다.
Ctrl+Shift+L, 본인은 이 정도로 매핑해서 쓰고 있다.
단어 선택 -> Cmd-E (선택한 단어를 Find 버퍼에 입력) -> Ctrl+Shift+L (단어를 검색하고 검색된 모든 결과를 선택에 추가)
프로젝트 광역으로 Find & Replace 하는 방법이 있다.
Shift+Cmd+F, 광역 Find UI 를 부른다.
Opt+Shift+Cmd+F, 광역 Find & Replace UI 를 부른다.
Ctrl+Cmd+G, 광역 검색 결과에서 다음 검색 위치로 이동.
광역 Find 버퍼와 로컬 파일 Find 버퍼는 같다. 하지만 광역 Find UI 에서는 Cmd-E 키가 먹질 않는다. 참으로 비 일관적. 그러니 광역 Find UI 부르기 전에 Cmd-E 로 Find 버퍼를 채워 놓아야 편하다.
여기까지는 전통적인 Find 버퍼를 쓰는 기능들이었다. 아래부터는 Find 버퍼 무시하고 작동한다.

Ctrl+Cmd+E, 커서가 있는 심볼을 모두 선택하고 수정한다. 범위는 현재 파일. 단점은 구문 분석에 기반하기 때문에 컴파일 오류가 있는 파일에선 쓸 수가 없다. 코딩중엔 오류상태인 경우가 많아서 쓸 수 없는 경우가 많다. 그리고 단어가 선택된 상태로 시작하지 않아서 은근 불편하다.

Edit All in Scope 기능이 개선된 방식이다. 이것도 구문 분석에 기반하기 때문에 컴파일 오류가 있는 상태에서는 쓸 수 없다. 하지만 시작시 멀티 커서를 만들어 주는 방식이라 쓰기 더 편하다.
Ctrl+Shift+G, 기본 키매핑이 없다, 본인은 이 정도로 매핑해 두고 쓰고 있다.
광역으로 심볼 이름을 변경할 수 있다. 오류 없이 컴파일되는 상태에서만 쓸 수 있다.
Ctrl+Opt+R, 기본 키매핑이 없다, 본인은 이 정도로 매핑해 두고 쓰고 있다.
광역으로 심볼 Rename 할 경우, Refactor Rename, Ctrl+Opt+R.
로컬에서 빠르게 심볼 Rename 할 경우, Select All Symbols, Ctrl+Shift+G.
언어 심볼이 아닌 일반 문자열 수정한다면,
광역으로 치환할 경우 Find in Project, Opt+Shift+Cmd+F.
로컬에서 치환할 경우, 단어 선택 -> Cmd-E (선택한 단어를 Find 버퍼에 입력) -> Ctrl+Shift+L (Select All Find Matches)
로컬에서 치환할 경우, 단어 하나씩 선택하고 싶으면, 단어 선택 -> Opt+Cmd-E (Select Next Occurence)