What I really like with a text editor (or IDE) is to be able to easily remap its keyboard shortcuts to what I want, and Xcode seems to do a bad job with this.
I want to be able to switch file tabs by using option + command + arrow (left and right arrows). However, when I try to change keyboard shortcuts for the Show Previous Tab and Show Next Tab actions, the option key is not applied.
In the screenshot, you can see—through KeyCastr—how I pressed the option + command + right arrow keys and end up with command + right arrow in Xcode, the option key is missing.
Is there any solution? Note that the option key can be used on some actions, for example I can use it with the About Xcode action, but this is obviously not what I want.
I'm using Xcode 13.4.1.
Okay so I've found a solution. Not a perfect one but it works!
There is no way to use the option key in some actions because they are constrained by the Navigation in Xcode preferences.
Instead you can change the system preferences to add a new shortcut to the Xcode app.
However, when you will use those keyboard shortcuts in Xcode, you will see a weird behavior where the tab you are switching to, gets opened in a new editor.
This is due to the default navigation preferences of Xcode, change the "Optional Navigation" preference from "Uses Next Editor" to "Uses Tab".
A very specific question, for use on Mac OS:
In VSCode, it's very easy to simply hold ⌘ Command and hit ⌫ Delete for however many whole lines I want to delete and the cursor will keep deleting upward.
However, running PyCharm, it's not available, and I'm having trouble mapping the exact feature.
Going to Preferences -> Keymap -> Editor Actions allows you to map "Delete Line," but using this will just delete downward. Is there a way to mimic the feature of being able to hold down ⌘ Command and just ⌫ Delete lines upward?
To find the shortcut on your setup open up the "Search Everywhere" box with one of the following:
Double ⇧ Shift
⌘ Command+P
⌘ Command+⇧ Shift+P (opens directly on Actions tab)
Then go to the "Actions" tab and search for the shortcut you are looking for, in this case "Delete Line":
Then it shows the shortcut (in my case ⌃ Control+⇧ Shift+K)
In the Jetbrains documentation it does not show up anything to remove a whole line (or at least, I am missing it out).
I know it is not the same, as what you do in VScode is much faster, but you can always shift+home(gets you the whole line if you are at the end of the line)+delete.
I do not think there is another way from jetbrain's doc.
EDIT:
I think I found it by cassualty: R shift+ del.
EDIT2: Just found out that R shift+ del actually cuts (like ctrl+ x).
I know that the post is a bit old but I think it worths to post the 'actual' solution to this issue.
Basically, when you try to delete line in PyCharm for Mac, the IDE is deleting the caret (according to the documentation). Although, IdeaVim plug-in is making your life even more difficult if you don't know how to use it. I don't have experience either.
Disabling IdeaVim plug-in will solve the problem. The IDE will ask you to restart it in order to apply the new settings. After that you can select whatever you want in your code and just hit the backspace button on your Mac to delete. And, yes, all these issues with the key shortcuts are caused by the IdeaVim.
The IdeaVim extension can be disabled from the PyCharm Preferences.
In Xcode, I am big fan of the assitant editor that shows me the corresponding .h or .m for the file that I am editing.
Is there a shortcut that allows me to swap focus between this two windows? I frequently switch between the two and using the mouse every time is annoying.
New answer:
Move Focus To Editor — commandj followed by ←/↑/↓/→ and return
This goes nicely together with commandshiftj which is Reveal in Project Navigator.
Old answer:
Use optioncommand` keyboard shortcut.
It can be remapped in Preferences - Keyboard Bindings - Move Focus To Next Area.
Edit: Removed XVim recommendation.
#Oneiros: Not quite what the OP was asking for..
I don't know of a 'short' shortcut but there's Cmd-J showing a popup where you can choose what to focus.
I made this to help answer another question... Does it help?
Xcode 8+
This is the easiest option:
^` - Move Focus to Next Editor
When using multiple assistant editors, ⇧^` moves focus to previous editor.
Xcode 4+
⌥⌘` - Move Focus to Next Area
⇧⌥⌘` - Move Focus to Previous Area
Using this option you can switch between Project Navigator (left pane), Primary Editor, Assistant Editors, Utility Area (right pane), Debug Area, etc.
⌘J - Move Focus to Editor...
Using this option you can choose where to move the focus using graphical navigation chooser.
For Xcode 4.4:
Use Cmd+Option+` (left to number 1) to Move Focus to Next Area, and use Cmd+Option+Shift+` to Move Focus to Previous Area
For Xcode 4.3:
If you only have the Editor and Assistant open, use Cmd+Option+. to switch between them (Navigator>Move Focus to next area)
Also, if you want to open a different file in the right pane, like the .xib or any other, press
Command ⌘shift ⇧o
The open quickly window will appear, search the file, use capital letters to filter through camel case notation, then press
Alt ⌥enter ↵
The file will be opened in the assistant window
Switching between .h and .m:
Control ^Command ⌘Up Arrow ↑
You can do this:
Assume you have Standart(S) and Assistance(A) editor opened and you want swap them.
1) Double tap with holded Alt to line in navigation bar of S editor with file name (look screenshot). This file will open in A editor.
2) In A editor tap Go Back and do 1. File from A editor will be opened in S editor.
3) In A editor tap Go Forward.
DONE!
Xcode finally added tabs but the problem is that they behave very strange. For example they will keep a tab open only if it was opened to a new tab.
If you open a file just by clicking in the project tree, Xcode will close your tab as soon as you are clicking on another file in the tree.
Is is possible to make them behave like real tabs and prevent Xcode from reusing them? How?
I use a method similar to franks:
In Preferences > Navigation (or Preferences > General in versions of Xcode prior to 5) you can set Optional Navigation to Uses Separate Tab
Now opt-clicking a file in the file navigator will open it in a new tab
Better yet, opt-clicking links in the code opens the destination file in a new tab
The big feature missing is swapping to an already open tab containing the file if there is one (or staying in the current one).
UPDATE for 2020:
Finally, almost 10 years later, Xcode 12.x now appears to mostly resolve the issue described here. There is a new Navigation Style option in the Navigation settings panel that controls this behavior.
The behavior has some new quirks/design-choices that seem to make sense, but I'm still getting used to the new experience. For example, a tab will get re-used unless the file in that tab has been edited recently; such a tab is indicated with an italics title.
PREVIOUS ANSWER
I don't think you can currently get the behavior you desire (or I desire). While the tabs work like Safari, they don't work like tabs in other popular IDEs (Visual Studio or Eclipse). And for me this kind of sucks.
In general, I expect IDE tabs to keep more than 1 file open. So if I click a file in the project tree, I expect that it will switch to the tab I have opened with that file - if I have already opened it. Instead, XCode 4 changes the current tab to the file I clicked - making 2 tabs with the same file. Having 2 tabs with the same file is fairly useless.
This forces the user to scan the tab bar first to see if the file is currently opened; if it's not opened then you can look to the project tree. But if you click in the project tree first (which is what I tend to do) then you get punished because you will have just killed a tab.
This isn't really an answer insofar as it contains a solution; I mostly just want to join in the griping. But upvoting will make you feel better and prove Apple wrong. :)
The problem with Xcode 4's implementation of tabs is that Apple has implemented them as workspace tabs. In other words, creating a new tab essentially creates a new workspace, each with its own sub-panes with their configurations, etc. It's essentially a whole environment in each tab. There are a number of problems with this choice.
This differs from most IDE/text editors' implementation of file tabs wherein a tab (generally) represents a single file, and each file has its own tab.
The problem with workspace tabs is there are only so many potential different workspaces we could benefit from, severely limiting the actual use of tabs in this way. Beyond this, the additional workspaces just become a liability, introducing more things the user of the application needs to concern him/herself with: for example, what the navigator view is, what editor mode is active (standard, assistant, version), whether the debug console is open, etc. etc. Suddenly switching to a new tab means you now have to worry about getting the environment back in the form you need it, because there's a good chance the other tab wasn't left in the state you expect to find it in. This actually discourages the use of tabs because it introduces more work in the workflow.
File tabs don't have this problem (not counting special cases like split view panes) because all that's changing is the file you're looking at, not your whole environment. Moreover, if implemented properly, file tabs work great as an immediate history, allowing one to quickly switch back to a file that was worked in recently, with little effort. The only way to do this in Xcode is to explicitly set up a new tab environment for each file you want to work with, but you have to be careful not to change the file in that tab or your file all of a sudden becomes lost: again, more work for the user.
Workspace tabs are also significantly heavier-weight than file tabs, because there is much more to remember and switching workspaces involves much more than switching files.
The truth is (and I think most will agree with me on this), to a developer, file tabs are much more useful than workspace tabs, and as it stands Xcode still lacks a proper implementation of this feature that many would consider basic required functionality in an IDE/editor.
Xcode->Preferences->General->Double Click Navigation and from the list, choose Uses Separate Tab.
Well, not a real answer but my personal workaround. The real problem for me is, that a file opened in a tab goes away so easily in xcode 4. Finding a file again can be time-consuming, so I like them to be in a tab and stay there.
I solved this (somehow) for me by exactly identifying the actions I do which cause the tab to switch to another file and replace them by their equivalent actions which open a new tab instead.
Instead of single-clicking a file in the navigator, I always double-click which I have set to open a new tab
Most time I do not use the navigator, as it has a different state of opened and closed folders in each tab. Not useful for me. So I switched to using Option ⌥ Command ⌘ O. When opening a file from this list I keep ShiftOption ⌥ pressed. In the small window appearing I choose 'new tab'.
When clicking on links in code I press ShiftOption ⌥ Command ⌘, too, and open in new tab.
I keep two fixed tabs around for editing target-related settings and to view build results. I completely disabled all automatic tab switching in the prefs, because I noticed this distracted me to much.
I would really love to get something like the xcode 3 favorites bar in xcode 4, this was so simple to use..
I imagine my answer won't bubble up for a while, but if you want this to work like visual studio or intellij (or at least closer)
Preferences->General->Double Click Navigation->Uses a separate tab
Double Clicking a file now will stop opening it in a new window and open it in a new tab.
Single is still dumb and takes over your tab. But if you get used to double clicking (which I was already) this will save you some headaches. I suppose.
I absolutely hate how tabs work in Xcode. However, the only workaround i found that works decent is using the OSX tabs shortcuts:
CTRL + CMD + ->
CTRL + CMD + <-
I found my way in Preferences-Behaviors!
I hated Xcode 4 first for the tab issues discussed here, mainly because the debug information kept opening new files in tabs and changing the navigator
in Behaviors you can define a Debug tab and make the Run and Build jump there in various ways. in the Debug tab I give more space to navigators left and bottom
for similar reasons I have a Find tab, too
the other tabs are for files I am writing in. I start them with the .h which is usually small enough so I need only one view, and then with single clicks in the navegator I open 2-3 versions of the .cpp file so I can set them to the locations where the recent hot spots in the file are. then I close the navigators in those tabs
this does not invalidate the care and tricks given in the other answers here, but makes them far less hard
happy coding!
I found out that when pressing option a.k.a. alt when opening files in the navigator, you will jump to the tab already open with the file and a new tab will open in case it was not yet open.
This technique also works when opening files via cmdshift-O and opening the suggestion with option-enter in stead of simply enter...
Now, if there would be some way to make this the default, i.e. the need to keep pressing option all the time would be removed, that would be a big step forward.
Also I use Behaviors to keep my tabs from being recycled after test or build failures.
(Like other people, I totally mislike Xcode's tab behavior. Apple should take a look at IntelliJ...)
xcode tab bar is so suck, I think Apple should enhance the feature of the tab navigation to avoid followed 3 points.
1. double click a file will let xcode open another tab if it has already been there.
2. for more tabs, the tab will become small and thus I don't know which file in which tab, I want the tab show full name
3. for even more tabs, new tabs will be hidden, instead of two lines of tabs. I want to it show two lines of tab bars.
If you have the tab bar enabled (View/Show Tab Bar) and you double click a file, it appears in it's own window, with a single tab (Be sure the Tab Bar is enabled in both the new and old (main) windows).
Now all you have to do is drag that new window from its tab and drop it into the tab bar of your main window.
It will stay docked as a separate tab, showing that file.
To change the file open in that new tab, go Project / Reveal in Project Navigator, which opens the project navigator at the left hand side.
Tabs in Xcode 4 work like tabs elsewhere on Mac OS X, for example in Safari and Terminal.
I'm rather new to XCode and I still miss so many shortcuts and features available in IntelliJ IDEA.
Perhaps the biggest pain point for me is the lack of a keyboard shortcut (or even a menu action) that allows you to move through your most recent change points (points in which you modified files).
In case you're familiar with IntelliJ, I'm referring to the Ctrl-Shift-Backspace shortcut... (or Shift-⌘-Backspace on a Mac)
I'm NOT referring to navigation through your recent view points (via Alt-⌘-Left & Alt-⌘-Right) - only locations you edited.
You can find some useful XCode tricks here.
⌘-Z then redo
I got here via Google. In Xcode 4 & 5 the shortcuts are
CTRL + Command + Back Arrow
CTRL + Command + Forward Arrow
It's not available the way Jetbrains and other do it. Using AppCode might be a choice.
To scroll through your recent changes in Xcode:
Push and hold Control + Command keys (holding them both down)
Then press and release the back arrow (in the bottom right of the Apple keyboard)
While still holding the Control and Command keys down, press the back arrow down again.
This will scroll through the changes you have made to the files in your project. I believe this will only show you the changes since the project was opened.