VS Code -- Is there a package that does this? - visual-studio-code

On emacs, I use an extension/package called key-chord that allows me to hit, for example, "jj" very quickly to execute a command.
Is there an extension or a way VS Code can do this? I use "jj" as a prefix to a keymap where I can than select from a set of sub commands, for exampe, hitting:
jj ss -- save file
jj sa -- save all files

The ModalEdit extension for VSCode is what you're looking for: https://johtela.github.io/vscode-modaledit/docs/README.html
Don't be frightened by the "modal" part in the name which may inspire a vim-only vibe approach. (In which jj is a quite famouse way to escape insert mode by the way).
The point of this extension is to let you build your own key successions and bind them to editor actions. The documentation has a great tutorial part that will illustrate how to achieve the behavior your describe.

Related

I want to try org-mode. What's the shortest path from zero to typing?

I want to give emacs' org-mode a try. What is the shortest path for me to accomplish that?
Assume NO previous experience with emacs.
(I'm aware that other editors, like vim and textmate, have similar task lists. I'm specifically interested in learning about the emacs org-mode)
My laptop runs Win7 Home Premium x64
I use Emacs (when I'm on Windows) with the official binaries at http://ftp.gnu.org/gnu/emacs/windows/emacs-22.3-barebin-i386.zip Just unzip to a directory and double click "runemacs".
In all the commands that follow, C stands for Ctrl.
Create a file ending in .org. If using recent Emacs, that will automatically start org-mode. You can create a file using C-x C-f.
Start creating outlines like this:
* Level 1
** Level 2
Collapse/Uncollapse outline levels with TAB
Todo's you can cycle by hitting C-c C-t
That's the basics, and pretty much all I know, but I already use it extensively :)
Have a look at the tutorials on http://orgmode.org/worg/org-tutorials/
I started org mode with an article in the linux journal and a very useful & simply tutorial.
David O'Toole Org tutorial
Get Organized with Emacs Org-mode
Both sources give you in my opinion a superb and fast introduction to org mode.
Start org mode with M-x org-mode RET, or by visiting a file with the .org extension.
Type C-h m in an org mode buffer to see the (brief) mode description and (importantly) all of its key-bindings.
Type C-h i m org RET to read the Org Mode manual.
(Typing q will bury either of the *Help* or *info* buffers.)
Visit the web site at http://orgmode.org/ for more.
I found a very extensive list of youtube video regarding org-mode. See it here : Org-Mode on Youtube. Use the latest Emacs release, it already has org-mode installed. Create a file with .org extension. Now, type the title of the file, then start create these:
* Roles
** Role 1
*** Todo 1
*** Todo 2
*** Todo 3
** Role 2
*** Todo 1
*** Todo 2
While your cursor on Role1, press TAB and see the way org-mode hide/show the only relevant tree structure. Press tab again to toggle the visibility status.
Now, while you are in Role 1, type C-x n s, or the command org-narrow-to-subtree. It will only displayed Role 1. To get back, use the command widen, or C-x n w.
I found it very helpful!
Lots of other great stuff in org-mode
By the way, you can easily convert and display in browser your org-file. Type : org-export-as-html-and-open. I use it a lot!
Since others already mentioned how to install and start using org-mode, I would like to point you to the excellent collection of tutorials on Worg (it is a community driven documentation effort in the form of tutorials, How tos and other articles).
Everyone starts Emacs without previous experience.You just need to:
Install Emacs
Install org-mode
Use org-mode to write something
I think both Emacs and org-mode are well documented.So if you have any trouble, read the official documents.
That's all. Good luck.
Org-mode beginning at the basics sounds promising, it starts with
The absolute minimum you need to know about Emacs
The absolute minimum you need to know about Emacs, to be able to do
anything, is more then you need to know about many other applications.
But, you might compare it to a regular toy and lego. Lego is harder to
begin with (you start with a box with little plastic pieces), but in
the long run, you can do more with it.
I have a portable version with .emacs configure ready, which setup org mode, etc. It also included org sample file. I think that is a better start point.
http://nd.edu/~gsong/portable_emacs.html
Best,

Is there a feature in Emacs for function call hierarchy

I am maintaining someone else's code. The code is written in C using GCC 4.4.3 on Linux platform. However, the code jumps around a lot and its difficult to find out where all the functions are called from.
In Visual Studio, there is a feature called 'Call Hierarchy' which will display where functions are called from and called to. Does Emacs (23.1.1) have any such feature?
The classic Emacs way to jump to calls is to use TAGS file and use the M-. command. I recommend using Exuberant C Tags with the following command in the root directory of your project :
ctags -e --c-kinds=+pxd -R .
Then using visit-tags-table you can open the TAGS file. With M-. you can jump to each definition or call to your keyword. Use C-u M-. to jump to another occurrence. Use C-x z z z... to repeat the search.
If you have many projects, you can create a TAGS file for each one of them and then call visit-tags-file to add the TAGS file to your list of TAGS files to search from.
Another classic way (the un*x way), is to use the command M-x find-grep to search for occurrences of your keyword.
http://cedet.sourceforge.net/symref.shtml

Emacs: Enter commands like in gedit

in gedit it's possible to define so-called "snippets" for simpler input.
For example, there is a snippet while. This means: If you type while -> (-> stands for tab key). And gedit automatically converts it to the following (including correct indentation):
while (condition){
}
In vim (in conjunction with latex-suite) I saw the following: If you type (, vim inserts just a (. If you type ( a second time, vim automatically converts it to \left( \right).
I found abbrev-mode but this mode doesn't place the cursor properly (i.e. between parentheses or inside the while loop).
I managed to create custom emacs keybindings/macros that do just the same (without having to press the tab key), so I know it's possible.
However, is there already and package where you can define such "snippets" without much effort? Or are there even any serious reasons not to use such things?
See yasnippet. It provides snippets for most major languages, and it is easy to add new ones or modify the old ones.
Yes, yasnippet is probably the way to go. But make sure you learn the major mode you're using for your editing - when writing in LaTeX, learn auctex. Major modes can contain functionality that makes some snippets pointless, and do the same thing even better. So instead of using a begin/end-snippet in a LaTeX buffer, try C-c C-e in auctex. Etc :)
Don't forget abbrev-mode.

In Emacs, how can I jump between functions in the current file?

I'd like to quickly move point to a function in my Emacs buffer. I'd like to run some function and get a prompt asking me for the function name, with completion provided for every function defined in the current buffer.
I generally use etags to navigate around, but sometimes I'm looking for a framework method that's been overridden in several files. In these cases, I can find the file I need but then I'd like to quickly jump to the function there. There is a similar feature in TextMate where you can select a definition from a list in the bottom right of the editor.
Just to jump around functions in the current file? Use imenu. It's the simplest and lightest of all the alternatives listed so far and might be enough for what you want. It's also built into Emacs and has minimum setup hassle. It features graphical and textual interfaces. Anything extra and you'll be better off using one of the other excellent suggestions made here.
speedbar comes standard, and gives you a collapsible menu for each file in the current directory, by default middle clicking on an entry for a function definition jumps to that def. With emacs23 this was changed to the more normal leftclick.
You can use etags-select to select from multiple matching tags. But the answer to what you asked is imenu.
Icicles is probably closer to what you are looking for:
http://www.emacswiki.org/emacs/Icicles_-_Tags_Enhancements
It's an enhancement to etags and includes (among other things) the file name with the tag so you can tell if it's the one you are looking for.
try CEDET. It is a bit difficult to set up the first, but here is an excellent tutorial: by Alex ott
And when he gets installed, you can use semantic-complete-jump. pressed tab couple times, and it is also brings up symbol definitions.
If M-. brings up the wrong method, you can type C-u M-. to find the next one with the same name.
global gtags is very good
To navigate within the current file or a set of files that you select, you do not need a TAGS file. You can use Imenu. But it is better to use Icicles imenu commands.
Why? Because they let you use completion. Substring, regexp, prefix, or fuzzy completion. Combine simple patterns to match, or subtract them.
Command icicle-imenu is bound in Icicle mode to C-c =. Butyou can also look up just a command or just a non-command function (non-interactive), using command icicle-imenu-command or icicle-imenu-non-interactive-function.
These commands are multi-commands, meaning that they are actually browsers: you can trip among function definitions using keys C-RET or C-mouse-2 (direct jumps) and C-down (cycle). Hit RET or click mouse-2 to settle down at a final destination.
I use C-M-a and C-M-e to jump between the beginning and end of functions.
Otherwise, open up Speedbar and click the + icon next to a file name to view a list of functions contained in the file. Then click on the function names to jump to them directly.

Is there any way to enable code completion for Perl in vim?

Surprisingly as you get good at vim, you can code even faster than standard IDEs such as Eclipse. But one thing I really miss is code completion, especially for long variable names and functions.
Is there any way to enable code completion for Perl in vim?
Ctrl-P (Get Previous Match) and Ctrl-N (Get Next Match) are kind of pseudo code completion. They basically search the file (Backwards for Ctrl-P, Forwards for Ctrl-N) you are editing (and any open buffers, and if you are using TAGS anything in your TAG file) for words that start with what you are typing and add a drop down list. It works surprisingly well for variables and function names, even if it isn't intellisense. Generally I use Ctrl-P as the variable or function I am looking for is usually behind in the code. Also if you keep the same copy of Vim open, it will search the files you have previously opened.
Vim 7 supports omni completion.
For example, I have this in my vimrc
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
and then, when I press Ctrl-X Ctrl-O in Insert mode, I get a dropdown list of autocomplete possibilities.
Here's an omnicfunc for perl. No idea how well it works though.
Well, Vim's generic completion mechanism is surprisingly good, just using Ctrl-N in insert mode. Also, line completion is very handy, using C-x C-l.
Also check out this vim script for perl.
The standard Ctrl+N and Ctrl+P works even better if you add the following to your ~/.vim/ftplugin/perl.vim file:
set iskeyword+=:
Then it will autocomplete module names, etc.
The .vimrc clip in one of the other answers is slightly wrong. To turn your tab key into an auto-complete key, use this code:
inoremap <tab> <c-r>=InsertTabWrapper()<cr>
function! InsertTabWrapper()
let col = col('.') - 1
if !col || getline('.')[col - 1] !~ '\k'
return "\<tab>"
else
return "\<c-p>"
endif
endfunction
You can find this, and tons of other vim tricks in this thread at Perlmonks--which links to even more threads with lots more customizations.
You should look at the SuperTab plugin:
http://www.vim.org/scripts/script.php?script_id=1643
It let's you do completion (either the OmniCompletion or the regular completion) using tab and shift-tab instead of ^N and ^P.
https://github.com/c9s/perlomni.vim
Ctrl+N
This is explained in the Perl Hacks book, along with how to do Package completion. Highly recommended.