diff --git a/Frontend Angular 4/src/app/layout/matefun/codemirror/functions_definition.js b/Frontend Angular 4/src/app/layout/matefun/codemirror/functions_definition.js
index eea736df576073dba3552d7524736d8172a3af16..a42e1e727bf0b89bdc7be42f343e2ade471cdb03 100644
--- a/Frontend Angular 4/src/app/layout/matefun/codemirror/functions_definition.js	
+++ b/Frontend Angular 4/src/app/layout/matefun/codemirror/functions_definition.js	
@@ -484,4 +484,42 @@ var mac = /Mac/.test(navigator.platform);
       return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};
     }
   };
+
+  CodeMirror.defineExtension("jumpToDefinition", function(editor, options) {
+    var word = options && options.word || WORD;
+    var range = options && options.range || RANGE;
+    var cur = editor.getCursor(), curLine = editor.getLine(cur.line);
+    var end = cur.ch, start = end;
+    while (start && word.test(curLine.charAt(start - 1))) --start;
+    while (end && word.test(curLine.charAt(end + 1))) ++end;
+    var curWord = start != end && curLine.slice(start, end + 1);
+
+    if (curWord.length > 0){
+      var list = [], seen = {};
+      var re_digits = new RegExp(/^\d+$/, "g");
+
+      var found = false;
+
+      var re_funs = new RegExp(COMPLETE_FUNS.source, "g");
+      for (var dir = -1; dir <= 1; dir += 2) {
+        var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir;
+        for (; line != endLine && !found; line += dir) {
+          var text = editor.getLine(line), m;
+          while (m = re_funs.exec(text)) {
+            if (!re_digits.exec(m[1]) && (!curWord || m[1] == curWord) && !Object.prototype.hasOwnProperty.call(seen, m[1])) {
+              seen[m[1]] = true;
+              found = true;
+              
+              var newCursor = editor.getCursor();
+              newCursor.line = line;
+              newCursor.ch = text.indexOf(m[1]);
+              editor.setCursor(newCursor);
+
+              editor.cm.closeFunctionDefinition();
+            }
+          }
+        }
+      }
+    }
+  });
 });
diff --git a/Frontend Angular 4/src/app/layout/matefun/matefun.component.html b/Frontend Angular 4/src/app/layout/matefun/matefun.component.html
index 08f1d823614da418d56f09df92399cab8cf2c28f..d23c8e87535908e79154d1206be7cd4179be394e 100755
--- a/Frontend Angular 4/src/app/layout/matefun/matefun.component.html	
+++ b/Frontend Angular 4/src/app/layout/matefun/matefun.component.html	
@@ -135,6 +135,7 @@
                                     <label><b>Ctrl+G</b> {{ "i18n.shortcuts.saveFile" | translate }}</label>
                                     <label><b>Ctrl+{{ "i18n.shortcuts.space" | translate }}</b> {{ "i18n.shortcuts.autocomplete" | translate }}</label>
                                     <label><b>Ctrl+Shift+K</b> {{ "i18n.shortcuts.comment" | translate }}</label>
+                                    <label><b>Alt+.</b> {{ "i18n.shortcuts.functionNavigation" | translate }}</label>
                                 </div>
                             </div>
                         </ng-template>
diff --git a/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts b/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts
index 33af3cece0e946cbe28753eedee58cfeea1d99e7..da9f407b53d55b72acd55a40fce1da4b43a7f211 100755
--- a/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts	
+++ b/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts	
@@ -453,9 +453,8 @@ export class MateFunComponent {
             }else{
                 this.modificado = false;
             }
-        }
-        if (event.ctrlKey && event.shiftKey && event.key == 'K')
-            this.codemirror.instance.toggleComment();
+        }else if (event.ctrlKey && event.shiftKey && event.key == 'K') this.codemirror.instance.toggleComment();
+        else if (event.altKey && event.key == '.') this.codemirror.instance.jumpToDefinition(this.codemirror.instance.doc, event);
     }
 
     clickEnEditor(event){
diff --git a/Frontend Angular 4/src/assets/i18n/en.json b/Frontend Angular 4/src/assets/i18n/en.json
index e9902a07af356c5b37d392872d98b940046fd7b6..f8d6d324b50a310317566da41ebf971cc2e949bb 100644
--- a/Frontend Angular 4/src/assets/i18n/en.json	
+++ b/Frontend Angular 4/src/assets/i18n/en.json	
@@ -129,7 +129,8 @@
             "saveFile" : "Save File",
             "autocomplete" : "Autocomplete",
             "space" : "Space",
-            "comment" : "Comment/Uncomment"
+            "comment" : "Comment/Uncomment",
+            "functionNavigation" : "Jump to the definition"
         }
     }
 }
diff --git a/Frontend Angular 4/src/assets/i18n/es.json b/Frontend Angular 4/src/assets/i18n/es.json
index 323268ae201a5915ce0ce01db3949e3724c796cc..f13b7b154cf12586d9cbb17af726f6b6b6bfbd43 100644
--- a/Frontend Angular 4/src/assets/i18n/es.json	
+++ b/Frontend Angular 4/src/assets/i18n/es.json	
@@ -129,7 +129,8 @@
             "saveFile" : "Guardar archivo",
             "autocomplete" : "Autocompletar",
             "space" : "Espacio",
-            "comment" : "Comentar/Descomentar"
+            "comment" : "Comentar/Descomentar",
+            "functionNavigation" : "Saltar a la definición"
         }
     }
 }