Remapping vector table in STM32F0 (no vector offset register)
In that linker script, VTRAM is just an arbitrary area in RAM (addresses starting at 0x20000000 are in RAM), where you store the pointers to your ISRs. 

As the tutorial mentions, you use the entry in the linker file to tell the linker that those 192 bytes are off-limits for use as normal RAM. If you don't use a custom linker file, the linker uses the default: it may use all memory for any purpose. This would mean that those pointers are over-written with data. When an ISR occurs, it tries to jump to the address in the vector table, which has been over-written and is now garbage.

The linker file in the tutorial is for GCC. Your screenshot indicates you use the Keil IDE, which uses armcc, and does not accept the syntax. You must either:

a. Start using GCC (*)

b. "Translate" the GCC linker file to a "scatter file" (what armcc uses).

c. Attempt to declare a IROM2 read-only area in the GUI (start at 0x20000000, size 192), then in code declare something like

volatile uint32_t VectorTable[] __attribute__((at(0x20000000))) = {
     FIRMWARE_START_ADDR,
     FIRMWARE_START_ADDR + 4,
     FIRMWARE_START_ADDR + 8,
     .....
};


The "at" pragma tells the compiler/linker to put the pointer array at the desired location.

You are both right and wrong that "people don't write [linker files] themselves". They do, but typically by changing a template. If you decide to translate to scatter-file, I suggest you look up an example and modify it to fit your case.

(*) technically you only need to call the GNU linker; you may be able to compile with Keil/armcc and link with the GNU linker, but I can't imagine this is worth the effort