I learned about entering into the immeidate window >of filename trick in visual studio, but when I enter a period, which is reserved for separating menu items, it populates some junk that is irrelevant to what I want. For example, if I type >of web.config, and as soon as I get to the period (4th character) it would populate junk into the box.
Does anyone know how to escape it?
If you want to enter "." without auto-complete being activated hit escape then enter ".", auto-complete will kick back in and you don't have to worry about inadvertently completing the wrong file name.
Related
I just updated my Sublime Text version (Build 4107), and it seems to me a new behaviour appeared - that I would like to avoid.
Whenever I write a colon or comma, the auto-complete popup automatically displays, which is problematic because most of the time in this situation I am about to go to next line by pressing Enter. Thing is, if press Enter, I select now the first occurence of autocomplete instead of going to next line.
I can avoid this by doing "Alt + Enter" or by pressing "Esc" before Enter, but it is not a convenient solution. Is there any way to prevent this autocomplete popup to display afer this particular punctuation signs ?
I read about punctuation.separator scope naming (https://www.sublimetext.com/docs/scope_naming.html#punctuation). But I can't figure out how to use it in auto_complete_foo settings to do what I want.
Example :
Thanks for the help !
If you have a package SublimeCodeIntel, try to disable it, and check the problem is saved or not
It helped me
You can set "auto_complete_when_likely": false, in your user preferences which should prevent this behavior.
All right, this is stupid, but I have no clue how people deal with this and I'm hoping I'm missing something...
When I write something like this:
if (n == 0)
...The closing parenthesis gets added as soon as I type the opening one. The only way I know of to get out of them now is to reach over and tap the End key or something, which kind of ... Damages my shui, you know? And yet apparently they thought this feature was a cool idea, so...
What do you normally do to tell the IDE that you're done with this bit and you're ready to move on to the next? Same question applies to automatic quotes and stuff in the XAML editor, I guess.
Just keep typing - if you type your own ) when the cursor is just before the automatic one, it should not create another ), but just move the cursor over it.
(Disclaimer: I'm not certain this works on a vanilla Visual Studio - I have a bunch of extensions installed)
You can press Ctrl + Shift + Enter to open a new line below the current one without moving the cursor to the end of the line.
To add to this, Tab is another option and I find it easier:
In your example, type the logic, press Tab to skip passed the end bracket.
If you are inside auto quotes, type your text, then press Tab twice.
Like the other answer, it only applies when first being typed, so if you go back to edit something, you are left using the End and Arrow keys.
In Visual Studio 2015 with Productivity Power Tools installed (probably works earlier as well), when being inside an auto-complete block (quotes or braces):
end goes to line end ( typically slow to type/find)
"/) typing same key as auto-complete already inserted will simply replace the auto-inserted character
tab jumps over end of auto-complete (e. g. braces or quotes)
shift+enter adds ; at end of line, goes to new line (often what you want)
ctrl+shift+enter goes to new line
There is a short key in VS - "Edit.LineEnd" - pressing "End" you get to the end of the current line. I've re-assigned it (for me the best variant was "Alt-Enter") and use it to get outside of parentheses and quotes.
Hit the enter key when you are done typing.
I am writing a Visual Studio extension which provides intelliSense for a certain content type.
The problem that I am facing now is the effect of "Auto Indent" that Visual Studio provides on empty lines when user types a character.
Here a completion session started on an empty line (over virtual spaces):
Notice the tab symbols on the other lines and no tab on the line with caret on it.
Now when use starts typing, VS automatically and correctly adds necessary tab characters to the line:
Now the problem is those Added tabs apparently become part of the user input and as a result CurrentSession.SelectedCompletionSet.SelectBestMatch() or Filter() method cannot find the current item which starts with "C" here (thinking user has typed \t\tC instead).
If I start the session on anywhere else which does not require auto indent everything works fine.
Any idea?
Edit (more information): I used a code flow very similar to:
Ook here
vsLua here
vsClojure here
In Lua and Clojure you wouldn't face this problem because they never provide intelliSense on virtual spaces (meaning they always start after a certain set of characters) and if you start after a character virtual spaces are already turned into real spaces.
Ook on the other had has the same problem.
Revised Answer:
Ah, I see. I interpreted your question thinking that you were referring to completion triggering via typing, not from the explicit command. If you enable "show whitespace" for the C# editor, you can see what we do here: when you trigger the "show completion" command, we explicitly realize the whitespace so you're no longer floating around in virtual space. You should probably do this as well. (Alternatively, you could detect the scenario and fix it up on the first typing by adjusting your ApplicableTo span, but that's probably not worth the trouble.)
You can get the whitespace that should be inserted from IEditorOperations. So MEF import an IEditorOperationsFactoryService, and then do:
var editorOperations = editorOperationsFactoryService.GetEditorOperations(textView);
var whitespace = editorOperations.GetWhitespaceForVirtualSpace(textView.Caret.Position.VirtualBufferPosition);
if (whitespace.Length != 0)
{
textView.TextBuffer.Insert(textView.Caret.Position.BufferPosition, whitespace);
}
(Funny aside: as I answered this, I was curious to see how we handled this in the Roslyn C# and VB editors. The answer was "not", but filtering still worked by pure luck later in the code.)
Original Answer:
I suspect by your description of the problem that you are implementing your completion like this: you know a character is about to be typed (either via a keyboard filter or IOleCommandTarget) and you trigger an ICompletionSession, where the tracking span is an empty span on the current caret position.
The best approach to fixing this is to not trigger the session before the key is pressed and goes into the editor, but rather after it. This is what we do in the Roslyn implementation for C# and VB completion. Then, when you are in your AugmentCompletionSession call and creating your CompletionSet, compute the "applicable to" span which consists of the non-whitespace characters around your caret. The easiest way to compute this might just be to call GetWordExtent from the text structure navigator.
This allows for other scenarios to work right. Consider scenarios where the user types C, presses escape, and then continues to type your identifier. If you want to trigger completion again, you'd have to do the math to ensure that the "C" is counted as part of your span anyways.
Since I have upgraded from VS2008 to VS2010, I've been having an increasingly infuriating battle with the Intellisense.
For example, when specifying CSS styles, when I press Enter to start an new line, Intellisense (appropriately) lists available Styles to me. And if I select color and then type ':', it presents a list of color presets - often helpful. However, if I type in a space (I like them for readability) or if I type '#' to enter RGB values, it selected the default Intellisense selection, in this case inherits.
Another example is in an ASP.NET page - say I am concatenating strings, I type myString =, I get an Intellisense pop-up. If I type space or '"' (to enter a literal) or '.' (so select a property or method within a WITH block), the Intellisense selects the first entry in the list.
I can dismiss the Intellisense pop-ups with escape but it makes it incredibly slow to code.
This behaviour is different to my VS2008 set-up. I can't seem to find any way to configure Intellisense to behave differently... I really only want it to select and Intellisense entry when I type or ... at least, certainly not when I type '"' or ' ' or '.'!
Problem solved:
Being the idiot that I am, I hadn't properly checked for extensions; when I did, I found I had the Intellisense Presenter extension installed, and digging further it appear that my experience is not unique. It's a promising extension, but is currently unusable in this state.
This isn't normal. Start with Tools + Import and Export, select Reset all Settings. Next step is to run devenv.exe with the /safemode command line argument so it runs with all add-ins disabled.
Every once in a while I'll do something that causes strang behavior when pressing certain keys.
1)The single quote key (') will not type a character unless I press it twice, in which case it will print two backwards single quote characters (``).
2)The ` (backwards single quote?) key types a # character.
3)The angle bracket keys (< and >) type a single quote (') and a period (.).
4)Shift + any A-Z character types the character and brings the code completion window up.
I'm sure there's other symptomps, and they only want I've found to stop it is to restart Visual studio. This behavior does not appear in any other apps. Anybody experience this?
I started getting this on my computer (not in Visual Studio, but everywhere else). I had default input language set to "English(New Zealand) - United States-International", whatever that is supposed to mean. Changed it to English-US. Disabled the "Language Bar"
"Control Panel >> Regional Settings >> Languages, click on Advanced, look at Installed Services. See if you have multiple choices - if you have an "International" option, remove it and I believe the problem will go away. It did for me.
AFAIK, this happened when I installed XP-SP3.
You probably have an alternate input language set up (try typing ` a when this happens and you'll get à). I think the default hotkey to switch between input languages is Ctrl+Shift, so you're probably hitting it by accident occasionally. Use the language settings control panel to turn off the hotkey or remove the unwanted keyboard configuration.
I have a laptop/keyboard which can be used for French-Canadian. Alternative key-meanings are printed on some keys (in green) ... and they match the keys you mentioned, i.e.:
alt of ' is ``
alt of ` is #
alt of < and > are ' and .
I have an edition of Vista installed that knows about French-Canadian. On the right-hand end of the O/S Taskbar, near the clock, there's a keyboard icon. It's usually set to "US but if I set it to "Canadian French" then I get the key mappings you describe.
Something similar (i.e. changing the language-specific interpretation of the keyboard) must be happening on your machine too. You say it's in Visual Studio, but for me I find it in my O/S.
If you have multiple languages on your machine, then you probably triggered this behavior by pressing ctrl+shift, which causes windows to switch the system language for the active window.
You can either press it again, or better yet, disable the language bar and all other secondary languages.
Like others have said, you can press ctrl-shift to "loop" through the settings.